loris-ui.portfolio
v1.2.0
Published
This is the first in a series of react component libraries. The "portfolio" library has been designed initially with the neilgeorgephotography project in mind, to showcase beautiful photography, but could work equally well for other sites of a similar typ
Downloads
12
Readme
LORIS UI - PORTFOLIO
This is the first in a series of react component libraries. The "portfolio" library has been designed initially with the neilgeorgephotography project in mind, to showcase beautiful photography, but could work equally well for other sites of a similar type.
As with all Loris component libraries, the components are themable.
To achieve this, you musts wrap your route component (or wherever you
intend to be using the components) in a Loris Themer
component, which
the library exports. The component accepts a theme
prop, which is an
object, to which you can pass all of your custom values. To see exactly
how your custom theme object should be structured, take a look at the
/src/library/00-protons/Themer/defaultTheme.js
file. Write your own
values at any key name/location that you see in this object to overwrite
what's in the default. For example, with a typical implementation, your
index.js file might look something like this:
// index.js
import React from 'react'
import { render } from 'react-dom'
import './index.scss'
import App from './App'
import { Themer } from './library'
import * as serviceWorker from './serviceWorker'
render(
<Themer theme={{
colors: {
main: "#6CA4C8",
secondary: "#B88A9F",
secondary_light: "rgba(184, 138, 159, .12)",
dark: "#121F1F",
grey: "#F9F8F7",
light: "#FFFFFF"
}
}}>
<App />
</Themer>, document.getElementById('root'))
// If you want your app to work offline and load faster, you can change
// unregister() to register() below. Note this comes with some pitfalls.
// Learn more about service workers: https://bit.ly/CRA-PWA
serviceWorker.unregister()
Of course, if your custom theme was starting to get long, you could break it out into its own file and import it here instead, as long as the object gets passed to the theme prop, you're all good.
For more granular control, you can pass a scopedStyles
prop to any loris
component. So if a component had been setup to use backgroundColor: colors.main
,
even though you've set your own "main" colour, you might want that component to
use your secondary color for its background. It would look something like this:
// the below code assumes that you are consuming the
// theme context earlier in this same file and assigning
// it to the variable `theme`
<Card scopedStyles={
backgroundColor: theme.colors.secondary
} />
Components
Below are all the components in this library, including a brief description and a list of props that can be passed
01-atoms/CoverImage
Renders an image that fills its container using object-fit. The object-fit-polyfill library is a dependency of this library for use in this component.
Props:
- coverImageId [String]: a unique id for the component,
- imageAlt [String]: the text for the image HTML alt attribute,
- imageId [String]: a unique id for the image,
- imagePlaceholderSrc [String]: filepath to the placeholder image that will be displayed until the image loads,
- imagePos [Object]: keys
x
andy
to be used as the object-position value, - imageSize [Object]: keys
width
andheight
to be used to sest the dimensions of the image, - imageSrc [String]: filepath to the image to be rendered
01-atoms/Heading
Displays a simple text heading with some pre-defined styles.
Props:
- color [String]: one of the theme colors, sets the color of the heading text,
- headingLevel [Number]: between 1 - 6 inclusive, sets the <h_> tag for the heading,
- headingText [String]: the text to be rendered for the heading
01-atoms/Icon
Displays an svg graphic. Can optionally be a link.
Props:
- name [String]: the name of the svg, used as the img alt text
- size [String]: a predefined size string, sets the size of the svg,
- src [String]: a filepath that points to an svg file,
- url [String]: path to an internal or external resource. If supplied, the svg is wrapped in an anchor tag
01-atoms/ImageLoader
Similar to CoverImage but with the difference that this image will retain its aspect ratio. No object-fit properties are used, so the image will simply render at the specified size and is not guarunteed to fill its container.
Props:
- imageAlt [String]: text to be used as the value for the image alt attribute,
- imageId [String]: a unique for the image,
- imageSrc [String]: a filepath to the image,
- placeholderImageSrc [String]: a file path to the placeholder image that will be displayed until the intended image has loaded
01-atoms/LinkButton
A text link to an internal or external resource. It is styled to look like a button component.
Props:
- buttonBlock [Boolean]: determines whether or not the button should fill its container's width,
- buttonBorderColor [String]: sets the color of the border,
- buttonBgColor [String]: sets the color of the background, this should typically be the same as the border color,
- buttonColor [String]: sets the color of the button's text content,
- buttonLarge [Boolean]: determines which size variation of the button should be used,
- buttonLink [String]: a url that the button redirects to,
- buttonLinkVariation [String]: either
internal
orexternal
, determines if an or tag is used, - buttonOutline [Boolean]: determines whether or not the button should have a color fill,
- buttonText [String]: the text contents of the button
01-atoms/RichText
A simple container component that renders children with some defined styles.
01-atoms/Title
A text component for rendering a heading with a stylised underline.
Props:
- titleLevel [Number]: between 1 - 6 inclusive, determines the <h_> tag that is to be used,
- titleText [String]: the text that is to be displayed,
- underlineColor [String]: a theme color name that the title underline should use
02-molecules/ButtonRow
A component for rendering multiple buttons. The buttons are displayed side by side with a central line that runs across the screen and connects the buttons together. This line also helps differentiate between different sections of a page.
Props:
- buttons [Array]: each array item should be an object containing the non-color related props of a button,
- rowColor [String]: a theme color name that will be used to style the connecting line, and the buttons thereon,
- rowWidth [String]: either
narrow
orvery-narrow
, determines how wide the buttons container should be
02-molecules/Card
A flexible component that renders a heading, sub-heading and then any other children that are set.
Props:
- backgroundColor [String]: a theme color name that determines the background color of the button,
- borderColor [String]: a theme color name that determines sthe border color, should normally be the same as the background color,
- cardHeading [String]: the text for the main card heading,
- cardSubHeading [String]: the text for the card subheading
02-molecules/Footer
A simple container for some typically footer content: an accreditation for the site builder, a simple site map and a list of social media icons
Props:
- accreditationLink [String]: url relevant to the accreditation text,
- accreditationText [String]: text to be displayed, could be an affiliated organisation or the developer etc,
- iconsListData [Array]: each item should be an object with all of the props for an Icon component (see 01-atoms/Icon),
- siteMapLinks [Array]: each item should have
path
andlabel
keys
02-molecules/HeroGallery
This is an image gallery designed for the hero section of the website. It displays full screen images and tranistions between them with a subtle cross-fade animation.
Props:
- gallerySize [Object]: keys
width
andheight
, default to100%
and100vh
respectively, - images [Array]: each object in the array should contain the props for an individual image
02-molecules/IconsList
Displays multiple svg icons. Can be configured as a row or column.
Props:
- direction [String]: one of
column
,row
,column-reverse
orrow-reverse
, determines the arrangement of the icons - icons [Array]: each object in the array should contain the props for an Icon component
02-molecules/MainNav
The top bar that sits on every page of the website, including the main menu.
Props:
- menuLinks [Array]: each object in the array should have keys
path
andlabel
, - siteLogo [String]: optional filepath to a logo image,
- siteTitle [String]: the title of the site/web app
02-molecules/PageNav
A secondary level navigation for navigating within a page
Props:
- linkHighlight [String]: name of one of the theme colors, to style the underline of an hover/active link,
- links [Array]: each object in the array should have keys
path
andlabel
02-molecules/SideNav
A secondary level navigation that sits at the side of a page.
Props:
- direction [String]: one of
column
,row
,column-reverse
,row-reverse
, - linkColor [String]: the color that the links will display in,
- menuItems [Array]: each object in the array should have keys
path
andlabel
02-molecules/StaticGallery
A section for rendering a collection of images. Includes a side nav and a title.
Props:
- images [Array]: each object in the array should contain the props for an image,
- titleText [String]: The title for the image section,
- titleLevel [Number]: between 1 - 6 inclusive, determines the <h_> to be used for the title,
- underlineColor [String]: one of the theme color names, determines the color of the title underline
### 02-molecules/TextSection Section for rendering a heading with text children. Some pre-defined styles are supplied.
Props:
- titleLevel [Number]: between 1 - 6 inclusive, determines the level of <h_> that should render the title,
- titleText [String]: the text for the section title,
- underlineColor [String]: one of the theme color names, determines the color of the title underline.
03-organisms/CardBlock
Component renders a selection of cards in rows. Cards as passed as children.
Props:
- backgroundColor [String]: name of one of the theme colors, sets the background of the section,
- loadingImage [String]: filepath to an image to be rendered is there are no events to dispaly/events are loading,
- rowContains [Number]: between 1 - 4 inclusive, determines how many cards should fit in a row before they break onto a second line
### 03-organisms/GalleryFull A full page gallery component. This renders a collection of images in a horizontal, scrollable container. Clicking one of the images loads it into the large, focus-image area below.
Props:
- galleryColor [String]: one of the theme color names, determines the color that will be used across various aspects of the component,
- images [Array]: each object in the array should contain the props for an image
### 03-organisms/Page Page components wrap app content and display a consistent navigation and footer. The props are listed below, but not detailed since they would be repeats on component detailed above.
Props:
- accreditationLink [String],
- accreditationText [String],
- iconsListData [Object],
- menuLinks [Array],
- siteLogo [String],
- siteMapLinks [Array],
- siteTitle [String]
Additionally, every component in the library can accept an additionalClasses
component,
for passing down extra class names that are rendered on the component's root DOM node.