Skip to content

rotationalio/beacon-ds

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

58 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Banner

GitHub code size in bytes GitHub last commit GitHub commit activity month GitHub license GitHub license

πŸ“Œ Overview

Beacon-DS is the Beacon Design System project, a comprehensive framework that integrates vital dependencies to enhance its functionality and design. Some of the core dependencies include styled-components for styled elements, Tailwind CSS for utility-first CSS, Radix UI and Headless UI for unstyled, fully accessible UI components, and React Table for building fast and extendable tables and datagrids in React. These dependencies ensure that Beacon-DS remains robust, user-friendly, and versatile in its design capabilities.

πŸ” Table of Contents

πŸ“ Project Structure

β”œβ”€β”€ .DS_Store
β”œβ”€β”€ .changeset
β”‚  
β”‚ 
β”œβ”€β”€ .config
β”‚   └── barrelsby.json
β”œβ”€β”€ .eslintignore
β”œβ”€β”€ .eslintrc.js
β”œβ”€β”€ .github
β”‚   └── workflows
β”‚       β”œβ”€β”€ deploy-docs.yml
β”‚       β”œβ”€β”€ deploy-storybook.yml
β”‚       └── release.yml
β”œβ”€β”€ .gitignore
β”œβ”€β”€ .prettierrc
β”œβ”€β”€ .yarn
β”‚   └── install-state.gz
β”œβ”€β”€ .yarnrc.yml
β”œβ”€β”€ README.md
β”œβ”€β”€ apps
β”‚  
β”‚   └── docs
β”‚       β”œβ”€β”€ .DS_Store
β”‚       β”œβ”€β”€ .gitignore
β”‚       β”œβ”€β”€ CHANGELOG.md
β”‚       β”œβ”€β”€ components
β”‚       β”‚   β”œβ”€β”€ counters.module.css
β”‚       β”‚   β”œβ”€β”€ counters.tsx
β”‚       β”‚   └── style.module.css
β”‚       β”œβ”€β”€ next-env.d.ts
β”‚       β”œβ”€β”€ next.config.js
β”‚       β”œβ”€β”€ package.json
β”‚       β”œβ”€β”€ pages
β”‚       β”‚   β”œβ”€β”€ .DS_Store
β”‚       β”‚   β”œβ”€β”€ Foundation
β”‚       β”‚   β”‚   β”œβ”€β”€ Layouts
β”‚       β”‚   β”‚   β”‚   β”œβ”€β”€ Container.mdx
β”‚       β”‚   β”‚   β”‚   └── Grid.mdx
β”‚       β”‚   β”‚   β”œβ”€β”€ Typography.mdx
β”‚       β”‚   β”‚   └── colors.mdx
β”‚       β”‚   β”œβ”€β”€ _app.mdx
β”‚       β”‚   β”œβ”€β”€ _meta.json
β”‚       β”‚   β”œβ”€β”€ advanced.mdx
β”‚       β”‚   β”œβ”€β”€ another.mdx
β”‚       β”‚   β”œβ”€β”€ components
β”‚       β”‚   β”‚   β”œβ”€β”€ button.mdx
β”‚       β”‚   β”‚   β”œβ”€β”€ card.mdx
β”‚       β”‚   β”‚   β”œβ”€β”€ modal.mdx
β”‚       β”‚   β”‚   └── spinner.mdx
β”‚       β”‚   └── index.mdx
β”‚       β”œβ”€β”€ public
β”‚       β”‚   └── dash-layout.png
β”‚       β”œβ”€β”€ theme.config.tsx
β”‚       └── tsconfig.json
β”œβ”€β”€ package.json
β”œβ”€β”€ packages
β”‚   β”œβ”€β”€ core
β”‚   β”‚   β”œβ”€β”€ CHANGELOG.md
β”‚   β”‚   β”œβ”€β”€ README.md
β”‚   β”‚   β”œβ”€β”€ babel.config.js
β”‚   β”‚   β”œβ”€β”€ jest.config.js
β”‚   β”‚   β”œβ”€β”€ package.json
β”‚   β”‚   β”œβ”€β”€ src
β”‚   β”‚   β”‚   β”œβ”€β”€ components
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ Avatar
β”‚   β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ Avatar.styles.tsx
β”‚   β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ Avatar.tsx
β”‚   β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ Avatar.type.ts
β”‚   β”‚   β”‚   β”‚   β”‚   └── index.ts
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ Box
β”‚   β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ Box.tsx
β”‚   β”‚   β”‚   β”‚   β”‚   └── index.ts
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ Breadcrumbs
β”‚   β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ Breadcrumb.type.ts
β”‚   β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ Breadcrumbs.tsx
β”‚   β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ breadcrumbs-icon.svg
β”‚   β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ breadcrumbs-icon.tsx
β”‚   β”‚   β”‚   β”‚   β”‚   └── index.ts
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ Button
β”‚   β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ Button.styles.tsx
β”‚   β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ Button.tsx
β”‚   β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ Button.types.ts
β”‚   β”‚   β”‚   β”‚   β”‚   └── index.ts
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ Card
β”‚   β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ Card.spec.tsx
β”‚   β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ Card.styles.tsx
β”‚   β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ Card.tsx
β”‚   β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ Card.types.ts
β”‚   β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ index.ts
β”‚   β”‚   β”‚   β”‚   β”‚   └── utils.ts
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ Checkbox
β”‚   β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ Checkbox.styles.tsx
β”‚   β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ Checkbox.tsx
β”‚   β”‚   β”‚   β”‚   β”‚   └── index.ts
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ Container
β”‚   β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ Container.tsx
β”‚   β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ Container.types.tsx
β”‚   β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ index.ts
β”‚   β”‚   β”‚   β”‚   β”‚   └── utils.ts
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ Grid
β”‚   β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ Grid.styles.tsx
β”‚   β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ Grid.tsx
β”‚   β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ Grid.types.ts
β”‚   β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ index.tsx
β”‚   β”‚   β”‚   β”‚   β”‚   └── utils.ts
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ Heading
β”‚   β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ Heading.spec.tsx
β”‚   β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ Heading.tsx
β”‚   β”‚   β”‚   β”‚   β”‚   └── index.ts
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ Icon
β”‚   β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ Icon.styles.tsx
β”‚   β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ Icon.tsx
β”‚   β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ Icon.types.ts
β”‚   β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ Icons.tsx
β”‚   β”‚   β”‚   β”‚   β”‚   └── index.tsx
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ Label
β”‚   β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ Label.styles.tsx
β”‚   β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ Label.tsx
β”‚   β”‚   β”‚   β”‚   β”‚   └── index.ts
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ Loader
β”‚   β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ Loader.tsx
β”‚   β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ LoaderComponent.tsx
β”‚   β”‚   β”‚   β”‚   β”‚   └── index.ts
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ Menu
β”‚   β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ Menu.spec.tsx
β”‚   β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ Menu.styles.tsx
β”‚   β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ Menu.tsx
β”‚   β”‚   β”‚   β”‚   β”‚   └── index.ts
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ Modal
β”‚   β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ CloseIcon.tsx
β”‚   β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ Modal.spec.tsx
β”‚   β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ Modal.styles.tsx
β”‚   β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ Modal.tsx
β”‚   β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ Modal.types.ts
β”‚   β”‚   β”‚   β”‚   β”‚   └── index.ts
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ Radio
β”‚   β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ Radio.tsx
β”‚   β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ Radio.type.ts
β”‚   β”‚   β”‚   β”‚   β”‚   └── index.ts
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ RadioGroup
β”‚   β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ RadioGroup.context.tsx
β”‚   β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ RadioGroup.tsx
β”‚   β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ RadioGroup.type.ts
β”‚   β”‚   β”‚   β”‚   β”‚   └── index.ts
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ Select
β”‚   β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ Select.spec.tsx
β”‚   β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ Select.styles.tsx
β”‚   β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ Select.tsx
β”‚   β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ Select.types.tsx
β”‚   β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ checkist.todo
β”‚   β”‚   β”‚   β”‚   β”‚   └── index.ts
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ Switch
β”‚   β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ Switch.tsx
β”‚   β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ Switch.type.ts
β”‚   β”‚   β”‚   β”‚   β”‚   └── index.ts
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ Table
β”‚   β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ Table.styles.tsx
β”‚   β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ Table.tsx
β”‚   β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ Table.types.ts
β”‚   β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ index.ts
β”‚   β”‚   β”‚   β”‚   β”‚   └── shared
β”‚   β”‚   β”‚   β”‚   β”‚       β”œβ”€β”€ ActionPill.tsx
β”‚   β”‚   β”‚   β”‚   β”‚       β”œβ”€β”€ PaginateButton.tsx
β”‚   β”‚   β”‚   β”‚   β”‚       β”œβ”€β”€ StatusPill.tsx
β”‚   β”‚   β”‚   β”‚   β”‚       └── util.ts
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ TextField
β”‚   β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ Input.styles.tsx
β”‚   β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ TextField.spec.tsx
β”‚   β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ TextField.tsx
β”‚   β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ TextField.types.tsx
β”‚   β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ index.ts
β”‚   β”‚   β”‚   β”‚   β”‚   └── util.ts
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ Toast
β”‚   β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ Toast.styles.tsx
β”‚   β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ Toast.tsx
β”‚   β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ Toast.types.tsx
β”‚   β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ index.ts
β”‚   β”‚   β”‚   β”‚   β”‚   └── util.tsx
β”‚   β”‚   β”‚   β”‚   └── Tooltip
β”‚   β”‚   β”‚   β”‚       β”œβ”€β”€ Tooltip.styles.ts
β”‚   β”‚   β”‚   β”‚       β”œβ”€β”€ Tooltip.tsx
β”‚   β”‚   β”‚   β”‚       β”œβ”€β”€ Tooltip.types.ts
β”‚   β”‚   β”‚   β”‚       └── index.ts
β”‚   β”‚   β”‚   β”œβ”€β”€ hooks
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ index.ts
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ useMenu.ts
β”‚   β”‚   β”‚   β”‚   └── useTheme.tsx
β”‚   β”‚   β”‚   β”œβ”€β”€ index.ts
β”‚   β”‚   β”‚   β”œβ”€β”€ style.css
β”‚   β”‚   β”‚   β”œβ”€β”€ types
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ color.ts
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ index.ts
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ react-table-config.d.ts
β”‚   β”‚   β”‚   β”‚   └── size.ts
β”‚   β”‚   β”‚   └── utils
β”‚   β”‚   β”‚       β”œβ”€β”€ extractProps.ts
β”‚   β”‚   β”‚       β”œβ”€β”€ getInitials.ts
β”‚   β”‚   β”‚       β”œβ”€β”€ globalStyles.ts
β”‚   β”‚   β”‚       β”œβ”€β”€ index.ts
β”‚   β”‚   β”‚       β”œβ”€β”€ mergeClassnames.ts
β”‚   β”‚   β”‚       └── tokens
β”‚   β”‚   β”‚           β”œβ”€β”€ colors.ts
β”‚   β”‚   β”‚           β”œβ”€β”€ radii.ts
β”‚   β”‚   β”‚           └── spacings.ts
β”‚   β”‚   β”œβ”€β”€ tailwind.config.js
β”‚   β”‚   └── tsconfig.json
β”‚   β”œβ”€β”€ foundation
β”‚   β”‚   β”œβ”€β”€ .gitignore
β”‚   β”‚   β”œβ”€β”€ CHANGELOG.md
β”‚   β”‚   β”œβ”€β”€ README.md
β”‚   β”‚   β”œβ”€β”€ package.json
β”‚   β”‚   β”œβ”€β”€ sd.config.js
β”‚   β”‚   β”œβ”€β”€ src
β”‚   β”‚   β”‚   β”œβ”€β”€ index.ts
β”‚   β”‚   β”‚   β”œβ”€β”€ tailwindPreset.config.js
β”‚   β”‚   β”‚   β”œβ”€β”€ tokens
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ animations.json
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ colors.json
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ radius.json
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ shadows.json
β”‚   β”‚   β”‚   β”‚   └── spacings.json
β”‚   β”‚   β”‚   └── typography.css
β”‚   β”‚   └── tsconfig.json
β”‚   β”œβ”€β”€ icons
β”‚   β”‚   β”œβ”€β”€ .gitkeep
β”‚   β”‚   β”œβ”€β”€ package.json
β”‚   β”‚   β”œβ”€β”€ src
β”‚   β”‚   β”‚   β”œβ”€β”€ SortIcon
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ SortIcon.tsx
β”‚   β”‚   β”‚   β”‚   └── index.ts
β”‚   β”‚   β”‚   └── index.ts
β”‚   β”‚   └── tsconfig.json
β”‚   └── storybook
β”‚       β”œβ”€β”€ .babelrc.json
β”‚       β”œβ”€β”€ .eslintignore
β”‚       β”œβ”€β”€ .storybook
β”‚       β”‚   β”œβ”€β”€ main.js
β”‚       β”‚   └── preview.js
β”‚       β”œβ”€β”€ CHANGELOG.md
β”‚       β”œβ”€β”€ README.md
β”‚       β”œβ”€β”€ package.json
β”‚       β”œβ”€β”€ stories
β”‚       β”‚   β”œβ”€β”€ AriaButton.stories.tsx
β”‚       β”‚   β”œβ”€β”€ Avatar.stories.tsx
β”‚       β”‚   β”œβ”€β”€ Breadcrumbs.stories.tsx
β”‚       β”‚   β”œβ”€β”€ Button.stories.tsx
β”‚       β”‚   β”œβ”€β”€ Card.stories.tsx
β”‚       β”‚   β”œβ”€β”€ Checkbox.stories.tsx
β”‚       β”‚   β”œβ”€β”€ Grid.stories.tsx
β”‚       β”‚   β”œβ”€β”€ Heading.stories.tsx
β”‚       β”‚   β”œβ”€β”€ Introduction.stories.mdx
β”‚       β”‚   β”œβ”€β”€ Loader.stories.tsx
β”‚       β”‚   β”œβ”€β”€ Menu.stories.tsx
β”‚       β”‚   β”œβ”€β”€ Modal.stories.tsx
β”‚       β”‚   β”œβ”€β”€ RadioGroup.stories.tsx
β”‚       β”‚   β”œβ”€β”€ Select.stories.tsx
β”‚       β”‚   β”œβ”€β”€ Switch.stories.tsx
β”‚       β”‚   β”œβ”€β”€ Table.stories.tsx
β”‚       β”‚   β”œβ”€β”€ TextField.stories.tsx
β”‚       β”‚   β”œβ”€β”€ Toast.stories.tsx
β”‚       β”‚   β”œβ”€β”€ Tooltip.stories.tsx
β”‚       β”‚   β”œβ”€β”€ Typography.stories.mdx
β”‚       β”‚   └── assets
β”‚       β”‚       β”œβ”€β”€ button-tailwind.svg
β”‚       β”‚       β”œβ”€β”€ button.svg
β”‚       β”‚       β”œβ”€β”€ code-brackets.svg
β”‚       β”‚       β”œβ”€β”€ colors.svg
β”‚       β”‚       β”œβ”€β”€ comments.svg
β”‚       β”‚       β”œβ”€β”€ direction.svg
β”‚       β”‚       β”œβ”€β”€ flow.svg
β”‚       β”‚       β”œβ”€β”€ plugin.svg
β”‚       β”‚       β”œβ”€β”€ repo.svg
β”‚       β”‚       β”œβ”€β”€ stackalt.svg
β”‚       β”‚       └── typography.svg
β”‚       └── tsconfig.json
β”œβ”€β”€ tsconfig.json
└── yarn.lock

