diff --git a/CHANGELOG.md b/CHANGELOG.md index f97623c..cbd28e1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ ## Unreleased +- Added usePlugin hook - Added RectSize, RectOffset, and ResampleMode to icon props available in Button, MainButton, and Dropdown ## 1.1.0 diff --git a/moonwave.toml b/moonwave.toml index 6440c0f..a66e7d2 100644 --- a/moonwave.toml +++ b/moonwave.toml @@ -27,4 +27,4 @@ classes = ["Background", "Button", "Checkbox", "ColorPicker", "DatePicker", "Dro [[classOrder]] section = "Hooks" collapsed = false -classes = ["useMouseIcon", "useTheme"] \ No newline at end of file +classes = ["useMouseIcon", "useTheme", "usePlugin"] \ No newline at end of file diff --git a/src/Hooks/usePlugin.luau b/src/Hooks/usePlugin.luau new file mode 100644 index 0000000..8d2689b --- /dev/null +++ b/src/Hooks/usePlugin.luau @@ -0,0 +1,25 @@ +--[=[ + @class usePlugin + + A hook used to obtain a reference to the root [plugin](https://create.roblox.com/docs/reference/engine/classes/Plugin) + instance associated with the current plugin. It requires a single [PluginProvider] to be present + higher up in the tree. + + ```lua + local function MyComponent() + local plugin = usePlugin() + ... + end + ``` +]=] + +local React = require("@pkg/@jsdotlua/react") + +local PluginContext = require("../Contexts/PluginContext") + +local function usePlugin() + local pluginContext = React.useContext(PluginContext) + return pluginContext and pluginContext.plugin +end + +return usePlugin diff --git a/src/init.luau b/src/init.luau index 4309105..233dfbc 100644 --- a/src/init.luau +++ b/src/init.luau @@ -25,5 +25,6 @@ return { ThemeContext = require("./Contexts/ThemeContext"), useTheme = require("./Hooks/useTheme"), + usePlugin = require("./Hooks/usePlugin"), useMouseIcon = require("./Hooks/useMouseIcon"), }