Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
48 changes: 48 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
name: CI

on:
pull_request:
push:
branches:
- main
- codex/**

jobs:
quality:
runs-on: ubuntu-latest

steps:
- name: Checkout
uses: actions/checkout@v4

- name: Setup pnpm
uses: pnpm/action-setup@v4
with:
version: 10

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version-file: ".nvmrc"
cache: "pnpm"

- name: Install dependencies
run: pnpm install --frozen-lockfile

- name: Astro check
run: pnpm check

- name: Lint
run: pnpm lint

- name: Vitest
run: pnpm test

- name: Build
run: pnpm build

- name: Build registry
run: pnpm registry:build

- name: Verify registry drift
run: pnpm registry:drift
7 changes: 7 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,10 @@
# Changelog

## 0.8.0 - 2026-03-03

- Stabilized and aligned core primitives with shadcn-style APIs and `data-slot` usage.
- Added quality infrastructure: CI workflow, linting, Vitest, and registry drift checks.
- Added card and multiple API-consistency improvements across UI components and docs.
- Fixed release blockers in docs and registry packaging integrity.

## [Click here to the releases](https://github.com/fulldotdev/ui/releases)
73 changes: 54 additions & 19 deletions ROADMAP.md
Original file line number Diff line number Diff line change
@@ -1,31 +1,66 @@
# Roadmap

## Overall Focus
## Overall focus

- **Developer experience**: Enable developers to build content-driven websites faster and more reliably, with clean APIs that AI agents can fully understand and assist with.
- **Content editor experience**: Provide an architecture where content editors can manage pages and blocks independently, without needing developer involvement.
- **Developer experience**: Help developers build content-driven Astro websites faster with clean, predictable APIs that are easy for AI agents to understand.
- **Content editor experience**: Keep architecture modular so content editors can manage pages and blocks independently.

## Upcoming phases
## v0.8 release strategy (single release)

### Phase 1: Foundation (Q1 2026)
This version is focused on reliability, stability, minimalism, and simplicity.

- Maintain stability (fix bugs, review PRs promptly)
- Hire a developer (preferably with design skills)
### Non-negotiable rules

### Phase 2: v0.8 Release (Q1 2026)
- ShadCN API coherence comes first (props, variants, naming, styling semantics).
- Interactive components must use `data-slot`.
- New components in this version must be supported by `data-slot`.
- Keep code surface small: prefer replacing/removing custom interaction code over adding wrappers.
- No net-new primitives are required for v0.8 release hardening.

- Add missing components: Breadcrumb, Toast, Tooltip, etc.
- Add e-commerce components: Quantity Input, Gallery, etc.
- Add e-commerce blocks: Product Details Page, Product Listing Page, etc.
### Reference inputs

### Phase 3: Brand & Visibility (Q2 2026)
- `data-slot`: https://github.com/bejamas/data-slot
- `bejamas/ui`: https://github.com/bejamas/ui
- `shadcn/ui`: https://github.com/shadcn-ui/ui
- `bearnie`: https://github.com/michael-andreuzza/bearnie

- Hire branding agency for Fulldev overall identity
- Improve all components and blocks with specialized designer
- Optimize for SEO and become the #1 ranking Astro UI library
### Quality infrastructure requirements

### Phase 4: Theming System (under consideration)
- Add CI workflow with:
- `pnpm check`
- `pnpm lint`
- `pnpm test` (Vitest only)
- `pnpm build`
- `pnpm registry:build`
- registry drift check
- Add linting with bug-risk-focused rules (avoid style-only friction).
- Add Vitest coverage for:
- core utility logic
- baseline accessibility checks using `vitest-axe`
- Optionally add Lighthouse CI in non-blocking mode for trend visibility.

- Provide preset themes that apply styles globally
- Similar to shadcn's theme generator
- Easy theme switching and customization
### Definitive PR queue (no fixed dates)

1. `PR-01` Scope lock and docs alignment for v0.8 policy.
2. `PR-02` Quality infrastructure (CI + lint + Vitest + registry drift checks).
3. `PR-03` Deterministic build hardening (external fetch/font fallbacks).
4. `PR-04` ShadCN API coherence pass (before migration).
5. `PR-05` `data-slot` migration: `accordion`, `collapsible`.
6. `PR-06` `data-slot` migration: `tabs`.
7. `PR-07` Cleanup and packaging integrity (remove dead/empty artifacts, align docs/config).
8. `PR-08` Release candidate + final stabilization + v0.8 release notes.

### Branching model for v0.8

- Integration branch: `codex/0.8`.
- Working branches: short-lived branches from `codex/0.8` per PR.
- Merge target for all v0.8 PRs: `codex/0.8`.
- After release hardening, merge `codex/0.8` back to the default branch.

## Post-v0.8 direction

- Resume broader component and block expansion after the reliability baseline is stable.
- Expand interaction coverage for migrated primitives (`dialog`, `sheet`, `navigation-menu`) and deeper accessibility test scenarios.
- Revisit `data-slot` migration for `dialog` and `sheet`.
- Add `tooltip` and `popover` (+ docs + registry entries) in the next planned release phase.
- Revisit additional features (e-commerce, expanded primitives, theme presets) in a later release.
76 changes: 76 additions & 0 deletions eslint.config.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
// @ts-nocheck
import js from "@eslint/js"
import tsPlugin from "@typescript-eslint/eslint-plugin"
import tsParser from "@typescript-eslint/parser"
import astro from "eslint-plugin-astro"

export default [
{
ignores: [
".astro/**",
"dist/**",
"node_modules/**",
"public/r/**",
"*.min.js",
],
},
js.configs.recommended,
...astro.configs.recommended,
{
files: ["**/*.{ts,mts,cts}"],
languageOptions: {
parser: tsParser,
parserOptions: {
ecmaVersion: "latest",
sourceType: "module",
},
},
plugins: {
"@typescript-eslint": tsPlugin,
},
rules: {
"no-unused-vars": "off",
"no-undef": "off",
"@typescript-eslint/no-unused-vars": [
"error",
{
argsIgnorePattern: "^_",
varsIgnorePattern: "^_",
},
],
"@typescript-eslint/consistent-type-imports": [
"error",
{
prefer: "type-imports",
},
],
"@typescript-eslint/no-explicit-any": "warn",
},
},
{
files: ["**/*.test.ts"],
languageOptions: {
globals: {
document: "readonly",
window: "readonly",
},
},
},
{
files: ["**/*.astro"],
languageOptions: {
parserOptions: {
parser: tsParser,
extraFileExtensions: [".astro"],
},
},
rules: {
"astro/no-set-html-directive": "off",
"astro/no-conflict-set-directives": "off",
"no-undef": "off",
"no-unused-vars": "off",
"no-redeclare": "off",
"no-case-declarations": "warn",
},
},
]
41 changes: 0 additions & 41 deletions package.example.json

