JSPM

  • Created
  • Published
  • Downloads 110
  • Score
    100M100P100Q86296F
  • License MIT

dev-portfolio is React library that helps you develop your web portfolio easily and quickly.

Package Exports

  • dev-portfolio
  • dev-portfolio/dist/index.js

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (dev-portfolio) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

dev-porfolio

npm_package_badge license_badge

dev-portfolio is React library that helps you develop your web portfolio easily and quickly.

ezgif com-gif-maker

List

Install

npm i dev-portfolio --save

Usage

import { Header, Intro, Contact, ... } from 'dev-portfolio';

const App = () => {
  return (
    // The 'className' in the <div> tag surrounding the components of 'dev-portfolio' must be 'App'.
    // Only then can the SideBar in the <Header> component recognize id props and automatically assign all components into the SideBar.
    <div className="App">
      <Header />
      <Intro />
      <Contact />
      ...
    </div>
  );
}

export default App;

Components

스크린샷 2022-09-13 오전 2 05 09
import { Header } from 'dev-portfolio';

const logoOption = { ... };
const channels = [ ... ];
const sideBarOption = { ... };

const App = () => {
  return (
    <Header 
      id="Header Component"
      headerHeight="80px"
      headerWidth="100%"
      headerBackgroundColor="whitesmoke"
      logoOption={logoOption}
      channels={channels}
      sideBarOption={sideBarOption}
    />
  );
}

export default App;
props type description default note
id string Name to be added to Sidebar
headerHeight string Header Height 80px
headerWidth string Header Width 100%
headerBackgroundColor string CSS for Background color of Header Component white
logoOption LogoOptionPropsType Logo & Header_Title only props See "More about Header's Props"
channels ChannelType[] Channel-only props such as Github and LinkedIn, etc See "More about Header's Props"
sideBarOption SideBarOptionPropsType Sidebar-only props such as Sidebar's Icon, etc See "More about Header's Props"
More about Header's props

logoOption example

스크린샷 2022-08-20 오후 12 12 53
const logoOption = {
  redirectUrl: '/',
  logoImg: 'logo.png',
  logoHidden: false,
  title: 'dev-portfolio',
  logoMargin: '0px 16px 0px 16px',
  logoWidth: '50px',
  logoHeight: '50px',
  titleColor: 'black',
  titleSize: '24px',
  titleWeight: '800',
};

channels example

스크린샷 2022-08-20 오후 12 14 35
const channels = [
  { name: 'github', redirectUrl: 'https://', color: '#181717BB', size: '24px' },
  { name: 'naver', redirectUrl: 'https://', color: '#47A141BB', size: '24px' },
  { name: 'facebook', redirectUrl: 'https://', color: '#1877F2BB', size: '24px' },
  { name: 'youtube', redirectUrl: 'https://', color: '#FF0000BB', size: '24px' },
];

sideBarOption example

스크린샷 2022-08-20 오후 12 15 02 스크린샷 2022-08-20 오후 12 15 32
const sideBarOption = {
  mainTitle: 'dev-portfolio',
  iconSize: '28px',
  iconColor: '#181717BB',
  iconMargin: '0px 12px 0px 12px',
};

Intro

스크린샷 2022-09-13 오전 2 06 20
import { Intro } from 'dev-portfolio';

const introOption = [ ... ];

const App = () => {
  return (
    <Intro 
      id="Intro Component"
      textAlign="left"
      backgroundColor="whitesmoke"
      introOption={introOption}
    />
  );
}

export default App;
props type description default note
id string Name to be added to Sidebar
textAlign string Intro Text align center
backgroundColor string Intro Background color whitesmoke
introOption IntroOptionType Intro-only props such as title, description, etc See "More about Intro's Props"
More about Intro's props

introOption example

const IntroOption = {
  title: 'Intro',
  shortIntro: 'shortIntro that will captivate people',
  description:
    'This props name is description.\nPlease write down your brief introduction here.\nIf you want to change the line, type backslash-n between the letters.\nAlso you want to move the letters to the center, change textAlign to center.\n\nSpread your dreams!',
};

TechStackList

techStackList

import { TechStackList } from 'dev-portfolio';

const techStackList = [ ... ];

