0.0.2 • Published 1 year ago

short-wings v0.0.2

Weekly downloads
-
License
ISC
Repository
github
Last release
1 year ago

short-wings

Ready-made Tailwindcss classnames for Buttons, Cards, Alerts, Flex, Headings, (Layout)

Short classnames

With short-wings, Your

<button
  classname="px-btnXmd py-btnYmd focus:outline-none focus:ring-4 cursor-pointer hover:brightness-hover text-primary-on bg-primary-default border border-primary-default focus:ring-primary-default/50"
>
  Button
</button>

can be like this

<button classname="btn btn-primary">Button</button>

Installation

npm install short-wings

Install Tailwindcss if you don't already have it

npm install tailwindcss

In your src/app/layout.tsx file or top level component, import css

import "short-wings/dist/main.css";

Configure tailwind.config.js

Don't forget to configure tailwnd.config.js file.

const shortwings = require("short-wings");

module.exports = {
  content: ["./src/**/*.{js,jsx,tsx}"],
  theme: { extend: shortwings.tailwindExtension },
  plugins: [],
  darkMode: "class",
};

For tailwind.config.ts,

import type { Config } from "tailwindcss";
import { tailwindExtension } from "short-wings";

const config: Config = {
  content: ["./src/**/*.{js,jsx,tsx}"],
  theme: {
    extend: {
      backgroundImage: {
        "gradient-radial": "radial-gradient(var(--tw-gradient-stops))",
        "gradient-conic":
          "conic-gradient(from 180deg at 50% 50%, var(--tw-gradient-stops))",
      },
      ...tailwindExtension,
    },
  },
  plugins: [],
};
export default config;

How to use

Button

  • btn
    • btn-{varient}
    • btn-outline-{varient}
    • btn-text-{varient}
    • btn-link-{varient}
    • disabled
    • disabled-{varient}
    • loading-{varient}
<button classname="btn btn-primary (disabled)">Contain</button>
<button classname="btn-sm btn-outline-primary (disabled-primary)">
  Outline
</button>
<button classname="btn-pill-lg btn-text-primary (disabled)">Text</button>
<button classname="btn-link-primary (disabled)">Contain</button>
<div classname="loading-primary" />

Card & Alert

  • card
    • card-{varient}
    • card-title
    • card-subtitle
  • alert
    • alert-{varient}
<div classname="card card-primary">lorem</div>
<div classname="card-sm card-primary">lorem</div>
<div classname="card-lg card-primary">lorem</div>
<div classname="alert alert-primary">lorem</div>

Text

  • text (For normal text)
  • emp (For bold text)
  • h1, h2, h3, h4, h5, h6
// text = @apply text-dark dark:text-light
<body classname="text"></body>

Flex Row

  • flex-center
  • flex-between
  • flex-start
  • flex-end
  • flex-top

Layout

I don't know I should write Layout. They need javascript.

  • navbar
    • navbar-logo
  • article
  • side-bar-drawer // Need to write your own Javascript
  • side-bar-3
  • main
<body>
  <nav classname="navbar">
    <div classname="navbar-logo">Logo</div>
  </nav>
  <main classname="main">
    <aside classname="side-bar-drawer">Drawer Side Bar</aside>
    <article classname="article">Main Article</article>
    <aside classname="side-bar-3">Right Side Bar</aside>
  </main>
</body>

If No right side bar, add width to article

<article classname="article lg:w-9/12">Main Article</article>

Custom Colors

// Custom Varients Colors

const colors = require("tailwindcss/colors");

const tailwindExtension =
  short -
  wings.createTailwindExtension({
    primary: {
      50: "color-value",
      100: "color-value",
      200: "color-value",
      300: "color-value",
      400: "color-value",
      500: "color-value",
      600: "color-value",
      700: "color-value",
      800: "color-value",
      900: "color-value",
      950: "color-value",
    },
    // Or you can do this
    secondary: colors.indigo,
    // tertiary: ...
    // success: ...
    // warning: ...
    // danger: ...
    // info: ...
  });

Custom Extend

Using typescript is better.

Type of tailwindExtension

import type { Extend } from "short-wings";