This file was deleted.

33 changes: 30 additions & 3 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "fulldev-ui",
"version": "0.7.0",
"version": "0.8.0",
"description": "Astro UI component and block library compatible with shadcn/ui",
"homepage": "https://ui.full.dev",
"bugs": "https://github.com/fulldotdev/ui/issues",
Expand Down Expand Up @@ -33,18 +33,36 @@
"dev": "astro dev",
"start": "astro dev",
"check": "astro check",
"lint": "eslint .",
"lint:fix": "eslint . --fix",
"test": "vitest run",
"test:watch": "vitest",
"preview": "astro preview",
"registry:build": "shadcn build",
"registry:drift": "git diff --exit-code -- registry.json public/r",
"build": "astro build",
"build:prod": "astro check && shadcn build && astro build ",
"build:test": "astro check && shadcn build && astro build && astro preview --host"
"build:test": "astro check && shadcn build && astro build && astro preview --host",
"ci": "pnpm check && pnpm lint && pnpm test && pnpm build && pnpm registry:build && pnpm registry:drift"
},
"dependencies": {
"@astrojs/mdx": "^4.3.8",
"@astrojs/netlify": "^6.5.13",
"@astrojs/sitemap": "^3.6.0",
"@astrojs/starlight": "^0.36.1",
"@astrojs/starlight-tailwind": "^4.0.1",
"@data-slot/accordion": "^0.2.103",
"@data-slot/collapsible": "^0.2.103",
"@data-slot/combobox": "^0.2.103",
"@data-slot/core": "^0.2.103",
"@data-slot/dialog": "^0.2.103",
"@data-slot/dropdown-menu": "^0.2.103",
"@data-slot/navigation-menu": "^0.2.103",
"@data-slot/popover": "^0.2.103",
"@data-slot/select": "^0.2.103",
"@data-slot/slider": "^0.2.103",
"@data-slot/tabs": "^0.2.103",
"@data-slot/tooltip": "^0.2.103",
"@fontsource/inter": "^5.2.8",
"@tailwindcss/vite": "^4.1.14",
"astro": "^5.14.5",
Expand All @@ -64,10 +82,19 @@
},
"devDependencies": {
"@astrojs/check": "^0.9.4",
"@eslint/js": "^10.0.1",
"@ianvs/prettier-plugin-sort-imports": "^4.7.0",
"@types/node": "^24.8.1",
"@typescript-eslint/eslint-plugin": "^8.56.1",
"@typescript-eslint/parser": "^8.56.1",
"astro-eslint-parser": "^1.3.0",
"eslint": "^10.0.2",
"eslint-plugin-astro": "^1.6.0",
"jsdom": "^28.1.0",
"prettier": "3.6.2",
"prettier-plugin-astro": "0.14.1",
"prettier-plugin-tailwindcss": "^0.7.0"
"prettier-plugin-tailwindcss": "^0.7.0",
"vitest": "^4.0.18",
"vitest-axe": "^0.1.0"
}
}
Loading
Loading