const App = () => {
  return (
    <TechStackList 
      id="Tech Stack Component"
      gap="normal" // 'narrower' | 'narrow' | 'normal' | 'wide' | 'wider'
      techStackList={techStackList}
    />
  );
}

export default App;
props type description default note
id string Name to be added to Sidebar
gap TechStackGapType Spacing between TechStacks in TechStackList normal
techStackList TechStackPropsType[] TechStack-only props such as tech name, tech logo, and progressbar, etc See "More about TechStackList's Props"
More about TechStackList's props

techStackList example

const techStackList = [
  {
    nameOption: { name: 'Javascript', logoName: 'Javascript', fontSize: '18px', logoSize: '24px' },
    progressBarOption: {
      rate: '45%',
      isHiddenRateText: false,
      colorTo: '#E2D784',
      colorFrom: 'whitesmoke',
      width: '100%',
      height: '40px',
    },
  },
  {
    nameOption: { name: 'HTML5', logoName: 'HTML-5', fontSize: '18px', logoSize: '24px' },
    progressBarOption: {
      rate: '30%',
      isHiddenRateText: false,
      colorTo: '#E34F26',
      colorFrom: 'whitesmoke',
      width: '100%',
      height: '40px',
    },
  },
  {
    nameOption: { name: 'Nodejs', logoName: 'Nodejs', fontSize: '18px', logoSize: '24px' },
    progressBarOption: {
      rate: '85%',
      isHiddenRateText: true,
      colorTo: '#339933',
      colorFrom: 'whitesmoke',
      width: '100%',
      height: '40px',
    },
  },
];

gap example

스크린샷 2022-08-20 오후 12 22 27
// 'narrower' | 'narrow' | 'normal' | 'wide' | 'wider';
const gap = 'normal';

Experience

스크린샷 2022-08-20 오후 3 44 56
import { Experience } from 'dev-portfolio';

const verticalOption = { ... };
const historyList = [ ... ];

const App = () => {
  return (
    <Experience 
      id="Experience Component"
      title="Experience Title"
      textAlign="left"
      theme="vertical" // 'basic' | 'box' | 'vertical'
      verticalOption={verticalOption}
      historyList={historyList}
    />
  );
}

export default App;
props type description default note
id string Name to be added to Sidebar
title string Main title text of Experience Component Experience
textAlign string Experience Text align left
theme ExperienceThemeType You can decorate your experience with a variety of theme such as 'basic', 'box', 'vertical'. basic
verticalOption ExperienceVerticalOptionType Special settings can be added when the theme is 'vertical'. See "More about Experience's Props"
historyList ExperienceHistoryListType[] You can add your history data such as date, title, description, etc. See "More about Experience's Props"
More about Experience's props

theme example

const theme = "basic"; // 'basic' | 'box' | 'vertical'

verticalOption example

const verticalOption = { 
  titleColor: "#000000",
  shape: "round-square" // 'square' | 'round-square'
};

historyList example

const historyList = [
  {
    startDate: '2022.01.01',
    endDate: '2022.03.10',
    title: 'this is title',
    des: 'This prop name is des.\nWrite down the additional explanation you want here.\nYou can break the line to backslash-n.',
  },
  {
    startDate: '2020.02',
    title: 'this is title',
    des: `If you just want to write the date and time without the text,\ndon't worry !\nYou can write a des props just by emptying it.\nAn example is shown below.`,
  },
  {
    startDate: '2018',
    endDate: '2019.12',
    title: 'this is title',
  },
];

ezgif com-gif-maker (2)

import { Carousel, Image } from 'dev-portfolio';


const App = () => {
  return (
    <Carousel 
      id="Carousel Component"
      width="65%"
      transition={1000} // ms
      autoplaySpeed={3000} // ms
      slideToShow={1}
      isArrowShow={true}
      isAutoplay={false}
      isAutoplayControl={true}
      arrowLocation="mid-side" // 'bottom' | 'mid-side' | 'top' | 'bottom-side' | 'top-side'
      playerLocation="bottom-mid" // 'bottom-mid' | 'bottom-left' | 'bottom-right' | 'top-mid' | 'top-left' | 'top-right'
      prevArrowIcon={<YOUR_COMPONENT />} // ReactElement
      nextArrowIcon={<YOUR_COMPONENT />} // ReactElement
      startAutoplayIcon={<YOUR_COMPONENT />} // ReactElement
      pauseAutoplayIcon={<YOUR_COMPONENT />} // ReactElement
    >
      // Must insert components customized
      <YOUR_COMPONENT />
      <Image src="anything.png" /> // Component of dev-portfolio
      ...
    </Carousel>
  );
}

