Basecoat – LLMs Guide About - Basecoat is a Tailwind‑first component library using semantic HTML and small vanilla JS for interactivity. No React required. Framework‑agnostic. Install - Tailwind project: `npm i basecoat-css` - In CSS: `@import "tailwindcss";` then `@import "basecoat-css";` CDN - CSS: `` - JS (all): `` - JS (per component): include `basecoat.min.js` then `tabs.min.js`, `select.min.js`, etc. JavaScript - Auto‑init on `DOMContentLoaded`; observes DOM for new nodes. - Manual: `window.basecoat.init('')` or `window.basecoat.initAll()`. - Packages to import with ESM: `import 'basecoat-css/all'` or `import 'basecoat-css/tabs'`. Usage - CSS‑only components: use classes like `btn`, `card`, `input`, etc. - JS components: include the JS and use required roles/attributes (see below). Theming - Tailwind projects can override design tokens (e.g., `primary`, `muted-foreground`). - Without Tailwind, use CDN CSS and add overrides after the link tag. Common pitfalls - Do not invent class names; use documented classes only. - The package name is `basecoat-css` (not `basecoat`, not `@basecoat/css`). - Interactive components require specific roles/attributes; include them. - Basecoat is framework‑agnostic; do not mention React/Radix dependencies. Components - Button (CSS): `.btn`, variants like `.btn-secondary`, sizes `.btn-sm`, `.btn-lg`. - Button Group (CSS): `.button-group` to group adjacent buttons; supports horizontal/vertical. - Input (CSS): `.input` for text inputs; pairs with `.label` and `.field` patterns. - Textarea (CSS): `.textarea` styled multiline input. - Label (CSS): `.label` for associated form labels. - Field (CSS): `.field` wrapper for label, input, hint, error. - Form (CSS): `.form` patterns for layout and validation styling. - Checkbox (CSS): styled native checkbox; use `input[type='checkbox']`. - Radio Group (CSS): `.radio-group` pattern using native radios. - Switch (CSS): styled checkbox with `role="switch"` if needed. - Select (JS): `.select` custom select; trigger button + popover + `[role=listbox]` and `[role=option]`. Dispatches `change` with `detail.value`. - Combobox (JS): `.combobox` typeahead; similar roles to Select. - Command (JS): `.command` with search input and `[role=menu]`/`[role=menuitem]`; keyboard nav. - Tabs (JS): `.tabs` with `[role=tablist]`, `[role=tab]`, `aria-controls` panels; arrow keys switch. - Popover (JS): `.popover` wraps a button and `[data-popover]` content; toggles `aria-hidden`. - Dropdown Menu (JS): `.dropdown-menu` trigger + menu with `[role=menu]`/`[role=menuitem]`. - Dialog (CSS/Native): `` styled; `.command-dialog` variant wraps `.command`. - Alert Dialog (CSS/Native): confirm/cancel flow using `` semantics. - Drawer (CSS/Native): off‑canvas using ``/popover; class names documented in examples. - Tooltip (CSS/JS-lite): `.tooltip` small info overlays. - Toast (JS): global notifications container `#toaster`; dispatch `basecoat:toast` with `{ detail: { config } }`. - Sidebar (JS): `.sidebar` with collapsible items; tracks current page via `aria-current`. - Breadcrumb (CSS): `.breadcrumb` list of links. - Pagination (CSS): `.pagination` navigation controls. - Card (CSS): `.card` container with header/section/footer slots. - Alert (CSS): `.alert` contextual banners. - Badge (CSS): `.badge` and `.badge-outline`. - Avatar (CSS): `.avatar` image + fallback. - Skeleton (CSS): `.skeleton` loading placeholder. - Progress (CSS): `.progress` bar. - Slider (CSS): `.slider` styled input range. - Spinner (CSS): `.spinner` loading indicator. - Kbd (CSS): `.kbd` keyboard key style. - Table (CSS): `.table` basic and striped tables. - Item (CSS): `.item` list rows with icons and actions. - Empty State (CSS): `.empty` placeholder content. - Theme Switcher (JS-lite): `.theme-switcher` toggles themes (example in docs). Events - `basecoat:toast` (document): show a toast by dispatching `{ detail: { config } }`. - `basecoat:initialized` (component root): emitted after a component initializes. - `basecoat:popover` (document): coordination event to close other popovers. Accessibility - Use semantic roles/attributes from examples (tabs, menus, listbox/options). - Disabled items: use `disabled` or `aria-disabled="true"`; JS will ignore them. Troubleshooting - If a component doesn’t work, ensure its JS is loaded and required roles/IDs match examples. - For dynamic content, call `window.basecoat.init('')` or `initAll()` after insertion. License - MIT (see LICENSE.md) --- description: Basecoat alwaysApply: true applyTo: "**" downloadedFrom: https://basecoatui.com/llms.txt version: 0.3.x --- # Basecoat Basecoat is a Tailwind CSS v4‑first UI library using semantic HTML and small vanilla JS for interactivity. No React required; framework‑agnostic. - Basecoat docs: https://basecoatui.com - Package CSS: `basecoat-css` ## Basecoat install notes 1. Basecoat targets Tailwind CSS v4. 2. Import Tailwind in your CSS, then import Basecoat: ```css @import "tailwindcss"; @import "basecoat-css"; ``` 3. For interactive components, include JS. With ESM you can load all or cherry‑pick: ```js import 'basecoat-css/all'; // or cherry‑pick import 'basecoat-css/tabs'; import 'basecoat-css/select'; import 'basecoat-css/popover'; import 'basecoat-css/dropdown-menu'; import 'basecoat-css/sidebar'; import 'basecoat-css/toast'; ``` 4. CDN usage (no build tool): ```html ``` 5. JS auto‑initializes on `DOMContentLoaded` and observes the DOM for added nodes. You can manually re‑init: ```js window.basecoat.init('tabs'); window.basecoat.initAll(); ``` ## Basecoat usage rules 1. Add Basecoat class names to semantic HTML. Combine with Tailwind utilities for layout/spacing. 2. Interactive components require specific roles/attributes (see each component). Keep `aria-*` for semantics and `data-*` for visual states. 3. Disabled elements must use `disabled` or `aria-disabled="true"`. Basecoat JS filters them from interactions. 4. Only use documented Basecoat classes or Tailwind utilities. Don’t invent new class names. 5. Prefer native elements (button, input, dialog) and keep markup minimal. Basecoat class name categories (for reference) - `component`: the main component class - `part`: a child element/slot of a component - `style`: variants changing appearance - `size`: size variants - `behavior`: classes that change behavior - `modifier`: boolean/conditional changes ## Config Basecoat has no Tailwind plugin config. Import the CSS after Tailwind. Customize design tokens via your Tailwind theme or overrides. Minimal CSS setup: ```css @import "tailwindcss"; @import "basecoat-css"; ``` ## Basecoat tokens (commonly used) These semantic tokens are referenced by classes (examples): `background`, `foreground`, `primary`, `primary-foreground`, `secondary`, `secondary-foreground`, `accent`, `accent-foreground`, `muted`, `muted-foreground`, `card`, `card-foreground`, `popover`, `popover-foreground`, `destructive`, `ring`, `input`, `border`. Rules - Tokens should be defined in your Tailwind theme or be available via your design system. You can override colors using Tailwind utilities (e.g., `bg-primary`). - Prefer utilities for one‑off overrides; keep semantic tokens consistent. ## Basecoat components ### alert Alerts inform users about important events. #### Class names - component: `alert`, `alert-destructive` #### Syntax ```html ``` #### Rules - Use `alert-destructive` for destructive context. ### avatar Avatar shows a user thumbnail. #### Class names - component: `avatar` #### Syntax ```html
{alt}
``` #### Rules - Provide meaningful `alt` text or decorative as appropriate. ### badge Badges display statuses or counts. #### Class names - component: `badge` - style: `badge-outline`, `badge-destructive` #### Syntax ```html {TEXT} ``` #### Rules - {MODIFIER} is optional; combine with utilities for spacing. ### button Buttons trigger actions. #### Class names - component: `btn` - style: `btn-primary`, `btn-secondary`, `btn-outline`, `btn-ghost`, `btn-link`, `btn-destructive` - size: `btn-sm`, `btn-lg` - icon: `btn-icon`, `btn-sm-icon`, `btn-lg-icon` #### Syntax ```html ``` #### Rules - Use `disabled` attribute for disabled state. Use `aria-pressed="true"` for toggle buttons. ### button-group Groups adjacent buttons into a single control. #### Class names - component: `button-group` #### Syntax ```html
{BUTTONS}
``` #### Rules - Use separators with `
` inside the group if needed. ### card Card container with optional header/section/footer. #### Class names - component: `card` - part: `> header`, `> section`, `> footer` #### Syntax ```html

{TITLE}

{SUBTITLE}

{CONTENT}
{ACTIONS}
``` #### Rules - Parts are optional; structure with semantic elements. ### checkbox (CSS) Styled native checkbox. #### Class names - component: `.input[type='checkbox']:not([role='switch'])` #### Syntax ```html ``` #### Rules - Use standard checkbox semantics; pair with `