@mochabug/adapt-web 1.0.1-rc.12 → 1.0.1-rc.13
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 +104 -137
- package/dist/README.md +119 -152
- package/dist/esm/AdaptAutomationElement.js +1 -1
- package/dist/esm/cap-adapter.js +1 -1
- package/dist/esm/core.js +1 -1
- package/dist/esm/css-panel.js +198 -166
- package/dist/esm/index.js +1 -1
- package/dist/esm/theme.js +1 -0
- package/dist/styles.css +198 -166
- package/dist/types/AdaptAutomationElement.d.ts +4 -0
- package/dist/types/core.d.ts +2 -1
- package/dist/types/css-panel.d.ts +1 -1
- package/dist/types/index.d.ts +12 -1
- package/dist/types/theme.d.ts +42 -0
- package/dist/types/types.d.ts +25 -0
- package/dist/umd/adapt-web.cap.js +1 -1
- package/dist/umd/adapt-web.cap.js.br +0 -0
- package/dist/umd/adapt-web.cap.min.js +1 -1
- package/dist/umd/adapt-web.cap.min.js.br +0 -0
- package/dist/umd/adapt-web.core.js +314 -167
- package/dist/umd/adapt-web.core.js.br +0 -0
- package/dist/umd/adapt-web.core.min.js +201 -169
- package/dist/umd/adapt-web.core.min.js.br +0 -0
- package/dist/umd/adapt-web.js +313 -167
- package/dist/umd/adapt-web.js.br +0 -0
- package/dist/umd/adapt-web.min.js +204 -172
- package/dist/umd/adapt-web.min.js.br +0 -0
- package/dist/umd/styles.css +198 -166
- package/dist/umd/styles.css.br +0 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -132,6 +132,7 @@ Set via element reference — not available as HTML attributes.
|
|
|
132
132
|
| `styles` | `Partial<CSSStyleDeclaration>` |
|
|
133
133
|
| `persistOptions` | `{ storage?: 'session' \| 'local'; ttl?: number; key?: string }` |
|
|
134
134
|
| `text` | `StatusText` |
|
|
135
|
+
| `theme` | `AdaptTheme` |
|
|
135
136
|
|
|
136
137
|
### Events
|
|
137
138
|
|
|
@@ -228,172 +229,128 @@ el.addEventListener('adapt-cap-solve', (e) => {
|
|
|
228
229
|
|
|
229
230
|
## Styling
|
|
230
231
|
|
|
231
|
-
|
|
232
|
+
Three ways to theme, from simplest to most powerful:
|
|
232
233
|
|
|
233
|
-
###
|
|
234
|
+
### 1. `theme` prop (recommended)
|
|
234
235
|
|
|
235
|
-
|
|
236
|
+
Set the `theme` JS property for semantic theming. Derives 30+ CSS variables from a few tokens.
|
|
236
237
|
|
|
237
|
-
```
|
|
238
|
-
|
|
239
|
-
.
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
/* Dark mode — add `dark-mode` attribute, then override */
|
|
249
|
-
.mb-adapt[dark-mode] {
|
|
250
|
-
--mb-adapt-fork-bg: #1e1e1e;
|
|
251
|
-
--mb-adapt-fork-tab-bg: #2a2a2a;
|
|
252
|
-
--mb-adapt-fork-tab-active-bg: #1e1e1e;
|
|
253
|
-
--mb-adapt-fork-tab-color: #e0e0e0;
|
|
254
|
-
--mb-adapt-fork-tab-inactive-color: #777;
|
|
255
|
-
--mb-adapt-fork-separator: #3a3a3a;
|
|
256
|
-
}
|
|
238
|
+
```javascript
|
|
239
|
+
const el = document.querySelector('adapt-automation');
|
|
240
|
+
el.theme = {
|
|
241
|
+
mode: 'dark',
|
|
242
|
+
primary: '#6366f1',
|
|
243
|
+
background: '#0f172a',
|
|
244
|
+
surface: '#1e293b',
|
|
245
|
+
text: '#f1f5f9',
|
|
246
|
+
border: '#334155',
|
|
247
|
+
font: '"Inter", sans-serif',
|
|
248
|
+
};
|
|
257
249
|
```
|
|
258
250
|
|
|
259
|
-
|
|
251
|
+
**`AdaptTheme` interface:**
|
|
260
252
|
|
|
261
|
-
|
|
|
262
|
-
|
|
263
|
-
|
|
|
264
|
-
|
|
|
265
|
-
|
|
|
266
|
-
|
|
|
267
|
-
|
|
|
268
|
-
|
|
|
269
|
-
|
|
|
253
|
+
| Token | Effect |
|
|
254
|
+
|-------|--------|
|
|
255
|
+
| `mode` | `'light'` or `'dark'` — toggles dark mode class |
|
|
256
|
+
| `primary` | Accent color — derives separator, drop target, spinner colors |
|
|
257
|
+
| `background` | Root bg, active tab bg, status card bg |
|
|
258
|
+
| `surface` | Panel content bg, tab bar bg |
|
|
259
|
+
| `text` | Active tab text, status text, cap widget text |
|
|
260
|
+
| `textSecondary` | Inactive tab text |
|
|
261
|
+
| `border` | Tab separators, status card border, cap border |
|
|
262
|
+
| `font` | All panel UI text + cap widget |
|
|
263
|
+
| `vars` | `Record<string, string>` — direct variable overrides (key = name without `--mb-adapt-` prefix) |
|
|
264
|
+
|
|
265
|
+
The `vars` escape hatch lets you override any variable:
|
|
266
|
+
|
|
267
|
+
```javascript
|
|
268
|
+
el.theme = {
|
|
269
|
+
primary: '#6366f1',
|
|
270
|
+
vars: {
|
|
271
|
+
'floating-shadow': 'none',
|
|
272
|
+
'floating-border': '2px solid #6366f1',
|
|
273
|
+
'cap-border-radius': '0px',
|
|
274
|
+
},
|
|
275
|
+
};
|
|
276
|
+
```
|
|
270
277
|
|
|
271
|
-
###
|
|
278
|
+
### 2. CSS custom properties
|
|
272
279
|
|
|
273
|
-
|
|
280
|
+
Set `--mb-adapt-*` variables on `.mb-adapt` or any ancestor. No Shadow DOM — standard CSS inheritance works.
|
|
274
281
|
|
|
275
282
|
```css
|
|
276
|
-
/*
|
|
277
|
-
* Example: brand theme using primary / secondary / accent colors.
|
|
278
|
-
* Maps your design-system tokens to Adapt's CSS variables for both modes.
|
|
279
|
-
*/
|
|
280
|
-
|
|
281
|
-
/* ── Light mode ────────────────────────────────── */
|
|
282
283
|
.mb-adapt {
|
|
283
|
-
|
|
284
|
-
--mb-adapt-fork-bg:
|
|
285
|
-
--mb-adapt-fork-tab-
|
|
286
|
-
--mb-adapt-fork-
|
|
287
|
-
--mb-adapt-fork-tab-color: #1e293b; /* on-surface */
|
|
288
|
-
--mb-adapt-fork-tab-inactive-color: #64748b; /* on-surface-muted */
|
|
289
|
-
--mb-adapt-fork-separator: #cbd5e1; /* outline */
|
|
290
|
-
|
|
291
|
-
/* Accent — resize handle highlight */
|
|
292
|
-
--mb-adapt-separator-active: rgba(79, 70, 229, 0.5); /* primary */
|
|
293
|
-
|
|
294
|
-
/* Cap widget */
|
|
295
|
-
--mb-adapt-cap-background: #ffffff;
|
|
296
|
-
--mb-adapt-cap-border-color: #e2e8f0;
|
|
297
|
-
--mb-adapt-cap-color: #1e293b;
|
|
298
|
-
--mb-adapt-cap-spinner-color: #4f46e5; /* primary */
|
|
299
|
-
|
|
300
|
-
/* Status cards */
|
|
301
|
-
--mb-adapt-status-card-bg: #ffffff;
|
|
302
|
-
--mb-adapt-status-card-border: #e2e8f0;
|
|
303
|
-
--mb-adapt-status-text: #334155;
|
|
284
|
+
--mb-adapt-fork-bg: #ffffff;
|
|
285
|
+
--mb-adapt-fork-tab-bg: #f5f5f5;
|
|
286
|
+
--mb-adapt-fork-tab-color: #1a1a1a;
|
|
287
|
+
--mb-adapt-fork-separator: #e0e0e0;
|
|
304
288
|
}
|
|
305
289
|
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
--mb-adapt-fork-bg:
|
|
309
|
-
--mb-adapt-fork-tab-
|
|
310
|
-
--mb-adapt-fork-
|
|
311
|
-
--mb-adapt-fork-tab-color: #f1f5f9; /* on-surface-dark */
|
|
312
|
-
--mb-adapt-fork-tab-inactive-color: #94a3b8; /* muted-dark */
|
|
313
|
-
--mb-adapt-fork-separator: #334155; /* outline-dark */
|
|
314
|
-
|
|
315
|
-
--mb-adapt-separator-active: rgba(129, 140, 248, 0.6); /* primary-light */
|
|
316
|
-
|
|
317
|
-
--mb-adapt-cap-background: #1e293b;
|
|
318
|
-
--mb-adapt-cap-border-color: #334155;
|
|
319
|
-
--mb-adapt-cap-color: #f1f5f9;
|
|
320
|
-
--mb-adapt-cap-spinner-color: #818cf8; /* primary-light */
|
|
321
|
-
|
|
322
|
-
--mb-adapt-status-card-bg: #1e293b;
|
|
323
|
-
--mb-adapt-status-card-border: #334155;
|
|
324
|
-
--mb-adapt-status-text: #e2e8f0;
|
|
290
|
+
.mb-adapt--dark {
|
|
291
|
+
--mb-adapt-fork-bg: #1e1e1e;
|
|
292
|
+
--mb-adapt-fork-tab-bg: #2a2a2a;
|
|
293
|
+
--mb-adapt-fork-tab-color: #e0e0e0;
|
|
294
|
+
--mb-adapt-fork-separator: #3a3a3a;
|
|
325
295
|
}
|
|
326
296
|
```
|
|
327
297
|
|
|
328
|
-
###
|
|
298
|
+
### 3. Direct CSS on internal classes
|
|
329
299
|
|
|
330
|
-
|
|
300
|
+
No Shadow DOM — all internal elements use plain CSS classes. Target them directly for effects that CSS variables can't express: animations, pseudo-elements, transitions, media queries.
|
|
331
301
|
|
|
332
|
-
|
|
333
|
-
.mb-adapt {
|
|
334
|
-
--mb-adapt-font: "Inter", sans-serif;
|
|
335
|
-
}
|
|
336
|
-
```
|
|
337
|
-
|
|
338
|
-
### Elevation and borders
|
|
339
|
-
|
|
340
|
-
Floating panels, status cards, and drag ghosts each have independent shadow, border, and radius variables. Use these to match your site's elevation system.
|
|
302
|
+
**Animated gradient toolbar (liquid glass):**
|
|
341
303
|
|
|
342
304
|
```css
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
--mb-adapt-floating-border: 1px solid rgba(0, 0, 0, 0.06);
|
|
347
|
-
--mb-adapt-floating-radius: 12px;
|
|
348
|
-
--mb-adapt-floating-backdrop: none;
|
|
349
|
-
|
|
350
|
-
--mb-adapt-status-card-shadow: 0 2px 12px rgba(0, 0, 0, 0.06);
|
|
351
|
-
--mb-adapt-drag-ghost-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
|
|
352
|
-
--mb-adapt-border-radius: 8px; /* iframe border radius */
|
|
305
|
+
@keyframes toolbar-glow {
|
|
306
|
+
0%, 100% { background-position: 0% 50%; }
|
|
307
|
+
50% { background-position: 100% 50%; }
|
|
353
308
|
}
|
|
354
309
|
|
|
355
|
-
/*
|
|
356
|
-
.mb-adapt
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
310
|
+
/* Light mode — warm aurora */
|
|
311
|
+
.mb-adapt .mb-group-header {
|
|
312
|
+
background: linear-gradient(
|
|
313
|
+
135deg,
|
|
314
|
+
rgba(99, 102, 241, 0.08) 0%,
|
|
315
|
+
rgba(168, 85, 247, 0.08) 25%,
|
|
316
|
+
rgba(236, 72, 153, 0.06) 50%,
|
|
317
|
+
rgba(99, 102, 241, 0.08) 100%
|
|
318
|
+
) !important;
|
|
319
|
+
background-size: 300% 300%;
|
|
320
|
+
animation: toolbar-glow 8s ease infinite;
|
|
361
321
|
}
|
|
362
|
-
```
|
|
363
322
|
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
323
|
+
/* Dark mode — deep neon */
|
|
324
|
+
.mb-adapt--dark .mb-group-header {
|
|
325
|
+
background: linear-gradient(
|
|
326
|
+
135deg,
|
|
327
|
+
rgba(99, 102, 241, 0.15) 0%,
|
|
328
|
+
rgba(168, 85, 247, 0.12) 25%,
|
|
329
|
+
rgba(236, 72, 153, 0.10) 50%,
|
|
330
|
+
rgba(99, 102, 241, 0.15) 100%
|
|
331
|
+
) !important;
|
|
332
|
+
background-size: 300% 300%;
|
|
333
|
+
animation: toolbar-glow 8s ease infinite;
|
|
373
334
|
}
|
|
374
335
|
```
|
|
375
336
|
|
|
376
|
-
**
|
|
377
|
-
|
|
378
|
-
```css
|
|
379
|
-
.mb-adapt {
|
|
380
|
-
--mb-adapt-floating-shadow: none;
|
|
381
|
-
--mb-adapt-floating-border: 1px solid var(--mb-adapt-fork-separator);
|
|
382
|
-
--mb-adapt-floating-radius: 4px;
|
|
383
|
-
--mb-adapt-status-card-shadow: none;
|
|
384
|
-
--mb-adapt-drag-ghost-shadow: none;
|
|
385
|
-
}
|
|
386
|
-
```
|
|
337
|
+
**Key classes you can target:**
|
|
387
338
|
|
|
388
|
-
|
|
339
|
+
| Class | Element |
|
|
340
|
+
|-------|---------|
|
|
341
|
+
| `.mb-group-header` | Tab toolbar |
|
|
342
|
+
| `.mb-tab` | Individual tab |
|
|
343
|
+
| `.mb-tab[data-active="true"]` | Active tab |
|
|
344
|
+
| `.mb-group-content` | Panel content area |
|
|
345
|
+
| `.mb-floating-overlay` | Floating panel container |
|
|
346
|
+
| `.mb-layout-separator` | Resize handle between panels |
|
|
347
|
+
| `.mb-drag-ghost` | Tab drag preview |
|
|
348
|
+
| `.mb-adapt__status-card` | Error/stopped status card |
|
|
349
|
+
| `.mb-adapt__status-icon` | Status card icon |
|
|
350
|
+
| `.mb-adapt-minimized-tab` | Minimized panel tab |
|
|
351
|
+
| `.mb-drop-overlay` | Drop target highlight |
|
|
389
352
|
|
|
390
|
-
|
|
391
|
-
|---|---|
|
|
392
|
-
| Card shadow / `--shadow-lg` | `--mb-adapt-floating-shadow` |
|
|
393
|
-
| Card border / `--border-subtle` | `--mb-adapt-floating-border` |
|
|
394
|
-
| Card radius / `--radius-lg` | `--mb-adapt-floating-radius` |
|
|
395
|
-
| Tooltip/popover shadow | `--mb-adapt-status-card-shadow`, `--mb-adapt-drag-ghost-shadow` |
|
|
396
|
-
| Glass/blur effect | `--mb-adapt-floating-backdrop` |
|
|
353
|
+
All three approaches compose — use `theme` for colors, CSS variables for fine-tuning, and direct class targeting for animations.
|
|
397
354
|
|
|
398
355
|
<details>
|
|
399
356
|
<summary>Full CSS variable reference</summary>
|
|
@@ -418,6 +375,16 @@ Floating panels, status cards, and drag ghosts each have independent shadow, bor
|
|
|
418
375
|
| `--mb-adapt-fork-tab-color` | `rgb(51,51,51)` | `#ffffff` | Active tab text |
|
|
419
376
|
| `--mb-adapt-fork-tab-inactive-color` | `rgba(51,51,51,0.7)` | `#969696` | Inactive tab text |
|
|
420
377
|
| `--mb-adapt-fork-separator` | `rgba(128,128,128,0.35)` | `rgb(68,68,68)` | Tab/panel borders |
|
|
378
|
+
| `--mb-adapt-tab-radius` | `0` | | Tab border-radius (use `999px` for pill shape) |
|
|
379
|
+
| `--mb-adapt-tab-shadow` | `none` | | Tab box-shadow |
|
|
380
|
+
| `--mb-adapt-tab-active-shadow` | `none` | | Active tab box-shadow |
|
|
381
|
+
| `--mb-adapt-tab-gap` | `0px` | | Tab margin (spacing between tabs) |
|
|
382
|
+
| `--mb-adapt-tab-padding` | `0 14px` | | Tab padding |
|
|
383
|
+
| `--mb-adapt-tab-font-size` | `13px` | | Tab label font size |
|
|
384
|
+
| `--mb-adapt-toolbar-height` | `40px` | | Toolbar / tab bar height |
|
|
385
|
+
| `--mb-adapt-toolbar-padding` | `0` | | Toolbar inner padding (standard CSS shorthand) |
|
|
386
|
+
| `--mb-adapt-tab-min-width` | `100px` | | Tab minimum width |
|
|
387
|
+
| `--mb-adapt-tab-spacing` | `6px` | | Gap between tab label and action buttons |
|
|
421
388
|
|
|
422
389
|
### Floating panels (elevation)
|
|
423
390
|
|