Back to list
duskmoon-dev

duskmoon-dev-core

by duskmoon-dev

The Core of DuskmoonUI

0🍴 0📅 Jan 21, 2026

SKILL.md


name: duskmoon-dev-core description: When using npm package @duskmoon-dev/core, this skill shows how to install, configure, and use the CSS component library

@duskmoon-dev/core Skill

Overview

@duskmoon-dev/core is a CSS-only component library for Tailwind CSS v4 with Material Design 3's extended color system.

Installation

# Bun
bun add @duskmoon-dev/core tailwindcss@^4.0.0

# npm
npm install @duskmoon-dev/core tailwindcss@^4.0.0

# pnpm
pnpm add @duskmoon-dev/core tailwindcss@^4.0.0

Setup

CSS Import

@import "tailwindcss";
@import "@duskmoon-dev/core";

Theme Configuration

Apply theme via data-theme attribute on HTML element:

<html data-theme="sunshine">  <!-- Light theme -->
<html data-theme="moonlight"> <!-- Dark theme -->

Available Components

Actions

  • btn - Buttons with variants: btn-primary, btn-secondary, btn-tertiary, btn-outline, btn-ghost, btn-text, btn-loading

Data Entry

  • input - Text inputs: input-primary, input-secondary, input-error
  • textarea - Multi-line text: textarea-primary, textarea-resize-none, textarea-resize-vertical
  • select - Dropdown selection: select-primary, select-filled, select-outlined
  • cascader - Hierarchical selection: cascader, cascader-panel, cascader-menu
  • checkbox - Checkboxes: checkbox-primary, checkbox-indeterminate, checkbox-group
  • radio - Radio buttons: radio-primary, radio-group, radio-group-horizontal
  • switch - Toggle switches: switch-primary, switch-secondary
  • slider - Range sliders
  • segment-control - Segmented buttons: segment-control, segment-control-item
  • autocomplete - Search with suggestions
  • datepicker - Calendar: date, datetime, date range, datetime range pickers
  • time-input - Time selection: time-input, time-input-picker
  • file-upload - Drag-and-drop file uploader
  • rating - Star/heart ratings
  • otp-input - OTP verification: otp-input, otp-input-field
  • pin-input - PIN entry: pin-input, pin-input-masked
  • multi-select - Multiple selection: multi-select, multi-select-tag
  • tree-select - Hierarchical dropdown: tree-select, tree-select-node
  • form-group - Form layout: form-group, form-label, helper-text, fieldset

Data Display

  • card - Content containers: card-body, card-title
  • badge - Status indicators: badge-primary, badge-dot
  • avatar - User images: avatar-lg, avatar-status-online
  • chip - Tags/filters: chip-primary, chip-removable
  • table - Data tables: table-hover, table-striped
  • list - Vertical lists: list-item, list-item-interactive
  • timeline - Chronological events

Feedback

  • alert - Messages: alert-success, alert-error, alert-warning, alert-info
  • dialog - Modal dialogs: dialog-backdrop, dialog-md
  • modal - Full overlays
  • toast - Notifications: toast-success, toast-show
  • snackbar - Brief messages
  • progress - Loading: progress-primary, progress-indeterminate
  • skeleton - Placeholders: skeleton-text, skeleton-circle
  • tooltip - Hover info: tooltip-top, tooltip-bottom
  • navbar - Top navigation: navbar-surface-container-high, navbar-item
  • tabs - Tab navigation: tab, tab-active
  • drawer - Side panels: drawer-left, drawer-open
  • bottom-nav - Mobile navigation: bottom-nav-item
  • stepper - Multi-step: stepper-step-active, stepper-step-completed

Layout

  • divider - Separators: divider-dashed, divider-vertical
  • appbar - Action bars: appbar-top, appbar-bottom
  • grid-cols-auto-fill-* - Responsive grid with auto-fill: grid-cols-auto-fill-48, grid-cols-auto-fill-64
  • grid-cols-auto-fit-* - Responsive grid with auto-fit: grid-cols-auto-fit-48, grid-cols-auto-fit-64

Utilities

  • sr-only - Screen reader only (visually hidden but accessible)
  • not-sr-only - Undo sr-only for focus states

