@vanduo-oss/framework 1.3.3 → 1.3.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +0 -14
- package/README.md +33 -166
- package/css/components/cards.css +8 -0
- package/css/components/dropdown.css +8 -0
- package/css/components/fab.css +14 -0
- package/css/components/modals.css +13 -0
- package/css/components/navbar.css +30 -0
- package/css/components/toast.css +8 -0
- package/css/components/tooltips.css +37 -8
- package/css/core/tokens.css +37 -0
- package/css/core/vd-aliases.css +13 -0
- package/css/effects/glass.css +154 -0
- package/css/effects/morph.css +259 -0
- package/css/vanduo.css +2 -0
- package/dist/build-info.json +3 -3
- package/dist/vanduo.cjs.js +207 -3
- package/dist/vanduo.cjs.js.map +3 -3
- package/dist/vanduo.cjs.min.js +4 -4
- package/dist/vanduo.cjs.min.js.map +4 -4
- package/dist/vanduo.css +501 -9
- package/dist/vanduo.css.map +1 -1
- package/dist/vanduo.esm.js +207 -3
- package/dist/vanduo.esm.js.map +3 -3
- package/dist/vanduo.esm.min.js +4 -4
- package/dist/vanduo.esm.min.js.map +4 -4
- package/dist/vanduo.js +207 -3
- package/dist/vanduo.js.map +3 -3
- package/dist/vanduo.min.css +2 -2
- package/dist/vanduo.min.css.map +1 -1
- package/dist/vanduo.min.js +4 -4
- package/dist/vanduo.min.js.map +4 -4
- package/js/components/glass.js +87 -0
- package/js/components/morph.js +137 -0
- package/js/components/navbar.js +44 -3
- package/js/index.js +4 -0
- package/package.json +1 -1
package/LICENSE
CHANGED
|
@@ -19,17 +19,3 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
|
19
19
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
20
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
21
|
SOFTWARE.
|
|
22
|
-
|
|
23
|
-
---
|
|
24
|
-
|
|
25
|
-
Third-Party Licenses:
|
|
26
|
-
|
|
27
|
-
Open Color
|
|
28
|
-
Copyright (c) 2016 Heeyeun Jeong
|
|
29
|
-
MIT License
|
|
30
|
-
https://yeun.github.io/open-color/
|
|
31
|
-
|
|
32
|
-
Phosphor Icons
|
|
33
|
-
Copyright (c) 2020 Phosphor Icons
|
|
34
|
-
MIT License
|
|
35
|
-
https://phosphoricons.com/
|
package/README.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Vanduo Framework v1.3.
|
|
1
|
+
# Vanduo Framework v1.3.5
|
|
2
2
|
|
|
3
3
|
<p align="center">
|
|
4
4
|
<img src="vanduo-banner.svg" alt="Vanduo Framework Banner" width="100%">
|
|
@@ -7,105 +7,34 @@
|
|
|
7
7
|
<p align="center">
|
|
8
8
|
<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>
|
|
9
9
|
<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>
|
|
10
|
-
<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>
|
|
11
10
|
<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>
|
|
12
11
|
</p>
|
|
13
12
|
|
|
14
|
-
**Essential just like water is.**
|
|
13
|
+
**Essential just like water is.**
|
|
15
14
|
|
|
16
|
-
-
|
|
17
|
-
- **No third party dependencies**
|
|
18
|
-
- **Free and open source.**
|
|
15
|
+
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.
|
|
19
16
|
|
|
20
|
-
|
|
17
|
+
[Browse Docs](https://vanduo.dev/#docs)
|
|
21
18
|
|
|
22
|
-
|
|
19
|
+
## Highlights
|
|
23
20
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
-
|
|
29
|
-
- 🚀 **Lightweight** - Minimal file size, maximum performance
|
|
30
|
-
- 📱 **Responsive** - Mobile-first design approach
|
|
31
|
-
- 🎯 **Utility-First** - Flexible utility classes for rapid development
|
|
32
|
-
- 🧩 **Modular** - Import only what you need
|
|
33
|
-
- ♿ **Accessible** - Built with accessibility in mind (WCAG 2.1 AA)
|
|
34
|
-
- 🌙 **Dark Mode** - Automatic OS preference detection + manual toggle
|
|
35
|
-
- 🌗 **Theme Switcher** - Lightweight light/dark/system toggle with shared preference storage
|
|
36
|
-
- 🎛️ **Theme Customizer** - Real-time color, radius, font, and mode customization
|
|
37
|
-
- 🔍 **SEO-Ready** - Comprehensive meta tags, structured data, and sitemap
|
|
38
|
-
|
|
39
|
-
---
|
|
40
|
-
|
|
41
|
-
## What's New in v1.3.3
|
|
42
|
-
|
|
43
|
-
v1.3.3 is a maintenance release with no breaking changes:
|
|
44
|
-
|
|
45
|
-
- **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.
|
|
46
|
-
- **Documentation site.** Theme customizer demo storage keys align with framework (`vanduo-radius`, `vanduo-font-preference`); changelog and CDN pins updated to v1.3.3.
|
|
47
|
-
|
|
48
|
-
---
|
|
49
|
-
|
|
50
|
-
## What's New in v1.3.2
|
|
51
|
-
|
|
52
|
-
v1.3.2 is a component release centered on audio playback, with no breaking changes:
|
|
53
|
-
|
|
54
|
-
- **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.
|
|
55
|
-
- **Framework-friendly API.** Accepts a plain JavaScript tracks array (`[{ name, url }]`), exposes custom events, and supports programmatic control through `window.VanduoMusicPlayer`.
|
|
56
|
-
- **Responsive player layout.** Control wrapping and volume sizing were tuned so the component stays usable across compact, inline, and mobile layouts.
|
|
57
|
-
- **Release coverage and artifacts updated.** Package metadata, generated bundles, `llms.txt`, and release-facing README examples now point at v1.3.2.
|
|
58
|
-
|
|
59
|
-
The framework now ships **46+ components**, including the new Music Player and the additions below.
|
|
60
|
-
|
|
61
|
-
| Component | Vanduo Name | Type |
|
|
62
|
-
|---|---|---|
|
|
63
|
-
| Carousel | Flow | CSS + JS |
|
|
64
|
-
| Music Player | Music Player | CSS + JS |
|
|
65
|
-
| Popover | Bubble | CSS + JS |
|
|
66
|
-
| Scrollspy | Waypoint | CSS + JS |
|
|
67
|
-
| Offcanvas | — (enhanced Sidenav) | CSS + JS |
|
|
68
|
-
| Ripple / Waves | Ripple | CSS + JS |
|
|
69
|
-
| Floating Action Button | FAB | CSS-only |
|
|
70
|
-
| Sticky | Affix | CSS + JS |
|
|
71
|
-
| Autocomplete | Suggest | CSS + JS |
|
|
72
|
-
| Form Validation | Validate | JS |
|
|
73
|
-
| Date Picker | Datepicker | CSS + JS |
|
|
74
|
-
| Time Picker | Timepicker | CSS + JS |
|
|
75
|
-
| Stepper | Stepper | CSS + JS |
|
|
76
|
-
| Timeline | Timeline | CSS-only |
|
|
77
|
-
| Rating | Rating | CSS + JS |
|
|
78
|
-
| Transfer / Multi-select | Transfer | CSS + JS |
|
|
79
|
-
| Tree View | Tree | CSS + JS |
|
|
80
|
-
| Spotlight / Feature Discovery | Spotlight | CSS + JS |
|
|
81
|
-
|
|
82
|
-
---
|
|
21
|
+
- Pure CSS/JS with no runtime dependencies
|
|
22
|
+
- Modular architecture with optional per-component imports
|
|
23
|
+
- Built-in dark/light/system theme switching
|
|
24
|
+
- Runtime Theme Customizer for color, font, and radius tokens
|
|
25
|
+
- Accessibility-focused components and utilities
|
|
83
26
|
|
|
84
27
|
## Quick Start
|
|
85
28
|
|
|
86
|
-
###
|
|
29
|
+
### CDN (recommended)
|
|
87
30
|
|
|
88
|
-
The quickest way to get started — no install, no build step. Add two lines to any HTML file:
|
|
89
|
-
|
|
90
|
-
```html
|
|
91
|
-
<!-- Vanduo CSS -->
|
|
92
|
-
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/vanduo-oss/framework@main/dist/vanduo.min.css">
|
|
93
|
-
|
|
94
|
-
<!-- Vanduo JS -->
|
|
95
|
-
<script src="https://cdn.jsdelivr.net/gh/vanduo-oss/framework@main/dist/vanduo.min.js"></script>
|
|
96
|
-
<script>Vanduo.init();</script>
|
|
97
|
-
```
|
|
98
|
-
|
|
99
|
-
**Pin to a specific version** for production:
|
|
100
31
|
```html
|
|
101
|
-
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/vanduo-oss/framework@v1.3.
|
|
102
|
-
<script src="https://cdn.jsdelivr.net/gh/vanduo-oss/framework@v1.3.
|
|
32
|
+
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/vanduo-oss/framework@v1.3.5/dist/vanduo.min.css">
|
|
33
|
+
<script src="https://cdn.jsdelivr.net/gh/vanduo-oss/framework@v1.3.5/dist/vanduo.min.js"></script>
|
|
103
34
|
<script>Vanduo.init();</script>
|
|
104
35
|
```
|
|
105
36
|
|
|
106
|
-
###
|
|
107
|
-
|
|
108
|
-
[**Download the dist/ folder**](https://github.com/vanduo-oss/framework/tree/main/dist) and include locally — no internet connection required at runtime:
|
|
37
|
+
### Local dist files
|
|
109
38
|
|
|
110
39
|
```html
|
|
111
40
|
<link rel="stylesheet" href="dist/vanduo.min.css">
|
|
@@ -113,97 +42,37 @@ The quickest way to get started — no install, no build step. Add two lines to
|
|
|
113
42
|
<script>Vanduo.init();</script>
|
|
114
43
|
```
|
|
115
44
|
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
### Option 3: Source Files
|
|
119
|
-
|
|
120
|
-
For development or when you need more control, use the unminified source:
|
|
121
|
-
|
|
122
|
-
```html
|
|
123
|
-
<link rel="stylesheet" href="css/vanduo.css">
|
|
124
|
-
<script src="js/vanduo.js"></script>
|
|
125
|
-
<script>Vanduo.init();</script>
|
|
126
|
-
```
|
|
127
|
-
|
|
128
|
-
### Option 4: With a Bundler (Vite)
|
|
129
|
-
|
|
130
|
-
> **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.
|
|
131
|
-
|
|
132
|
-
Scaffold a Vite project and install Vanduo:
|
|
45
|
+
### Package install (bundlers)
|
|
133
46
|
|
|
134
47
|
```bash
|
|
135
|
-
pnpm create vite my-app --template vanilla
|
|
136
|
-
cd my-app
|
|
137
48
|
pnpm add @vanduo-oss/framework
|
|
138
49
|
```
|
|
139
50
|
|
|
140
|
-
Import in your entry file (e.g. `main.js`):
|
|
141
|
-
|
|
142
51
|
```js
|
|
143
52
|
import '@vanduo-oss/framework/css';
|
|
144
53
|
import { Vanduo } from '@vanduo-oss/framework';
|
|
145
|
-
Vanduo.init();
|
|
146
|
-
```
|
|
147
|
-
|
|
148
|
-
**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.
|
|
149
|
-
|
|
150
|
-
*(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.)*
|
|
151
|
-
|
|
152
|
-
---
|
|
153
|
-
|
|
154
|
-
## LLM Access
|
|
155
|
-
|
|
156
|
-
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.
|
|
157
|
-
|
|
158
|
-
---
|
|
159
54
|
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
Use the hardened upload script to attach only approved bundle artifacts from `dist/`:
|
|
163
|
-
|
|
164
|
-
```bash
|
|
165
|
-
pnpm run release:assets -- v1.3.3
|
|
55
|
+
Vanduo.init();
|
|
166
56
|
```
|
|
167
57
|
|
|
168
|
-
|
|
169
|
-
- If tag is omitted, it defaults to `v` + version from `package.json`.
|
|
170
|
-
- Use `--dry-run` to preview files without uploading.
|
|
171
|
-
|
|
172
|
-
---
|
|
173
|
-
|
|
174
|
-
## Documentation
|
|
58
|
+
## Docs and Resources
|
|
175
59
|
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
[
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
* **Dark Mode**: Works automatically with system preferences. Can be forced via `data-theme="dark"` on `<html>`.
|
|
183
|
-
* **Theme Switcher**: Lightweight light/dark/system toggle that can coexist with Theme Customizer.
|
|
184
|
-
* **Theme Customizer**: Built-in runtime tool to change colors, fonts, and radius.
|
|
185
|
-
* **Modular Imports**: Import only specific components (e.g., `css/components/buttons.css`) to keep your site lean.
|
|
186
|
-
* **Icons**: Includes [Phosphor Icons](https://phosphoricons.com) (Regular + Fill weights bundled).
|
|
187
|
-
|
|
188
|
-
---
|
|
60
|
+
- Website: [vanduo.dev](https://vanduo.dev)
|
|
61
|
+
- Docs: [vanduo.dev/#docs](https://vanduo.dev/#docs)
|
|
62
|
+
- npm: [@vanduo-oss/framework](https://www.npmjs.com/package/@vanduo-oss/framework)
|
|
63
|
+
- Releases: [GitHub Releases](https://github.com/vanduo-oss/framework/releases)
|
|
64
|
+
- LLM reference: [`llms.txt`](llms.txt)
|
|
189
65
|
|
|
190
66
|
## Project Structure
|
|
191
67
|
|
|
192
|
-
```
|
|
68
|
+
```text
|
|
193
69
|
vanduo-framework/
|
|
194
|
-
├── dist/
|
|
195
|
-
├── css/
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
│ └── effects/ # Visual effects
|
|
201
|
-
├── js/
|
|
202
|
-
│ ├── vanduo.js # Main entry point
|
|
203
|
-
│ └── components/ # Component logic
|
|
204
|
-
├── icons/ # Phosphor Icons
|
|
205
|
-
├── fonts/ # Web fonts
|
|
206
|
-
└── tests/ # Framework test suite
|
|
70
|
+
├── dist/ # Production bundles
|
|
71
|
+
├── css/ # Core, components, utilities, effects
|
|
72
|
+
├── js/ # Framework runtime and components
|
|
73
|
+
├── fonts/ # Bundled web fonts
|
|
74
|
+
├── icons/ # Phosphor icons bundle
|
|
75
|
+
└── tests/ # Playwright + linting
|
|
207
76
|
```
|
|
208
77
|
|
|
209
78
|
## Browser Support
|
|
@@ -215,12 +84,10 @@ vanduo-framework/
|
|
|
215
84
|
|
|
216
85
|
## License
|
|
217
86
|
|
|
218
|
-
MIT
|
|
87
|
+
MIT - see [LICENSE](LICENSE).
|
|
88
|
+
Third-party notices are listed in [THIRD-PARTY-LICENSES](THIRD-PARTY-LICENSES).
|
|
219
89
|
|
|
220
90
|
## Credits
|
|
221
91
|
|
|
222
|
-
-
|
|
223
|
-
-
|
|
224
|
-
|
|
225
|
-
---
|
|
226
|
-
Vanduo Framework - Built with ❤️ for the web.
|
|
92
|
+
- [Open Color](https://yeun.github.io/open-color/) (MIT)
|
|
93
|
+
- [Phosphor Icons](https://phosphoricons.com/) (MIT)
|
package/css/components/cards.css
CHANGED
|
@@ -63,6 +63,14 @@
|
|
|
63
63
|
box-shadow: var(--card-shadow);
|
|
64
64
|
}
|
|
65
65
|
|
|
66
|
+
.vd-card-glass {
|
|
67
|
+
background: var(--vd-glass-bg-light);
|
|
68
|
+
border-color: var(--vd-glass-border-light);
|
|
69
|
+
box-shadow: var(--vd-glass-shadow);
|
|
70
|
+
backdrop-filter: blur(var(--vd-glass-blur)) saturate(var(--vd-glass-saturate));
|
|
71
|
+
-webkit-backdrop-filter: blur(var(--vd-glass-blur)) saturate(var(--vd-glass-saturate));
|
|
72
|
+
}
|
|
73
|
+
|
|
66
74
|
/* Card Variants - Elevated (default) */
|
|
67
75
|
.vd-card-elevated,
|
|
68
76
|
.vd-card {
|
|
@@ -96,6 +96,14 @@
|
|
|
96
96
|
transform var(--transition-duration-base) var(--transition-ease);
|
|
97
97
|
}
|
|
98
98
|
|
|
99
|
+
.vd-dropdown-glass .vd-dropdown-menu {
|
|
100
|
+
background: var(--vd-glass-bg-light);
|
|
101
|
+
border-color: var(--vd-glass-border-light);
|
|
102
|
+
box-shadow: var(--vd-glass-shadow);
|
|
103
|
+
backdrop-filter: blur(var(--vd-glass-blur)) saturate(var(--vd-glass-saturate));
|
|
104
|
+
-webkit-backdrop-filter: blur(var(--vd-glass-blur)) saturate(var(--vd-glass-saturate));
|
|
105
|
+
}
|
|
106
|
+
|
|
99
107
|
.vd-dropdown-menu.is-open {
|
|
100
108
|
display: block;
|
|
101
109
|
opacity: 1;
|
package/css/components/fab.css
CHANGED
|
@@ -56,12 +56,26 @@
|
|
|
56
56
|
transition: background 0.2s ease, box-shadow 0.2s ease, transform 0.2s ease;
|
|
57
57
|
}
|
|
58
58
|
|
|
59
|
+
.vd-fab-glass {
|
|
60
|
+
background: var(--vd-glass-bg-light);
|
|
61
|
+
color: var(--text-primary);
|
|
62
|
+
border: 1px solid var(--vd-glass-border-light);
|
|
63
|
+
box-shadow: var(--vd-glass-shadow);
|
|
64
|
+
backdrop-filter: blur(var(--vd-glass-blur)) saturate(var(--vd-glass-saturate));
|
|
65
|
+
-webkit-backdrop-filter: blur(var(--vd-glass-blur)) saturate(var(--vd-glass-saturate));
|
|
66
|
+
}
|
|
67
|
+
|
|
59
68
|
.vd-fab:hover {
|
|
60
69
|
background: var(--fab-hover-bg);
|
|
61
70
|
box-shadow: var(--fab-hover-shadow);
|
|
62
71
|
transform: scale(1.05);
|
|
63
72
|
}
|
|
64
73
|
|
|
74
|
+
.vd-fab-glass:hover {
|
|
75
|
+
background: var(--vd-glass-bg-light);
|
|
76
|
+
box-shadow: var(--vd-glass-float-shadow, var(--vd-glass-shadow));
|
|
77
|
+
}
|
|
78
|
+
|
|
65
79
|
.vd-fab:active {
|
|
66
80
|
transform: scale(0.95);
|
|
67
81
|
}
|
|
@@ -55,6 +55,11 @@
|
|
|
55
55
|
pointer-events: none;
|
|
56
56
|
}
|
|
57
57
|
|
|
58
|
+
.vd-modal-backdrop.vd-modal-glass-backdrop {
|
|
59
|
+
backdrop-filter: blur(calc(var(--vd-glass-blur) * 0.5));
|
|
60
|
+
-webkit-backdrop-filter: blur(calc(var(--vd-glass-blur) * 0.5));
|
|
61
|
+
}
|
|
62
|
+
|
|
58
63
|
.vd-modal-backdrop.is-visible {
|
|
59
64
|
opacity: 1;
|
|
60
65
|
pointer-events: all;
|
|
@@ -114,6 +119,14 @@
|
|
|
114
119
|
outline: 0;
|
|
115
120
|
}
|
|
116
121
|
|
|
122
|
+
.vd-modal-glass .vd-modal-content {
|
|
123
|
+
background: var(--vd-glass-bg-light);
|
|
124
|
+
border-color: var(--vd-glass-border-light);
|
|
125
|
+
box-shadow: var(--vd-glass-shadow);
|
|
126
|
+
backdrop-filter: blur(var(--vd-glass-blur)) saturate(var(--vd-glass-saturate));
|
|
127
|
+
-webkit-backdrop-filter: blur(var(--vd-glass-blur)) saturate(var(--vd-glass-saturate));
|
|
128
|
+
}
|
|
129
|
+
|
|
117
130
|
/* Modal Header */
|
|
118
131
|
.vd-modal-header {
|
|
119
132
|
display: flex;
|
|
@@ -59,6 +59,29 @@
|
|
|
59
59
|
min-height: var(--navbar-height);
|
|
60
60
|
}
|
|
61
61
|
|
|
62
|
+
/* Navbar Variant - Glass */
|
|
63
|
+
.vd-navbar-glass {
|
|
64
|
+
background: var(--vd-glass-bg-light);
|
|
65
|
+
border-bottom: 1px solid var(--vd-glass-border-light);
|
|
66
|
+
box-shadow: var(--vd-glass-shadow);
|
|
67
|
+
backdrop-filter: blur(var(--vd-glass-blur)) saturate(var(--vd-glass-saturate));
|
|
68
|
+
-webkit-backdrop-filter: blur(var(--vd-glass-blur)) saturate(var(--vd-glass-saturate));
|
|
69
|
+
transition:
|
|
70
|
+
background var(--vd-transition-normal, 0.25s ease),
|
|
71
|
+
border-color var(--vd-transition-normal, 0.25s ease),
|
|
72
|
+
box-shadow var(--vd-transition-normal, 0.25s ease),
|
|
73
|
+
backdrop-filter var(--vd-transition-normal, 0.25s ease);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/* Scroll-activated: transparent at rest, frosted glass once scrolled */
|
|
77
|
+
.vd-navbar-glass:not(.vd-navbar-scrolled) {
|
|
78
|
+
background: transparent;
|
|
79
|
+
border-bottom-color: transparent;
|
|
80
|
+
box-shadow: none;
|
|
81
|
+
backdrop-filter: none;
|
|
82
|
+
-webkit-backdrop-filter: none;
|
|
83
|
+
}
|
|
84
|
+
|
|
62
85
|
/* Navbar Container - matches .vd-container-responsive breakpoints for alignment with page content */
|
|
63
86
|
.vd-navbar-container {
|
|
64
87
|
display: flex;
|
|
@@ -459,6 +482,13 @@
|
|
|
459
482
|
z-index: 1000;
|
|
460
483
|
overflow-y: auto;
|
|
461
484
|
}
|
|
485
|
+
|
|
486
|
+
.vd-navbar-glass .vd-navbar-menu {
|
|
487
|
+
background: var(--vd-glass-bg-light);
|
|
488
|
+
border-left: 1px solid var(--vd-glass-border-light);
|
|
489
|
+
backdrop-filter: blur(var(--vd-glass-blur)) saturate(var(--vd-glass-saturate));
|
|
490
|
+
-webkit-backdrop-filter: blur(var(--vd-glass-blur)) saturate(var(--vd-glass-saturate));
|
|
491
|
+
}
|
|
462
492
|
|
|
463
493
|
.vd-navbar-menu.is-open {
|
|
464
494
|
right: 0;
|
package/css/components/toast.css
CHANGED
|
@@ -101,6 +101,14 @@
|
|
|
101
101
|
transition: opacity 0.3s ease, transform 0.3s ease;
|
|
102
102
|
}
|
|
103
103
|
|
|
104
|
+
.vd-toast-glass {
|
|
105
|
+
background: var(--vd-glass-bg-light);
|
|
106
|
+
border-color: var(--vd-glass-border-light);
|
|
107
|
+
box-shadow: var(--vd-glass-shadow);
|
|
108
|
+
backdrop-filter: blur(var(--vd-glass-blur)) saturate(var(--vd-glass-saturate));
|
|
109
|
+
-webkit-backdrop-filter: blur(var(--vd-glass-blur)) saturate(var(--vd-glass-saturate));
|
|
110
|
+
}
|
|
111
|
+
|
|
104
112
|
/* Toast Visible State */
|
|
105
113
|
.vd-toast.is-visible {
|
|
106
114
|
opacity: 1;
|
|
@@ -5,11 +5,11 @@
|
|
|
5
5
|
|
|
6
6
|
:root {
|
|
7
7
|
/* Tooltip Colors */
|
|
8
|
-
--tooltip-bg: var(--color-
|
|
9
|
-
--tooltip-bg-light: var(--color-
|
|
8
|
+
--tooltip-bg: var(--color-white);
|
|
9
|
+
--tooltip-bg-light: var(--color-gray-100);
|
|
10
10
|
--tooltip-bg-dark: var(--color-gray-900);
|
|
11
|
-
--tooltip-text-color: var(--color-
|
|
12
|
-
--tooltip-text-color-light: var(--color-gray-
|
|
11
|
+
--tooltip-text-color: var(--color-gray-900);
|
|
12
|
+
--tooltip-text-color-light: var(--color-gray-800);
|
|
13
13
|
--tooltip-text-color-dark: var(--color-white);
|
|
14
14
|
|
|
15
15
|
/* Tooltip Spacing (Fibonacci pairs: x/y ratio ~ phi) */
|
|
@@ -39,16 +39,16 @@
|
|
|
39
39
|
|
|
40
40
|
/* Dark Theme Overrides */
|
|
41
41
|
[data-theme="dark"] {
|
|
42
|
-
--tooltip-bg: var(--color-gray-
|
|
43
|
-
--tooltip-text-color: var(--color-
|
|
42
|
+
--tooltip-bg: var(--color-gray-900);
|
|
43
|
+
--tooltip-text-color: var(--color-white);
|
|
44
44
|
--tooltip-bg-light: var(--color-gray-800);
|
|
45
45
|
--tooltip-text-color-light: var(--color-gray-100);
|
|
46
46
|
}
|
|
47
47
|
|
|
48
48
|
@media (prefers-color-scheme: dark) {
|
|
49
49
|
:root:not([data-theme]) {
|
|
50
|
-
--tooltip-bg: var(--color-gray-
|
|
51
|
-
--tooltip-text-color: var(--color-
|
|
50
|
+
--tooltip-bg: var(--color-gray-900);
|
|
51
|
+
--tooltip-text-color: var(--color-white);
|
|
52
52
|
--tooltip-bg-light: var(--color-gray-800);
|
|
53
53
|
--tooltip-text-color-light: var(--color-gray-100);
|
|
54
54
|
}
|
|
@@ -78,6 +78,15 @@
|
|
|
78
78
|
transition: opacity var(--transition-duration-base) var(--transition-ease);
|
|
79
79
|
}
|
|
80
80
|
|
|
81
|
+
.vd-tooltip-glass {
|
|
82
|
+
background: var(--vd-glass-bg-light);
|
|
83
|
+
border: 1px solid var(--vd-glass-border-light);
|
|
84
|
+
box-shadow: var(--vd-glass-shadow);
|
|
85
|
+
color: var(--text-primary);
|
|
86
|
+
backdrop-filter: blur(var(--vd-glass-blur)) saturate(var(--vd-glass-saturate));
|
|
87
|
+
-webkit-backdrop-filter: blur(var(--vd-glass-blur)) saturate(var(--vd-glass-saturate));
|
|
88
|
+
}
|
|
89
|
+
|
|
81
90
|
.vd-tooltip.is-visible {
|
|
82
91
|
opacity: 1;
|
|
83
92
|
}
|
|
@@ -151,6 +160,26 @@
|
|
|
151
160
|
border-color: transparent var(--tooltip-bg) transparent transparent;
|
|
152
161
|
}
|
|
153
162
|
|
|
163
|
+
.vd-tooltip-glass.vd-tooltip-top::before,
|
|
164
|
+
.vd-tooltip-glass[data-placement="top"]::before {
|
|
165
|
+
border-color: var(--vd-glass-bg-light) transparent transparent;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
.vd-tooltip-glass.vd-tooltip-bottom::before,
|
|
169
|
+
.vd-tooltip-glass[data-placement="bottom"]::before {
|
|
170
|
+
border-color: transparent transparent var(--vd-glass-bg-light);
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
.vd-tooltip-glass.vd-tooltip-left::before,
|
|
174
|
+
.vd-tooltip-glass[data-placement="left"]::before {
|
|
175
|
+
border-color: transparent transparent transparent var(--vd-glass-bg-light);
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
.vd-tooltip-glass.vd-tooltip-right::before,
|
|
179
|
+
.vd-tooltip-glass[data-placement="right"]::before {
|
|
180
|
+
border-color: transparent var(--vd-glass-bg-light) transparent transparent;
|
|
181
|
+
}
|
|
182
|
+
|
|
154
183
|
/* Tooltip Variants - Light */
|
|
155
184
|
.vd-tooltip-light {
|
|
156
185
|
background-color: var(--tooltip-bg-light);
|
package/css/core/tokens.css
CHANGED
|
@@ -142,6 +142,33 @@
|
|
|
142
142
|
--vd-shadow-lg: 0 10px 15px rgba(0, 0, 0, 0.1);
|
|
143
143
|
--vd-shadow-xl: 0 20px 25px rgba(0, 0, 0, 0.15);
|
|
144
144
|
|
|
145
|
+
/* ============================================
|
|
146
|
+
* GLASS TOKENS
|
|
147
|
+
* ============================================ */
|
|
148
|
+
--glass-blur: 12px;
|
|
149
|
+
--glass-saturate: 1.8;
|
|
150
|
+
--glass-bg-opacity: 0.65;
|
|
151
|
+
--glass-bg-light: rgba(255, 255, 255, var(--glass-bg-opacity));
|
|
152
|
+
--glass-bg-dark: rgba(30, 30, 30, var(--glass-bg-opacity));
|
|
153
|
+
--glass-border-alpha: 0.18;
|
|
154
|
+
--glass-border-light: rgba(255, 255, 255, var(--glass-border-alpha));
|
|
155
|
+
--glass-border-dark: rgba(255, 255, 255, 0.08);
|
|
156
|
+
--glass-highlight-alpha: 0.25;
|
|
157
|
+
--glass-shadow: 0 8px 32px rgba(0, 0, 0, 0.12);
|
|
158
|
+
--glass-noise-opacity: 0.03;
|
|
159
|
+
|
|
160
|
+
--vd-glass-blur: var(--glass-blur);
|
|
161
|
+
--vd-glass-saturate: var(--glass-saturate);
|
|
162
|
+
--vd-glass-bg-opacity: var(--glass-bg-opacity);
|
|
163
|
+
--vd-glass-bg-light: var(--glass-bg-light);
|
|
164
|
+
--vd-glass-bg-dark: var(--glass-bg-dark);
|
|
165
|
+
--vd-glass-border-alpha: var(--glass-border-alpha);
|
|
166
|
+
--vd-glass-border-light: var(--glass-border-light);
|
|
167
|
+
--vd-glass-border-dark: var(--glass-border-dark);
|
|
168
|
+
--vd-glass-highlight-alpha: var(--glass-highlight-alpha);
|
|
169
|
+
--vd-glass-shadow: var(--glass-shadow);
|
|
170
|
+
--vd-glass-noise-opacity: var(--glass-noise-opacity);
|
|
171
|
+
|
|
145
172
|
/* ============================================
|
|
146
173
|
* TRANSITION TOKENS
|
|
147
174
|
* ============================================ */
|
|
@@ -190,6 +217,11 @@
|
|
|
190
217
|
--vd-shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.3);
|
|
191
218
|
--vd-shadow-md: 0 4px 6px rgba(0, 0, 0, 0.4);
|
|
192
219
|
--vd-shadow-lg: 0 10px 15px rgba(0, 0, 0, 0.4);
|
|
220
|
+
|
|
221
|
+
--glass-bg-light: var(--glass-bg-dark);
|
|
222
|
+
--glass-border-light: var(--glass-border-dark);
|
|
223
|
+
--glass-shadow: 0 12px 36px rgba(0, 0, 0, 0.45);
|
|
224
|
+
--glass-highlight-alpha: 0.16;
|
|
193
225
|
}
|
|
194
226
|
|
|
195
227
|
/* Dark mode via prefers-color-scheme */
|
|
@@ -209,5 +241,10 @@
|
|
|
209
241
|
--vd-shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.3);
|
|
210
242
|
--vd-shadow-md: 0 4px 6px rgba(0, 0, 0, 0.4);
|
|
211
243
|
--vd-shadow-lg: 0 10px 15px rgba(0, 0, 0, 0.4);
|
|
244
|
+
|
|
245
|
+
--glass-bg-light: var(--glass-bg-dark);
|
|
246
|
+
--glass-border-light: var(--glass-border-dark);
|
|
247
|
+
--glass-shadow: 0 12px 36px rgba(0, 0, 0, 0.45);
|
|
248
|
+
--glass-highlight-alpha: 0.16;
|
|
212
249
|
}
|
|
213
250
|
}
|
package/css/core/vd-aliases.css
CHANGED
|
@@ -33,6 +33,19 @@
|
|
|
33
33
|
--vd-shadow-md: var(--shadow-md);
|
|
34
34
|
--vd-shadow-lg: var(--shadow-lg);
|
|
35
35
|
|
|
36
|
+
/* Glass */
|
|
37
|
+
--vd-glass-blur: var(--glass-blur, 12px);
|
|
38
|
+
--vd-glass-saturate: var(--glass-saturate, 1.8);
|
|
39
|
+
--vd-glass-bg-opacity: var(--glass-bg-opacity, 0.65);
|
|
40
|
+
--vd-glass-bg-light: var(--glass-bg-light, rgba(255, 255, 255, var(--vd-glass-bg-opacity)));
|
|
41
|
+
--vd-glass-bg-dark: var(--glass-bg-dark, rgba(30, 30, 30, var(--vd-glass-bg-opacity)));
|
|
42
|
+
--vd-glass-border-alpha: var(--glass-border-alpha, 0.18);
|
|
43
|
+
--vd-glass-border-light: var(--glass-border-light, rgba(255, 255, 255, var(--vd-glass-border-alpha)));
|
|
44
|
+
--vd-glass-border-dark: var(--glass-border-dark, rgba(255, 255, 255, 0.08));
|
|
45
|
+
--vd-glass-highlight-alpha: var(--glass-highlight-alpha, 0.25);
|
|
46
|
+
--vd-glass-shadow: var(--glass-shadow, 0 8px 32px rgba(0, 0, 0, 0.12));
|
|
47
|
+
--vd-glass-noise-opacity: var(--glass-noise-opacity, 0.03);
|
|
48
|
+
|
|
36
49
|
/* Typography */
|
|
37
50
|
--vd-font-family-base: var(--font-family-sans);
|
|
38
51
|
--vd-font-family-mono: var(--font-family-mono);
|