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

getbasecore

v2.0.44

Published

Modular, easy to upgrade and high performance CSS framework

Downloads

12

Readme

baseCore

Modular, easy to upgrade and high performance CSS framework

Requirements

React

All the components live in node_modules/getbasecore/src/components/

Every component follows this logic, lets use the Button Component as an example:

Core:

JS is stored in node_modules/getbasecore/src/components/atoms/BtnSimple/BtnSimple.js SCSS is stored in node_modules/getbasecore/src/components/atoms/BtnSimple/core_btn-simple.scss

The JS Component imports the SCSS core and the SCSS core imports the custom SCSS.

BtnSimple.js import "./core_btn-simple.scss";

core_btn-simple.scss

@import "/src/global.scss"; @import "/src/components/atoms/BtnSimple/btn-simple.scss";

By doing this the components are easy to update using npm without breaking anything in your current project.

Custom

SCSS is stored in /src/components/atoms/BtnSimple/btn-simple.scss

## Customizing components

Basecore works with the premise that you never need to change anything but CSS variables, this are located in your src/component/ folder.

If you need to alter a component to change its behavior then it's best to just create a new component, every component has a onClick, onChange prop so you can pass any function to them and keep the component as just a shell that receives props.

Some default components may have state but its only used to make it appear active / inactive and things like that.

## Importing components

You can import the built in components just by importing them like this:

import {
  BtnSimple,
  BtnSwitch,
  Icon,
  LinkSimple,
  List,
  FormInputRangeSimple,
} from "getbasecore/Atoms";


import {
  Accordion,
  Alert,
} from "getbasecore/Molecules";

React Requirements (2.0 and up)

  • A project created using Create React App ( Vue support coming soon)
  • For React: React Router, node-sass ( Our CLI will install them for you )

Parcel Requirements (only 1.x)

First, install Parcel:

npm i -g parcel-bundler

We recommend this two plugins for parcel posthtml-modules and posthtml-expressions

npm i --save posthtml-modules

npm i --save posthtml-expressions

You'll need them to open the Kitchen Sink were you can preview all baseCore components, you can use them to build static html.

For Parcel to work nice with baseCore you need to create this two files in your project

.sassrc

{
    "includePaths": ["node_modules"]
}

.posthtmlrc

{
  "plugins": {
    "posthtml-modules": {
      "root": "./src"
    }
  }
}

Start Parcel and have fun :)

parcel ./src/pages/index.html --open

Installing baseCore

Just follow basecore-cli instructions

Why another framework?

baseCore is a framework created using the knowledge of both UI designers and Frontend Developers, targeting reusability, accesibility and a low Kb weight size and a extremely easy way to customize components.

Our mission is to create an easy to use framework that allows everybody in the Team to create a project ASAP, for this we've inspired our framework in the Atomic Design methodology

tldr; Atomic Design separates components in:

| Type | Description | | --------- | ------------------------------------------------------------------------------------- | | Atoms | A simple element like a Button | | Molecules | More than one Atom together | | Cells | This doesn't exist in the regular Atomic Design. We'll talk about it later | | Organisms | More than one Molecule / Cell together | | Templates | A whole page with Organisms, Molecules, etc but with dummy content, like a prototype. | | Pages | A final Template but with final content |

Examples

Atom

A single button:

Molecules

Two Atoms (buttons) together:

Another two Atoms together: a title and a paragraph tag:

Three atoms Image + Title + Paragraph + List ( Molecule ) + button, all of them inside a Cell

This case is a special one because Atomic Design dictates that component should be an Organism, but we're calling it also a Molecule ( or a Mega Molecule for use of different name ) . We only define a Component as an Organism if that Component has Javascript logic. More on this later.

Cell

A Cell is the container of others Atoms + Molecules, think of it as the typical card component, a Component container with CSS for only its own padding, background color, margin, etc. But with no content insideas the content style and functionality aren't define by the Cell as every Atom and Molecule has its own CSS and Javascript, more on this later on.

Organism

A Cell + Image + Title + Paragraph + List + Button

Same Cell + Title + Subtitle + Paragraph + Button

Separation of concerns

Every component has its own SCSS and React Component files, all of them starting with an underscore in its file name so we know it's a partial element of the component.

| Name | Description | | ---------- | ----------------- | | \name.scss | Component visuals | | \Name.js | Component logic |

Every line of code should only affect the component itself, never its parents or his children, for example if a Molecule interacts with another Molecule then the two of them should be organized inside a Organism.

In UI Design the complexity of the component defines if it's an Atom, a Molecule or an Organism, in code we have to twist that a litte, we use the scope of interaction to separate the components:

| Component | Description | | --------- | -------------------------------------------------------------------------------------------- | | Atom | Only has State or logic its used to interact within itself. Functions are passed using props | | Molecule | Only has State or logic its used to interact within itself. Functions are passed using props | | Organism | Has Javascript Logic that affects the children within. Functions can be defined here | | Cell | Has no Javascript Logic as it's only "a shell" |

Components are designed as "empty shells", you pass them everything by using props. This way they are extremely reusable, you can have components that look the same but their functionality different whenever you need them to.

Example:

Imagine a search page, you have the Search Input, the Search Button and the Results, all in the same page.

When you click on the Search Button, the Buttons changes and shows a loading animation, 1 second after, the Results starts to show your favourite products.

Search Input => Atom 1

Search Button => Atom 2

Search Input + Search Button => Molecule 1

Result Product => Molecule 2

A grid of 9 Result Products => Mega Molecule 1

Molecule 1 + Mega Molecule 1 => Organism 1

Lets review the logic of every element:

Atom 1: Has no Javascript Logic

Atom 2: Has no Javascript Logic

Molecule 1: Has Javascript logic so it can change the Search button, but only affects itself