export default App;
props type description default note
id string Name to be added to Sidebar
width string Carousel width 100%
transition number Transition animation speed 1000 Unit : ms
autoplaySpeed number Time to stay in a item 3000 Unit : ms
slideToShow number Number of item to show at once 1
isArrowShow boolean Flag for whether to show buttons true
isAutoplay boolean Flag for play carousel automatically false
isAutoplayControl boolean Flag for whether to show carousel player true
arrowPosition ArrowLocationType Position of arrow icon mid-side
playerLocation PlayerLocationType Position of Play icon bottom-mid
prevArrowIcon ReactElement Icon Component for moving into previous item <FiChevronLeft />
nextArrowIcon ReactElement Icon Component for moving into next item <FiChevronRight />
startAutoplayIcon ReactElement Icon Component for starting autoplay <TbPlayerPlay />
pauseAutoplayIcon ReactElement Icon Component for pause autoplay <TbPlayerPause />
스크린샷 2022-09-13 오전 2 08 28
import { Gallery, Item } from 'dev-portfolio';

const App = () => {
  return (
    <Gallery 
      id="Gallery Component"
      column={3}
      gap="normal" // 'wider' | 'wide' | 'normal' | 'narrow' | 'narrower'
      theme="mid-night" // 'mid-night' | 'blossom' | 'fruits' | 'bare-bare' | 'mint-chocolate'
      padding="2em 10em"
    >
      // Must insert components customized
      <YOUR_COMPONENT />
      <Item /> // Component of dev-portfolio
      ...
    </Gallery>
  );
}

export default App;
props type description default note
id string Name to be added to Sidebar
column number Number of vertical lines 3
gap GalleryGapType Spacing between items in Gallery normal
theme GalleryThemeType You can decorate your Gallery with a variety of theme such as 'mid-night', 'blossom', 'fruits', 'bare-bare', 'mint-chocolate'. mid-night
padding string Gallery padding 2em 10em
More about Gallery's props

gap example

// 'wider' | 'wide' | 'normal' | 'narrow' | 'narrower'
const gap = 'normal';

theme example

// 'mid-night' | 'blossom' | 'fruits' | 'bare-bare' | 'mint-chocolate'
const theme = 'mid-night';

Masonry

스크린샷 2022-09-13 오전 2 08 45
import { Masonry, Image } from 'dev-portfolio';

const App = () => {
  return (
    <Masonry 
      id="Masonry Component"
      column={4}
      padding="2em 4em"
    >
      // Must insert components customized
      <YOUR_COMPONENT />
      <Image src="anything.png" redirectURL="/" /> // Component of dev-portfolio
      <Image src="https://picsum.photos/900/1100/?random" redirectURL="/" /> // Component of dev-portfolio
      ...
    </Masonry>
  );
}

export default App;
props type description default note
id string Name to be added to Sidebar
column number Number of vertical lines 4
padding string Masonry padding 2em 4em

Image

ezgif com-gif-maker (5)

import { Image } from 'dev-portfolio';

const App = () => {
  return (
    <Image 
      src="https://picsum.photos/500/600/?random"
      head="Write your head"
      subhead="Write your subhead"
      redirectURL="/"
      noShowHead={false}
      zoomWhenHover={false}
    />
  );
}

export default App;
props type description default note
src string Image source url
head string Main Title Text Write your head
subhead string Sub Title Text Write your subhead
redirectURL string URL to redirect /
noShowHead boolean Flag for whether to hide texts false
zoomWhenHover boolean Flag for whether to zoom image when hovered on item false

Item

ezgif com-gif-maker

import { Item } from 'dev-portfolio';

const App = () => {
  return (
    <Item 
      src="https://picsum.photos/600/600/?random"
      title="This is title"
      description="description"
      redirectURL="/"
      textRisingSpeed={300}
      isTextRising={false}
    />
  );
}

