diff --git a/.eleventy.js b/.eleventy.js index 70ea711..b1e79ab 100644 --- a/.eleventy.js +++ b/.eleventy.js @@ -9,6 +9,7 @@ export default async function(eleventyConfig) { eleventyConfig.setInputDirectory("./docs/src"); eleventyConfig.addPassthroughCopy({"docs/src/assets": "assets"}); eleventyConfig.addPassthroughCopy({ "src/js": "assets/js" }); + eleventyConfig.addPassthroughCopy({ "docs/src/llms.txt": "llms.txt" }); eleventyConfig.addPlugin(eleventyLucideicons); eleventyConfig.addShortcode("fetchCode", function(filePath) { const absolutePath = path.resolve(process.cwd(), filePath); @@ -43,4 +44,4 @@ export default async function(eleventyConfig) { { autoescape: true } ); eleventyConfig.setLibrary("njk", nunjucksEnvironment); -} \ No newline at end of file +} diff --git a/docs/src/llms.txt b/docs/src/llms.txt new file mode 100644 index 0000000..8e9e6da --- /dev/null +++ b/docs/src/llms.txt @@ -0,0 +1,506 @@ +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 `