raft-ui
Version:
React UI components for Raft.
37 lines (36 loc) • 1.38 kB
JavaScript
import { cn } from "./cn.mjs";
import { createContext, use } from "react";
//#region src/lib/theme/theme-context.ts
const ThemeContext = createContext("brutal");
const ThemeStateContext = createContext({
theme: "brutal",
setTheme: () => void 0,
mode: "light",
resolvedMode: "light"
});
//#endregion
//#region src/lib/theme/use-theme.ts
/** Read the active style family for theme-aware component recipes. */
function useThemeFamily() {
return use(ThemeContext);
}
/** Read and update the application-level RUI theme selection. */
function useTheme() {
return use(ThemeStateContext);
}
//#endregion
//#region src/lib/theme/theme-scope.ts
function resolveThemeScopeProps({ className, "data-theme": _dataTheme, ...props }, { theme, resolvedMode }) {
const modeClassName = theme === "elegant" ? resolvedMode : void 0;
const resolvedClassName = typeof className === "function" && modeClassName ? (state) => cn(className(state), modeClassName) : typeof className === "string" && modeClassName ? cn(className, modeClassName) : className ?? modeClassName;
return {
...props,
"data-theme": theme,
className: resolvedClassName
};
}
function useThemeScopeProps(props) {
return resolveThemeScopeProps(props, useTheme());
}
//#endregion
export { ThemeContext as a, useThemeFamily as i, useThemeScopeProps as n, ThemeStateContext as o, useTheme as r, resolveThemeScopeProps as t };