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 🙏

© 2024 – Pkg Stats / Ryan Hefner

@slashid/react-primitives

v0.6.0

Published

Primitive components for the /id React SDK

Downloads

2,919

Readme

SlashID React SDK

npm build

@slashid/react-primitives

Internal package with UI primitives for React.

Setup

This package is only available in the slashid/javascript monorepo as an internal package. It is not published to npm.

There is no need to install it separately - you can import it from this directory directly. The consuming package is responsible for building the project.

Build

This library uses vanilla-extract to implement type safe stylesheets. There is no build process involved, as the consuming app will import the source files and then build the styles accordingly. Check the vanilla-extract integration docs for more information.

Components

The public interface is defined by the exports in the src/main.ts file. Consuming apps can import them from the package root - import * from '@slashid/react-primitives'. Below we outline the common steps to use the components.

Theme

The first thing to do is to wrap the consuming app with the <ThemeRoot> component. This will set up the CSS variables necessary for the components to work.

Text customisation & translations

We expose text related components and utilities with two goals in mind:

  • having a consistent text style across the app
  • making it easy to replace the built-in text with custom strings, enabling i18n

In order to do that, a couple of steps are required as outlined in the following sections.

Text config

Text config is a record with string keys pointing to string values. These are app specific, so the library does not come with any strings that are built in. Instead, the consuming app is responsible for providing the configuration in that shape:

export const textConfig = {
  "text.hello": "Hello",
  "text.world": "World",
};

export type TextConfig = typeof textConfig;

Wrapping the app with the <TextProvider>

The text config we created in the previous section needs to be passed to the <TextProvider> that acts as a wrapper for the app, making the config available to the text components.

import { TextProvider } from "@slashid/react-primitives";
import { textConfig } from "./text";

export function App({ children }) {
  return <TextProvider text={textConfig}>{children}</TextProvider>;
}

Using the <Text> component

Since the library does not know about the text config specific to the app, we need to specify the type of the text config to be used to get type safety. This is done by creating a type alias for the text config and creating a wrapper for the <Text> component that uses it:

import { Text as BaseText, TextProps } from "@slashid/react-primitives";
import { TextConfig } from "./text";

type Props = TextProps<TextConfig>;

export const Text: React.FC<Props> = (props) => {
  return <BaseText {...props} />;
};