React component library for Alethio apps.
NOTICE: The master branch hosts the latest development version (v2.x). For the legacy 1.x version, please see the v1 branch.
- Node 8+ for development
- ES2015+ compliant browser for runtime
npm i @alethio/ui
- Copy the
public/css
andpublic/fonts
folders into your root app folder and import the CSS files in your index.html. - In your root App component, create a theme and pass it to styled-components provider:
import * as React from "react";
import { ThemeProvider } from "@alethio/ui/lib/styled-components";
import { createPalette } from "@alethio/ui/lib/theme/createPalette";
import { createTheme } from "@alethio/ui/lib/theme/createTheme";
class App extends React.Component {
private theme = createTheme(createPalette());
render() {
return <ThemeProvider theme={this.theme}>
{ /* ... stuff ... */ }
</ThemeProvider>
}
}
The library uses react-uid to generate some unique IDs for svg icon markup. For SSR to work properly, you will need to include the UIDReset component at the root of you app component.
Server:
import { UIDReset } from "@alethio/ui/lib/uid/UIDReset";
// ...
ReactDOM.renderToString(<UIDReset><App /></UIDReset>));
Client:
import { UIDReset } from "@alethio/ui/lib/uid/UIDReset";
//..
ReactDOM.render(<UIDReset><App /></UIDReset>)
You can also import UIDConsumer component for general use in your app. The UIDReset
component is only needed for SSR. The main difference between these components and the components found in react-uid
is that they work when multiple instances of the library are imported (e.g. multiple applications/plugins running on the same page)
Just import any component with import { ... } from "@alethio/ui/lib/path/to/Component"
.
NOTE: Internal components are marked as @internal
and/or are placed in internal/
sub-folders. Never use them directly in production.
You can see the components in action here.
npm install
npm run build
for minified build ornpm run watch
for incremental development/debug build.
📁
├─📁lib - target folder that contains built/transpiled components
├─📁public - static assets (css and fonts) that should be served by the consumer app
└─📁src - source files
├─📁control - UI controls / widgets
├─📁data - components for displaying and formatting various types of data
├─📁fx - Effects and animations
├─📁icon - icon components (SVG or icon font wrappers)
└─📁layout - components for layout / arrangement
The library uses a styled-component theme, which you can directly access in your styled components. If using TypeScript, we also provide e re-export of styled-components library (which is a peer dependency) that uses a typed ITheme interface.
import * as styled from "@alethio/ui/lib/styled-components";
const MyLinkComponent = styled.div`
color: ${props => props.theme.colors.link};
`;
Original SVG sources should be kept in the dev/original-svg
folder. To create SVG icon components from them, the following steps should be taken:
- Copy the SVG markup in the render method of a new React component
- Replace all dash (-) attributes with camelCase
- Remove any unneeded attributes or run the SVG through an optimizer tool
- The viewBox of the icon should be a square. If needed use
<g transform="translate(x,y)">
to center the icon in the new viewBox. This allows proper sizing viasize
prop - Replace the main fill/stroke color with
currentColor
, to ensure proper cascading, or parametrize if more than one color - The resulting component should be configured with a size prop that applies to both width and height
- Make sure you are a maintainer and you are on an up-to-date master branch.
- Update
node_modules
(npm i). - Update & commit the CHANGELOG.MD by adding an entry for the desired version
npm version prerelease
git push
git push --tags --no-verify
npm publish --tag next