npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@xsolla/xui-core

v0.184.0

Published

Design system foundation providing theming, context, design tokens, and shared utilities for the XUI toolkit.

Downloads

70,127

Readme

@xsolla/xui-core

Design system foundation providing theming, context, design tokens, and shared utilities for the XUI toolkit.

Installation

npm install @xsolla/xui-core

Usage

import { XUIProvider, useDesignSystem } from '@xsolla/xui-core';

function App() {
  return (
    <XUIProvider initialMode="dark">
      <MyApp />
    </XUIProvider>
  );
}

function MyComponent() {
  const { theme, mode, setMode } = useDesignSystem();
  return <div style={{ color: theme.colors.content.primary }}>Hello</div>;
}

Per-component theme overrides with useResolvedTheme:

import { useResolvedTheme, ThemeOverrideProps } from '@xsolla/xui-core';

type MyWidgetProps = ThemeOverrideProps & { label: string };

function MyWidget({ label, themeMode, themeProductContext }: MyWidgetProps) {
  const { theme, mode } = useResolvedTheme({ themeMode, themeProductContext });
  return <div style={{ color: theme.colors.content.primary }}>{label}</div>;
}

// Usage — override theme per-instance without nesting providers
<MyWidget label="Global theme" />
<MyWidget label="Light override" themeMode="light" />

Available Theme Modes

| Mode | Theme | |------|-------| | "dark" | Pentagram Dark (default) | | "light" | Pentagram Light | | "ltg-dark" | LTG Dark | | "blueprints" | Blueprints |

Per-Component Overrides

Every component accepts themeMode and themeProductContext props to override the global provider:

<Button themeMode="light" themeProductContext="b2c">Override Both</Button>

For custom components, use useResolvedTheme instead of useDesignSystem.

Responsive Typography

By default, XUIProvider injects CSS custom properties (--xui-font-size-*, --xui-lh-*) with @media queries so text scales between mobile and desktop breakpoints. Pass responsive={false} to disable this — all components will use the fixed common/desktop values instead.

// Default — responsive scaling via CSS vars + @media
<XUIProvider>
  <App />
</XUIProvider>

// Opt-out — fixed sizes, no @media queries injected
<XUIProvider responsive={false}>
  <App />
</XUIProvider>

The responsive flag is also available from useDesignSystem() if a component needs to branch on it:

const { responsive } = useDesignSystem();

Exports

  • XUIProvider — Root context provider; accepts initialMode (see theme modes above) and responsive (opt-out of responsive typography, defaults to true)
  • useDesignSystem — Hook returning { theme, mode, setMode, responsive }; falls back to dark theme if no provider
  • useResolvedTheme — Hook returning resolved theme with per-component overrides applied; same return shape as useDesignSystem
  • ThemeOverrideProps — Type: { themeMode?: ThemeMode; themeProductContext?: ProductContext }
  • themeConfig — Function returning the full theme object for a given ThemeMode
  • useId — Stable unique ID hook; polyfills React.useId for React < 18
  • ModalIdContext — Context holding the current modal's ID for portal-based components
  • useModalId — Hook returning the current modal ID, or null if outside a modal
  • breakpoints — Responsive breakpoints: { mobile: 0, desktop: 768 }
  • responsiveTypographyScale — Raw responsive font-size and line-height data (13 steps × 2 device modes: common/mobile)
  • SCALE_STEPS — Array of all scale step identifiers
  • generateTypographyCSS — Returns the full CSS string for responsive typography custom properties
  • cssVar — Helper to get CSS variable references: cssVar.fontSize("350")"var(--xui-font-size-350)"
  • TypographyStyleLoader — Component that injects responsive typography CSS (rendered automatically by XUIProvider)
  • FontLoader — Component that injects the @font-face declarations for XUI fonts
  • fontFacesCSS — Raw @font-face CSS string (for SSR or manual injection)
  • ThemeMode — Type: "dark" | "light" | "ltg-dark" | "blueprints"
  • ThemeColors — Type of the colour token object
  • ProductContext — Type of the themeProductContext prop: "b2c" | "b2b"
  • colors — Raw colour tokens for all themes
  • spacing — Spacing scale (xs, s, m, l, xl)
  • radius — Border-radius tokens (button, card, input, tag, avatar variants)
  • shadow — Shadow tokens
  • fonts — Font-family definitions
  • isWeb / isNative / isIOS / isAndroid — Platform detection booleans

Per-Component Theme Override

Every component accepts optional themeMode and themeProductContext props to override the global theme on a per-instance basis, without nesting additional providers.

useResolvedTheme is the hook that powers this. It accepts an optional overrides object and returns the same { theme, mode, productContext } shape as useDesignSystem:

import { useResolvedTheme, ThemeOverrideProps } from '@xsolla/xui-core';
import { Box, Text } from '@xsolla/xui-primitives';

type CardProps = ThemeOverrideProps & { title: string };

export const Card = ({ title, themeMode, themeProductContext }: CardProps) => {
  const { theme } = useResolvedTheme({ themeMode, themeProductContext });

  return (
    <Box backgroundColor={theme.colors.surface.primary}>
      <Text color={theme.colors.content.primary}>{title}</Text>
    </Box>
  );
};
// Consumer usage
<XUIProvider initialMode="dark">
  <Card title="Dark card" />
  <Card title="Light card" themeMode="light" />
  <Card title="B2C card" themeMode="light" themeProductContext="b2c" />
</XUIProvider>

When no overrides are passed, useResolvedTheme returns the global theme object by reference — zero overhead compared to useDesignSystem.