export default App;
props type description default note
src string Image source url https://picsum.photos/600/600/?random
title string Main Title Text This is title
description string Description Text description
redirectURL string URL to redirect /
textRisingSpeed number 300
isTextRising boolean false

Card

스크린샷 2022-09-13 오전 2 09 54
import { Card } from 'dev-portfolio';

const App = () => {
  return (
    <Card 
      width="10em"
      height="10em"
      redirectURL="/"
      shape="square" // 'square' | 'round-square' | 'round'
      hover="none" // 'up' | 'down' | 'zoom'
    />
  );
}

export default App;
props type description default note
width string Card width 10em
height string Card height 10em
redirectURL string URL to redirect /
shape CardShapeType You can decorate shape of Card a variety of theme such as 'square', 'round-square', 'round'. square
hover CardHoverType You can make an effect on Card a variety of theme such as 'up', 'down', 'zoom'. none
More about Card's props

shape example

// 'square' | 'round-square' | 'round'
const shape = "square";

hover example

// 'up' | 'down' | 'zoom'
const hover = "zoom";

Contact

스크린샷 2022-08-20 오후 12 32 19
import { Contact } from 'dev-portfolio';

const contactOption = { ... };

const App = () => {
  return (
    <Contact 
      id="Contact Component"
      backgroundColor="whitesmoke"
      contactOption={contactOption}
    />
  );
}

export default App;
props type description default note
id string Name to be added to Sidebar
backgroundColor string Contact Background Color whitesmoke
contactOption ContactOptionType Contact-only props such as title, email button, channels and my personal info, etc See "More about Contact's Props"
More about Contact's props

contactOption example

const contactOption = {
  title: 'Hello, I'm dev-portfolio.',
  subTitle: 'If you're interested in me, please press the button below :D',
  buttonText: 'Want to work with me?',
  channels: [
    {
      name: 'github',
      redirectUrl: 'https://',
      color: '#181717BB',
      size: '18px',
      margin: '0px 12px 0px 0px',
    },
    {
      name: 'naver',
      redirectUrl: 'https://',
      color: '#47A141BB',
      size: '18px',
      margin: '0px 12px 0px 0px',
    },
    {
      name: 'facebook',
      redirectUrl: 'https://',
      color: '#1877F2BB',
      size: '18px',
      margin: '0px 12px 0px 0px',
    },
    {
      name: 'youtube',
      redirectUrl: 'https://',
      color: '#FF0000BB',
      size: '18px',
      margin: '0px 12px 0px 0px',
    },
  ],
  aboutMeInfos: [
    {
      title: 'Where I live',
      description: 'Gangdong-gu, Seoul, Republic of Korea',
    },
    {
      title: 'Give me a call',
      description: 'T. +82 (0)10 1234 5678',
    },
    {
      title: 'Or, why don’t you email me?',
      description: 'dev-portfolio@gmail.com',
    },
  ],
};  

VisitorCounter

visitor-counter
import { VisitorCounter } from 'dev-portfolio';

const App = () => {
  return (
    <VisitorCounter 
      title="hits"
      theme="big-size" // 'default' | 'big-size' | 'simple'
      todayVisitor={0} // Your fetched variable
      totalVisitor={123} // Your fetched variable
      todayTitle="today"
      totalTitle="total"
      backgroundColor="#91c230c4"
      size="14px" // include: px
      todayBoldColor="red"
      totalBoldColor="red"
    />
  );
}

export default App;
props type description default note
title string Hit title used in 'default' and 'big-size' hits
theme VisitorCounterThemeType Visitor Counter theme: 'default', 'big-size', 'simple' default
todayVisitor number Number of today's visitors 0 fetched variable
totalVisitor number Number of total's visitors 123 fetched variable
todayTitle string Title of today visit count used in 'big-size' and 'simple' today
totalTitle string Title of total visit count used in 'big-size' and 'simple' total
backgroundColor string Background color of todayTitle #91c230c4
size string Font size and component size in the visitor counter component 14px Make sure to include 'px'
todayBoldColor string Color of today's visit count used in 'big-size' and 'simple' red
totalBoldColor string Color of total visit count used in 'big-size' and 'simple' red
More about VisitorCounter's props

