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
2 changes: 1 addition & 1 deletion .github/workflows/tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,7 @@ jobs:
tablet-tests:
name: Tablet Tests
runs-on: ubuntu-latest
timeout-minutes: 20
timeout-minutes: 45
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

SUGGESTION: 45-minute timeout seems disproportionate for tablet tests

The main Playwright matrix (5 browsers) has a 30-minute timeout, while the tablet job (2 sequential browser runs) has 45 minutes. This is 2.25x the per-browser allocation of the main job. Unless tablet tests are known to be slow, a 30-minute timeout would be more consistent and would fail faster if tests hang.


steps:
- name: Checkout
Expand Down
14 changes: 0 additions & 14 deletions LICENSE
Original file line number Diff line number Diff line change
Expand Up @@ -19,17 +19,3 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

---

Third-Party Licenses:

Open Color
Copyright (c) 2016 Heeyeun Jeong
MIT License
https://yeun.github.io/open-color/

Phosphor Icons
Copyright (c) 2020 Phosphor Icons
MIT License
https://phosphoricons.com/
209 changes: 33 additions & 176 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Vanduo Framework v1.3.4
# Vanduo Framework v1.3.5

<p align="center">
<img src="vanduo-banner.svg" alt="Vanduo Framework Banner" width="100%">
Expand All @@ -7,213 +7,72 @@
<p align="center">
<a href="https://www.npmjs.com/package/@vanduo-oss/framework"><img src="https://img.shields.io/npm/v/@vanduo-oss/framework?style=flat-square&color=3b82f6" alt="NPM Version"></a>
<a href="https://github.com/vanduo-oss/framework/actions/workflows/ci.yml"><img src="https://img.shields.io/github/actions/workflow/status/vanduo-oss/framework/ci.yml?branch=main&style=flat-square&color=10b981" alt="Build Status"></a>
<a href="https://github.com/vanduo-oss/framework/blob/main/dist/vanduo.min.css"><img src="https://img.shields.io/badge/minified_size-~110kb-8b5cf6?style=flat-square" alt="Minified Size"></a>
<a href="https://github.com/vanduo-oss/framework/blob/main/LICENSE"><img src="https://img.shields.io/github/license/vanduo-oss/framework?style=flat-square&color=64748b" alt="License"></a>
</p>

**Essential just like water is.**
**Essential just like water is.**

- **Pure HTML, CSS, JS**
- **No third party dependencies**
- **Free and open source.**
Vanduo is a lightweight, zero-dependency UI framework built with pure HTML, CSS, and JavaScript. It ships 46+ components, responsive utilities, dark mode support, and a flexible theming system.

