Zephora UI

Usanidi

Mipangilio ya kimataifa kwa kila kijenzi cha Zephora — funga programu yako mara moja kwa ZephoraConfigProvider na usanidi locale, tabaka za z-index za overlay, kontena ya portal na chaguomsingi la headless.

Usanidi

import { ZephoraConfigProvider } from "@zephora/react";

export default function App() {
  return (
    <ZephoraConfigProvider
      locale="tr"
      zIndex={{ modal: 2000, toast: 2100 }}
      appendTo={typeof document !== "undefined" ? document.body : null}
      unstyled={false}
    >
      <YourApp />
    </ZephoraConfigProvider>
  );
}

ZephoraConfigProvider props

PropAinaChaguomsingiMaelezo
localestring"en"Active locale for component UI strings. Only "en" is embedded; load others from @zephora/theme/locales/* (module or JSON) and register with addLocale().
zIndex{ dropdown?, overlay?, modal?, popover?, toast?, tooltip?: number }Overrides the layering of floating elements. Written as --z-index-* CSS variables on the root element.
appendToHTMLElement | nulldocument.bodyContainer that Portal-based overlays (Dialog, Select menus, Tooltip…) render into.
unstyledbooleanfalseMakes every component headless by default for Tailwind-first apps. A per-component unstyled prop still wins.

Kusoma usanidi

import { useZephoraConfig, useLocale } from "@zephora/react";

function MyField() {
  const config = useZephoraConfig(); // { locale, zIndex, appendTo, unstyled }
  const { t, messages, locale } = useLocale();
  return <button aria-label={t("close")} />;
}

Tabaka za z-index

Vijenzi huchukua mpangilio wao wa mrundikano kutoka vigezo vya CSS vyenye chaguo-mbadala vilivyojengwa ndani, hivyo provider na CSS sahili vinaweza kuvirekebisha upya:

:root {
  --z-index-dropdown: 1000;
  --z-index-overlay: 1040;
  --z-index-modal: 1050;
  --z-index-popover: 1060;
  --z-index-toast: 1070;
  --z-index-tooltip: 1080;
}

Mandhari ya giza

@zephora/theme hutolewa na wasaidizi wa mandhari-ya-giza otomatiki. Hook ya useColorScheme husuluhisha skimu (kwa mode: "system" hufuata upendeleo wa mfumo wa uendeshaji papo hapo) na kwa chaguomsingi hutumia mandhari iliyosuluhishwa kimataifa:

import { useColorScheme } from "@zephora/theme";

function App() {
  // mode: "light" | "dark" | "system" (default "system")
  const { scheme, theme } = useColorScheme({ mode: "system" });
  return <span>Active scheme: {scheme}</span>;
}

useColorScheme(options) props

PropAinaChaguomsingiMaelezo
mode"light" | "dark" | "system""system""system" follows the OS preference live; "light"/"dark" force a scheme.
light / darkThemelightTheme / darkThemeTheme objects used for each scheme.
applybooleantrueWrite the resolved theme to document.documentElement via applyTheme.
→ returns{ scheme: "light" | "dark"; theme: Theme }The resolved scheme and the theme object in effect.

Primitivi za kiwango cha chini pia hutolewa nje:

import { getSystemColorScheme, watchSystemColorScheme } from "@zephora/theme";

// Reads the OS color scheme (SSR-safe; defaults to "light").
const scheme = getSystemColorScheme(); // "light" | "dark"

// Subscribes to OS changes. Returns an unsubscribe function.
const stop = watchSystemColorScheme((next) => console.log(next));
stop();

SSR isiyo na FOUC

Kwa render ya seva, colorSchemeCss(light?, dark?) hujenga faili tuli ya mitindo inayobadilisha mandhari kwa upendeleo wa mfumo wa uendeshaji — hakuna mwako wa mandhari isiyo sahihi, hakuna JavaScript inayohitajika kabla ya paint. Kuweka data-zephora-scheme kwenye <html> hubadilisha media query (iunganishe na kigeuzi cha mtumiaji):

import { colorSchemeCss } from "@zephora/theme";

// Next.js app router — app/layout.tsx
export default function RootLayout({ children }: { children: React.ReactNode }) {
  return (
    <html lang="en">
      <head>
        <style dangerouslySetInnerHTML={{ __html: colorSchemeCss() }} />
      </head>
      <body>{children}</body>
    </html>
  );
}

Slot classNames

Vijenzi vyenye slot nyingi (Dialog, Sheet, Tabs, Card, Popover, Tooltip…) hufichua mkataba wa darasa kwa kila slot: mzizi hukubali classNames iliyoandikwa kama Partial<Record<<Name>Slot, string>> (miungano ya jina-la-slot kama DialogSlot hutolewa nje). Madarasa ya slot huongezwa baada ya madarasa ya moduli na hayadhibitiwi na unstyled — hufanya kazi katika hali zote za mitindo na zisizo na mitindo; katika hali isiyo na mitindo ndiyo madarasa pekee. classNames.root huunganishwa pamoja na prop iliyopo ya className, ambayo huendelea kulenga mzizi na hutumika mwisho. Kwa vijenzi vya mchanganyiko, classNames huwekwa mara moja kwenye mzizi na hubebwa hadi kwenye sehemu kupitia context.

Vijenzi vya seva

Bundle iliyochapishwa ya @zephora/react hutolewa na maagizo ya "use client", hivyo unaweza kuingiza vijenzi moja kwa moja ndani ya miti ya React Server Component (Next.js app router) bila kuongeza maagizo mwenyewe — kila kijenzi cha Zephora ni kijenzi cha mteja.