@steroidsjs/core 3.0.0-beta.55 → 3.0.0-beta.56

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.
package/hooks/index.d.ts CHANGED
@@ -17,5 +17,5 @@ import useScreen from './useScreen';
17
17
  import useSelector from './useSelector';
18
18
  import useSsr from './useSsr';
19
19
  import useUniqueId from './useUniqueId';
20
- import { useTheme } from './useTheme';
20
+ import useTheme from './useTheme';
21
21
  export { useAbsolutePositioning, useAddressBar, useApplication, useBem, useComponents, useDataProvider, useDataSelect, useDispatch, useFetch, useFile, useForm, useInitial, useLayout, useList, useModel, useScreen, useSelector, useSsr, useUniqueId, useTheme, };
package/hooks/index.js CHANGED
@@ -42,5 +42,5 @@ var useSsr_1 = __importDefault(require("./useSsr"));
42
42
  exports.useSsr = useSsr_1["default"];
43
43
  var useUniqueId_1 = __importDefault(require("./useUniqueId"));
44
44
  exports.useUniqueId = useUniqueId_1["default"];
45
- var useTheme_1 = require("./useTheme");
46
- exports.useTheme = useTheme_1.useTheme;
45
+ var useTheme_1 = __importDefault(require("./useTheme"));
46
+ exports.useTheme = useTheme_1["default"];
@@ -1,4 +1,5 @@
1
1
  /// <reference types="react" />
2
+ import { IThemeProviderProps } from '../providers/ThemeProvider';
2
3
  import ClientStorageComponent from '../components/ClientStorageComponent';
3
4
  import HtmlComponent from '../components/HtmlComponent';
4
5
  import StoreComponent from '../components/StoreComponent';