theme example

// 'default' | 'big-size' | 'simple'
const theme = "default";

VisitorCounter example

const visitorCounter = {
   title: 'hits',
   todayTitle: 'today',
   totalTitle: 'total',
}

VisitorComment

visitor-comment

import { VisitorComment } from 'dev-portfolio';

const commentList = [ ... ];

const App = () => {
  return (
    <VisitorComment 
      id="VisitorComment Component"
      theme="basic" // 'basic' | 'box' | 'vertical'
      backgroundColor="whitesmoke"
      inputBackgroundColor="White"
      userInputLineColor="#b4b4b4a2"
      buttonColor="#1877f2"
      progressbarColor="#5f5f5f"
      isShowScrollDownIcon={true}
      scrollDownIconColor='black'
      commentInputPlacehoder={commentInputPlacehoder}
      comment='this portfolio is very nice' // Your fetched variable
      nickname='dev-portfolio' // Your fetched variable
      password='1234' // Your fetched variable
      commentList={commentList} // Your fetched variable
      handleCreateComment={handleCreateComment} // Event handling variable
      handleChangeDescription={handleChangeDescription} // Event handling variable
      handleChangeNickname={handleChangeNickname} // Event handling variable
      handleChangePassword={handleChangePassword} // Event handling variable
    />
  );
}

export default App;
props type description default note
id string Name to be added to Sidebar
theme VisitorCommentThemeType Visitor Comment theme: 'basic', 'box', 'vertical' basic
backgroundColor string VisitorComment background-color whitesmoke
inputBackgroundColor string Background color of guest book preparation column White
userInputLineColor string Underline color in the User Information field #b4b4b4a2
buttonColor string Font color of send button #1877f
progressbarColor string The color of the progress bar that is generated when a scroll event occurs #5f5f5f
isShowScrollDownIcon boolean Whether to display icons that are generated when a scroll event occurs true
scrollDownIconColor string Color in ScrollDown Icon black Only works when isShowScrollDownIcon is true
comment string the text of visitor comment this portfolio is very nice fetched variable
nickname string the nickname of visitor comment dev-portfolio fetched variable
password string the password of visitor comment 1234 fetched variable
commentInputPlacehoder CommentInputPlaceholderType Placeholder in the input that you write in the visitor comment See "More about VisitorComment's Props"
commentList VisitorCommentListType Description, nickname, and date displayed in comment list See "More about VisitorComment's Props" fetched variable
handleCreateComment (e?: React.MouseEvent) => void Comments Props for event handling
handleChangeDescription (e?: React.ChangeEvent) => void Description Props for event handling
handleChangeNickname (e?: React.ChangeEvent) => void Nickname Props for event handling
handleChangePassword (e?: React.ChangeEvent) => void Password Props for event handling
More about VisitorComment's props

VisitorComment example

const visitorComment = {
  theme: 'basic',
  progressbarColor: '#5f5f5f',
  isShowScrollDownIcon: true,
  commentList: [
    {
      description: `The scroll customization method is the same as the teckstack component progress bar, so please use it!`,
      nickname: 'woorim960',
      date: '2022-08-26',
    },
    {
      description: `Progress bar customization is also possible when creating a scroll.`,
      nickname: 'seohyunsim',
      date: '2022-08-26',
    },
    {
      description: `Likewise, there are three types of themes: basic, box, and vertical.`,
      nickname: 'jisu3817',
      date: '2022-08-26',
    },
    {
      description: 'Refer to dev-portfolio README.md for instructions on building a personal server.',
      nickname: 'soonki-98',
      date: '2022-08-26',
    },
    {
      description: `A personal server can be built through environmental variables, and visitors can write their text and nicknames.`,
      nickname: 'woorim960',
      date: '2022-08-26',
    },
    {
      description: 'By looking at your portfolio, visitors can leave a guest book.',
      nickname: 'seohyunsim',
      date: '2022-08-26',
    },
  ],
}

Example

  1. dev-portfolio-app : https://dev-portfolio-app.vercel.app/스크린샷 2022-09-12 오후 8 53 37

  1. seohyunsim : https://seohyunsim-portfolio.vercel.app/스크린샷 2022-09-12 오후 8 52 52

License

MIT

Contributor