type Extend = {
  colors?: {
    primary?: {
      default?: string;
      on?: string;
      text?: Theme;
      border?: Theme;
      background?: Theme;
    };
    // secondary?: same as primary;
    // tertiary?: same as primary;
    // success?: same as primary;
    // warning?: same as primary;
    // danger?: same as primary;
    // info?: same as primary;
    body?: { dark?: string; light?: string };
    border?: { dark?: string; light?: string };
    text?: {
      emphasis?: { dark?: string; light?: string };
      normal?: { dark?: string; light?: string };
    };
  };
  brightness?: { hover?: string; disabled?: string };
  borderWidth?: {
    divider?: string;
    btn?: string;
    card?: string;
  };
  borderRadius?: {
    btn?: string;
    card?: string;
  };
  spacing?: {
    btnXsm?: string;
    btnXmd?: string;
    btnXlg?: string;
    btnXpill?: string;
    btnYsm?: string;
    btnYmd?: string;
    btnYlg?: string;
    btnYpill?: string;
    cardXsm?: string;
    cardXmd?: string;
    cardXlg?: string;
    cardYsm?: string;
    cardYmd?: string;
    cardYlg?: string;
  };
};

Default Tailwindcss extension

{
  "spacing": {
    "btnXsm": "12px",
    "btnXmd": "14px",
    "btnXlg": "16px",
    "btnXpill": "18px",
    "btnYsm": "4px",
    "btnYmd": "6px",
    "btnYlg": "10px",
    "cardXsm": "8px",
    "cardXmd": "12px",
    "cardXlg": "16px",
    "cardYsm": "8px",
    "cardYmd": "12px",
    "cardYlg": "16px"
  },
  "brightness": { "hover": "0.88", "disabled": "0.69" },
  "borderWidth": { "divider": "1px", "btn": "1px", "card": "1px" },
  "borderRadius": { "btn": "6px", "card": "8px" },
  "colors": {
    "primary": {
      "default": "#1d4ed8",
      "on": "#eff6ff",
      "text": { "light": "#1d4ed8", "dark": "#3b82f6" },
      "background": { "light": "#bfdbfe", "dark": "#1e3a8a" },
      "border": { "light": "#60a5fa", "dark": "#1e40af" }
    },
    "secondary": {
      "default": "#334155",
      "on": "#f8fafc",
      "text": { "light": "#334155", "dark": "#64748b" },
      "background": { "light": "#e2e8f0", "dark": "#0f172a" },
      "border": { "light": "#94a3b8", "dark": "#1e293b" }
    },
    "tertiary": {
      "default": "#404040",
      "on": "#fafafa",
      "text": { "light": "#404040", "dark": "#737373" },
      "background": { "light": "#e5e5e5", "dark": "#171717" },
      "border": { "light": "#a3a3a3", "dark": "#262626" }
    },
    "success": {
      "default": "#15803d",
      "on": "#f0fdf4",
      "text": { "light": "#15803d", "dark": "#22c55e" },
      "background": { "light": "#bbf7d0", "dark": "#14532d" },
      "border": { "light": "#4ade80", "dark": "#166534" }
    },
    "warning": {
      "default": "#a16207",
      "on": "#fefce8",
      "text": { "light": "#a16207", "dark": "#eab308" },
      "background": { "light": "#fef08a", "dark": "#713f12" },
      "border": { "light": "#facc15", "dark": "#854d0e" }
    },
    "danger": {
      "default": "#b91c1c",
      "on": "#fef2f2",
      "text": { "light": "#b91c1c", "dark": "#ef4444" },
      "background": { "light": "#fecaca", "dark": "#7f1d1d" },
      "border": { "light": "#f87171", "dark": "#991b1b" }
    },
    "info": {
      "default": "#4338ca",
      "on": "#eef2ff",
      "text": { "light": "#4338ca", "dark": "#6366f1" },
      "background": { "light": "#c7d2fe", "dark": "#312e81" },
      "border": { "light": "#818cf8", "dark": "#3730a3" }
    },
    "text": {
      "emphasis": { "light": "#000", "dark": "#fff" },
      "normal": { "light": "#262626", "dark": "#e5e5e5" }
    },
    "body": { "light": "#e5e5e5", "dark": "#262626" },
    "border": { "light": "#a3a3a3", "dark": "#525252" }
  }
}

Dark Mode

If you are using nextjs, you should use next-themes and follow its instructions.

0.0.2

1 year ago

0.0.1

1 year ago