Getting Started
App Providerglobal.d.tsThemesTypes
cn(...args)Text ParserUnits Converters
AnchorAvatarBreadcrumbBurgerButtonCardCarouselCheckerCodeColor PickerCommandConfettiCopyButtonDouble Helix WordsFloating IndicatorGroupHighlight TextIndicatorInputKbdLabelLoaderPaginationPassword RequirementPolymorphic SlotProgressProseRatingRunning AreaScroll AreaSheetsSkeletonSliderStackSvgTableTabsTextareaTimelineTimesToasterTooltipTyping WordsTypography
useClickOutsideuseClipboarduseDeviceInfouseDialoguseDidUpdateuseDirectionuseDisclosureuseDocumentTitleuseDocumentVisibilityuseElementInfouseEyeDropperuseFetchuseFullscreenuseGeoLocationuseHotkeysuseHoveruseIduseImagePopupuseInputStateuseIntersectionuseIntervaluseIsomorphicEffectuseListStateuseLocalStorageuseMeasureScrollbaruseMediaQueryuseMergedRefuseMouseuseMoveuseMutationObserveruseNetworkuseOpenStateuseOrientationuseOSusePaginationusePWAInstalleruseRandomColorsuseReducedMotionuseReloaduseResizeObserveruseScrollIntoViewuseStateHistoryuseTimeoutuseTouchuseTriggeruseUncontrolleduseValidatedStateuseViewportSizeuseWindowEventuseWindowScroll
Docs
Web
Configuration
App Context
global.d.ts

A TypeScript file for augmenting global declarations or adding custom global types.


Edit this page on GitHub
  • Started
  • Utilities
  • Configuration
  • Components
  • Hooks
  • Examples
  • Github
  • Contributing
⌘+J

© 2025 oeri rights MIT


Designed in Earth-616

Built by oeri

App Provider

A context provider to manage application-wide state including direction, theme, and sidebar visibility using cookies.

Overview

AppProvider is a React context provider component used to manage application-level preferences such as UI direction (ltr or rtl), theme (dark, light, or system), and sidebar visibility. It also provides utility methods to manage cookies for persisting user preferences across sessions.

Behavior

  • Uses internal state to manage the open/closed status of the sidebar.
  • Initializes UI direction using the useDirection hook.
  • Provides methods to set cookies with expiration defaults:
    • setCookie: saves a cookie for 30 days by default.

Example

app/layout.tsx
import { userAgent } from "next/server";
import { headers, cookies } from "next/headers";
import { AppProvider } from "@/config/app-context";
import { ThemeProvider } from "@/config/themes";
import { Cookies, Theme } from "@/config/types";
 
async function cookiesValues() {
  const cookiesStore = await cookies();
  return {
    dir: cookiesStore.get(Cookies.dir)?.value as Direction,
    theme: cookiesStore.get(Cookies.theme)?.value as Theme,
    isOpenAside: (cookiesStore.get(Cookies.isOpenAside)?.value === "true") as boolean
  };
}
 
export default async function RootLayout({ children }: Readonly<{ children: React.ReactNode }>) {
  const [headersList, cookieStore] = await Promise.all([headers(), cookiesValues()]);
  const ua = userAgent({ headers: headersList });
 
  return (
    <AppProvider userAgent={ua} {...cookieStore}>
      <html lang="en" dir={cookieStore.dir} suppressHydrationWarning>
        <body>
          <ThemeProvider>{children}</ThemeProvider>
        </body>
      </html>
    </AppProvider>
  );
}
add your layout root

Source Codes

Full working code example, including necessary markup and styles. You can copy and paste this code directly to start using the component immediately.

app-context.tsx