@sublimee/surfaces 0.1.1 → 0.1.3
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/README.md +88 -0
- package/dist/surface.css +53 -11
- package/package.json +2 -2
- package/src/surface.css +53 -11
package/README.md
CHANGED
|
@@ -70,6 +70,28 @@ The `glass` variant creates a frosted glass effect using `backdrop-filter`. It's
|
|
|
70
70
|
|
|
71
71
|
Browser support: Glass uses `backdrop-filter` which is supported in all modern browsers. In unsupported browsers, the surface will fall back to a solid semi-transparent background.
|
|
72
72
|
|
|
73
|
+
#### Glass Dark Mode Behavior
|
|
74
|
+
|
|
75
|
+
The glass surface automatically adapts its background color based on the theme:
|
|
76
|
+
|
|
77
|
+
| Mode | Background | Use Case |
|
|
78
|
+
|------|------------|----------|
|
|
79
|
+
| **Light** | White translucent (`--sublime-color-overlay-light`) | Dark text on light backgrounds |
|
|
80
|
+
| **Dark** | Black translucent (`--sublime-color-overlay-dark`) | Light text on dark backgrounds |
|
|
81
|
+
|
|
82
|
+
This ensures the glass effect works correctly in both modes. In light mode, the white overlay provides a frosted look that darkens text for readability. In dark mode, the black overlay provides depth while keeping light text legible.
|
|
83
|
+
|
|
84
|
+
```tsx
|
|
85
|
+
// Automatic adaptation - no configuration needed
|
|
86
|
+
<Surface variant="glass">
|
|
87
|
+
<p>This text is readable on any background</p>
|
|
88
|
+
</Surface>
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
The glass effect uses these semantic tokens:
|
|
92
|
+
- `--sublime-color-overlay-light`: `rgb(255 255 255 / 0.8)` in light mode
|
|
93
|
+
- `--sublime-color-overlay-dark`: `rgb(0 0 0 / 0.5)` in dark mode
|
|
94
|
+
|
|
73
95
|
### Glass Utility Class
|
|
74
96
|
|
|
75
97
|
For simple use cases, apply the glass effect directly with a CSS class:
|
|
@@ -88,6 +110,72 @@ This is the same glass styling as the Surface component, but without the additio
|
|
|
88
110
|
|
|
89
111
|
Both `sublime-glassed` and `variant="glass"` respect dark mode automatically.
|
|
90
112
|
|
|
113
|
+
#### Glass Configuration API
|
|
114
|
+
|
|
115
|
+
Customize the glass effect using CSS custom properties:
|
|
116
|
+
|
|
117
|
+
| Property | Default | Description |
|
|
118
|
+
|----------|---------|-------------|
|
|
119
|
+
| `--sublime-glass-blur` | `12px` | Blur intensity (higher = more frosted) |
|
|
120
|
+
| `--sublime-glass-bg` | Semantic overlay* | Background color/opacity |
|
|
121
|
+
| `--sublime-glass-border` | Semantic border* | Border color |
|
|
122
|
+
| `--sublime-glass-shadow` | Semantic shadow* | Box shadow |
|
|
123
|
+
|
|
124
|
+
\* Uses `--sublime-color-overlay-light/dark`, `--sublime-color-border-*`, and `--sublime-shadow-*` tokens based on theme.
|
|
125
|
+
|
|
126
|
+
**Adjust blur and opacity:**
|
|
127
|
+
```tsx
|
|
128
|
+
// More opaque, heavier blur for busy backgrounds
|
|
129
|
+
<Surface
|
|
130
|
+
variant="glass"
|
|
131
|
+
style={{
|
|
132
|
+
'--sublime-glass-blur': '20px',
|
|
133
|
+
'--sublime-glass-bg': 'rgba(255, 255, 255, 0.95)'
|
|
134
|
+
}}
|
|
135
|
+
>
|
|
136
|
+
Content
|
|
137
|
+
</Surface>
|
|
138
|
+
|
|
139
|
+
// Or with utility class
|
|
140
|
+
<div class="sublime-glassed" style="--sublime-glass-blur: 20px; --sublime-glass-bg: rgba(255,255,255,0.95)">
|
|
141
|
+
Content
|
|
142
|
+
</div>
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
**Custom color tint:**
|
|
146
|
+
```tsx
|
|
147
|
+
// Blue-tinted glass
|
|
148
|
+
<Surface
|
|
149
|
+
variant="glass"
|
|
150
|
+
style={{ '--sublime-glass-bg': 'rgba(59, 130, 246, 0.3)' }}
|
|
151
|
+
>
|
|
152
|
+
Blue glass
|
|
153
|
+
</Surface>
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
**Darker modifier for very dark backgrounds:**
|
|
157
|
+
|
|
158
|
+
When the default dark mode glass is too subtle on near-black backgrounds, use the `sublime-glassed--darker` modifier:
|
|
159
|
+
|
|
160
|
+
```html
|
|
161
|
+
<!-- Default may be invisible on black -->
|
|
162
|
+
<div class="sublime-glassed">Default</div>
|
|
163
|
+
|
|
164
|
+
<!-- Lighter tint for visibility -->
|
|
165
|
+
<div class="sublime-glassed sublime-glassed--darker">More visible</div>
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
This switches to `rgba(255, 255, 255, 0.15)` background with `rgba(255, 255, 255, 0.25)` border—subtle but visible on pure black.
|
|
169
|
+
|
|
170
|
+
**Override per-element:**
|
|
171
|
+
```css
|
|
172
|
+
.my-glass-button {
|
|
173
|
+
/* Always use light glass, even in dark mode */
|
|
174
|
+
--sublime-glass-bg: rgba(255, 255, 255, 0.9);
|
|
175
|
+
--sublime-glass-border: rgba(255, 255, 255, 0.3);
|
|
176
|
+
}
|
|
177
|
+
```
|
|
178
|
+
|
|
91
179
|
## Theming
|
|
92
180
|
|
|
93
181
|
For full theming support including dark mode, also import the tokens:
|
package/dist/surface.css
CHANGED
|
@@ -228,34 +228,76 @@
|
|
|
228
228
|
* Usage: <div class="sublime-glassed">Content</div>
|
|
229
229
|
* Or with Surface: <Surface variant="glass">Content</Surface>
|
|
230
230
|
*
|
|
231
|
+
* Configuration API (CSS custom properties):
|
|
232
|
+
* --sublime-glass-bg: Background color/opacity (default: semantic overlay)
|
|
233
|
+
* --sublime-glass-blur: Blur amount (default: 12px)
|
|
234
|
+
* --sublime-glass-border: Border color (default: semantic border)
|
|
235
|
+
* --sublime-glass-shadow: Box shadow (default: semantic shadow)
|
|
236
|
+
*
|
|
237
|
+
* Examples:
|
|
238
|
+
* // Increase blur and opacity
|
|
239
|
+
* <div class="sublime-glassed" style="--sublime-glass-blur: 20px; --sublime-glass-bg: rgba(255,255,255,0.95)">
|
|
240
|
+
*
|
|
241
|
+
* // Custom color tint
|
|
242
|
+
* <div class="sublime-glassed" style="--sublime-glass-bg: rgba(59, 130, 246, 0.3)">
|
|
243
|
+
*
|
|
244
|
+
* // Darker in dark mode
|
|
245
|
+
* <div class="sublime-glassed dark-glass-darker">
|
|
246
|
+
*
|
|
231
247
|
* Note: The Surface component applies additional padding, radius, and layout.
|
|
232
248
|
* This utility is the raw glass styling only.
|
|
249
|
+
*
|
|
250
|
+
* Light mode: white translucent overlay (readable on light backgrounds)
|
|
251
|
+
* Dark mode: black translucent overlay (readable on dark backgrounds)
|
|
233
252
|
*/
|
|
234
253
|
.sublime-glassed,
|
|
235
254
|
.sublime-surface--glass {
|
|
236
|
-
|
|
255
|
+
/* Configurable properties - override these to customize */
|
|
256
|
+
--sublime-glass-blur: 12px;
|
|
257
|
+
--sublime-glass-bg: var(--sublime-color-overlay-light, rgba(255, 255, 255, 0.8));
|
|
258
|
+
--sublime-glass-border: var(--sublime-color-border-primary, rgba(0, 0, 0, 0.1));
|
|
259
|
+
--sublime-glass-shadow: var(--sublime-shadow-md, 0 4px 6px -1px rgba(0, 0, 0, 0.1));
|
|
260
|
+
|
|
261
|
+
/* Light mode: white glass for dark text on light backgrounds */
|
|
262
|
+
background: var(--sublime-glass-bg);
|
|
237
263
|
border-radius: 16px;
|
|
238
|
-
box-shadow:
|
|
239
|
-
backdrop-filter: blur(
|
|
240
|
-
-webkit-backdrop-filter: blur(
|
|
241
|
-
border: 1px solid
|
|
264
|
+
box-shadow: var(--sublime-glass-shadow);
|
|
265
|
+
backdrop-filter: blur(var(--sublime-glass-blur));
|
|
266
|
+
-webkit-backdrop-filter: blur(var(--sublime-glass-blur));
|
|
267
|
+
border: 1px solid var(--sublime-glass-border);
|
|
268
|
+
transition: var(--sublime-transition-button);
|
|
242
269
|
}
|
|
243
270
|
|
|
271
|
+
/* Hover state */
|
|
272
|
+
.sublime-glassed:hover,
|
|
273
|
+
.sublime-surface--glass:hover {
|
|
274
|
+
box-shadow: var(--sublime-shadow-lg, 0 10px 15px -3px rgba(0, 0, 0, 0.1));
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
/* Dark mode: switch to dark translucent overlay for light text */
|
|
244
278
|
.dark .sublime-glassed,
|
|
245
279
|
[data-theme="dark"] .sublime-glassed,
|
|
246
280
|
.dark .sublime-surface--glass,
|
|
247
281
|
[data-theme="dark"] .sublime-surface--glass {
|
|
248
|
-
|
|
249
|
-
border-color
|
|
250
|
-
|
|
282
|
+
--sublime-glass-bg: var(--sublime-color-overlay-dark, rgba(0, 0, 0, 0.5));
|
|
283
|
+
--sublime-glass-border: var(--sublime-color-border-surface, rgba(255, 255, 255, 0.2));
|
|
284
|
+
--sublime-glass-shadow: var(--sublime-shadow-lg, 0 10px 15px -3px rgba(0, 0, 0, 0.5));
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
/* Darker glass modifier - for very dark backgrounds where default isn't visible */
|
|
288
|
+
.dark .sublime-glassed--darker,
|
|
289
|
+
[data-theme="dark"] .sublime-glassed--darker,
|
|
290
|
+
.sublime-glassed.sublime-glassed--darker {
|
|
291
|
+
--sublime-glass-bg: rgba(255, 255, 255, 0.15);
|
|
292
|
+
--sublime-glass-border: rgba(255, 255, 255, 0.25);
|
|
251
293
|
}
|
|
252
294
|
|
|
253
295
|
/* System preference dark mode */
|
|
254
296
|
@media (prefers-color-scheme: dark) {
|
|
255
297
|
:root:not([data-theme="light"]):not(.light) .sublime-glassed,
|
|
256
298
|
:root:not([data-theme="light"]):not(.light) .sublime-surface--glass {
|
|
257
|
-
|
|
258
|
-
border-color
|
|
259
|
-
|
|
299
|
+
--sublime-glass-bg: var(--sublime-color-overlay-dark, rgba(0, 0, 0, 0.5));
|
|
300
|
+
--sublime-glass-border: var(--sublime-color-border-surface, rgba(255, 255, 255, 0.2));
|
|
301
|
+
--sublime-glass-shadow: var(--sublime-shadow-lg, 0 10px 15px -3px rgba(0, 0, 0, 0.5));
|
|
260
302
|
}
|
|
261
303
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sublimee/surfaces",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.3",
|
|
4
4
|
"description": "Surface container components for Sublime",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"module": "./dist/index.mjs",
|
|
@@ -52,7 +52,7 @@
|
|
|
52
52
|
"peerDependencies": {
|
|
53
53
|
"react": "^19.0.0",
|
|
54
54
|
"react-dom": "^19.0.0",
|
|
55
|
-
"@sublimee/tokens": "0.1.
|
|
55
|
+
"@sublimee/tokens": "0.1.18"
|
|
56
56
|
},
|
|
57
57
|
"peerDependenciesMeta": {
|
|
58
58
|
"@sublimee/tokens": {
|
package/src/surface.css
CHANGED
|
@@ -228,34 +228,76 @@
|
|
|
228
228
|
* Usage: <div class="sublime-glassed">Content</div>
|
|
229
229
|
* Or with Surface: <Surface variant="glass">Content</Surface>
|
|
230
230
|
*
|
|
231
|
+
* Configuration API (CSS custom properties):
|
|
232
|
+
* --sublime-glass-bg: Background color/opacity (default: semantic overlay)
|
|
233
|
+
* --sublime-glass-blur: Blur amount (default: 12px)
|
|
234
|
+
* --sublime-glass-border: Border color (default: semantic border)
|
|
235
|
+
* --sublime-glass-shadow: Box shadow (default: semantic shadow)
|
|
236
|
+
*
|
|
237
|
+
* Examples:
|
|
238
|
+
* // Increase blur and opacity
|
|
239
|
+
* <div class="sublime-glassed" style="--sublime-glass-blur: 20px; --sublime-glass-bg: rgba(255,255,255,0.95)">
|
|
240
|
+
*
|
|
241
|
+
* // Custom color tint
|
|
242
|
+
* <div class="sublime-glassed" style="--sublime-glass-bg: rgba(59, 130, 246, 0.3)">
|
|
243
|
+
*
|
|
244
|
+
* // Darker in dark mode
|
|
245
|
+
* <div class="sublime-glassed dark-glass-darker">
|
|
246
|
+
*
|
|
231
247
|
* Note: The Surface component applies additional padding, radius, and layout.
|
|
232
248
|
* This utility is the raw glass styling only.
|
|
249
|
+
*
|
|
250
|
+
* Light mode: white translucent overlay (readable on light backgrounds)
|
|
251
|
+
* Dark mode: black translucent overlay (readable on dark backgrounds)
|
|
233
252
|
*/
|
|
234
253
|
.sublime-glassed,
|
|
235
254
|
.sublime-surface--glass {
|
|
236
|
-
|
|
255
|
+
/* Configurable properties - override these to customize */
|
|
256
|
+
--sublime-glass-blur: 12px;
|
|
257
|
+
--sublime-glass-bg: var(--sublime-color-overlay-light, rgba(255, 255, 255, 0.8));
|
|
258
|
+
--sublime-glass-border: var(--sublime-color-border-primary, rgba(0, 0, 0, 0.1));
|
|
259
|
+
--sublime-glass-shadow: var(--sublime-shadow-md, 0 4px 6px -1px rgba(0, 0, 0, 0.1));
|
|
260
|
+
|
|
261
|
+
/* Light mode: white glass for dark text on light backgrounds */
|
|
262
|
+
background: var(--sublime-glass-bg);
|
|
237
263
|
border-radius: 16px;
|
|
238
|
-
box-shadow:
|
|
239
|
-
backdrop-filter: blur(
|
|
240
|
-
-webkit-backdrop-filter: blur(
|
|
241
|
-
border: 1px solid
|
|
264
|
+
box-shadow: var(--sublime-glass-shadow);
|
|
265
|
+
backdrop-filter: blur(var(--sublime-glass-blur));
|
|
266
|
+
-webkit-backdrop-filter: blur(var(--sublime-glass-blur));
|
|
267
|
+
border: 1px solid var(--sublime-glass-border);
|
|
268
|
+
transition: var(--sublime-transition-button);
|
|
242
269
|
}
|
|
243
270
|
|
|
271
|
+
/* Hover state */
|
|
272
|
+
.sublime-glassed:hover,
|
|
273
|
+
.sublime-surface--glass:hover {
|
|
274
|
+
box-shadow: var(--sublime-shadow-lg, 0 10px 15px -3px rgba(0, 0, 0, 0.1));
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
/* Dark mode: switch to dark translucent overlay for light text */
|
|
244
278
|
.dark .sublime-glassed,
|
|
245
279
|
[data-theme="dark"] .sublime-glassed,
|
|
246
280
|
.dark .sublime-surface--glass,
|
|
247
281
|
[data-theme="dark"] .sublime-surface--glass {
|
|
248
|
-
|
|
249
|
-
border-color
|
|
250
|
-
|
|
282
|
+
--sublime-glass-bg: var(--sublime-color-overlay-dark, rgba(0, 0, 0, 0.5));
|
|
283
|
+
--sublime-glass-border: var(--sublime-color-border-surface, rgba(255, 255, 255, 0.2));
|
|
284
|
+
--sublime-glass-shadow: var(--sublime-shadow-lg, 0 10px 15px -3px rgba(0, 0, 0, 0.5));
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
/* Darker glass modifier - for very dark backgrounds where default isn't visible */
|
|
288
|
+
.dark .sublime-glassed--darker,
|
|
289
|
+
[data-theme="dark"] .sublime-glassed--darker,
|
|
290
|
+
.sublime-glassed.sublime-glassed--darker {
|
|
291
|
+
--sublime-glass-bg: rgba(255, 255, 255, 0.15);
|
|
292
|
+
--sublime-glass-border: rgba(255, 255, 255, 0.25);
|
|
251
293
|
}
|
|
252
294
|
|
|
253
295
|
/* System preference dark mode */
|
|
254
296
|
@media (prefers-color-scheme: dark) {
|
|
255
297
|
:root:not([data-theme="light"]):not(.light) .sublime-glassed,
|
|
256
298
|
:root:not([data-theme="light"]):not(.light) .sublime-surface--glass {
|
|
257
|
-
|
|
258
|
-
border-color
|
|
259
|
-
|
|
299
|
+
--sublime-glass-bg: var(--sublime-color-overlay-dark, rgba(0, 0, 0, 0.5));
|
|
300
|
+
--sublime-glass-border: var(--sublime-color-border-surface, rgba(255, 255, 255, 0.2));
|
|
301
|
+
--sublime-glass-shadow: var(--sublime-shadow-lg, 0 10px 15px -3px rgba(0, 0, 0, 0.5));
|
|
260
302
|
}
|
|
261
303
|
}
|