Organism 1: Has Javascript Logic, when we press the Search Button we call a web service that once we've parsed it we create the grid of 9 products

By doing this, we can make multiple and different Result pages using the same Molecules in just seconds because they have all we need except the web service logic.

So Atoms, Molecules and Cells are highly reusable, and since every one of them will just be imported / referenced in the whole project if we need to make a change, we only have to do it in one component and everything will propagate with no effort. As you can already see, Organisms aren't meant to be reused but you can if you want to, though. In the previous example you could integrate the Organism 1 in any other page, as it already has everything needed in itself to just work.

Folder Structure

src/
    app/
    components/
        atoms/
        molecules/
        organisms/
    fonts/
    hooks/
    pages/
    routers/
    utils/
      animate/
      grid-layout/
      mixins/
      reset/
      vars/
public
  svg/
    icons/
    sprite.svg

| Name | Description | | ---------------------- | ----------------------------------------------------- | | components/\atoms/ | Atoms, put yours here too | | components/\molecules/ | Molecules, put yours here too | | components/\organisms/ | Organisms, put yours here too | | components/\cell/ | Cells, put yours here too | | fonts/ | Put all your custom Fonts here | | hooks/ | Create all your custom hooks here | | pages/ | Create different .html files here for static projects | | routers/ | Create all your custom routers here | | utils/ | Folder with various SCSS tools | | utils/animate/ | animate.css animations converted as mixins | | utils/grid-layout/ | Grid custom SCSS properties | | utils/mixins/ | Mixins | | utils/reset/ | Some SCSS Reset | | utils/vars/ | SCSS Vars | | public/svg/icons | You can store your icons here for reference | | public/svg/sprite.svg | You need to store your SVG icons inside this file |

Importing components

You just need to import the desired component like this:

import {
  ComponenteName,
  AnotherComponentName
} from "getbasecore/Atoms";

Atoms

This is the list of all the default Atoms available in baseCore:

Btn
BtnSimple
BtnSwitch
FormCheckboxSimple
FormInputRangeSimple
FormInputSimple
FormRadioSimple
Icon
Iframe
Img
Link
LinkSimple
List
LoaderCircle
ProgressBar
Typography

Molecules

This is the list of all the default Atoms available in baseCore:

Accordion
Alert
Breadcrumb
Dropdown
Form
Modal
Pagination
Table
Tabs
Tooltip

Creating new icons

Basecore uses SVG Sprites in order to have a powerfull icon system you can modify using only SCSS.

To create a new icon you need to copy the svg source code in the public/svg/sprite.svg changing the svg tags with symbol tags and adding it an ID:

Original SVG

<svg viewBox="0 0 24 24"><path d="M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z"/>
</svg>

Modified inside sprite.svg

<symbol id="arrow-left" viewBox="0 0 24 24"><path d="M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z"/>
</symbol>

Now if you want to insert an icon just use the Icon component by just using the svg ID in the "icon" prop:

import { Icon } from "getbasecore/Atoms";
export const Component = ({ props }) => {
  return <Icon icon="arrow-left" />
}

baseCore Core and Custom

baseCore gets its name from this concept: Split the code in Core code and Custom Core.

Core Code

This is the code you shouldn't have to touch ( we should maintain it for you! ) because it contains logic that should change, for instance, a modal always has the same logic: You push a button and you get a modal window. This logic is within the node_modules and can't be extracted automatically, but nothing keeps you to just copy and paste the files in the project but we greatly advise against it as it will complicate your project maintenance.

Another example are buttons, how many times have you reset the buttons? Remove the borders, apply webkit fixes? All this code belongs to the Core portion of baseCore so this annoyances are taken care for you even before starting the project.

Here is some of the core code of the Modal Molecule Component:

\core_modal.scss

.modal {
  margin-left: auto;
  margin-right: auto;
  z-index: -1;
  position: fixed;
  left: 0;
  right: 0;
  margin: auto;
  opacity: 0;
}

These are properties a modal is always going to have, and if for some reason it doesn't you can easily overwrite them using CSS cascade, but we've put a lot of work separating core and custom code so you don't have to worry about this.

All the Javascript Code that ships with baseCore is part of Core Code , so all imports targets are in the node_modules folder.

Custom Code

This is the code you should and will touch.

Every component that comes with baseCore is defined almost in it's entirety with CSS variables so you can change the component visual aspects really fast.

Getting back to our modal, the scss in the project relates to the custom part of the code, in there you can see all the variables you can use to customize it

--modal-backdrop-bg: rgba(0, 0, 0, 0.5);
--modal-dialog-bg: white;
--modal-dialog-padding: 40px;
--modal-close-size: 20px;
--modal-close-color: var(--color-text-1);
--modal-close-top: 10px;
--modal-close-right: 10px;
--modal-anim-top: 10%;

In the complete baseCore Docs you can read about every single variable and what part of the component affects.

| Name | Description | | ----------------------- | ----------------------------- | | --modal-backdrop-bg | Backdrop background color | | --modal-dialog-bg | Modal dialog background color | | --modal-dialog-padding | Modal dialog background color | | --modal-close-size | Close button size | | --modal-close-color | Close button color | | --modal-close-top | Close button top position | | --modal-close-right | Close button right position | | --modal-anim-top | Modal top position animation |

You could also say that Core Code contains Funcionality code, and Custom Code contains the Visual customizable code.

Scss imports

In order for baseCore to work you need to know that:

  • If you want to use SCSS vars you should import globals.scss
  • You need to import this SCSS files in your main index.js React file: import "getbasecore/src/utils/reset/core_reset.scss"; import "getbasecore/src/utils/grid-layout/core_grid-layout.scss"; import "getbasecore/src/components/atoms/Typography/core_typography.scss";