@@ -28,6 +29,7 @@ export interface IApplicationHookConfig {
28
29
  layoutView?: () => CustomView;
29
30
  layoutProps?: Record<string, unknown>;
30
31
  screen?: Omit<IScreenProviderProps, 'children'>;
32
+ theme?: Omit<IThemeProviderProps, 'children'>;
31
33
  routerProps?: IRouterProps;
32
34
  /**
33
35
  * These fetch configurations will be used to preload and store for no matter what route matched in case of SSR
@@ -53,6 +53,7 @@ var React = __importStar(require("react"));
53
53
  var react_redux_1 = require("react-redux");
54
54
  var merge_1 = __importDefault(require("lodash-es/merge"));
55
55
  var react_1 = require("react");
56
+ var ThemeProvider_1 = __importDefault(require("../providers/ThemeProvider"));
56
57
  var ClientStorageComponent_1 = __importDefault(require("../components/ClientStorageComponent"));
57
58
  var HtmlComponent_1 = __importDefault(require("../components/HtmlComponent"));
58
59
  var StoreComponent_1 = __importDefault(require("../components/StoreComponent"));
@@ -131,6 +132,9 @@ function useApplication(config) {
131
132
  if (config.screen) {
132
133
  content = (React.createElement(ScreenProvider_1["default"], __assign({}, config.screen), content));
133
134
  }
135
+ if (config.theme) {
136
+ content = (React.createElement(ThemeProvider_1["default"], __assign({}, config.theme), content));
137
+ }
134
138
  if (!(useGlobal || process.env.IS_SSR)) {
135
139
  content = (React.createElement(ComponentsProvider_1["default"], { components: components }, content));
136
140
  }
@@ -1,8 +1,2 @@
1
- import React from 'react';
2
- export declare const LIGHT_THEME = "light";
3
- export declare const DARK_THEME = "dark";
4
- export declare const useTheme: (themes?: string[], themeStorageKey?: string) => {
5
- theme: any;
6
- setTheme: React.Dispatch<any>;
7
- toggleTheme: () => void;
8
- };
1
+ import { ITheme } from '../providers/ThemeProvider';
2
+ export default function useTheme(): ITheme;
package/hooks/useTheme.js CHANGED
@@ -1,40 +1,8 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
2
  exports.__esModule = true;
6
- exports.useTheme = exports.DARK_THEME = exports.LIGHT_THEME = void 0;
7
- var react_1 = __importDefault(require("react"));
8
- var useComponents_1 = __importDefault(require("./useComponents"));
9
- exports.LIGHT_THEME = 'light';
10
- exports.DARK_THEME = 'dark';
11
- var DEFAULT_THEMES = [
12
- exports.LIGHT_THEME,
13
- exports.DARK_THEME,
14
- ];
15
- var DEFAULT_THEME_STORAGE_KEY = 'theme';
16
- var useTheme = function (themes, themeStorageKey) {
17
- if (themes === void 0) { themes = DEFAULT_THEMES; }
18
- if (themeStorageKey === void 0) { themeStorageKey = DEFAULT_THEME_STORAGE_KEY; }
19
- var clientStorage = (0, useComponents_1["default"])().clientStorage;
20
- var _a = react_1["default"].useState(clientStorage.get(themeStorageKey) || themes[0]), theme = _a[0], setTheme = _a[1];
21
- var toggleTheme = react_1["default"].useCallback(function () {
22
- var themesExpectedCount = 2;
23
- if (themes.length !== themesExpectedCount) {
24
- throw new Error('toggleTheme callback can only be used if the number of themes is two');
25
- }
26
- var lightTheme = themes[0];
27
- var darkTheme = themes[1];
28
- setTheme(theme === lightTheme ? darkTheme : lightTheme);
29
- }, [themes, theme]);
30
- react_1["default"].useEffect(function () {
31
- document.querySelector('html').setAttribute('data-theme', theme);
32
- clientStorage.set(themeStorageKey, theme);
33
- }, [theme, clientStorage, themeStorageKey]);
34
- return {
35
- theme: theme,
36
- setTheme: setTheme,
37
- toggleTheme: toggleTheme
38
- };
39
- };
40
- exports.useTheme = useTheme;
3
+ var react_1 = require("react");
4
+ var ThemeProvider_1 = require("../providers/ThemeProvider");
5
+ function useTheme() {
6
+ return (0, react_1.useContext)(ThemeProvider_1.ThemeContext);
7
+ }
8
+ exports["default"] = useTheme;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@steroidsjs/core",
3
- "version": "3.0.0-beta.55",
3
+ "version": "3.0.0-beta.56",
4
4
  "description": "",
5
5
  "author": "Vladimir Kozhin <hello@kozhindev.com>",
6
6
  "repository": {
@@ -0,0 +1,14 @@
1
+ import * as React from 'react';
2
+ export interface ITheme {
3
+ theme: string;
4
+ toggleTheme: VoidFunction;
5
+ setTheme: React.Dispatch<any>;
6
+ }
7
+ export interface IThemeProviderProps extends React.PropsWithChildren<any> {
8
+ themes?: string[];
9
+ themeStorageKey?: string;
10
+ }
11
+ export declare const LIGHT_THEME = "light";
12
+ export declare const DARK_THEME = "dark";
13
+ export declare const ThemeContext: React.Context<ITheme>;
14
+ export default function ThemeProvider(props: IThemeProviderProps): JSX.Element;
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ exports.__esModule = true;
26
+ exports.ThemeContext = exports.DARK_THEME = exports.LIGHT_THEME = void 0;
27
+ var React = __importStar(require("react"));
28
+ var hooks_1 = require("../hooks");
29
+ exports.LIGHT_THEME = 'light';
30
+ exports.DARK_THEME = 'dark';
31
+ var DEFAULT_THEMES = [
32
+ exports.LIGHT_THEME,
33
+ exports.DARK_THEME,
34
+ ];
35
+ var DEFAULT_THEME_STORAGE_KEY = 'theme';
36
+ exports.ThemeContext = React.createContext({});
37
+ function ThemeProvider(props) {
38
+ var themes = props.themes || DEFAULT_THEMES;
39
+ var themeStorageKey = props.themeStorageKey || DEFAULT_THEME_STORAGE_KEY;
40
+ var clientStorage = (0, hooks_1.useComponents)().clientStorage;
41
+ var _a = React.useState(clientStorage.get(themeStorageKey) || themes[0]), theme = _a[0], setTheme = _a[1];
42
+ var toggleTheme = React.useCallback(function () {
43
+ var themesExpectedCount = 2;
44
+ if (themes.length !== themesExpectedCount) {
45
+ throw new Error('toggleTheme callback can only be used if the number of themes is two');
46
+ }
47
+ var lightTheme = themes[0];
48
+ var darkTheme = themes[1];
49
+ setTheme(theme === lightTheme ? darkTheme : lightTheme);
50
+ }, [theme, themes]);
51
+ React.useEffect(function () {
52
+ document.querySelector('html').setAttribute('data-theme', theme);
53
+ clientStorage.set(themeStorageKey, theme);
54
+ }, [theme, clientStorage, themeStorageKey]);
55
+ var value = React.useMemo(function () { return ({
56
+ theme: theme,
57
+ toggleTheme: toggleTheme,
58
+ setTheme: setTheme
59
+ }); }, [theme, toggleTheme]);
60
+ return (React.createElement(exports.ThemeContext.Provider, { value: value }, props.children));
61
+ }
62
+ exports["default"] = ThemeProvider;