Surfaces

  • accordion - Expandable panels: accordion-item-open
  • bottomsheet - Mobile panels: bottom-sheet-show
  • popover - Contextual overlays: popover-top, popover-show
  • collapse - Collapsible content

Usage Examples

Buttons

<button class="btn btn-primary">Primary</button>
<button class="btn btn-secondary btn-outline">Outlined</button>
<button class="btn btn-tertiary btn-ghost">Ghost</button>
<button class="btn btn-primary btn-loading">Loading...</button>

Cards

<div class="card">
  <div class="card-body">
    <h2 class="card-title">Title</h2>
    <p>Content</p>
  </div>
</div>

Forms

<input type="text" class="input" placeholder="Default" />
<input type="text" class="input input-primary" placeholder="Primary" />
<input type="text" class="input input-error" placeholder="Error" />

Alerts

<div class="alert alert-success">Success message</div>
<div class="alert alert-error">Error message</div>
<div class="alert alert-warning">Warning message</div>
<div class="alert alert-info">Info message</div>
<nav class="navbar navbar-surface-container-high">
  <div class="navbar-start">
    <a class="navbar-brand">Logo</a>
  </div>
  <div class="navbar-center">
    <a class="navbar-item navbar-item-active">Home</a>
    <a class="navbar-item">About</a>
  </div>
</nav>

Tabs

<div class="tabs">
  <button class="tab tab-active">Tab 1</button>
  <button class="tab">Tab 2</button>
</div>

Dialog

<div class="dialog-backdrop dialog-backdrop-show">
  <div class="dialog dialog-md">
    <div class="dialog-header">
      <h2 class="dialog-title">Title</h2>
    </div>
    <div class="dialog-body">Content</div>
    <div class="dialog-actions">
      <button class="btn btn-text">Cancel</button>
      <button class="btn btn-filled">Confirm</button>
    </div>
  </div>
</div>

Responsive Grid

<!-- Auto-fill: Fixed column size, empty space on right -->
<div class="grid grid-cols-auto-fill-48 gap-4">
  <div class="card">Item 1</div>
  <div class="card">Item 2</div>
  <div class="card">Item 3</div>
</div>

<!-- Auto-fit: Columns stretch to fill container -->
<div class="grid grid-cols-auto-fit-64 gap-4">
  <div class="card">Item 1</div>
  <div class="card">Item 2</div>
</div>

Color System

Color Utilities

<!-- Backgrounds -->
<div class="bg-primary">Primary</div>
<div class="bg-secondary">Secondary</div>
<div class="bg-tertiary">Tertiary</div>
<div class="bg-surface-container">Surface</div>

<!-- Text -->
<p class="text-primary">Primary</p>
<p class="text-on-surface">On surface</p>
<p class="text-on-surface-variant">Muted</p>

<!-- Semantic -->
<div class="bg-success text-success-content">Success</div>
<div class="bg-error text-error-content">Error</div>

CSS Variables

.custom {
  background-color: var(--color-primary);
  color: var(--color-primary-content);
  border-color: var(--color-outline);
}

Theme Switching

// Switch to dark theme
document.documentElement.dataset.theme = 'moonlight';

// Switch to light theme
document.documentElement.dataset.theme = 'sunshine';

Importing Component Styles

Full Library Import

Import all components and themes at once:

/* In your CSS file */
@import "tailwindcss";
@import "@duskmoon-dev/core";

Individual Component CSS Import

Import only the CSS you need for smaller bundle sizes:

/* CSS imports */
@import "@duskmoon-dev/core/components/button";
@import "@duskmoon-dev/core/components/card";
@import "@duskmoon-dev/core/components/input";
@import "@duskmoon-dev/core/components/alert";

JavaScript/TypeScript Import

// Import component styles in JS/TS
import '@duskmoon-dev/core/components/button';
import '@duskmoon-dev/core/components/card';
import '@duskmoon-dev/core/components/input';

Theme-Only Import

/* Import specific themes */
@import "@duskmoon-dev/core/themes/sunshine";
@import "@duskmoon-dev/core/themes/moonlight";

Available Component Exports

All components available for individual import:

