@formant/ava-react
Version:
React components of AVA.
112 lines (110 loc) • 4.06 kB
JavaScript
var __create = Object.create;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __getProtoOf = Object.getPrototypeOf;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
// If the importer is in node compatibility mode or this is not an ESM
// file that has been converted to a CommonJS file using a Babel-
// compatible transform (i.e. "__esModule" has not been set), then set
// "default" to the CommonJS "module.exports" for node compatibility.
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
mod
));
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
// src/demo/theme-provider.tsx
var theme_provider_exports = {};
__export(theme_provider_exports, {
CustomThemeProvider: () => CustomThemeProvider,
GlobalStyles: () => GlobalStyles,
darkTheme: () => darkTheme,
lightTheme: () => lightTheme,
useTheme: () => useTheme
});
module.exports = __toCommonJS(theme_provider_exports);
var import_react = __toESM(require("react"));
var import_default_theme_colors = require("./default-theme-colors");
var import_styled_components = require("styled-components");
var GlobalStyles = import_styled_components.createGlobalStyle`
:root {
/* Loop through theme keys and set them as CSS custom properties */
${({ theme }) => Object.entries(theme).reduce((styles, [key, value]) => {
return styles + `${key}: ${value};
`;
}, "")}
}
`;
var initialState = {
theme: "system",
setTheme: () => null
};
var darkTheme = Object.keys(import_default_theme_colors.DEFAULT_THEME_COLORS).reduce((theme, key) => ({
...theme,
[key]: import_default_theme_colors.DEFAULT_THEME_COLORS[key].defaultValue
}), {});
var lightTheme = Object.keys(import_default_theme_colors.DEFAULT_THEME_COLORS).reduce((theme, key) => ({
...theme,
[key]: import_default_theme_colors.DEFAULT_THEME_COLORS[key].defaultLightValue
}), {});
var ThemeProviderContext = (0, import_react.createContext)(initialState);
function CustomThemeProvider({
children,
defaultTheme = "system",
storageKey = "vite-ui-theme",
...props
}) {
const [theme, setTheme] = (0, import_react.useState)(
() => localStorage.getItem(storageKey) || defaultTheme
);
(0, import_react.useEffect)(() => {
const root = window.document.documentElement;
root.classList.remove("light", "dark");
if (theme === "system") {
const systemTheme = window.matchMedia(
"(prefers-color-scheme: dark)"
).matches ? "dark" : "light";
root.classList.add(systemTheme);
return;
}
root.classList.add(theme);
}, [theme]);
const value = (0, import_react.useMemo)(
() => ({
theme,
setTheme: (t) => {
localStorage.setItem(storageKey, t);
setTheme(t);
}
}),
[theme, storageKey]
);
return /* @__PURE__ */ import_react.default.createElement(ThemeProviderContext.Provider, { ...props, value }, children);
}
var useTheme = () => {
const context = (0, import_react.useContext)(ThemeProviderContext);
if (context === void 0) {
throw new Error("useTheme must be used within a ThemeProvider");
}
return context;
};
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
CustomThemeProvider,
GlobalStyles,
darkTheme,
lightTheme,
useTheme
});