@rbxts/uiblox 0.1.47 → 0.1.48

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,5 @@
1
+ import { Theme } from "../interfaces/theme/index";
2
+ export declare const themeProducer: import("@rbxts/reflex").Producer<Theme, {
3
+ setTheme: (_state: Theme, theme: Theme) => Theme;
4
+ }>;
5
+ export type ThemeProducer = typeof themeProducer;
@@ -0,0 +1,12 @@
1
+ -- Compiled with roblox-ts v3.0.0
2
+ local TS = _G[script]
3
+ local createProducer = TS.import(script, TS.getModule(script, "@rbxts", "reflex").src).createProducer
4
+ local DEFAULT_THEME = TS.import(script, script.Parent.Parent, "constants").DEFAULT_THEME
5
+ local themeProducer = createProducer(DEFAULT_THEME, {
6
+ setTheme = function(_state, theme)
7
+ return theme
8
+ end,
9
+ })
10
+ return {
11
+ themeProducer = themeProducer,
12
+ }
@@ -1,11 +1,7 @@
1
- import React, { PropsWithChildren } from "@rbxts/react";
2
1
  import { Theme } from "../interfaces/index";
3
- export declare const ThemeContext: React.Context<{
4
- theme: Theme;
5
- setTheme?: React.Dispatch<React.SetStateAction<Theme>>;
6
- }>;
2
+ import { CustomizedProps } from "../types/index";
7
3
  export interface ThemeProviderProps {
8
- initialTheme?: Theme;
4
+ theme?: Theme;
9
5
  }
10
- export declare function ThemeProvider(props: PropsWithChildren<ThemeProviderProps>): JSX.Element;
6
+ declare function ThemeProvider(props: CustomizedProps<Instance, ThemeProviderProps>): JSX.Element;
11
7
  export default ThemeProvider;
@@ -2,33 +2,27 @@
2
2
  local TS = _G[script]
3
3
  local _react = TS.import(script, TS.getModule(script, "@rbxts", "react"))
4
4
  local React = _react
5
+ local StrictMode = _react.StrictMode
5
6
  local useEffect = _react.useEffect
6
- local useMemo = _react.useMemo
7
- local useState = _react.useState
7
+ local ReflexProvider = TS.import(script, TS.getModule(script, "@rbxts", "react-reflex")).ReflexProvider
8
8
  local DEFAULT_THEME = TS.import(script, script.Parent.Parent, "constants").DEFAULT_THEME
9
- local ThemeContext = React.createContext({
10
- theme = DEFAULT_THEME,
11
- })
9
+ local themeProducer = TS.import(script, script.Parent, "ThemeProducer").themeProducer
12
10
  local function ThemeProvider(props)
13
11
  local _binding = props
14
- local initialTheme = _binding.initialTheme
15
- local theme, setTheme = useState(initialTheme or DEFAULT_THEME)
12
+ local theme = _binding.theme
13
+ if theme == nil then
14
+ theme = DEFAULT_THEME
15
+ end
16
+ local children = _binding.children
17
+ -- When theme prop changes
16
18
  useEffect(function()
17
- setTheme(initialTheme or DEFAULT_THEME)
18
- end, { initialTheme })
19
- local memoizedValue = useMemo(function()
20
- return {
21
- theme = theme,
22
- setTheme = setTheme,
23
- }
19
+ themeProducer.setTheme(theme)
24
20
  end, { theme })
25
- return React.createElement(ThemeContext.Provider, {
26
- value = memoizedValue,
27
- }, props.children)
21
+ return React.createElement(StrictMode, nil, React.createElement(ReflexProvider, {
22
+ producer = themeProducer,
23
+ }, children))
28
24
  end
29
25
  local default = ThemeProvider
30
26
  return {
31
- ThemeProvider = ThemeProvider,
32
- ThemeContext = ThemeContext,
33
27
  default = default,
34
28
  }
@@ -1,4 +1,6 @@
1
- export default function useTheme(): {
2
- theme: import("../index").Theme;
3
- setTheme?: import("@rbxts/react").Dispatch<import("@rbxts/react").SetStateAction<import("..").Theme>>;
1
+ import { Theme } from "../interfaces/index";
2
+ declare const useTheme: () => {
3
+ theme: Theme;
4
+ setTheme: (theme: Theme) => void;
4
5
  };
6
+ export default useTheme;
@@ -1,10 +1,26 @@
1
1
  -- Compiled with roblox-ts v3.0.0
2
2
  local TS = _G[script]
3
- local useContext = TS.import(script, TS.getModule(script, "@rbxts", "react")).useContext
4
- local ThemeContext = TS.import(script, script.Parent.Parent, "context").ThemeContext
5
- local function useTheme()
6
- return useContext(ThemeContext)
3
+ local _react = TS.import(script, TS.getModule(script, "@rbxts", "react"))
4
+ local useCallback = _react.useCallback
5
+ local useMemo = _react.useMemo
6
+ local useState = _react.useState
7
+ local themeProducer = TS.import(script, script.Parent.Parent, "context", "ThemeProducer").themeProducer
8
+ local useTheme = function()
9
+ local theme, setTheme = useState(themeProducer:getState())
10
+ themeProducer:subscribe(function(state, _previousState)
11
+ setTheme(state)
12
+ end)
13
+ local setProducerTheme = useCallback(function(t)
14
+ themeProducer.setTheme(t)
15
+ end, { setTheme })
16
+ return useMemo(function()
17
+ return {
18
+ theme = theme,
19
+ setTheme = setProducerTheme,
20
+ }
21
+ end, { theme, setTheme })
7
22
  end
23
+ local default = useTheme
8
24
  return {
9
- default = useTheme,
25
+ default = default,
10
26
  }
@@ -3,7 +3,6 @@ export * from "./constants/index";
3
3
  export { DEFAULT_THEME } from "./constants/index";
4
4
  export * from "./context/index";
5
5
  export { ThemeProvider } from "./context/index";
6
- export { ThemeContext } from "./context/index";
7
6
  export { useTheme } from "./hooks/index";
8
7
  export * from "./interfaces/index";
9
8
  export * from "./styles/index";
@@ -9,7 +9,6 @@ for _k, _v in TS.import(script, script, "context") or {} do
9
9
  exports[_k] = _v
10
10
  end
11
11
  exports.ThemeProvider = TS.import(script, script, "context").ThemeProvider
12
- exports.ThemeContext = TS.import(script, script, "context").ThemeContext
13
12
  exports.useTheme = TS.import(script, script, "hooks").useTheme
14
13
  for _k, _v in TS.import(script, script, "interfaces") or {} do
15
14
  exports[_k] = _v
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rbxts/uiblox",
3
- "version": "0.1.47",
3
+ "version": "0.1.48",
4
4
  "description": "UI Library and theming for roblox-ts projects",
5
5
  "main": "out/init.lua",
6
6
  "scripts": {