@apollion-dsi/core
v7.3.0
Published
Apollion Design System — Component Library
Readme
@apollion-dsi/core
The React component library of the Apollion Design System — 50+ typed, accessible components with an engine-driven dark mode: one color config derives light and dark, and every tonal pair is WCAG AA legible by construction.
- Accessible by construction. Color pairs meet WCAG AA automatically, and
every component passes an axe sweep (
wcag2a+wcag2aa) with zero violations. - Engine-driven dark mode. One
colorsconfig derives both modes aslight-dark()pairs switched on<html>— no re-render, no flash. A11y presets (grayscale, high-contrast, colorblind-safe) are an independent axis. - Config-first theming.
createThemeresolves semantic tokens and a per-component token tier; override one field without forking a component. - Tree-shakeable. Import from granular subpaths so a consumer only bundles what it renders.
- CSS-first motion. Every container-derived component animates through
the
motionpreset prop — zero animation-library payload. - Strictly typed. Ships its own types; every prop is documented.
Installation
react, react-dom, and styled-components are peer dependencies —
install them alongside the package:
yarn add @apollion-dsi/core react react-dom styled-components| Peer dependency | Range |
| ------------------- | --------- |
| react | ^19.0.0 |
| react-dom | ^19.0.0 |
| styled-components | ^6.0.0 |
Quick start
Wrap your app in ApollionProvider (it also mounts the theme and notifications
providers) and render a component:
import { createRoot } from 'react-dom/client';
import { ApollionProvider } from '@apollion-dsi/core/themes';
import { Button } from '@apollion-dsi/core/elements/button';
createRoot(document.getElementById('root')!).render(
<ApollionProvider>
<Button>Get started</Button>
</ApollionProvider>,
);Documentation
- Docs & live examples: https://www.apollion.com.br
- Changelog: https://www.apollion.com.br/changelog
Imports (subpaths only)
The root barrel exports only APOLLION_CORE_VERSION. Always import from granular
subpaths — this is what enables per-component tree-shaking:
import { ApollionProvider, createTheme } from '@apollion-dsi/core/themes';
import { Button } from '@apollion-dsi/core/elements/button';
import { Flex } from '@apollion-dsi/core/containers/flex';
// Not available — the root barrel re-exports nothing:
// import { Button } from '@apollion-dsi/core';Every container-derived component animates through the motion preset prop
(pure CSS, no runtime dependency) — see themes/motion for the token scales
and elements/sheet / elements/modal for the primitives that use it.
Components
| Category | Components |
| ---------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Elements | Avatar, Button, Calendar, Divider, Dropdown, Icon, IconButton, IconText, Image, Label, Link, List, Modal, Popover, ProgressBar, Sheet, Spinner, Svg, Text, Tooltip |
| Containers | Box, Card, Flex, Grid, Notification, Paper, Scroll |
| Form | Checkbox, Field, FieldGroup, Form, Input, InputCurrency, InputDate, InputMask, InputRange, InputSelect, Option, Radio, Select, Switch, TextArea, UploadCard |
| Data Display | DataTable, DescriptionList, Meter, Steps, Table, Tabs |
Also available: layouts/*, skeleton/* and scenario/* (loading
placeholders), icons, hooks, utils, factory, and the theme scales under
themes/*.
Theming
Build a theme with createTheme and pass it to ApollionProvider. Components
consume semantic tokens (colors, spacing, typography, borders, shadows) as
props:
import { ApollionProvider, createTheme } from '@apollion-dsi/core/themes';
// One config derives light + dark; `defaultMode="system"` follows the OS.
const theme = createTheme({ colors: { main: '#003750' } });
<ApollionProvider theme={theme} defaultMode="system" persist="localStorage">
...
</ApollionProvider>;Full theming and dark-mode guides: https://www.apollion.com.br/docs/concept-dark-mode/
Lineage & Acknowledgements
Apollion (2020) and DEX (2018) were built in collaboration between Fernando Balves (author) and Fernando Poe (co-author / Design Manager). The intuition of semantic tokens, generative palettes, and the separation of intent ⇄ implementation was born from that joint work.
Aplica DS (2025), by Fernando Poe, is the public, independent evolution of that thinking. Apollion's token architecture adopts the non-disruptive subset of its layer model (Semantic, Foundation, Surface) — see docs.aplica.me for the upstream concept.
License
MIT.
