From c220583252463266b8a3704dd30e67e81feb85d6 Mon Sep 17 00:00:00 2001
From: Zeno Rocha
Date: Tue, 19 Dec 2023 08:45:31 -0300
Subject: [PATCH] feat: Add website redirect
---
website/components/AccentColorPicker.js | 41 -
website/components/CodeHighlight.js | 124 -
website/components/CodeHighlight.module.css | 52 -
website/components/DocsOverview.js | 43 -
website/components/DocsOverview.module.css | 18 -
website/components/Footer.js | 33 -
website/components/Footer.module.css | 36 -
website/components/Launcher/Launcher.js | 221 --
.../components/Launcher/Launcher.module.css | 97 -
website/components/Launcher/icon-map.js | 46 -
website/components/Navigation.js | 113 -
website/components/Navigation.module.css | 47 -
website/components/PropsTable.js | 58 -
website/components/Search.js | 42 -
website/components/Search.module.css | 63 -
website/components/Tabs.js | 90 -
website/components/Tabs.module.css | 31 -
website/components/Topbar.js | 28 -
website/components/Topbar.module.css | 45 -
website/layouts/Docs.js | 90 -
website/lib/gtag.js | 7 -
website/lib/paths.js | 26 -
website/lib/prism.js | 76 -
website/next.config.js | 16 +
website/package.json | 18 +-
website/pages/[guide].js | 79 -
website/pages/_app.js | 24 -
website/pages/_document.js | 48 -
website/pages/colors.js | 245 --
website/pages/css.js | 111 -
website/pages/design.js | 53 -
website/pages/index.js | 14 -
website/pages/index.module.css | 61 -
website/pages/installation.js | 181 --
website/pages/migration.js | 78 -
website/pages/principles.js | 107 -
website/pages/spacing.js | 190 --
website/pages/support.js | 85 -
website/pages/tooling.js | 103 -
website/pages/welcome.js | 66 -
website/public/static/favicon.ico | Bin 120782 -> 0 bytes
.../public/static/fonts/AbrilText-Bold.woff | Bin 40848 -> 0 bytes
.../public/static/fonts/AbrilText-Bold.woff2 | Bin 32088 -> 0 bytes
website/public/static/images/avatar.png | Bin 135278 -> 0 bytes
website/public/static/images/design-1.png | Bin 334102 -> 0 bytes
.../public/static/images/installation-1.png | Bin 596866 -> 0 bytes
website/public/static/images/support-1.png | Bin 197839 -> 0 bytes
website/public/static/images/support-2.png | Bin 236040 -> 0 bytes
website/public/static/images/support-3.png | Bin 235103 -> 0 bytes
website/public/static/images/tooling-1.png | Bin 310564 -> 0 bytes
website/public/static/images/tooling-2.png | Bin 303951 -> 0 bytes
website/public/static/og.jpg | Bin 253975 -> 0 bytes
website/styles/main.css | 19 -
website/yarn.lock | 2289 ++---------------
54 files changed, 172 insertions(+), 5042 deletions(-)
delete mode 100644 website/components/AccentColorPicker.js
delete mode 100644 website/components/CodeHighlight.js
delete mode 100644 website/components/CodeHighlight.module.css
delete mode 100644 website/components/DocsOverview.js
delete mode 100644 website/components/DocsOverview.module.css
delete mode 100644 website/components/Footer.js
delete mode 100644 website/components/Footer.module.css
delete mode 100644 website/components/Launcher/Launcher.js
delete mode 100644 website/components/Launcher/Launcher.module.css
delete mode 100644 website/components/Launcher/icon-map.js
delete mode 100644 website/components/Navigation.js
delete mode 100644 website/components/Navigation.module.css
delete mode 100644 website/components/PropsTable.js
delete mode 100644 website/components/Search.js
delete mode 100644 website/components/Search.module.css
delete mode 100644 website/components/Tabs.js
delete mode 100644 website/components/Tabs.module.css
delete mode 100644 website/components/Topbar.js
delete mode 100644 website/components/Topbar.module.css
delete mode 100644 website/layouts/Docs.js
delete mode 100644 website/lib/gtag.js
delete mode 100644 website/lib/paths.js
delete mode 100644 website/lib/prism.js
create mode 100644 website/next.config.js
delete mode 100644 website/pages/[guide].js
delete mode 100644 website/pages/_app.js
delete mode 100644 website/pages/_document.js
delete mode 100644 website/pages/colors.js
delete mode 100644 website/pages/css.js
delete mode 100644 website/pages/design.js
delete mode 100644 website/pages/index.js
delete mode 100644 website/pages/index.module.css
delete mode 100644 website/pages/installation.js
delete mode 100644 website/pages/migration.js
delete mode 100644 website/pages/principles.js
delete mode 100644 website/pages/spacing.js
delete mode 100644 website/pages/support.js
delete mode 100644 website/pages/tooling.js
delete mode 100644 website/pages/welcome.js
delete mode 100644 website/public/static/favicon.ico
delete mode 100644 website/public/static/fonts/AbrilText-Bold.woff
delete mode 100644 website/public/static/fonts/AbrilText-Bold.woff2
delete mode 100644 website/public/static/images/avatar.png
delete mode 100644 website/public/static/images/design-1.png
delete mode 100644 website/public/static/images/installation-1.png
delete mode 100644 website/public/static/images/support-1.png
delete mode 100644 website/public/static/images/support-2.png
delete mode 100644 website/public/static/images/support-3.png
delete mode 100644 website/public/static/images/tooling-1.png
delete mode 100644 website/public/static/images/tooling-2.png
delete mode 100644 website/public/static/og.jpg
delete mode 100644 website/styles/main.css
diff --git a/website/components/AccentColorPicker.js b/website/components/AccentColorPicker.js
deleted file mode 100644
index a9782efb..00000000
--- a/website/components/AccentColorPicker.js
+++ /dev/null
@@ -1,41 +0,0 @@
-import { Box, baseColors } from "dracula-ui"
-
-export function AccentColorPicker() {
- return (
-
-
- {Object.keys(baseColors).map((color) => {
- return (
-
- {
- window.document.documentElement.style.setProperty(
- "--accentColor",
- window
- .getComputedStyle(window.document.documentElement)
- .getPropertyValue(`--${color}`)
- )
- }}
- style={{
- width: 12,
- height: 12,
- margin: 3,
- borderRadius: "100%",
- cursor: "pointer"
- }}
- color={color}
- />
-
- )
- })}
-
-
- )
-}
diff --git a/website/components/CodeHighlight.js b/website/components/CodeHighlight.js
deleted file mode 100644
index 7fa10a8b..00000000
--- a/website/components/CodeHighlight.js
+++ /dev/null
@@ -1,124 +0,0 @@
-import Highlight, { defaultProps } from 'prism-react-renderer'
-import React, { Component } from 'react'
-
-import CopyToClipboard from 'clipboard'
-import localStyles from './CodeHighlight.module.css'
-import theme from '../lib/prism'
-
-export default class CodeHighlight extends Component {
- state = { copied: false }
- copyButton = React.createRef()
-
- componentDidMount() {
- new CopyToClipboard(this.copyButton.current, {
- text: () => this.props.code
- })
- }
-
- onCopy = () => {
- this.setState(
- {
- copied: true
- },
- () => {
- setTimeout(() => this.setState({ copied: false }), 1000)
- }
- )
- }
-
- renderButton() {
- const { copied } = this.state
-
- return (
-
- )
- }
-
- render() {
- return (
-
- {({ style, tokens, getLineProps, getTokenProps }) => (
-
-
- {this.renderButton()}
-
- {tokens.map((line, i) => (
-
- {line.map((token, key) => (
-
- ))}
-
- ))}
-
-
-
- )}
-
- )
- }
-}
-
-function Clippy(props) {
- return (
-
-
-
-
- );
-}
-
-function Check(props) {
- return (
-
-
-
- );
-}
\ No newline at end of file
diff --git a/website/components/CodeHighlight.module.css b/website/components/CodeHighlight.module.css
deleted file mode 100644
index 9a8bde6f..00000000
--- a/website/components/CodeHighlight.module.css
+++ /dev/null
@@ -1,52 +0,0 @@
-.copyButtonContainer {
- position: absolute;
- right: 5px;
- top: 5px;
-}
-
-.copyButton {
- appearance: none;
- padding: 8px;
- border: 0;
- border-radius: var(--rounded-md);
- outline: 0;
- cursor: pointer;
- background: #1d1e26;
-}
-
-.copyIcon {
- position: relative;
- height: 16px;
- width: 16px;
-}
-
-.clippy,
-.check {
- position: absolute;
- top: 0;
- left: 0;
- stroke-dasharray: 50;
- transition: all 300ms ease-in-out;
-}
-
-.clippy {
- color: var(--disabled);
-}
-
-.copyButton:hover .clippy {
- color: var(--white);
-}
-
-.check {
- color: var(--green);
-}
-
-.pre {
- padding: 1rem;
- composes: drac-scrollbar-grey drac-text-xs from global;
- border-radius: var(--rounded-md);
- margin: 0;
- font-family: 'Fira Code', monospace;
- line-height: var(--line-height-md);
- overflow: auto;
-}
\ No newline at end of file
diff --git a/website/components/DocsOverview.js b/website/components/DocsOverview.js
deleted file mode 100644
index 2fa7dad0..00000000
--- a/website/components/DocsOverview.js
+++ /dev/null
@@ -1,43 +0,0 @@
-import { Anchor, Box, Text } from 'dracula-ui'
-
-import React from 'react'
-import localStyles from './DocsOverview.module.css'
-
-export function DocsOverview({ sections, showProperties }) {
- return (
-
-
- On this page
-
-
-
- {sections.map((section) => {
- return (
-
-
- {section.title}
-
-
- )
- })}
-
- {showProperties && (
-
-
- Properties
-
-
- )}
-
- )
-}
diff --git a/website/components/DocsOverview.module.css b/website/components/DocsOverview.module.css
deleted file mode 100644
index 18353127..00000000
--- a/website/components/DocsOverview.module.css
+++ /dev/null
@@ -1,18 +0,0 @@
-.docsOverview {
- max-height: 80vh;
- margin: 0;
- position: fixed;
- overflow-y: auto;
- top: 64px;
- right: 80px;
-}
-
-@media (max-width: 76rem){
- .docsOverview{
- width: 100%;
- margin: 3.75rem 0 0 0;
- padding: 0;
- position: relative;
- inset: unset;
- }
-}
\ No newline at end of file
diff --git a/website/components/Footer.js b/website/components/Footer.js
deleted file mode 100644
index 0c4a9fc3..00000000
--- a/website/components/Footer.js
+++ /dev/null
@@ -1,33 +0,0 @@
-import { Component } from "react";
-import styles from "./Footer.module.css";
-
-class Footer extends Component {
- render() {
- return (
-
- );
- }
-}
-
-export default Footer;
diff --git a/website/components/Footer.module.css b/website/components/Footer.module.css
deleted file mode 100644
index a03d1272..00000000
--- a/website/components/Footer.module.css
+++ /dev/null
@@ -1,36 +0,0 @@
-.footer {
- height: 5rem;
- flex-shrink: 0;
- justify-content: center;
- border-top-width: 0.1rem;
- border-top-style: solid;
- composes: drac-border-purple from global;
-}
-
-.credits {
- font-size: 1rem;
- composes: drac-text from global;
- composes: drac-text-white from global;
- text-align: center;
-}
-
-.link {
- color: var(--cyan);
- text-decoration: none;
-}
-
-.love {
- display: inline-block;
- position: relative;
- top: 0.2em;
- font-size: 2.4em;
- color: var(--pink);
- transform: scale(0.9);
- animation: love 0.5s infinite linear alternate-reverse;
-}
-
-@keyframes love {
- to {
- transform: scale(1.1);
- }
-}
diff --git a/website/components/Launcher/Launcher.js b/website/components/Launcher/Launcher.js
deleted file mode 100644
index 046a8528..00000000
--- a/website/components/Launcher/Launcher.js
+++ /dev/null
@@ -1,221 +0,0 @@
-import { Component, createRef } from 'react'
-import Router from 'next/router'
-import { HotKeys } from 'react-hotkeys'
-import styles from './Launcher.module.css'
-import dspComponents from 'dracula-ui/dsp/data/components.json'
-import { Box, Text } from 'dracula-ui'
-import FocusTrap from 'focus-trap-react'
-import Fuse from 'fuse.js'
-import { iconMap } from './icon-map'
-
-class Launcher extends Component {
- constructor(props) {
- super(props)
-
- this.options = dspComponents.entities.map((entity) => {
- return {
- title: entity.name,
- icon: iconMap[entity.name],
- handler: () => Router.push(`/${entity.name.toLowerCase()}`)
- }
- })
-
- this.state = {
- query: '',
- selected: 0,
- filtered: this.options
- }
-
- this.optionRefs = []
- }
-
- componentDidMount() {
- this.fuse = new Fuse(this.options, {
- keys: ['title']
- })
- }
-
- componentDidUpdate(_prevProps, prevState) {
- if (prevState.filtered !== this.state.filtered) {
- this.optionRefs = this.optionRefs.filter((x) => x !== null)
- }
- }
-
- navigate(option) {
- option.handler()
- this.prepareToHideLauncher()
- }
-
- onMouseEnter(index, event) {
- this.setState({ selected: index })
- event.target.focus()
- }
-
- onSearch(e) {
- const query = e.target.value.trim()
-
- this.setState({ query })
-
- if (query.length === 0) {
- this.setState({ filtered: this.options })
- return
- }
-
- let filtered = this.fuse.search(query).map((option) => {
- return option.item
- })
-
- this.setState({ filtered, selected: 0 })
- }
-
- onClickOutsideModal(event) {
- if (this.containerRef.current.contains(event.target)) {
- return
- }
-
- this.prepareToHideLauncher()
- }
-
- onArrowUpPressed() {
- let { selected, filtered } = this.state
-
- selected = selected > 0 ? selected - 1 : filtered.length - 1
- this.setState({ selected })
-
- if (this.optionRefs[selected]) {
- this.optionRefs[selected].focus()
- }
- }
-
- onArrowDownPressed() {
- let { selected, filtered } = this.state
-
- selected = selected < filtered.length - 1 ? selected + 1 : 0
- this.setState({ selected })
-
- if (this.optionRefs[selected]) {
- this.optionRefs[selected].focus()
- }
- }
-
- onEnterPressed() {
- this.navigate(this.state.filtered[this.state.selected])
- }
-
- prepareToHideLauncher() {
- this.setState({
- query: '',
- selected: 0,
- filtered: this.options
- })
-
- this.props.hideLauncher()
- }
-
- renderOptions() {
- return this.state.filtered.map((option, index) => {
- return (
- (this.optionRefs[index] = el)}
- aria-selected={this.state.selected === index}
- tabIndex={this.state.selected === index ? '0' : '-1'}
- onClick={this.navigate.bind(this, option)}
- onMouseEnter={this.onMouseEnter.bind(this, index)}
- className={styles.option}
- >
-
-
-
-
- {option.title}
-
-
-
-
-
-
-
-
- )
- })
- }
-
- renderLauncher() {
- this.containerRef = createRef()
-
- if (this.props.launcherVisible) {
- return (
-
-
-
-
-
-
-
-
-
-
- {this.renderOptions()}
-
-
-
-
- )
- }
- }
-
- render() {
- const keyMap = {
- LAUNCHER_UP: ['up'],
- LAUNCHER_DOWN: ['down'],
- LAUNCHER_ENTER: ['enter']
- }
-
- const handlers = {
- LAUNCHER_UP: this.onArrowUpPressed.bind(this),
- LAUNCHER_DOWN: this.onArrowDownPressed.bind(this),
- LAUNCHER_ENTER: this.onEnterPressed.bind(this)
- }
-
- return (
-
- {this.renderLauncher()}
-
- )
- }
-}
-
-export default Launcher
diff --git a/website/components/Launcher/Launcher.module.css b/website/components/Launcher/Launcher.module.css
deleted file mode 100644
index dd708058..00000000
--- a/website/components/Launcher/Launcher.module.css
+++ /dev/null
@@ -1,97 +0,0 @@
-.background {
- background: rgba(0, 0, 0, .8);
- position: fixed;
- display: flex;
- justify-content: center;
- align-items: center;
- height: 100vh;
- width: 100vw;
- top: 0;
- left: 0;
- z-index: 999;
-}
-
-.container {
- background-color: #15171b;
- border-radius: var(--rounded-xl);
- box-shadow: 0 25px 50px -12px rgb(0 0 0 / 25%);
- position: relative;
- padding: 8px;
- width: 600px;
-}
-
-/* Search */
-
-.search {
- flex: auto;
- display: flex;
- align-items: center;
-}
-
-.input {
- appearance: none;
- border: 0;
- box-sizing: border-box;
- color: white;
- display: block;
- padding: 1rem;
- background: transparent;
- font-size: var(--font-md);
- outline: none;
- font-family: 'Fira Code', monospace;
- width: 100%;
-}
-
-.iconSearch {
- color: white;
- opacity: .5;
- padding-left: 1rem;
-}
-
-/* Options */
-
-.list {
- margin: 0;
- padding: 10px 0 0;
- max-height: 216px;
- overflow-y: scroll;
- border-top: 1px solid rgba(255, 255, 255, .2);
-}
-
-.option {
- display: flex;
- cursor: pointer;
- justify-content: space-between;
- padding-left: 1.0rem;
- padding-right: 1.0rem;
- padding-top: 1rem;
- padding-bottom: 1rem;
- border-radius: var(--rounded-lg);
- outline: none;
- color: gray;
- opacity: .5;
- transition: all .3s ease-in-out;
-}
-
-.option[aria-selected="true"] {
- color: white;
- background: rgba(0, 0, 0, .5);
- opacity: 1;
-}
-
-.optionIcon {
- padding-right: 12px;
-}
-
-.optionTitle {
- display: flex;
- flex-direction: row;
- align-items: center;
-}
-
-.enterIcon {
- width: 16px;
- height: 16px;
- opacity: 0.5;
-}
-
diff --git a/website/components/Launcher/icon-map.js b/website/components/Launcher/icon-map.js
deleted file mode 100644
index 07321b02..00000000
--- a/website/components/Launcher/icon-map.js
+++ /dev/null
@@ -1,46 +0,0 @@
-import * as Dracula from 'dracula-ui'
-import { difference } from 'lodash'
-
-const componentNames = Object.keys(Dracula)
- .filter((name) => {
- const exp = Dracula[name]
- return Boolean(exp['displayName'])
- })
- .sort()
-
-export const iconMap = {
- Anchor: 'box-arrow-up-right',
- Avatar: 'person-circle',
- Badge: 'textarea-resize',
- Box: 'bounding-box-circles',
- Button: 'bootstrap',
- Card: 'card-heading',
- Checkbox: 'ui-checks',
- Divider: 'hr',
- Heading: 'type-h1',
- Input: 'input-cursor-text',
- List: 'list-ul',
- OrderedList: 'list-ol',
- Paragraph: 'card-text',
- Radio: 'ui-radios-grid',
- Select: 'menu-button',
- Spacing: 'grid-1x2',
- Switch: 'toggles',
- Table: 'table',
- Tabs: 'segmented-nav',
- Text: 'type'
-}
-
-if (process.env.NODE_ENV === 'development') {
- const assert = require('assert')
-
- const missing = difference(componentNames, Object.keys(iconMap))
- if (missing.length > 0) {
- console.log('Missing Icons', missing)
- }
-
- assert(
- missing.length === 0,
- 'Every Dracula UI component should have a corresponding Icon'
- )
-}
diff --git a/website/components/Navigation.js b/website/components/Navigation.js
deleted file mode 100644
index b93cf5bf..00000000
--- a/website/components/Navigation.js
+++ /dev/null
@@ -1,113 +0,0 @@
-import { Anchor, Box, List, Text } from 'dracula-ui'
-import { Component } from 'react'
-import Link from 'next/link'
-import dspComponents from 'dracula-ui/dsp/data/components.json'
-import styles from './Navigation.module.css'
-import Topbar from './Topbar'
-
-const pages = dspComponents.entities
- .map((entity) => {
- return entity.name
- })
- .filter((en) => !en.startsWith('.'))
-
-const items = [
- {
- title: 'Getting Started',
- pages: [
- 'Welcome',
- 'Installation',
- 'Principles',
- 'Migration',
- 'Tooling',
- 'Design',
- 'Support',
- 'Spacing',
- 'Colors',
- 'CSS'
- ]
- },
- {
- title: 'Components',
- pages
- },
-]
-
-class Navigation extends Component {
- state = {
- isVisible: true
- }
-
- toggleMenu() {
- this.setState({ isVisible: !this.state.isVisible })
- }
-
- renderNavigation() {
- return items.map((item) => {
- return (
-
-
- {item.title}
-
-
-
- {Object.keys(item.pages).map((index) => {
- const path = `/${item.pages[index].toLowerCase()}`
- if (item.title.includes('Patterns')) {
- return (
-
-
- {item.pages[index]}
-
-
- )
- }
-
- const isSelected = item.pages[index] === this.props.selected
-
- return (
-
-
-
- {item.pages[index]}
-
-
-
- )
- })}
-
-
- )
- })
- }
-
- render() {
- return (
-
-
- {this.renderNavigation()}
-
- )
- }
-}
-
-export default Navigation
diff --git a/website/components/Navigation.module.css b/website/components/Navigation.module.css
deleted file mode 100644
index 1f81d813..00000000
--- a/website/components/Navigation.module.css
+++ /dev/null
@@ -1,47 +0,0 @@
-.nav {
- composes: drac-scrollbar-grey from global;
- background: #15171b;
- height: 100vh;
- min-width: 15rem;
- overflow-y: auto;
- position: fixed;
- z-index: 2;
-}
-
-.navSectionTitle {
- text-transform: uppercase;
- letter-spacing: 1px;
- padding: 12px;
-}
-
-.navSectionList,
-.navSectionListActive, .navSectionPatterns {
- border-radius: var(--rounded-md);
- cursor: pointer;
- display: block;
- padding: 10px;
- text-decoration: none;
-}
-
-.navSectionList {
- color: #8a8f98;
-}
-
-.navSectionPatterns, .navSectionPatterns:hover {
- color: #8a8f989d;
- cursor: default;
-}
-
-.navSectionListActive,
-.navSectionListActive:hover {
- color: var(--purple);
- background: var(--purple-transparent);
-}
-
-@media (max-width: 76rem) {
- .nav {
- position: relative;
- height: auto;
- min-width: 100%;
- }
-}
diff --git a/website/components/PropsTable.js b/website/components/PropsTable.js
deleted file mode 100644
index 197412f3..00000000
--- a/website/components/PropsTable.js
+++ /dev/null
@@ -1,58 +0,0 @@
-import React from "react"
-import { Box, Paragraph, Text } from "dracula-ui"
-
-const spacingProps = [
- "p",
- "py",
- "px",
- "pb",
- "pt",
- "pl",
- "pr",
- "m",
- "my",
- "mx",
- "mb",
- "mt",
- "ml",
- "mr"
-]
-
-const PropsTable = ({ props }) => {
- const propList = Object.values(props)
- const ownProps = propList.filter((p) => !spacingProps.includes(p.name))
-
- return (
- <>
- {ownProps.map((prop) => (
-
-
-
- {prop.name}
-
-
- {" "}
- {prop.required ? "(required)" : ""}
-
-
-
-
-
- {prop.description}
-
-
-
-
-
- {prop.type.name
- .replace("| undefined", "")
- .replace("undefined", "")}
-
-
-
- ))}
- >
- )
-}
-
-export default PropsTable
diff --git a/website/components/Search.js b/website/components/Search.js
deleted file mode 100644
index 108590ea..00000000
--- a/website/components/Search.js
+++ /dev/null
@@ -1,42 +0,0 @@
-import { Component } from "react"
-import { Box } from "dracula-ui"
-import styles from "./Search.module.css"
-
-class Search extends Component {
- renderShortcut() {
- if (global.navigator.platform.indexOf('Mac') > -1) {
- return
- ⌘
- K
-
- }
- else if (global.navigator.platform.indexOf('Win') > -1) {
- return
- Ctrl
- K
-
- }
-
- return
- }
-
- render() {
- const label = 'Quick search the docs'
-
- return
-
-
- {label}
- {this.renderShortcut()}
-
-
- }
-}
-
-export default Search
diff --git a/website/components/Search.module.css b/website/components/Search.module.css
deleted file mode 100644
index 0192dd3e..00000000
--- a/website/components/Search.module.css
+++ /dev/null
@@ -1,63 +0,0 @@
-.container {
- background: #1d1e26;
- position: fixed;
- top: 0;
- z-index: 1;
-}
-
-.button {
- transition: all .3s ease-in-out;
- appearance: none;
- border: 0;
- box-sizing: border-box;
- font-family: 'Fira Code', monospace;
- border-bottom: 1px solid var(--disabled);
- background: transparent;
- color: var(--disabled);
- cursor: pointer;
- display: block;
- font-size: var(--font-lg);
- padding-top: 1rem;
- padding-bottom: 1rem;
- outline: none;
- text-align: left;
- width: 46rem;
-}
-
-.button:hover {
- color: var(--white);
- border-color: var(--white);
-}
-
-.button:hover .shortcut {
- border-color: var(--white);
-}
-
-.searchIcon {
- composes: bi-search from global;
- padding-right: 1rem;
- position: relative;
- font-size: 18px;
- top: 2px;
-}
-
-.shortcut {
- border: 1px solid var(--disabled);
- display: inline;
- margin-left: 1rem;
- padding: 2px 4px;
- border-radius: var(--rounded-md);
- font-size: var(--font-md);
- transition: border .3s ease-in-out;
-}
-
-.shortcut kbd {
- padding: 0 2px;
- font-family: sans-serif;
-}
-
-@media (max-width: 76rem) {
- .button {
- display: none;
- }
-}
\ No newline at end of file
diff --git a/website/components/Tabs.js b/website/components/Tabs.js
deleted file mode 100644
index 96a53960..00000000
--- a/website/components/Tabs.js
+++ /dev/null
@@ -1,90 +0,0 @@
-import { Component } from "react"
-import styles from "./Tabs.module.css"
-import CodeHighlight from "./CodeHighlight"
-import { Box, Tabs } from "dracula-ui"
-
-class DocsTabs extends Component {
- constructor(props) {
- super(props)
-
- this.state = {
- options: [
- { label: "Preview", panel: this.props.section.html },
- { label: "HTML", panel: this.props.section.html },
- { label: "React", panel: this.props.section.react }
- ],
- selectedTab: 0
- }
- }
-
- onChangeSelectedTab(index) {
- this.setState({ selectedTab: index })
- }
-
- renderLabels() {
- return this.state.options.map((option, index) => {
- return (
-
- this.onChangeSelectedTab(index)}
- >
- {option.label}
-
-
- )
- })
- }
-
- renderPanels() {
- return this.state.options.map((option, index) => {
- return (
-
- {this.renderPanel(index, option)}
-
- )
- })
- }
-
- renderPanel(index, option) {
- if (index === 0) {
- return (
-
- )
- } else if (index === 1) {
- return
- } else if (index === 2) {
- return
- }
- }
-
- render() {
- return (
-
-
- {this.renderLabels()}
-
-
- {this.renderPanels()}
-
-
- )
- }
-}
-
-export default DocsTabs
diff --git a/website/components/Tabs.module.css b/website/components/Tabs.module.css
deleted file mode 100644
index b5a1bde8..00000000
--- a/website/components/Tabs.module.css
+++ /dev/null
@@ -1,31 +0,0 @@
-.tab {
- cursor: pointer;
- composes: drac-tab from global;
-}
-
-.tabActive {
- cursor: pointer;
- composes: drac-tab from global;
- composes: drac-tab-active from global;
-}
-
-.tabPanel {
- display: none;
-}
-
-.tabPanelActive {
- display: block;
-}
-
-.usage {
- padding: 2rem;
-}
-
-.usage,
-.codeContainer {
- composes: drac-scrollbar-grey from global;
- background: #282a36;
- border-radius: var(--rounded-md);
- max-height: 300px;
- overflow: auto;
-}
\ No newline at end of file
diff --git a/website/components/Topbar.js b/website/components/Topbar.js
deleted file mode 100644
index fe714d58..00000000
--- a/website/components/Topbar.js
+++ /dev/null
@@ -1,28 +0,0 @@
-import { Box, Button, Text, Anchor } from "dracula-ui"
-import { Component } from "react"
-import Link from "next/link"
-import styles from "./Topbar.module.css"
-import { AccentColorPicker } from "./AccentColorPicker"
-
-class Topbar extends Component {
- render() {
- return
-
-
- Dracula
- UI
-
-
-
-
-
-
-
- this.props.toggleMenu()}>
-
-
-
- }
-}
-
-export default Topbar
diff --git a/website/components/Topbar.module.css b/website/components/Topbar.module.css
deleted file mode 100644
index 2f0bb61c..00000000
--- a/website/components/Topbar.module.css
+++ /dev/null
@@ -1,45 +0,0 @@
-.topbar {
- display: flex;
- flex-direction: column;
- margin-left: 12px;
-}
-
-.title {
- text-decoration: none;
-}
-
-.text {
- font-size: 25px;
- font-weight: 700;
- font-family: "Abril Text";
-}
-
-.menu {
- display: none;
- position: absolute;
- right: 20px;
- width: 30px;
- height: 30px;
- background: none;
- border: none;
- padding: 0;
-}
-
-.menuPrimary {
- background: var(--purple-transparent);
- border-radius: var(--rounded-md);
-}
-
-.menuSecondary {
- fill: var(--purple);
-}
-
-@media (max-width: 76rem) {
- .menu {
- display: block;
- }
-
- .colors {
- display: none;
- }
-}
\ No newline at end of file
diff --git a/website/layouts/Docs.js b/website/layouts/Docs.js
deleted file mode 100644
index 14516ea7..00000000
--- a/website/layouts/Docs.js
+++ /dev/null
@@ -1,90 +0,0 @@
-import { Component } from 'react'
-import Head from 'next/head'
-import { Box, Heading, Paragraph } from 'dracula-ui'
-import Navigation from '../components/Navigation'
-import styles from '../pages/index.module.css'
-
-import { GlobalHotKeys, configure } from 'react-hotkeys'
-import Launcher from '../components/Launcher/Launcher'
-
-import dynamic from 'next/dynamic'
-const Search = dynamic(() => import('../components/Search'), { ssr: false })
-
-configure({
- ignoreTags: []
-})
-
-class Docs extends Component {
- constructor(props) {
- super(props)
-
- this.state = {
- launcherVisible: false
- }
- }
-
- showLauncher(event) {
- event.preventDefault()
- this.setState({ launcherVisible: true }, () => {
- document.body.style.overflow = 'hidden'
- })
- }
-
- hideLauncher() {
- this.setState({ launcherVisible: false }, () => {
- document.body.style.overflow = 'unset'
- })
- }
-
- render() {
- const { title, description } = this.props.children.props.query
- const pageTitle = `${title} — Dracula UI`
-
- const keyMap = {
- SHOW_LAUNCHER: ['ctrl+k', 'command+k'],
- HIDE_LAUNCHER: 'esc'
- }
-
- const handlers = {
- SHOW_LAUNCHER: this.showLauncher.bind(this),
- HIDE_LAUNCHER: this.hideLauncher.bind(this)
- }
-
- return (
-
-
- {pageTitle}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {title}
-
-
- {description}
-
-
- {this.props.children}
-
-
-
-
- )
- }
-}
-
-export default Docs
diff --git a/website/lib/gtag.js b/website/lib/gtag.js
deleted file mode 100644
index 112adadb..00000000
--- a/website/lib/gtag.js
+++ /dev/null
@@ -1,7 +0,0 @@
-export const GA_TRACKING_ID = "UA-4114546-51";
-
-export const pageview = (url) => {
- window.gtag("config", GA_TRACKING_ID, {
- page_path: url,
- });
-};
diff --git a/website/lib/paths.js b/website/lib/paths.js
deleted file mode 100644
index a4798f45..00000000
--- a/website/lib/paths.js
+++ /dev/null
@@ -1,26 +0,0 @@
-import dspComponents from 'dracula-ui/dsp/data/components.json'
-
-const paths = dspComponents.entities
- .filter((entity) => !['Spacing', 'Colors'].includes(entity.name))
- .filter((en) => !en.name.startsWith('.'))
- .map((entity) => {
- return {
- params: {
- guide: entity.name.toLowerCase(),
- title: entity.name,
- description: entity.description,
- docgen: entity.ext_com_draculaui_docgen,
- sections: Object.values(entity.ext_com_draculaui_variations).map(
- (example) => {
- return {
- ...example,
- code: example.html,
- description: example.docs
- }
- }
- )
- }
- }
- })
-
-module.exports = paths
diff --git a/website/lib/prism.js b/website/lib/prism.js
deleted file mode 100644
index eea9d767..00000000
--- a/website/lib/prism.js
+++ /dev/null
@@ -1,76 +0,0 @@
-/**
- * Built on top of the original theme
- *
- * https://github.com/FormidableLabs/prism-react-renderer/blob/master/src/themes/dracula.js
- */
-
-const theme = {
- plain: {
- color: "#F8F8F2",
- backgroundColor: "#282a36",
- },
- styles: [
- {
- types: ["prolog", "constant", "builtin"],
- style: {
- color: "hsl(250, 100%, 75%)",
- },
- },
- {
- types: ["inserted", "function"],
- style: {
- color: "hsl(115, 100%, 75%)",
- },
- },
- {
- types: ["deleted"],
- style: {
- color: "hsl(10, 100%, 75%)",
- },
- },
- {
- types: ["changed"],
- style: {
- color: "hsl(35, 100%, 75%)",
- },
- },
- {
- types: ["punctuation", "symbol"],
- style: {
- color: "rgb(248, 248, 242)",
- },
- },
- {
- types: ["string", "char", "selector", "attr-value"],
- style: {
- color: "hsl(60, 100%, 75%)",
- },
- },
- {
- types: ["keyword", "variable", "tag"],
- style: {
- color: "hsl(330, 100%, 75%)",
- },
- },
- {
- types: ["comment"],
- style: {
- color: "hsl(250, 25%, 55%)",
- },
- },
- {
- types: ["attr-name"],
- style: {
- color: "hsl(115, 100%, 75%)",
- },
- },
- {
- types: ["atrule"],
- style: {
- color: "hsl(170, 100%, 75%)",
- },
- },
- ],
-};
-
-export default theme;
\ No newline at end of file
diff --git a/website/next.config.js b/website/next.config.js
new file mode 100644
index 00000000..4adc5029
--- /dev/null
+++ b/website/next.config.js
@@ -0,0 +1,16 @@
+module.exports = {
+ async redirects() {
+ return [
+ {
+ source: '/',
+ destination: 'https://draculatheme.com/blog/sunsetting-dracula-ui',
+ permanent: true,
+ },
+ {
+ source: '/:any',
+ destination: 'https://draculatheme.com/blog/sunsetting-dracula-ui',
+ permanent: true,
+ },
+ ]
+ },
+}
\ No newline at end of file
diff --git a/website/package.json b/website/package.json
index 7ef6768a..cab4eb6d 100644
--- a/website/package.json
+++ b/website/package.json
@@ -2,26 +2,14 @@
"name": "website",
"version": "1.0.0",
"description": "Dracula UI site",
- "engines": {
- "node": ">=10 <17.0.0"
- },
"scripts": {
"dev": "next dev"
},
"author": "Netto Farah & Zeno Rocha",
"dependencies": {
- "bootstrap-icons": "^1.4.1",
- "clipboard": "^2.0.8",
- "dracula-ui": "file:../dist",
- "focus-trap-react": "^8.5.0",
- "fuse.js": "^6.4.6",
- "globby": "^11.0.2",
- "lodash": "^4.17.21",
- "next": "^10.2.0",
- "prism-react-renderer": "^1.2.0",
- "react": "^17.0.1",
- "react-dom": "^17.0.1",
- "react-hotkeys": "^2.0.0"
+ "next": "^14.0.0",
+ "react": "^18.2.0",
+ "react-dom": "^18.2.0"
},
"license": "SEE LICENSE IN LICENSE.md",
"prettier": {
diff --git a/website/pages/[guide].js b/website/pages/[guide].js
deleted file mode 100644
index 71feabfc..00000000
--- a/website/pages/[guide].js
+++ /dev/null
@@ -1,79 +0,0 @@
-import React from 'react'
-import { Anchor, Box, Heading, Paragraph } from 'dracula-ui'
-import { DocsOverview } from '../components/DocsOverview'
-import PropsTable from '../components/PropsTable'
-import Tabs from '../components/Tabs'
-import Docs from '../layouts/Docs'
-import paths from '../lib/paths'
-
-export async function getStaticPaths() {
- return { paths, fallback: false }
-}
-
-export async function getStaticProps({ params }) {
- const query = paths.find((path) => path.params.guide === params.guide).params
- return { props: { query } }
-}
-
-function Properties({ docGenProps }) {
- return (
- <>
-
-
- Properties
-
-
-
-
- >
- )
-}
-
-function Section({ section }) {
- return (
-
-
-
- {section.title}
-
-
-
- {section.description && (
- {section.description}
- )}
-
-
-
- )
-}
-
-function Guide({ query }) {
- const { title, sections, docgen } = query
-
- return (
-
-
-
-
- {sections.map((section) => {
- return (
-
-
-
- )
- })}
-
-
-
-
-
-
- )
-}
-
-Guide.Layout = Docs
-
-export default Guide
diff --git a/website/pages/_app.js b/website/pages/_app.js
deleted file mode 100644
index 3840f659..00000000
--- a/website/pages/_app.js
+++ /dev/null
@@ -1,24 +0,0 @@
-import App from "next/app"
-import Router from "next/router"
-import * as gtag from "../lib/gtag"
-
-Router.events.on("routeChangeComplete", (url) => gtag.pageview(url))
-
-import '../styles/main.css';
-import 'dracula-ui/styles/dracula-ui.css'
-import 'bootstrap-icons/font/bootstrap-icons.css'
-
-const Noop = ({ children }) => children
-
-export default class MyApp extends App {
- render() {
- const { Component, pageProps } = this.props
- const Layout = Component.Layout || Noop
-
- return (
-
-
-
- )
- }
-}
diff --git a/website/pages/_document.js b/website/pages/_document.js
deleted file mode 100644
index 1cce2299..00000000
--- a/website/pages/_document.js
+++ /dev/null
@@ -1,48 +0,0 @@
-import Document, { Head, Html, Main, NextScript } from "next/document";
-
-import { GA_TRACKING_ID } from "../lib/gtag";
-import React from "react";
-
-export default class extends Document {
- static async getInitialProps(ctx) {
- const initialProps = await Document.getInitialProps(ctx);
- return { ...initialProps };
- }
-
- render() {
- return (
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- )
- }
-}
diff --git a/website/pages/colors.js b/website/pages/colors.js
deleted file mode 100644
index 4ecc6fd5..00000000
--- a/website/pages/colors.js
+++ /dev/null
@@ -1,245 +0,0 @@
-import { omit } from "lodash"
-import React from "react"
-import {
- baseColors,
- borderColors,
- Box,
- colorUtilities,
- gradientColors,
- Heading,
- Paragraph,
- Table,
- Text,
- textColors
-} from "dracula-ui"
-import styles from "./index.module.css"
-import Docs from "../layouts/Docs"
-
-export async function getStaticProps() {
- return {
- props: {
- query: {
- title: "Colors",
- description: "Learn how to use the Dracula UI color system."
- }
- }
- }
-}
-
-class Colors extends React.Component {
- render() {
- return (
-
-
-
- Color System
-
-
- Dracula UI ships with a handcrafted color system that helps
- you design apps and websites that are pleasing and easy on
- the eyes.
-
-
-
- The color system includes a variety of CSS classes,
- utilities, and properties that can be used to manage the
- main accent color, as well as override the colors of
- specific components and text.
-
-
-
-
- Base / Accent Colors
-
- Base colors are the elemental colors derived from the
- Dracula color palette. The entire palette was tested against
- the WCAG 2.0 level AA spec, which requires a contrast ratio
- of at least 4.5:1 for normal text, therefore affording the
- best readability.
-
-
- {Object.keys(baseColors).map((color) => {
- return (
-
-
- .{textColors[color]}
-
-
-
- .{baseColors[color]}
-
-
-
-
- .{borderColors[color]}
-
-
-
- )
- })}
-
-
-
-
- Gradients
-
- Gradients can be used to add a more playful tone to your
- application, and can be very aesthetically pleasing when
- used in moderation.
-
-
-
- {Object.keys(omit(gradientColors, "animated")).map(
- (color) => {
- return (
-
-
- .{textColors[color]}
-
-
- .{gradientColors[color]}
-
-
-
-
- )
- }
- )}
-
-
-
-
-
- Color Animations (Experimental)
-
-
-
- The animated color takes gradients one step further by
- alternating gradient colors in an infinite loop.
-
-
-
-
-
- .{gradientColors["animated"]}
-
-
-
-
-
-
-
- Conveying Hiearchy with Colors
-
-
-
- Conveying hierarchy is one of the most challenging problems
- when designing for Dark Mode. Dracula UI helps solve for it
- by providing transparent and secondary colors.
-
-
-
-
- .drac-black-secondary
-
-
-
-
-
- .drac-bg-green-secondary
-
-
-
-
-
- .drac-bg-pink-secondary
-
-
-
-
-
- .drac-bg-green-transparent
-
-
-
-
-
-
- Utility Classes and Properties
-
-
- Here's a full list of all CSS classes and React properties.
-
-
-
-
-
-
-
- Color
-
-
-
-
- {colorUtilities.classes.map((color) => {
- return (
-
-
- .{color}
-
-
- )
- })}
-
-
-
-
-
- )
- }
-}
-
-Colors.Layout = Docs
-
-export default Colors
diff --git a/website/pages/css.js b/website/pages/css.js
deleted file mode 100644
index e5ffcee9..00000000
--- a/website/pages/css.js
+++ /dev/null
@@ -1,111 +0,0 @@
-import {
- Anchor,
- Box,
- Heading,
- Paragraph,
- spacingUtilities,
- Table,
- Text
-} from 'dracula-ui'
-import classes from 'dracula-ui/dsp/data/css.json'
-import { groupBy } from 'lodash'
-import React from 'react'
-import { DocsOverview } from '../components/DocsOverview'
-import Docs from '../layouts/Docs'
-import styles from './index.module.css'
-
-const classGroup = groupBy(classes.entities, (entity) => {
- const noDot = entity.name.replace('.', '')
- const [prefix, second, ..._rest] = entity.name.split('-')
-
- if (spacingUtilities.classes.margin.includes(noDot)) {
- return `${prefix}-m`
- }
-
- if (spacingUtilities.classes.padding.includes(noDot)) {
- return `${prefix}-p`
- }
-
- return `${prefix}-${second}`
-})
-
-export async function getStaticProps() {
- return {
- props: {
- query: {
- title: 'CSS',
- description: 'Learn how to use specific Dracula UI CSS Classes.'
- }
- }
- }
-}
-
-class CSS extends React.Component {
- render() {
- return (
-
- ({
- title: group
- }))}
- />
-
-
-
- CSS Classes Index
-
-
- Dracula UI ships with abstracted Components and Patterns that can be
- used for some of the most common web experiences out of the box.
-
-
-
- However, we understand that some engineers might want use specific
- CSS classes in order to customize their websites. The following
- table contains an index with all Dracula UI CSS classes.
-
-
-
-
- Feel free to mix and match whatever styling strategy makes sense for
- your project.
-
-
- {Object.keys(classGroup).map((group) => {
- const [_prefix, component] = group.split('-')
-
- return (
-
-
-
- {component}
-
-
-
-
-
- {classGroup[group].map((clz) => {
- return (
-
-
- {clz.name}
-
-
- )
- })}
-
-
-
- )
- })}
-
- )
- }
-}
-
-CSS.Layout = Docs
-
-export default CSS
diff --git a/website/pages/design.js b/website/pages/design.js
deleted file mode 100644
index 79241c8a..00000000
--- a/website/pages/design.js
+++ /dev/null
@@ -1,53 +0,0 @@
-import { Anchor, Box, Heading, Paragraph } from 'dracula-ui'
-
-import Docs from '../layouts/Docs'
-import React from 'react'
-import styles from './index.module.css'
-
-export async function getStaticProps() {
- return {
- props: {
- query: {
- title: 'Design',
- description: 'How to use Dracula UI on Figma.'
- }
- }
- }
-}
-
-class Design extends React.Component {
- render() {
- return (
-
-
-
- Using Figma
-
-
- To facilitate the communication between designers and developers, we
- decided to build all Dracula UI components on Figma.
-
-
- You can find the .fig
file inside the{' '}
-
- design
- {' '}
- folder.
-
-
-
-
- )
- }
-}
-
-Design.Layout = Docs
-
-export default Design
diff --git a/website/pages/index.js b/website/pages/index.js
deleted file mode 100644
index a6f9f5e7..00000000
--- a/website/pages/index.js
+++ /dev/null
@@ -1,14 +0,0 @@
-import Welcome from "./welcome"
-
-export async function getStaticProps() {
- return {
- props: {
- query: {
- title: "Welcome",
- description: "Dracula UI is a dark-first collection of UI patterns and components."
- }
- }
- }
-}
-
-export default Welcome
diff --git a/website/pages/index.module.css b/website/pages/index.module.css
deleted file mode 100644
index a2ab88b5..00000000
--- a/website/pages/index.module.css
+++ /dev/null
@@ -1,61 +0,0 @@
-.container {
- display: flex;
- min-height: 100vh;
-}
-
-.wrapper {
- display: flex;
- flex-direction: column;
- width: 100%;
- min-height: calc(100vh - 4rem);
-}
-
-.content {
- display: flex;
- flex: 1 0 auto;
- padding: var(--spacing-32);
-}
-
-.center {
- margin: 0 auto;
- max-width: 46rem;
- padding: 0 2.4rem;
-}
-
-.description {
- color: #8a8f98;
-}
-
-.usage {
- background-color: #282a36;
-}
-
-.banner {
- max-width: 100%;
- border-radius: var(--rounded-md);
-}
-
-.image {
- max-width: 100%;
- margin: 0 -30px;
-}
-
-@media (max-width: 76rem) {
- .container {
- display: block;
- min-height: auto;
- }
-
- .content {
- display: block;
- padding: 8rem 0 2rem 0;
- }
-
- .center {
- max-width: none;
- }
-
- .toc {
- display: none;
- }
-}
diff --git a/website/pages/installation.js b/website/pages/installation.js
deleted file mode 100644
index 47a37c83..00000000
--- a/website/pages/installation.js
+++ /dev/null
@@ -1,181 +0,0 @@
-import React from "react"
-import { Anchor, Box, Heading, Paragraph } from "dracula-ui"
-import CodeHighlight from "../components/CodeHighlight"
-import styles from "./index.module.css"
-import Docs from "../layouts/Docs"
-
-export async function getStaticProps() {
- return {
- props: {
- query: {
- title: "Installation",
- description: "How to install and set up Dracula UI in your project."
- }
- }
- }
-}
-
-class Installation extends React.Component {
- render() {
- return (
-
-
- Installing the package
-
- Inside your project directory, install Dracula UI by running
- either of the following:
-
-
-
-
- Using with HTML
-
- You can use Dracula UI with plain HTML by importing the CSS
- file.
-
- `}
- />
-
- Or by importing it on your main JavaScript file (when using a tool
- like
-
- Vite
-
- , for example).
-
-
-
- You can also import Dracula UI via npm's
-
- unpkg CDN
-
- :
-
- `}
- />
-
- Now you can take advantage of all the classes, for example:
-
- Hello Vampire
`}
- />
-
- See full example
-
-
-
- Using with React
-
- You can also use Dracula UI with React by importing the JS
- package.
-
- Hello Vampire
-}
-
-export default App;
-`}
- />
-
- See full example
-
-
-
- Using with Next.js
-
- First, you need to import the CSS globally.
-
-
- Go to pages/_app.js
(or create this file if it
- doesn't exist yet) and add the CSS import:
-
-
-}
-
-export default MyApp`}
- />
-
- Then you can import and use Dracula UI's React components as
- expected.
-
- Hello Vampire
- }
-}
-
-export default Index`}
- />
-
- See full example
-
-
-
- Using with Jekyll
-
- Go to _config.yml
and include the node_modules
folder:
-
-
-
- Create a Sass file at assets/css/styles.scss
with the following content:
-
-
-
- The empty front matter at the top tells Jekyll it needs to process the Dracula UI file.
-
-
- Finally, include the compiled CSS file into your _layouts
.
-
- `}
- />
-
- See full example
-
-
-
- )
- }
-}
-
-Installation.Layout = Docs
-
-export default Installation
diff --git a/website/pages/migration.js b/website/pages/migration.js
deleted file mode 100644
index 1a549133..00000000
--- a/website/pages/migration.js
+++ /dev/null
@@ -1,78 +0,0 @@
-import React from "react"
-import { Box, Heading, Paragraph } from "dracula-ui"
-import CodeHighlight from "../components/CodeHighlight"
-import Docs from "../layouts/Docs"
-
-export async function getStaticProps() {
- return {
- props: {
- query: {
- title: "Migration",
- description: "How to migrate from the private package to the public package."
- }
- }
- }
-}
-
-class Migration extends React.Component {
- render() {
- return (
-
-
- Background
-
- When Dracula UI was first released as an early access project, it was hosted on GitHub's registry as a private package.
-
-
- This was a great way to get the project out there and get feedback from the community. However, it was not a great way to distribute the package since it required authentication to install.
-
-
- Here's how to migrate from the private package to the public package.
-
-
-
- 1. Remove .npmrc
-
- If you have a .npmrc file in your project, remove it. This file is no longer needed.
-
-
-
-
- 2. Update package.json
-
- Update your local package.json file to use the new package name which is dracula-ui instead of @dracula/dracula-ui .
-
-
- You'll also have to bump the version to 1.0.0 which only contains the package rename and no breaking changes.
-
-
-
-
- 3. Rename imports
-
- Find and replace all instances of @dracula/dracula-ui with dracula-ui .
-
-
-
-
- )
- }
-}
-
-Migration.Layout = Docs
-
-export default Migration
diff --git a/website/pages/principles.js b/website/pages/principles.js
deleted file mode 100644
index b30c65b1..00000000
--- a/website/pages/principles.js
+++ /dev/null
@@ -1,107 +0,0 @@
-import React from "react"
-import { Box, Heading, Paragraph } from "dracula-ui"
-import Docs from "../layouts/Docs"
-
-export async function getStaticProps() {
- return {
- props: {
- query: {
- title: "Principles",
- description:
- "Here are a set of principles in which we're creating Dracula UI."
- }
- }
- }
-}
-
-class Principles extends React.Component {
- render() {
- return (
-
-
- Why
-
- Our mission is to unleash the creative potential in every
- developer. We do that by providing modular components that
- can be used to build modern sites faster.
-
-
-
-
- Built for Dark Mode
-
-
- Most templates are built using light colors and later on
- adapted to dark colors. Dark themes shouldn't be an
- afterthought, they should be a top priority.
-
-
-
-
- Designer Friendly
-
-
- Speed up the prototyping phase by using a highly
- configurable Design System. Collaborate easily by taking
- advantage of a carefully crafted Figma file.
-
-
-
-
- Great Developer Experience
-
-
- Don't worry about class names, just use the Visual Studio
- Code code snippets. You can take advantage of autocomplete
- and also access the entire documentation right from your
- code editor.
-
-
-
-
- Enhanced Accessibility
-
-
- All accent colors are tested not only against the WCAG 2.1
- Level AA spec, but also WCAG Level AAA, which requires a
- contrast ratio of at least 7:1. This gives you the best
- readability possible.
-
-
-
-
- Aesthetically Pleasing
-
-
- Gradients are a surprisingly versatile tool. They can
- introduce depth and dimension to your app. By using one of
- our well-designed gradients, you can subconsciously lead
- users toward the focal point.
-
-
-
-
- Appealing Typography
-
-
- Good legibility is crucial to make sure the users can do
- their job well and with as little fatigue as possible. You
- can choose between different monospaced, serif, and
- sans-serif fonts.
-
-
-
-
- We live in a portable world, so why user interfaces should
- be any different? We are starting small, but we believe that
- Dracula UI should be available everywhere.
-
-
-
- )
- }
-}
-
-Principles.Layout = Docs
-
-export default Principles
diff --git a/website/pages/spacing.js b/website/pages/spacing.js
deleted file mode 100644
index 41b4533f..00000000
--- a/website/pages/spacing.js
+++ /dev/null
@@ -1,190 +0,0 @@
-import React from "react"
-import {
- Box,
- Heading,
- Paragraph,
- spacingUtilities,
- Table,
- Text
-} from "dracula-ui"
-import Tabs from "../components/Tabs"
-import styles from "./index.module.css"
-import Docs from "../layouts/Docs"
-
-export async function getStaticProps() {
- return {
- props: {
- query: {
- title: "Spacing",
- description:
- "Learn how to use our spacing helpers to make margin and padding management easier."
- }
- }
- }
-}
-
-class Spacing extends React.Component {
- render() {
- return (
-
-
-
- Spacing Utilities
-
-
- Dracula UI ships with two spacing utilities that help you define
- padding and margin for your websites and apps. While not required,
- the utility css classes and the{" "}
-
- p
- {" "}
- and{" "}
-
- m
- {" "}
- properties (for React components), help remove the burden of having
- to manage your own spacing classes, properties and variables.
-
-
-
-
-
- Padding
-
-
- The padding css utility classes and{" "}
-
- p
- {" "}
- React property can help manage padding for your components and html
- elements.
-
-
- \n \n Padding \n
\n\n',
- react:
- '\n \n Padding \n \n ;\n',
- docs: "",
- screenshot: "./dsp/assets/Spacing.png"
- }}
- />
-
-
- Add the{" "}
-
- p
- {" "}
- property at the top level of any Dracula UI react component for easy
- and type safe padding management. For HTML only websites, apply the{" "}
-
- .drac-p
- {" "}
- css utilty classes directly into your code.
-
-
- \n \n \n \n \n
\n mixing all styles \n
\n
\n\n',
- react:
- '\n \n \n padding sm \n \n \n \n \n padding y sm \n \n \n \n \n padding x sm \n \n \n \n \n mixing all styles \n \n \n ;\n',
- docs: "",
- screenshot: "./dsp/assets/SpacingPadding.png"
- }}
- />
-
-
-
-
- Margin
-
-
- Similar to the padding helpers, the margin css utility classes and{" "}
-
- m
- {" "}
- React property can help manage margin for your components and html
- elements.
-
-
- \n \n \n \n \n
\n mixing all styles \n
\n
\n\n',
- react:
- '\n \n \n margin sm \n \n \n \n \n margin y sm \n \n \n \n \n margin x sm \n \n \n \n \n mixing all styles \n \n \n ;\n',
- docs: "",
- screenshot: "./dsp/assets/SpacingMargin.png"
- }}
- />
-
-
-
-
- Utility Classes and Properties
-
-
- Here's a full list of all CSS classes and React properties.
-
-
-
-
-
-
-
- Padding
-
-
- Margin
-
-
-
-
- {spacingUtilities.classes.padding.map((_, index) => {
- return (
-
-
-
- .{spacingUtilities.classes.padding[index]}
-
-
-
-
- .{spacingUtilities.classes.margin[index]}
-
-
-
- )
- })}
-
-
-
-
-
-
- Styling with regular CSS
-
-
-
- Regular styling with CSS, inline styles, and custom classes are still,
- for the cases where the Dracula UI spacing system can't cater to your
- needs.
-
-
-
- Feel free to mix and match whatever styling strategy makes sense for
- your project.
-
-
- )
- }
-}
-
-Spacing.Layout = Docs
-
-export default Spacing
diff --git a/website/pages/support.js b/website/pages/support.js
deleted file mode 100644
index 3e520122..00000000
--- a/website/pages/support.js
+++ /dev/null
@@ -1,85 +0,0 @@
-import React from "react"
-import { Anchor, Box, Heading, Paragraph } from "dracula-ui"
-import styles from "./index.module.css"
-import Docs from "../layouts/Docs"
-
-export async function getStaticProps() {
- return {
- props: {
- query: {
- title: "Support",
- description: "Need help? Have an idea? Found a bug?"
- }
- }
- }
-}
-
-class Support extends React.Component {
- render() {
- return (
-
-
- Questions
-
- Join us on{" "}
-
- Discord
- {" "}
- to discuss anything about Dracula UI.
-
-
-
-
- Ideas
-
- You can suggest new component ideas using{" "}
-
- GitHub Discussions
-
- .
-
-
-
-
- Bugs
-
- If you find a problem, feel free to open new{" "}
-
- GitHub Issues
-
- .
-
-
-
-
- )
- }
-}
-
-Support.Layout = Docs
-
-export default Support
diff --git a/website/pages/tooling.js b/website/pages/tooling.js
deleted file mode 100644
index 25fa3344..00000000
--- a/website/pages/tooling.js
+++ /dev/null
@@ -1,103 +0,0 @@
-import React from "react"
-import { Anchor, Box, Heading, OrderedList, Paragraph } from "dracula-ui"
-import styles from "./index.module.css"
-import Docs from "../layouts/Docs"
-
-export async function getStaticProps() {
- return {
- props: {
- query: {
- title: "Tooling",
- description:
- "How to improve the developer experience in Visual Studio Code."
- }
- }
- }
-}
-
-class Tooling extends React.Component {
- render() {
- return (
-
-
- Built-in Documentation
-
- We partnered with{" "}
-
- Adobe
- {" "}
- to create a new way of reading and consuming documentation
- without ever leaving the code editor. This new format is
- called{" "}
-
- Design System Package (DSP)
- {" "}
- and it's open source. Here's a preview:
-
-
-
- If you want to see the Dracula UI documentation inside
- Visual Studio Code, follow these steps:
-
-
-
- Install the{" "}
-
- Adobe XD extension
- {" "}
- on VSCode
-
-
- Click on the "XD" button on the bottom right corner
-
-
- Click on the "Load Package" option
-
-
- Select the node_modules/dracula-ui/dsp
folder
-
-
- Now you should see the documentation
-
-
-
-
- Autocomplete
-
- In order to have autocomplete enabled on Visual Studio Code
- you must follow the steps above.
-
-
- Once everything is installed, you should see snippets for
- HTML and JavaScript code. Here's an example with React:
-
-
-
-
- )
- }
-}
-
-Tooling.Layout = Docs
-
-export default Tooling
diff --git a/website/pages/welcome.js b/website/pages/welcome.js
deleted file mode 100644
index 16afd558..00000000
--- a/website/pages/welcome.js
+++ /dev/null
@@ -1,66 +0,0 @@
-import React from "react"
-import { Anchor, Box, Heading, List, Paragraph } from "dracula-ui"
-import styles from "./index.module.css"
-import Docs from "../layouts/Docs"
-
-export async function getStaticProps() {
- return {
- props: {
- query: {
- title: "Welcome",
- description: "Dracula UI is a dark-first collection of UI patterns and components."
- }
- }
- }
-}
-
-class Welcome extends React.Component {
- render() {
- return (
-
-
-
-
-
-
- Key Features
-
- Built for Dark Mode
- Most templates are built using light colors and later on adapted to dark colors. Dark themes shouldn't be an afterthought, they should be a top priority.
-
- Designer Friendly
- Speed up the prototyping phase by using a highly configurable Design System. Collaborate easily by taking advantage of a carefully crafted Figma file.
-
- Great Developer Experience
- Don't worry about class names, just use the Visual Studio Code snippets. You can take advantage of autocomplete and also access the entire documentation right from your code editor.
-
-
-
-
- Useful Links
-
- GitHub
- Discord
- Figma
- License
-
-
-
- Email
- Issues
- Discussions
- Changelog
-
-
-
- )
- }
-}
-
-Welcome.Layout = Docs
-
-export default Welcome
diff --git a/website/public/static/favicon.ico b/website/public/static/favicon.ico
deleted file mode 100644
index 69db2e40964a93742d2300de613c9cf46ad6ec49..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 120782
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