πŸ“ Project Summary

πŸ’» Stack

Here's the corrected content:

  • Next.js: Framework for building server-rendered React applications.
  • React: JavaScript library for building user interfaces.
  • radix ui: A low-level UI primitive library for building high-quality, accessible design systems without sacrificing style.
  • typescript: Typed superset of JavaScript that compiles to plain JavaScript.
  • react table: Hooks for building lightweight, fast, and extendable data-grid tables for React.
  • nextra-theme-docs: Theme for Nextra that adds documentation-specific features.
  • Headless UI: Completely unstyled, fully accessible UI components.
  • @types/node: TypeScript definitions for Node.js.

βš™οΈ Setting Up

Ensure the following configurations for a smooth setup:

  • Use yarn berry with a version of yarn 3.4.1.
  • Your system should have node version 16 or higher.
  • Ensure npm is updated to version 9.3.1 or above.

πŸš€ Run Locally

1.Clone the beacon-ds repository:

git clone https://github.com/rotationalio/beacon-ds

2.Install the dependencies with one of the package managers listed below:

yarn install

3.Some packages need to be built before consuming them, like the foundation, which will distribute the design tokens to the rest of the packages.

yarn build

Run Storybook

You can run Storybook and instantly start experimenting with the components' code running the command:

yarn storybook

A compiled storybook can be found also here.

Manage the Versioning

When a change has been made to the codebase, it's essential to keep track of versions for smoother rollbacks, updates, and collaboration. To facilitate this, we utilize the Changeset CLI. This tool allows us to document changes, automatically bump versions, and generate changelogs. Before pushing any updates, ensure you've run the Changeset CLI to log the modifications and update the version accordingly. This practice ensures consistency and clarity for all team members and users of the package.

yarn changeset

Publish to NPM

To publish the package, execute the following command. However, ensure you have been added to the Rotational Lab NPM account teams beforehand. Follow these instructions to configure your accounts appropriately here.

yarn release

☁️ Deploy

Our documentation is constructed using NextJS, enhanced with Nextra. For deployment, we use surge.sh to achieve static deployment.

To deploy the documentation, execute the following command:

yarn run docs:export

Ensure you have the necessary dependencies installed and configured before running the command.

Beacon Design System

πŸ™Œ Contributors

πŸ“„ License

BSD 3-Clause License