@algolia/satellite

Algolia design system React components

Usage no npm install needed!

<script type="module">
  import algoliaSatellite from 'https://cdn.skypack.dev/@algolia/satellite';
</script>

README

Satellite

Nothing to see here

Installation

yarn add @algolia/satellite react-feather

Quick start

import React from "react";
import ReactDOM from "react-dom";

import "@algolia/satellite/satellite.min.css";

import { Button } from "@algolia/satellite";

const App = () => (
  <div>
    <Button>Hurray!</Button>
  </div>
);

ReactDOM.render(<App />, document.getElementById("root"));

Usage

Integrating it on an existing project

You can import @algolia/satellite/satellite.min.css before the rest of your styles. It contains a slightly modified version of normalize.css as well as the style for the library's components.

If you use scss and want to reuse the colors to build custom components, they are available in @algolia/satellite/styles/scss/colors.scss.

If you use some form of css-in-js library and want to reuse the colors to build custom components, they are available in @algolia/satellite/styles/scss/colors.scss

I want to build a quick prototype

You can import @algolia/satellite/satellite.css before the rest of your styles. It contains all the classes generated by the library's tailwind config, unpurged. The classes are prefixed with stl-. It is recommended to use the stl tag template function available in @algolia/satellite;

Please refer to the official documentation to see which classes are available https://tailwindcss.com/

import React from "react";
import ReactDOM from "react-dom";

import "@algolia/satellite/satellite.min.css";

import { Button, stl } from "@algolia/satellite/Button";

const loading = true;

const App = () => (
  <div
    className={stl`
    flex flex-col m-4
    ${loading && "hidden"}
  `}
  >
    <Button className={stl`mb-2`}>Clap your hands!</Button>
    <Button>Hurray!</Button>
  </div>
);

ReactDOM.render(<App />, document.getElementById("root"));

[ADVANCED] I want to use tailwind directly

First install tailwindcss

yarn add -D tailwindcss

Example main.css

@import "tailwindcss/base";

@import "tailwindcss/components";

@import "tailwindcss/utilities";

Example postcss.config.js

const purgecss = require("@fullhuman/postcss-purgecss");
const cssnano = require("cssnano");

// Feel free to customize it
const tailwindConfig = require("@algolia/satellite/cjs/styles/tailwind.config.js");

// If you're gonna use purge css, you need to configure a custom extractor to avoid removing classes used in the Satellite components.
const { makePurgeCssExtractor } = require("@algolia/satellite");
const PurgeCssExtractor = makePurgeCssExtractor(tailwindConfig.prefix);

const plugins = [
  require("postcss-import"),
  require("tailwindcss")(tailwindConfig),
  require("autoprefixer"),
  purgecss({
    content: ["./dist/**/*.{js,html}"],
    defaultExtractor: PurgeCssExtractor,
    // This entry will allow you to safelist some prefix in order to avoid some classnames to be wiped out.
    // Here, it will keep all the classnames starting with:
    // - 'ais-*' to preserve the instant-search widgets style
    // - 'DayPicker*' to preserve all the DatePicker styles (used in the DatePicker and DateRangePicker)
    whitelistPatterns: [/^ais-/, /^DayPicker/],
  }),
  cssnano({ preset: "default" }),
];

module.exports = { plugins };

Example tailwind.config.js

const config = require("@algolia/satellite/cjs/styles/tailwind.config.js");

config.variants.backgroundColor = ["responsive", "hover", "focus", "active"];

module.exports = config;

Example index.jsx

import React from "react";
import ReactDOM from "react-dom";

import "./main.css";

import { Button, stl } from "@algolia/satellite/Button";

const loading = true;

const App = () => (
  <div
    className={stl`
    flex items-center justify-center
    ${loading && "hidden"}
  `}
  >
    <Button>Hurray!</Button>
  </div>
);

ReactDOM.render(<App />, document.getElementById("root"));

Release

In order to release a new version, simply use the following command:

yarn release prerelease

This will automatically create a new version and push it to the NPM registry. Easy as that