Import PathComponent
@duskmoon-dev/core/components/accordionAccordion
@duskmoon-dev/core/components/alertAlert
@duskmoon-dev/core/components/appbarApp Bar
@duskmoon-dev/core/components/autocompleteAutocomplete
@duskmoon-dev/core/components/avatarAvatar
@duskmoon-dev/core/components/badgeBadge
@duskmoon-dev/core/components/bottom-navigationBottom Navigation
@duskmoon-dev/core/components/bottomsheetBottom Sheet
@duskmoon-dev/core/components/buttonButton
@duskmoon-dev/core/components/cardCard
@duskmoon-dev/core/components/cascaderCascader
@duskmoon-dev/core/components/checkboxCheckbox
@duskmoon-dev/core/components/chipChip
@duskmoon-dev/core/components/collapseCollapse
@duskmoon-dev/core/components/datepickerDate Picker
@duskmoon-dev/core/components/dialogDialog
@duskmoon-dev/core/components/dividerDivider
@duskmoon-dev/core/components/drawerDrawer
@duskmoon-dev/core/components/file-uploadFile Upload
@duskmoon-dev/core/components/formForm
@duskmoon-dev/core/components/form-groupForm Group
@duskmoon-dev/core/components/inputInput
@duskmoon-dev/core/components/listList
@duskmoon-dev/core/components/markdown-bodyMarkdown Body
@duskmoon-dev/core/components/modalModal
@duskmoon-dev/core/components/multi-selectMulti-Select
@duskmoon-dev/core/components/navigationNavigation (Navbar/Tabs/Menu)
@duskmoon-dev/core/components/otp-inputOTP Input
@duskmoon-dev/core/components/pin-inputPIN Input
@duskmoon-dev/core/components/popoverPopover
@duskmoon-dev/core/components/progressProgress
@duskmoon-dev/core/components/radioRadio
@duskmoon-dev/core/components/ratingRating
@duskmoon-dev/core/components/segment-controlSegment Control
@duskmoon-dev/core/components/selectSelect
@duskmoon-dev/core/components/skeletonSkeleton
@duskmoon-dev/core/components/sliderSlider
@duskmoon-dev/core/components/snackbarSnackbar
@duskmoon-dev/core/components/stepperStepper
@duskmoon-dev/core/components/switchSwitch
@duskmoon-dev/core/components/tableTable
@duskmoon-dev/core/components/textareaTextarea
@duskmoon-dev/core/components/time-inputTime Input
@duskmoon-dev/core/components/timelineTimeline
@duskmoon-dev/core/components/toastToast
@duskmoon-dev/core/components/tooltipTooltip
@duskmoon-dev/core/components/tree-selectTree Select

Usage in Web Components / Custom Elements

Each component exports a named css export containing the CSS string:

// Import the css named export
import { css as buttonCSS } from '@duskmoon-dev/core/components/button';
import { css as cardCSS } from '@duskmoon-dev/core/components/card';
import { css as inputCSS } from '@duskmoon-dev/core/components/input';

Example usage in a custom element:

import { css as buttonCSS } from '@duskmoon-dev/core/components/button';

// Strip @layer wrapper for Shadow DOM compatibility
const coreStyles = buttonCSS.replace(/@layer\s+components\s*\{/, '').replace(/\}\s*$/, '');

class MyButton extends HTMLElement {
  constructor() {
    super();
    this.attachShadow({ mode: 'open' });

    // Add styles to shadow DOM
    const style = document.createElement('style');
    style.textContent = coreStyles;
    this.shadowRoot.appendChild(style);
  }
}

Note: The CSS is wrapped in @layer components { } for Tailwind CSS cascade layers. When using in Shadow DOM, strip the @layer wrapper as shown above.

Score

Total Score

60/100

Based on repository quality metrics

SKILL.md

SKILL.mdファイルが含まれている

+20
LICENSE

ライセンスが設定されている

+10
説明文

100文字以上の説明がある

0/10
人気

GitHub Stars 100以上

0/15
最近の活動

3ヶ月以内に更新がある

0/10
フォーク

10回以上フォークされている

0/5
Issue管理

オープンIssueが50未満

+5
言語

プログラミング言語が設定されている

+5
タグ

1つ以上のタグが設定されている

0/5

Reviews

💬

Reviews coming soon