128 lines
4.8 KiB
TypeScript
128 lines
4.8 KiB
TypeScript
|
|
||
|
import React from 'react';
|
||
|
import { ContentPage } from '../../components/ContentPage';
|
||
|
import { ApiSection } from '../../types';
|
||
|
|
||
|
const symbolsApi: ApiSection[] = [
|
||
|
{
|
||
|
title: 'Chemical.Symbols',
|
||
|
description: 'Chemical uses special "Symbol" objects for certain keys in the `Compose` API, particularly for event handling and child management. These ensure uniqueness and provide type information.',
|
||
|
entries: [
|
||
|
{
|
||
|
signature: 'Chemical.OnEvent(eventName: GuiTypes.EventNames): Symbol',
|
||
|
description: 'Creates a symbol representing a Roblox UI event. Used as a key in the `Compose` properties table to attach an event listener.',
|
||
|
parameters: [
|
||
|
{ name: 'eventName', type: 'string (GuiTypes.EventNames)', description: 'The name of the Roblox GUI event (e.g., "Activated", "MouseButton1Click", "MouseEnter").' },
|
||
|
],
|
||
|
returns: { type: 'Symbol', description: 'An event symbol.' },
|
||
|
example: `
|
||
|
local Chemical = require(game.ReplicatedStorage.Chemical)
|
||
|
local Compose = Chemical.Compose
|
||
|
local OnEvent = Chemical.OnEvent
|
||
|
local Children = Chemical.Symbols.Children -- Alias for Children key
|
||
|
-- Assuming playerGui is defined
|
||
|
|
||
|
local MyScreen = Compose("ScreenGui")({
|
||
|
Parent = playerGui,
|
||
|
[Children] = { -- Use the aliased Children symbol
|
||
|
Compose("TextButton")({
|
||
|
Text = "Click",
|
||
|
[OnEvent("Activated")] = function()
|
||
|
print("Button Activated!")
|
||
|
end
|
||
|
})
|
||
|
}
|
||
|
})
|
||
|
`,
|
||
|
},
|
||
|
{
|
||
|
signature: 'Chemical.OnChange(propertyName: GuiTypes.PropertyNames): Symbol',
|
||
|
description: 'Creates a symbol representing a property change event for a Roblox Instance. Used as a key in the `Compose` properties table to listen to `GetPropertyChangedSignal`.',
|
||
|
parameters: [
|
||
|
{ name: 'propertyName', type: 'string (GuiTypes.PropertyNames)', description: 'The name of the Instance property to observe (e.g., "Text", "Visible", "Size").' },
|
||
|
],
|
||
|
returns: { type: 'Symbol', description: 'A property change symbol.' },
|
||
|
example: `
|
||
|
local Chemical = require(game.ReplicatedStorage.Chemical)
|
||
|
local Value = Chemical.Value
|
||
|
local Compose = Chemical.Compose
|
||
|
local OnChange = Chemical.OnChange
|
||
|
local Children = Chemical.Symbols.Children -- Alias for Children key
|
||
|
local Effect = Chemical.Effect
|
||
|
-- Assuming playerGui is defined
|
||
|
|
||
|
local currentText = Value("")
|
||
|
|
||
|
local MyScreen = Compose("ScreenGui")({
|
||
|
Parent = playerGui,
|
||
|
[Children] = { -- Use the aliased Children symbol
|
||
|
Compose("TextBox")({
|
||
|
PlaceholderText = "Type here",
|
||
|
[OnChange("Text")] = currentText -- Bind TextBox's Text property to currentText Value
|
||
|
})
|
||
|
}
|
||
|
})
|
||
|
|
||
|
Effect(function()
|
||
|
print("TextBox content:", currentText:get())
|
||
|
end)
|
||
|
`,
|
||
|
},
|
||
|
{
|
||
|
signature: 'Chemical.Symbols.Children: Symbol',
|
||
|
description: 'A pre-defined symbol used as a key in the `Compose` properties table to specify an array of child Instances or Compositions.',
|
||
|
returns: { type: 'Symbol', description: 'The children symbol.' },
|
||
|
example: `
|
||
|
local Chemical = require(game.ReplicatedStorage.Chemical)
|
||
|
local Compose = Chemical.Compose
|
||
|
local Children = Chemical.Symbols.Children -- Alias the symbol
|
||
|
-- Assuming playerGui exists
|
||
|
|
||
|
local MyScreen = Compose("ScreenGui")({
|
||
|
Parent = playerGui,
|
||
|
[Children] = { -- Use the aliased Children symbol
|
||
|
Compose("Frame")({
|
||
|
Name = "ParentFrame",
|
||
|
Size = UDim2.new(0.5, 0, 0.5, 0),
|
||
|
Position = UDim2.fromScale(0.25, 0.25),
|
||
|
BackgroundColor3 = Color3.fromRGB(50,50,50),
|
||
|
[Children] = { -- Use the aliased Children symbol
|
||
|
Compose("TextLabel")({ Text = "Child 1", Size = UDim2.new(1,0,0.5,0) }),
|
||
|
Compose("TextLabel")({ Text = "Child 2", Position = UDim2.fromScale(0, 0.5), Size = UDim2.new(1,0,0.5,0) })
|
||
|
}
|
||
|
})
|
||
|
}
|
||
|
})
|
||
|
`,
|
||
|
},
|
||
|
{
|
||
|
signature: 'Chemical.Symbols.All(subjectType: string): Symbol',
|
||
|
description: 'Creates a generic symbol typically used to represent "all instances of a certain type" or a global subject, for example, in Reactor configurations to target all players.',
|
||
|
parameters: [
|
||
|
{ name: 'subjectType', type: 'string', description: 'A string describing the subject (e.g., "Players").' }
|
||
|
],
|
||
|
returns: { type: 'Symbol', description: 'A generic "All" symbol.'},
|
||
|
example: `
|
||
|
local Chemical = require(game.ReplicatedStorage.Chemical)
|
||
|
local Reactor = Chemical.Reactor
|
||
|
local Value = Chemical.Value
|
||
|
local Symbols = Chemical.Symbols -- Keep this for Symbols.All access
|
||
|
local AllPlayers = Symbols.All("Players")
|
||
|
|
||
|
-- Used in Reactor configuration
|
||
|
local GlobalReactor = Reactor({
|
||
|
Name = "GlobalState",
|
||
|
Subjects = AllPlayers -- Replicates to all players
|
||
|
}, function()
|
||
|
return { message = Value("Hello All!") }
|
||
|
end)
|
||
|
`
|
||
|
}
|
||
|
],
|
||
|
},
|
||
|
];
|
||
|
|
||
|
export const SymbolsPage: React.FC = () => {
|
||
|
return <ContentPage title="Chemical Symbols" sections={symbolsApi} />;
|
||
|
};
|