npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@baneung-pack/ui

v2.0.0

Published

바능 디자인 시스템 React 컴포넌트 라이브러리

Readme

@baneung-pack/ui

바능(Baneung) 디자인 시스템 — 각진 디자인의 React 컴포넌트 라이브러리

npm License: Apache 2.0

📖 데모 / 컴포넌트 카탈로그: https://ui.baneung.com

Radix UI primitives 위에 바능 브랜드(각진 디자인, 절제된 컬러, 강한 타이포 위계)를 입힌 React 컴포넌트 라이브러리. WCAG 2.1 AA 접근성 협상 불가.

설치

pnpm add @baneung-pack/ui
# or: npm install @baneung-pack/ui / yarn add @baneung-pack/ui

Peer dependencies:

  • React ^18 || ^19
  • React DOM ^18 || ^19

사용

// app/layout.tsx — 한 번만 로드
import '@baneung-pack/ui/styles.css';

// 어디서나
import { Button, Heading } from '@baneung-pack/ui';

export default function Page() {
  return (
    <main>
      <Heading level={1}>안녕하세요</Heading>
      <Button>저장</Button>
    </main>
  );
}

별도의 Tailwind 설정·CSS 변수 정의 필요 없음dist/styles.css 한 줄이면 끝.

트리쉐이킹 친화 subpath import

import { Button } from '@baneung-pack/ui/button';
import { Calendar } from '@baneung-pack/ui/calendar';

각 컴포넌트는 @baneung-pack/ui/<name> subpath로도 접근 가능 — 사용하지 않는 컴포넌트는 번들에 포함되지 않습니다.

다크 모드

<html data-theme="dark">만 토글하면 모든 토큰이 자동 cascade.

document.documentElement.dataset.theme = 'dark';

CSS 격리 (Cascade Layers)

라이브러리의 모든 스타일(preflight + 토큰 + 컴포넌트 utility)은 @layer baneung 안에 격리되어 있습니다. 소비자 프로젝트가 자체 Tailwind/글로벌 CSS를 함께 쓸 때 발생하는 두 가지 충돌 패턴을 정리합니다.

패턴 A — 소비자가 라이브러리를 override 가능 (일반적)

소비자의 글로벌 CSS를 @layer app으로 감싸 명시 순서를 선언합니다.

// app/layout.tsx
import '@baneung-pack/ui/styles.css'; // 먼저 — baneung 등록
import './globals.css'; // 나중 — app 등록
/* globals.css 최상단 */
@layer baneung, app;

@layer app {
  /* 본인 글로벌 스타일 — 라이브러리를 override */
  body {
    background: #f5f5f5;
  }
}

결과: [baneung=0, app=1]app(소비자) 우선. 의도된 override만 적용되고 그 외는 라이브러리 기본값 유지.

패턴 B — 소비자도 Tailwind를 쓰는 경우 (권장)

소비자가 자체 Tailwind를 임포트해서 페이지 layout(mx-auto, md:flex 등) 유틸리티를 쓰면, 같은 utility(예: .hidden)가 라이브러리 번들에도 들어 있어 cross-layer로 충돌합니다. hidden md:flex 같은 반응형 패턴이 깨질 수 있습니다.

해결책: 소비자는 preflight를 제외하고 Tailwind를 import합니다 (preflight는 라이브러리가 이미 제공).

// app/layout.tsx (Next.js 예시)
import '@baneung-pack/ui/styles.css';
import './globals.css';
/* globals.css */
@import 'tailwindcss/theme';
@import 'tailwindcss/utilities';
/* @import 'tailwindcss/preflight'; ← 의도적으로 제외 */

@source "./app/**/*.{ts,tsx}";
@source "./components/**/*.{ts,tsx}";

이 구성에서:

  • preflight 충돌 없음: docs preflight↔library button utility 충돌이 발생하지 않음 (preflight가 한쪽에만 존재)
  • 반응형 정상 동작: 소비자 utility는 unlayered → CSS 표준상 layered 라이브러리 utility를 자연스럽게 override → md:flexhidden을 정상적으로 이김

핵심: CSS Cascade Layer는 처음 등록된 시점의 위치가 우선순위를 결정합니다. 라이브러리가 @layer baneung에 격리되어 있는 한, unlayered 소비자 CSS는 항상 라이브러리를 이깁니다 — 이게 isolation의 본질입니다. 패턴 A(@layer app)는 본인 글로벌 CSS를 명시적으로 통제하고 싶을 때, 패턴 B는 페이지 layout 용 utility만 추가로 쓰고 싶을 때 사용하세요.

컴포넌트 (58)

| 카테고리 | 컴포넌트 | | ----------------- | -------------------------------------------------------------------------------------------------- | | Foundation | Typography · Separator · AspectRatio · Skeleton · Spinner · Empty · Avatar · Badge · Kbd · Label | | Buttons & Toggles | Button · ButtonGroup · Toggle · ToggleGroup | | Inputs | Input · InputGroup · InputOTP · Textarea · Field · Checkbox · RadioGroup · Switch · Slider | | Selection | Select (single/multi/searchable) · NativeSelect · Combobox · Command · Calendar · DatePicker | | Layout | Card · Item · Sidebar · Resizable · ScrollArea · Direction | | Navigation | Tabs · Breadcrumb · Pagination · NavigationMenu · Menubar | | Overlay | Dialog · AlertDialog · Drawer · Sheet · Popover · HoverCard · Tooltip · DropdownMenu · ContextMenu | | Feedback | Alert · Toast · Sonner · Progress | | Data Display | Accordion · Collapsible · Table · DataTable · Carousel |

보장

  • 접근성: WCAG 2.1 AA 색대비 자동 검증, axe-core 0 violations, IME(한글 조합) 안전, 모바일 터치 44×44px
  • 번들: ESM/CJS dual, 트리쉐이커블, subpath import 지원
  • 호환: React 18 / 19

디자인 토큰

스타일 토큰은 별도 패키지로 제공 — @baneung-pack/tokens

링크

라이선스

Apache-2.0 © 바능(Baneung)