## Overview
[Browse Docs](https://vanduo.dev/#docs)

A lightweight, pure HTML/CSS/JS framework with **46+ components** for designing beautiful interfaces. Zero runtime dependencies, no mandatory build tools, just clean and simple code.
## Highlights

[**Browse Full Documentation →**](https://vanduo.dev/#docs)

## Features

- 🎨 **Pure CSS/JS** - No libraries, no dependencies
- 🚀 **Lightweight** - Minimal file size, maximum performance
- 📱 **Responsive** - Mobile-first design approach
- 🎯 **Utility-First** - Flexible utility classes for rapid development
- 🧩 **Modular** - Import only what you need
- ♿ **Accessible** - Built with accessibility in mind (WCAG 2.1 AA)
- 🌙 **Dark Mode** - Automatic OS preference detection + manual toggle
- 🌗 **Theme Switcher** - Lightweight light/dark/system toggle with shared preference storage
- 🎛️ **Theme Customizer** - Real-time color, radius, font, and mode customization
- 🔍 **SEO-Ready** - Comprehensive meta tags, structured data, and sitemap

---

## What's New in v1.3.4

v1.3.4 introduces the Glass Effects system — no breaking changes:

- **New `effects/glass.css` module.** Core `.vd-glass` class with `backdrop-filter` blur, translucent background, specular highlight, and noise texture. Size variants (`vd-glass-sm / md / lg / xl`), modifiers (`vd-glass-tinted`, `vd-glass-floating`, `vd-glass-contrast`), and full `prefers-reduced-transparency` / `@supports not (backdrop-filter)` fallbacks.
- **Glass design tokens.** `--vd-glass-blur`, `--vd-glass-saturate`, `--vd-glass-bg-opacity`, `--vd-glass-bg-light/dark`, `--vd-glass-border-light/dark`, `--vd-glass-shadow`, `--vd-glass-highlight-alpha`, `--vd-glass-noise-opacity` — all with automatic dark-mode overrides and `--vd-glass-*` aliases.
- **Component glass variants.** Opt-in `.vd-*-glass` modifier added to Navbar, Modal, Dropdown, Tooltip, Toast, Card, and FAB.
- **Scroll-activated glass.** `initScrollWatcher()` in `navbar.js` activates `.vd-navbar-glass` transparently at rest and frosted on scroll (configurable via `data-scroll-threshold`). Generic `data-glass-scroll` + `data-glass-sentinel` attribute API (new `glass.js`, `IntersectionObserver`) brings the same pattern to any element via `.is-glass-active`.
- **vd-hex selection fix.** `VdHexGrid` re-syncs `selectedHex` references after grid regeneration, preventing stale coordinates during rotation.

## What's New in v1.3.3

v1.3.3 is a maintenance release with no breaking changes:

- **Theme default primary alignment.** `ThemeCustomizer` and `ThemeSwitcher` normalize stale `black`/`amber` primary pairs against `localStorage` and `prefers-color-scheme`, so light, dark, and system modes stay consistent with `data-primary` after reloads and OS theme changes.
- **Documentation site.** Theme customizer demo storage keys align with framework (`vanduo-radius`, `vanduo-font-preference`); changelog and CDN pins updated to v1.3.3.

---

## What's New in v1.3.2

v1.3.2 is a component release centered on audio playback, with no breaking changes:

- **New Music Player component.** Ships a zero-dependency HTML5 audio player with play/pause, previous/next, volume, track title, and optional progress, shuffle, and playlist controls.
- **Framework-friendly API.** Accepts a plain JavaScript tracks array (`[{ name, url }]`), exposes custom events, and supports programmatic control through `window.VanduoMusicPlayer`.
- **Responsive player layout.** Control wrapping and volume sizing were tuned so the component stays usable across compact, inline, and mobile layouts.
- **Release coverage and artifacts updated.** Package metadata, generated bundles, `llms.txt`, and release-facing README examples now point at v1.3.2.

The framework now ships **46+ components**, including the new Music Player and the additions below.

| Component | Vanduo Name | Type |
|---|---|---|
| Carousel | Flow | CSS + JS |
| Music Player | Music Player | CSS + JS |
| Popover | Bubble | CSS + JS |
| Scrollspy | Waypoint | CSS + JS |
| Offcanvas | — (enhanced Sidenav) | CSS + JS |
| Ripple / Waves | Ripple | CSS + JS |
| Floating Action Button | FAB | CSS-only |
| Sticky | Affix | CSS + JS |
| Autocomplete | Suggest | CSS + JS |
| Form Validation | Validate | JS |
| Date Picker | Datepicker | CSS + JS |
| Time Picker | Timepicker | CSS + JS |
| Stepper | Stepper | CSS + JS |
| Timeline | Timeline | CSS-only |
| Rating | Rating | CSS + JS |
| Transfer / Multi-select | Transfer | CSS + JS |
| Tree View | Tree | CSS + JS |
| Spotlight / Feature Discovery | Spotlight | CSS + JS |

---
- Pure CSS/JS with no runtime dependencies
- Modular architecture with optional per-component imports
- Built-in dark/light/system theme switching
- Runtime Theme Customizer for color, font, and radius tokens
- Accessibility-focused components and utilities

## Quick Start

### Option 1: CDN (Recommended)

The quickest way to get started — no install, no build step. Add two lines to any HTML file:
### CDN (recommended)

```html
<!-- Vanduo CSS -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/vanduo-oss/framework@main/dist/vanduo.min.css">

<!-- Vanduo JS -->
<script src="https://cdn.jsdelivr.net/gh/vanduo-oss/framework@main/dist/vanduo.min.js"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/vanduo-oss/framework@v1.3.5/dist/vanduo.min.css">
<script src="https://cdn.jsdelivr.net/gh/vanduo-oss/framework@v1.3.5/dist/vanduo.min.js"></script>
<script>Vanduo.init();</script>
```

**Pin to a specific version** for production:
```html
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/vanduo-oss/framework@v1.3.4/dist/vanduo.min.css">
<script src="https://cdn.jsdelivr.net/gh/vanduo-oss/framework@v1.3.4/dist/vanduo.min.js"></script>
<script>Vanduo.init();</script>
```

### Option 2: Download

[**Download the dist/ folder**](https://github.com/vanduo-oss/framework/tree/main/dist) and include locally — no internet connection required at runtime:
### Local dist files

```html
<link rel="stylesheet" href="dist/vanduo.min.css">
<script src="dist/vanduo.min.js"></script>
<script>Vanduo.init();</script>
```

The `dist/` folder is **self-contained** (CSS, JS, Fonts, Icons).

### Option 3: Source Files

For development or when you need more control, use the unminified source:

```html
<link rel="stylesheet" href="css/vanduo.css">
<script src="js/vanduo.js"></script>
<script>Vanduo.init();</script>
```

### Option 4: With a Bundler (Vite)

> **Requires a build tool.** The imports below use bare module specifiers (`@vanduo-oss/framework`) which browsers cannot resolve on their own. For static HTML files, use the CDN or Download options above.

Scaffold a Vite project and install Vanduo:
### Package install (bundlers)

```bash
pnpm create vite my-app --template vanilla
cd my-app
pnpm add @vanduo-oss/framework
```

Import in your entry file (e.g. `main.js`):

```js
import '@vanduo-oss/framework/css';
import { Vanduo } from '@vanduo-oss/framework';
Vanduo.init();
```

**Why pnpm?** pnpm enforces a strict lockfile and creates an isolated `node_modules` structure. Vanduo's `.npmrc` security policies work best with pnpm out of the box.

*(Note: `npm install @vanduo-oss/framework` and `yarn add @vanduo-oss/framework` will also work, but they do not enforce the same strict lockfile and isolated `node_modules` security guarantees.)*

---

## LLM Access

This project includes an [`llms.txt`](llms.txt) file — a structured markdown summary designed for AI assistants and LLM-powered code editors. It provides quick access to framework documentation, component references, and usage patterns.

---

## Release Assets (Maintainers)

Use the hardened upload script to attach only approved bundle artifacts from `dist/`:

```bash
pnpm run release:assets -- v1.3.4
Vanduo.init();
```

Notes:
- If tag is omitted, it defaults to `v` + version from `package.json`.
- Use `--dry-run` to preview files without uploading.

---

## Documentation
## Docs and Resources

Comprehensive documentation for all components, utilities, and customization options is available at vanduo.dev.

[**View Documentation**](https://vanduo.dev/#docs)

### Key Capabilities

* **Dark Mode**: Works automatically with system preferences. Can be forced via `data-theme="dark"` on `<html>`.
* **Theme Switcher**: Lightweight light/dark/system toggle that can coexist with Theme Customizer.
* **Theme Customizer**: Built-in runtime tool to change colors, fonts, and radius.
* **Modular Imports**: Import only specific components (e.g., `css/components/buttons.css`) to keep your site lean.
* **Icons**: Includes [Phosphor Icons](https://phosphoricons.com) (Regular + Fill weights bundled).

---
- Website: [vanduo.dev](https://vanduo.dev)
- Docs: [vanduo.dev/#docs](https://vanduo.dev/#docs)
- npm: [@vanduo-oss/framework](https://www.npmjs.com/package/@vanduo-oss/framework)
- Releases: [GitHub Releases](https://github.com/vanduo-oss/framework/releases)
- LLM reference: [`llms.txt`](llms.txt)

## Project Structure

```
```text
vanduo-framework/
├── dist/ # Production ready files (minified)
├── css/
│ ├── vanduo.css # Main framework file (imports all)
│ ├── core/ # Foundation (colors, typography, grid)
│ ├── components/ # UI components (buttons, cards, etc)
│ ├── utilities/ # Utility classes
│ └── effects/ # Visual effects
├── js/
│ ├── vanduo.js # Main entry point
│ └── components/ # Component logic
├── icons/ # Phosphor Icons
├── fonts/ # Web fonts
└── tests/ # Framework test suite
├── dist/ # Production bundles
├── css/ # Core, components, utilities, effects
├── js/ # Framework runtime and components
├── fonts/ # Bundled web fonts
├── icons/ # Phosphor icons bundle
└── tests/ # Playwright + linting
```

## Browser Support
Expand All @@ -225,12 +84,10 @@ vanduo-framework/

## License

MIT License - see [LICENSE](LICENSE) file for details.
MIT - see [LICENSE](LICENSE).
Third-party notices are listed in [THIRD-PARTY-LICENSES](THIRD-PARTY-LICENSES).

## Credits

- **Color System**: [Open Color](https://yeun.github.io/open-color/) by Heeyeun Jeong (MIT License)
- **Icons**: [Phosphor Icons](https://phosphoricons.com) (MIT License)

---
Vanduo Framework - Built with ❤️ for the web.
- [Open Color](https://yeun.github.io/open-color/) (MIT)
- [Phosphor Icons](https://phosphoricons.com/) (MIT)
14 changes: 14 additions & 0 deletions THIRD-PARTY-LICENSES
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
Third-Party Licenses
====================

Open Color
----------
Copyright (c) 2016 Heeyeun Jeong
License: MIT
Source: https://yeun.github.io/open-color/

Phosphor Icons
--------------
Copyright (c) 2020 Phosphor Icons
License: MIT
Source: https://phosphoricons.com/
16 changes: 8 additions & 8 deletions css/components/tooltips.css
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,11 @@

:root {
/* Tooltip Colors */
--tooltip-bg: var(--color-gray-900);
--tooltip-bg-light: var(--color-white);
--tooltip-bg: var(--color-white);
--tooltip-bg-light: var(--color-gray-100);
--tooltip-bg-dark: var(--color-gray-900);
--tooltip-text-color: var(--color-white);
--tooltip-text-color-light: var(--color-gray-900);
--tooltip-text-color: var(--color-gray-900);
--tooltip-text-color-light: var(--color-gray-800);
--tooltip-text-color-dark: var(--color-white);

/* Tooltip Spacing (Fibonacci pairs: x/y ratio ~ phi) */
Expand Down Expand Up @@ -39,16 +39,16 @@

/* Dark Theme Overrides */
[data-theme="dark"] {
--tooltip-bg: var(--color-gray-100);
--tooltip-text-color: var(--color-gray-900);
--tooltip-bg: var(--color-gray-900);
--tooltip-text-color: var(--color-white);
--tooltip-bg-light: var(--color-gray-800);
--tooltip-text-color-light: var(--color-gray-100);
}

@media (prefers-color-scheme: dark) {
:root:not([data-theme]) {
--tooltip-bg: var(--color-gray-100);
--tooltip-text-color: var(--color-gray-900);
--tooltip-bg: var(--color-gray-900);
--tooltip-text-color: var(--color-white);
--tooltip-bg-light: var(--color-gray-800);
--tooltip-text-color-light: var(--color-gray-100);
}
Expand Down
Loading
Loading