@mochabug/adapt-web 1.0.1-rc.11 → 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.
@@ -7253,89 +7253,116 @@ var MbAdapt = (() => {
7253
7253
  min-height: inherit;
7254
7254
  display: flex;
7255
7255
  flex-direction: column;
7256
- background: var(--mb-adapt-bg);
7257
- --mb-adapt-bg: transparent;
7258
- --mb-adapt-font: system-ui, -apple-system, sans-serif;
7259
- --mb-adapt-button-hover-bg: rgba(128, 128, 128, 0.2);
7260
- --mb-adapt-separator-active: rgba(59, 130, 246, 0.5);
7261
- --mb-adapt-floating-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25), 0 12px 24px -8px rgba(0, 0, 0, 0.15);
7262
- --mb-adapt-floating-border: none;
7263
- --mb-adapt-floating-backdrop: none;
7264
- --mb-adapt-floating-radius: 8px;
7265
- --mb-adapt-status-card-shadow: 0 4px 24px rgba(0, 0, 0, 0.08), 0 2px 8px rgba(0, 0, 0, 0.04);
7266
- --mb-adapt-drag-ghost-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
7267
- --mb-adapt-border-radius: 8px;
7256
+
7257
+ /* Two-layer CSS variables: --_X reads user-set --mb-adapt-X first, falls back to light default */
7258
+ --_bg: var(--mb-adapt-bg, transparent);
7259
+ --_font: var(--mb-adapt-font, system-ui, -apple-system, sans-serif);
7260
+ --_button-hover-bg: var(--mb-adapt-button-hover-bg, rgba(128, 128, 128, 0.2));
7261
+ --_separator-active: var(--mb-adapt-separator-active, rgba(59, 130, 246, 0.5));
7262
+ --_floating-shadow: var(--mb-adapt-floating-shadow, 0 25px 50px -12px rgba(0, 0, 0, 0.25), 0 12px 24px -8px rgba(0, 0, 0, 0.15));
7263
+ --_floating-border: var(--mb-adapt-floating-border, none);
7264
+ --_floating-backdrop: var(--mb-adapt-floating-backdrop, none);
7265
+ --_floating-radius: var(--mb-adapt-floating-radius, 8px);
7266
+ --_status-card-bg: var(--mb-adapt-status-card-bg, #ffffff);
7267
+ --_status-card-border: var(--mb-adapt-status-card-border, #e5e7eb);
7268
+ --_status-card-shadow: var(--mb-adapt-status-card-shadow, 0 4px 24px rgba(0, 0, 0, 0.08), 0 2px 8px rgba(0, 0, 0, 0.04));
7269
+ --_status-icon-bg: var(--mb-adapt-status-icon-bg, #fef2f2);
7270
+ --_status-icon-stopped-bg: var(--mb-adapt-status-icon-stopped-bg, var(--mb-adapt-status-icon-bg, #f3f4f6));
7271
+ --_status-text: var(--mb-adapt-status-text, #374151);
7272
+ --_drag-ghost-shadow: var(--mb-adapt-drag-ghost-shadow, 0 4px 12px rgba(0, 0, 0, 0.15));
7273
+ --_border-radius: var(--mb-adapt-border-radius, 8px);
7268
7274
  --mb-adapt-responsive-breakpoint: 768;
7269
7275
  --mb-adapt-responsive-hysteresis: 40;
7270
7276
 
7271
- /* Cap.js widget customization variables */
7272
- --mb-adapt-cap-background: #ffffff;
7273
- --mb-adapt-cap-border-color: #e2e8f0;
7274
- --mb-adapt-cap-border-radius: 16px;
7275
- --mb-adapt-cap-height: 72px;
7276
- --mb-adapt-cap-width: 380px;
7277
- --mb-adapt-cap-padding: 20px 28px;
7278
- --mb-adapt-cap-gap: 20px;
7279
- --mb-adapt-cap-color: #1e293b;
7280
- --mb-adapt-cap-checkbox-size: 36px;
7281
- --mb-adapt-cap-checkbox-border: 2px solid #cbd5e1;
7282
- --mb-adapt-cap-checkbox-radius: 10px;
7283
- --mb-adapt-cap-checkbox-background: #f8fafc;
7284
- --mb-adapt-cap-spinner-color: #6366f1;
7285
- --mb-adapt-cap-spinner-bg: #e2e8f0;
7286
- --mb-adapt-cap-font: inherit;
7287
- --mb-adapt-cap-spinner-thickness: 3px;
7288
- --mb-adapt-cap-shadow: 0 4px 20px rgba(0, 0, 0, 0.08), 0 2px 8px rgba(0, 0, 0, 0.04);
7289
- --mb-adapt-cap-shadow-hover: 0 8px 30px rgba(0, 0, 0, 0.12), 0 4px 12px rgba(0, 0, 0, 0.06);
7290
-
7291
- /* Fork panel theming \u2014 customizable via CSS variables */
7292
- --mb-adapt-fork-bg: #ffffff;
7293
- --mb-adapt-fork-tab-bg: #f3f3f3;
7294
- --mb-adapt-fork-tab-active-bg: #ffffff;
7295
- --mb-adapt-fork-tab-color: rgb(51, 51, 51);
7296
- --mb-adapt-fork-tab-inactive-color: rgba(51, 51, 51, 0.7);
7297
- --mb-adapt-fork-separator: rgba(128, 128, 128, 0.35);
7277
+ /* Cap.js widget variables */
7278
+ --_cap-background: var(--mb-adapt-cap-background, #ffffff);
7279
+ --_cap-border-color: var(--mb-adapt-cap-border-color, #e2e8f0);
7280
+ --_cap-border-radius: var(--mb-adapt-cap-border-radius, 16px);
7281
+ --_cap-height: var(--mb-adapt-cap-height, 72px);
7282
+ --_cap-width: var(--mb-adapt-cap-width, 380px);
7283
+ --_cap-padding: var(--mb-adapt-cap-padding, 20px 28px);
7284
+ --_cap-gap: var(--mb-adapt-cap-gap, 20px);
7285
+ --_cap-color: var(--mb-adapt-cap-color, #1e293b);
7286
+ --_cap-checkbox-size: var(--mb-adapt-cap-checkbox-size, 36px);
7287
+ --_cap-checkbox-border: var(--mb-adapt-cap-checkbox-border, 2px solid #cbd5e1);
7288
+ --_cap-checkbox-radius: var(--mb-adapt-cap-checkbox-radius, 10px);
7289
+ --_cap-checkbox-background: var(--mb-adapt-cap-checkbox-background, #f8fafc);
7290
+ --_cap-spinner-color: var(--mb-adapt-cap-spinner-color, #6366f1);
7291
+ --_cap-spinner-bg: var(--mb-adapt-cap-spinner-bg, #e2e8f0);
7292
+ --_cap-font: var(--mb-adapt-cap-font, inherit);
7293
+ --_cap-spinner-thickness: var(--mb-adapt-cap-spinner-thickness, 3px);
7294
+ --_cap-shadow: var(--mb-adapt-cap-shadow, 0 4px 20px rgba(0, 0, 0, 0.08), 0 2px 8px rgba(0, 0, 0, 0.04));
7295
+ --_cap-shadow-hover: var(--mb-adapt-cap-shadow-hover, 0 8px 30px rgba(0, 0, 0, 0.12), 0 4px 12px rgba(0, 0, 0, 0.06));
7296
+
7297
+ /* Fork panel theming */
7298
+ --_fork-bg: var(--mb-adapt-fork-bg, #ffffff);
7299
+ --_fork-tab-bg: var(--mb-adapt-fork-tab-bg, #f3f3f3);
7300
+ --_fork-tab-active-bg: var(--mb-adapt-fork-tab-active-bg, #ffffff);
7301
+ --_fork-tab-color: var(--mb-adapt-fork-tab-color, rgb(51, 51, 51));
7302
+ --_fork-tab-inactive-color: var(--mb-adapt-fork-tab-inactive-color, rgba(51, 51, 51, 0.7));
7303
+ --_fork-separator: var(--mb-adapt-fork-separator, rgba(128, 128, 128, 0.35));
7304
+
7305
+ /* Tab shape */
7306
+ --_tab-radius: var(--mb-adapt-tab-radius, 0);
7307
+ --_tab-shadow: var(--mb-adapt-tab-shadow, none);
7308
+ --_tab-active-shadow: var(--mb-adapt-tab-active-shadow, none);
7309
+ --_tab-gap: var(--mb-adapt-tab-gap, 0px);
7310
+ --_tab-padding: var(--mb-adapt-tab-padding, 0 14px);
7311
+ --_tab-font-size: var(--mb-adapt-tab-font-size, 13px);
7312
+ --_tab-min-width: var(--mb-adapt-tab-min-width, 100px);
7313
+ --_tab-spacing: var(--mb-adapt-tab-spacing, 6px);
7314
+ --_toolbar-height: var(--mb-adapt-toolbar-height, 40px);
7315
+ --_toolbar-padding: var(--mb-adapt-toolbar-padding, 0);
7316
+
7317
+ /* Drop targets \u2014 light defaults */
7318
+ --_drop-header-bg: var(--mb-adapt-drop-header-bg, rgba(99, 102, 241, 0.18));
7319
+ --_drop-center-bg: var(--mb-adapt-drop-center-bg, rgba(99, 102, 241, 0.12));
7320
+ --_drop-split-bg: var(--mb-adapt-drop-split-bg, rgba(99, 102, 241, 0.14));
7321
+ --_drop-border: var(--mb-adapt-drop-border, rgba(99, 102, 241, 0.55));
7322
+
7323
+ background: var(--_bg);
7298
7324
  }
7299
7325
 
7300
7326
  .mb-adapt--dark {
7301
7327
  /* Cap.js widget dark mode */
7302
- --mb-adapt-cap-background: #1e293b;
7303
- --mb-adapt-cap-border-color: #334155;
7304
- --mb-adapt-cap-color: #f1f5f9;
7305
- --mb-adapt-cap-checkbox-border: 2px solid #475569;
7306
- --mb-adapt-cap-checkbox-background: #0f172a;
7307
- --mb-adapt-cap-spinner-color: #818cf8;
7308
- --mb-adapt-cap-spinner-bg: #334155;
7309
- --mb-adapt-cap-shadow: 0 4px 20px rgba(0, 0, 0, 0.25), 0 2px 8px rgba(0, 0, 0, 0.15);
7310
- --mb-adapt-cap-shadow-hover: 0 8px 30px rgba(0, 0, 0, 0.35), 0 4px 12px rgba(0, 0, 0, 0.2);
7328
+ --_cap-background: var(--mb-adapt-cap-background, #1e293b);
7329
+ --_cap-border-color: var(--mb-adapt-cap-border-color, #334155);
7330
+ --_cap-color: var(--mb-adapt-cap-color, #f1f5f9);
7331
+ --_cap-checkbox-border: var(--mb-adapt-cap-checkbox-border, 2px solid #475569);
7332
+ --_cap-checkbox-background: var(--mb-adapt-cap-checkbox-background, #0f172a);
7333
+ --_cap-spinner-color: var(--mb-adapt-cap-spinner-color, #818cf8);
7334
+ --_cap-spinner-bg: var(--mb-adapt-cap-spinner-bg, #334155);
7335
+ --_cap-shadow: var(--mb-adapt-cap-shadow, 0 4px 20px rgba(0, 0, 0, 0.25), 0 2px 8px rgba(0, 0, 0, 0.15));
7336
+ --_cap-shadow-hover: var(--mb-adapt-cap-shadow-hover, 0 8px 30px rgba(0, 0, 0, 0.35), 0 4px 12px rgba(0, 0, 0, 0.2));
7311
7337
 
7312
7338
  /* Status card dark mode */
7313
- --mb-adapt-status-card-bg: #1e293b;
7314
- --mb-adapt-status-card-border: #334155;
7315
- --mb-adapt-status-icon-bg: #351c1c;
7316
- --mb-adapt-status-text: #e2e8f0;
7339
+ --_status-card-bg: var(--mb-adapt-status-card-bg, #1e293b);
7340
+ --_status-card-border: var(--mb-adapt-status-card-border, #334155);
7341
+ --_status-icon-bg: var(--mb-adapt-status-icon-bg, #351c1c);
7342
+ --_status-icon-stopped-bg: var(--mb-adapt-status-icon-stopped-bg, var(--mb-adapt-status-icon-bg, #1e293b));
7343
+ --_status-text: var(--mb-adapt-status-text, #e2e8f0);
7317
7344
 
7318
7345
  /* Panel dark mode overrides */
7319
- --mb-adapt-button-hover-bg: rgba(128, 128, 128, 0.3);
7320
- --mb-adapt-separator-active: rgba(99, 130, 246, 0.6);
7321
- --mb-adapt-floating-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.5), 0 12px 24px -8px rgba(0, 0, 0, 0.3);
7322
- --mb-adapt-floating-border: 1px solid rgba(255, 255, 255, 0.06);
7323
- --mb-adapt-status-card-shadow: 0 4px 24px rgba(0, 0, 0, 0.25), 0 2px 8px rgba(0, 0, 0, 0.15);
7324
- --mb-adapt-drag-ghost-shadow: 0 4px 12px rgba(0, 0, 0, 0.35);
7346
+ --_button-hover-bg: var(--mb-adapt-button-hover-bg, rgba(128, 128, 128, 0.3));
7347
+ --_separator-active: var(--mb-adapt-separator-active, rgba(99, 130, 246, 0.6));
7348
+ --_floating-shadow: var(--mb-adapt-floating-shadow, 0 25px 50px -12px rgba(0, 0, 0, 0.5), 0 12px 24px -8px rgba(0, 0, 0, 0.3));
7349
+ --_floating-border: var(--mb-adapt-floating-border, 1px solid rgba(255, 255, 255, 0.06));
7350
+ --_status-card-shadow: var(--mb-adapt-status-card-shadow, 0 4px 24px rgba(0, 0, 0, 0.25), 0 2px 8px rgba(0, 0, 0, 0.15));
7351
+ --_drag-ghost-shadow: var(--mb-adapt-drag-ghost-shadow, 0 4px 12px rgba(0, 0, 0, 0.35));
7325
7352
 
7326
7353
  /* Fork panel dark mode */
7327
- --mb-adapt-fork-bg: #1e1e1e;
7328
- --mb-adapt-fork-tab-bg: #252526;
7329
- --mb-adapt-fork-tab-active-bg: #1e1e1e;
7330
- --mb-adapt-fork-tab-color: #ffffff;
7331
- --mb-adapt-fork-tab-inactive-color: #969696;
7332
- --mb-adapt-fork-separator: rgb(68, 68, 68);
7354
+ --_fork-bg: var(--mb-adapt-fork-bg, #1e1e1e);
7355
+ --_fork-tab-bg: var(--mb-adapt-fork-tab-bg, #252526);
7356
+ --_fork-tab-active-bg: var(--mb-adapt-fork-tab-active-bg, #1e1e1e);
7357
+ --_fork-tab-color: var(--mb-adapt-fork-tab-color, #ffffff);
7358
+ --_fork-tab-inactive-color: var(--mb-adapt-fork-tab-inactive-color, #969696);
7359
+ --_fork-separator: var(--mb-adapt-fork-separator, rgb(68, 68, 68));
7333
7360
 
7334
7361
  /* Drop target dark mode */
7335
- --mb-adapt-drop-header-bg: rgba(129, 140, 248, 0.22);
7336
- --mb-adapt-drop-center-bg: rgba(129, 140, 248, 0.15);
7337
- --mb-adapt-drop-split-bg: rgba(129, 140, 248, 0.18);
7338
- --mb-adapt-drop-border: rgba(129, 140, 248, 0.6);
7362
+ --_drop-header-bg: var(--mb-adapt-drop-header-bg, rgba(129, 140, 248, 0.22));
7363
+ --_drop-center-bg: var(--mb-adapt-drop-center-bg, rgba(129, 140, 248, 0.15));
7364
+ --_drop-split-bg: var(--mb-adapt-drop-split-bg, rgba(129, 140, 248, 0.18));
7365
+ --_drop-border: var(--mb-adapt-drop-border, rgba(129, 140, 248, 0.6));
7339
7366
  }
7340
7367
 
7341
7368
  /* \u2500\u2500 Layout (recursive split tree) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
@@ -7375,7 +7402,7 @@ var MbAdapt = (() => {
7375
7402
  /* Draggable separator between split panels */
7376
7403
  .mb-layout-separator {
7377
7404
  flex: 0 0 5px;
7378
- background: var(--mb-adapt-fork-separator);
7405
+ background: var(--_fork-separator);
7379
7406
  transition: background 0.15s;
7380
7407
  position: relative;
7381
7408
  z-index: 1;
@@ -7387,7 +7414,7 @@ var MbAdapt = (() => {
7387
7414
 
7388
7415
  .mb-layout-separator:hover,
7389
7416
  .mb-layout-separator--active {
7390
- background: var(--mb-adapt-separator-active);
7417
+ background: var(--_separator-active);
7391
7418
  }
7392
7419
 
7393
7420
  /* \u2500\u2500 Group \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
@@ -7395,16 +7422,17 @@ var MbAdapt = (() => {
7395
7422
  display: flex;
7396
7423
  flex-direction: column;
7397
7424
  height: 100%;
7398
- background: var(--mb-adapt-bg);
7425
+ background: var(--_bg);
7399
7426
  }
7400
7427
 
7401
7428
  .mb-group-header {
7402
7429
  display: flex;
7403
7430
  align-items: stretch;
7404
- height: 40px;
7405
- min-height: 40px;
7406
- background: var(--mb-adapt-fork-tab-bg);
7407
- border-bottom: 1px solid var(--mb-adapt-fork-separator);
7431
+ height: var(--_toolbar-height);
7432
+ min-height: var(--_toolbar-height);
7433
+ padding: var(--_toolbar-padding);
7434
+ background: var(--_fork-tab-bg);
7435
+ border-bottom: 1px solid var(--_fork-separator);
7408
7436
  user-select: none;
7409
7437
  }
7410
7438
 
@@ -7415,7 +7443,7 @@ var MbAdapt = (() => {
7415
7443
 
7416
7444
  .mb-group-tabs {
7417
7445
  display: flex;
7418
- align-items: stretch;
7446
+ align-items: center;
7419
7447
  overflow-x: auto;
7420
7448
  overflow-y: hidden;
7421
7449
  flex: 0 1 auto;
@@ -7442,16 +7470,16 @@ var MbAdapt = (() => {
7442
7470
  flex: 1;
7443
7471
  position: relative;
7444
7472
  overflow: hidden;
7445
- background: var(--mb-adapt-fork-bg);
7473
+ background: var(--_fork-bg);
7446
7474
  }
7447
7475
 
7448
7476
  /* Main group overrides */
7449
7477
  .mb-group[data-main-group="true"] {
7450
- background: var(--mb-adapt-bg);
7478
+ background: var(--_bg);
7451
7479
  }
7452
7480
 
7453
7481
  .mb-group[data-main-group="true"] .mb-group-content {
7454
- background: var(--mb-adapt-bg);
7482
+ background: var(--_bg);
7455
7483
  }
7456
7484
 
7457
7485
 
@@ -7459,27 +7487,31 @@ var MbAdapt = (() => {
7459
7487
  .mb-tab {
7460
7488
  display: flex;
7461
7489
  align-items: center;
7462
- gap: 6px;
7463
- padding: 0 14px;
7464
- min-width: 100px;
7465
- font-size: 13px;
7466
- font-family: var(--mb-adapt-font);
7490
+ gap: var(--_tab-spacing);
7491
+ padding: var(--_tab-padding);
7492
+ min-width: var(--_tab-min-width);
7493
+ font-size: var(--_tab-font-size);
7494
+ font-family: var(--_font);
7467
7495
  white-space: nowrap;
7468
7496
  cursor: pointer;
7469
7497
  touch-action: none;
7470
- color: var(--mb-adapt-fork-tab-inactive-color);
7471
- background: var(--mb-adapt-fork-tab-bg);
7472
- border-right: 1px solid var(--mb-adapt-fork-separator);
7473
- transition: background 0.1s;
7498
+ color: var(--_fork-tab-inactive-color);
7499
+ background: var(--_fork-tab-bg);
7500
+ border-right: 1px solid var(--_fork-separator);
7501
+ border-radius: var(--_tab-radius);
7502
+ box-shadow: var(--_tab-shadow);
7503
+ margin: var(--_tab-gap);
7504
+ transition: background 0.15s, box-shadow 0.15s;
7474
7505
  }
7475
7506
 
7476
7507
  .mb-tab[data-active="true"] {
7477
- color: var(--mb-adapt-fork-tab-color);
7478
- background: var(--mb-adapt-fork-tab-active-bg);
7508
+ color: var(--_fork-tab-color);
7509
+ background: var(--_fork-tab-active-bg);
7510
+ box-shadow: var(--_tab-active-shadow);
7479
7511
  }
7480
7512
 
7481
7513
  .mb-tab:hover {
7482
- background: var(--mb-adapt-fork-tab-active-bg);
7514
+ background: var(--_fork-tab-active-bg);
7483
7515
  }
7484
7516
 
7485
7517
  .mb-tab-label {
@@ -7530,7 +7562,7 @@ var MbAdapt = (() => {
7530
7562
 
7531
7563
  .mb-tab-close:hover {
7532
7564
  opacity: 1 !important;
7533
- background: var(--mb-adapt-button-hover-bg);
7565
+ background: var(--_button-hover-bg);
7534
7566
  }
7535
7567
 
7536
7568
  .mb-tab-close svg {
@@ -7558,11 +7590,11 @@ var MbAdapt = (() => {
7558
7590
  .mb-floating-overlay {
7559
7591
  position: fixed;
7560
7592
  z-index: 100000;
7561
- box-shadow: var(--mb-adapt-floating-shadow);
7562
- border: var(--mb-adapt-floating-border);
7563
- backdrop-filter: var(--mb-adapt-floating-backdrop);
7564
- -webkit-backdrop-filter: var(--mb-adapt-floating-backdrop);
7565
- border-radius: var(--mb-adapt-floating-radius);
7593
+ box-shadow: var(--_floating-shadow);
7594
+ border: var(--_floating-border);
7595
+ backdrop-filter: var(--_floating-backdrop);
7596
+ -webkit-backdrop-filter: var(--_floating-backdrop);
7597
+ border-radius: var(--_floating-radius);
7566
7598
  display: flex;
7567
7599
  flex-direction: column;
7568
7600
  /* No overflow:hidden here \u2014 resize handles use negative offsets (top:-3px etc.)
@@ -7572,7 +7604,7 @@ var MbAdapt = (() => {
7572
7604
 
7573
7605
  .mb-floating-overlay > .mb-group {
7574
7606
  flex: 1;
7575
- border-radius: var(--mb-adapt-floating-radius);
7607
+ border-radius: var(--_floating-radius);
7576
7608
  overflow: hidden;
7577
7609
  }
7578
7610
 
@@ -7584,7 +7616,7 @@ var MbAdapt = (() => {
7584
7616
  flex: 1;
7585
7617
  min-width: 0;
7586
7618
  min-height: 0;
7587
- border-radius: var(--mb-adapt-floating-radius);
7619
+ border-radius: var(--_floating-radius);
7588
7620
  overflow: hidden;
7589
7621
  }
7590
7622
 
@@ -7629,7 +7661,7 @@ var MbAdapt = (() => {
7629
7661
  border: 0;
7630
7662
  display: block;
7631
7663
  background: transparent;
7632
- border-radius: var(--mb-adapt-border-radius);
7664
+ border-radius: var(--_border-radius);
7633
7665
  pointer-events: auto;
7634
7666
  opacity: 0;
7635
7667
  transition: opacity 0.1s ease-out;
@@ -7664,10 +7696,10 @@ var MbAdapt = (() => {
7664
7696
  padding: 32px 40px;
7665
7697
  max-width: 380px;
7666
7698
  border-radius: 16px;
7667
- background: var(--mb-adapt-status-card-bg, #ffffff);
7668
- border: 1px solid var(--mb-adapt-status-card-border, #e5e7eb);
7669
- box-shadow: var(--mb-adapt-status-card-shadow);
7670
- font-family: var(--mb-adapt-font);
7699
+ background: var(--_status-card-bg);
7700
+ border: 1px solid var(--_status-card-border);
7701
+ box-shadow: var(--_status-card-shadow);
7702
+ font-family: var(--_font);
7671
7703
  text-align: center;
7672
7704
  }
7673
7705
 
@@ -7678,7 +7710,7 @@ var MbAdapt = (() => {
7678
7710
  display: flex;
7679
7711
  align-items: center;
7680
7712
  justify-content: center;
7681
- background: var(--mb-adapt-status-icon-bg, #fef2f2);
7713
+ background: var(--_status-icon-bg);
7682
7714
  }
7683
7715
 
7684
7716
  .mb-adapt__status-icon svg {
@@ -7687,11 +7719,11 @@ var MbAdapt = (() => {
7687
7719
  }
7688
7720
 
7689
7721
  .mb-adapt__status-icon--stopped {
7690
- background: var(--mb-adapt-status-icon-bg, #f3f4f6);
7722
+ background: var(--_status-icon-stopped-bg);
7691
7723
  }
7692
7724
 
7693
7725
  .mb-adapt__status-text {
7694
- color: var(--mb-adapt-status-text, #374151);
7726
+ color: var(--_status-text);
7695
7727
  font-size: 15px;
7696
7728
  line-height: 1.5;
7697
7729
  margin: 0;
@@ -7699,19 +7731,19 @@ var MbAdapt = (() => {
7699
7731
 
7700
7732
  .mb-adapt__status-restart {
7701
7733
  padding: 8px 20px;
7702
- border: 1px solid var(--mb-adapt-status-card-border, #e5e7eb);
7734
+ border: 1px solid var(--_status-card-border);
7703
7735
  border-radius: 8px;
7704
7736
  background: transparent;
7705
- color: var(--mb-adapt-status-text, #374151);
7737
+ color: var(--_status-text);
7706
7738
  font-size: 14px;
7707
7739
  font-weight: 500;
7708
- font-family: var(--mb-adapt-font);
7740
+ font-family: var(--_font);
7709
7741
  cursor: pointer;
7710
7742
  transition: background 0.15s, border-color 0.15s;
7711
7743
  }
7712
7744
 
7713
7745
  .mb-adapt__status-restart:hover {
7714
- background: var(--mb-adapt-status-card-border, #e5e7eb);
7746
+ background: var(--_status-card-border);
7715
7747
  }
7716
7748
 
7717
7749
  /* \u2500\u2500 Confirm-on-close dialog \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
@@ -7741,18 +7773,18 @@ var MbAdapt = (() => {
7741
7773
  padding: 24px 28px;
7742
7774
  max-width: 360px;
7743
7775
  width: 100%;
7744
- border-radius: var(--mb-adapt-floating-radius);
7745
- background: var(--mb-adapt-fork-tab-active-bg);
7746
- border: 1px solid var(--mb-adapt-fork-separator);
7747
- box-shadow: var(--mb-adapt-floating-shadow);
7748
- font-family: var(--mb-adapt-font);
7776
+ border-radius: var(--_floating-radius);
7777
+ background: var(--_fork-tab-active-bg);
7778
+ border: 1px solid var(--_fork-separator);
7779
+ box-shadow: var(--_floating-shadow);
7780
+ font-family: var(--_font);
7749
7781
  text-align: center;
7750
7782
  }
7751
7783
 
7752
7784
  .mb-adapt__confirm-text {
7753
7785
  font-size: 14px;
7754
7786
  line-height: 1.5;
7755
- color: var(--mb-adapt-fork-tab-color);
7787
+ color: var(--_fork-tab-color);
7756
7788
  margin: 0;
7757
7789
  }
7758
7790
 
@@ -7766,7 +7798,7 @@ var MbAdapt = (() => {
7766
7798
  padding: 8px 16px;
7767
7799
  border-radius: 6px;
7768
7800
  font-size: 13px;
7769
- font-family: var(--mb-adapt-font);
7801
+ font-family: var(--_font);
7770
7802
  cursor: pointer;
7771
7803
  font-weight: 500;
7772
7804
  transition: background 0.15s, border-color 0.15s;
@@ -7774,17 +7806,17 @@ var MbAdapt = (() => {
7774
7806
 
7775
7807
  .mb-adapt__confirm-btn--cancel {
7776
7808
  background: transparent;
7777
- border: 1px solid var(--mb-adapt-fork-separator);
7778
- color: var(--mb-adapt-fork-tab-color);
7809
+ border: 1px solid var(--_fork-separator);
7810
+ color: var(--_fork-tab-color);
7779
7811
  }
7780
7812
 
7781
7813
  .mb-adapt__confirm-btn--cancel:hover {
7782
- background: var(--mb-adapt-button-hover-bg);
7814
+ background: var(--_button-hover-bg);
7783
7815
  }
7784
7816
 
7785
7817
  .mb-adapt__confirm-btn--confirm {
7786
- background: var(--mb-adapt-fork-tab-color);
7787
- color: var(--mb-adapt-fork-tab-active-bg);
7818
+ background: var(--_fork-tab-color);
7819
+ color: var(--_fork-tab-active-bg);
7788
7820
  border: 1px solid transparent;
7789
7821
  }
7790
7822
 
@@ -7809,23 +7841,23 @@ var MbAdapt = (() => {
7809
7841
 
7810
7842
  /* Cap.js widget styling */
7811
7843
  .mb-adapt cap-widget {
7812
- --cap-background: var(--mb-adapt-cap-background);
7813
- --cap-border-color: var(--mb-adapt-cap-border-color);
7814
- --cap-border-radius: var(--mb-adapt-cap-border-radius);
7815
- --cap-widget-height: var(--mb-adapt-cap-height);
7816
- --cap-widget-width: var(--mb-adapt-cap-width);
7817
- --cap-widget-padding: var(--mb-adapt-cap-padding);
7818
- --cap-gap: var(--mb-adapt-cap-gap);
7819
- --cap-color: var(--mb-adapt-cap-color);
7820
- --cap-checkbox-size: var(--mb-adapt-cap-checkbox-size);
7821
- --cap-checkbox-border: var(--mb-adapt-cap-checkbox-border);
7822
- --cap-checkbox-border-radius: var(--mb-adapt-cap-checkbox-radius);
7823
- --cap-checkbox-background: var(--mb-adapt-cap-checkbox-background);
7844
+ --cap-background: var(--_cap-background);
7845
+ --cap-border-color: var(--_cap-border-color);
7846
+ --cap-border-radius: var(--_cap-border-radius);
7847
+ --cap-widget-height: var(--_cap-height);
7848
+ --cap-widget-width: var(--_cap-width);
7849
+ --cap-widget-padding: var(--_cap-padding);
7850
+ --cap-gap: var(--_cap-gap);
7851
+ --cap-color: var(--_cap-color);
7852
+ --cap-checkbox-size: var(--_cap-checkbox-size);
7853
+ --cap-checkbox-border: var(--_cap-checkbox-border);
7854
+ --cap-checkbox-border-radius: var(--_cap-checkbox-radius);
7855
+ --cap-checkbox-background: var(--_cap-checkbox-background);
7824
7856
  --cap-checkbox-margin: 0;
7825
- --cap-font: var(--mb-adapt-cap-font);
7826
- --cap-spinner-color: var(--mb-adapt-cap-spinner-color);
7827
- --cap-spinner-background-color: var(--mb-adapt-cap-spinner-bg);
7828
- --cap-spinner-thickness: var(--mb-adapt-cap-spinner-thickness);
7857
+ --cap-font: var(--_cap-font);
7858
+ --cap-spinner-color: var(--_cap-spinner-color);
7859
+ --cap-spinner-background-color: var(--_cap-spinner-bg);
7860
+ --cap-spinner-thickness: var(--_cap-spinner-thickness);
7829
7861
  }
7830
7862
 
7831
7863
  /* Hide Cap.js credits */
@@ -7846,7 +7878,7 @@ cap-widget::part(attribution) {
7846
7878
  padding: 0;
7847
7879
  border: none;
7848
7880
  background: transparent;
7849
- color: var(--mb-adapt-fork-tab-color);
7881
+ color: var(--_fork-tab-color);
7850
7882
  cursor: pointer;
7851
7883
  display: flex;
7852
7884
  align-items: center;
@@ -7857,7 +7889,7 @@ cap-widget::part(attribution) {
7857
7889
  }
7858
7890
  .mb-adapt-fork-actions button:hover {
7859
7891
  opacity: 1;
7860
- background: var(--mb-adapt-button-hover-bg);
7892
+ background: var(--_button-hover-bg);
7861
7893
  }
7862
7894
  .mb-adapt-fork-actions button svg {
7863
7895
  width: 14px;
@@ -7870,12 +7902,12 @@ cap-widget::part(attribution) {
7870
7902
  docked panels are minimized \u2014 the iframe gets the remaining height. */
7871
7903
  .mb-adapt-minimized-tabs {
7872
7904
  display: none;
7873
- height: 40px;
7905
+ height: var(--_toolbar-height);
7874
7906
  flex-shrink: 0;
7875
7907
  z-index: 100;
7876
7908
  align-items: stretch;
7877
- background: var(--mb-adapt-fork-tab-bg);
7878
- border-bottom: 1px solid var(--mb-adapt-fork-separator);
7909
+ background: var(--_fork-tab-bg);
7910
+ border-bottom: 1px solid var(--_fork-separator);
7879
7911
  user-select: none;
7880
7912
  }
7881
7913
  .mb-adapt-minimized-tab {
@@ -7884,12 +7916,12 @@ cap-widget::part(attribution) {
7884
7916
  gap: 8px;
7885
7917
  padding: 0 12px;
7886
7918
  flex: 1;
7887
- background: var(--mb-adapt-fork-tab-bg);
7888
- color: var(--mb-adapt-fork-tab-color);
7889
- font-size: 13px;
7890
- font-family: var(--mb-adapt-font);
7919
+ background: var(--_fork-tab-bg);
7920
+ color: var(--_fork-tab-color);
7921
+ font-size: var(--_tab-font-size);
7922
+ font-family: var(--_font);
7891
7923
  white-space: nowrap;
7892
- border-right: 1px solid var(--mb-adapt-fork-separator);
7924
+ border-right: 1px solid var(--_fork-separator);
7893
7925
  cursor: default;
7894
7926
  }
7895
7927
  .mb-adapt-minimized-tab-label {
@@ -7922,7 +7954,7 @@ cap-widget::part(attribution) {
7922
7954
  }
7923
7955
  .mb-adapt-minimized-tab-action:hover {
7924
7956
  opacity: 1;
7925
- background: var(--mb-adapt-button-hover-bg);
7957
+ background: var(--_button-hover-bg);
7926
7958
  }
7927
7959
  .mb-adapt-minimized-tab-action svg {
7928
7960
  width: 14px;
@@ -7937,8 +7969,8 @@ cap-widget::part(attribution) {
7937
7969
 
7938
7970
  /* Drop target highlight for minimized tab merge */
7939
7971
  .mb-adapt-minimized-tab--drop-target {
7940
- background: var(--mb-adapt-drop-header-bg, rgba(99, 102, 241, 0.18)) !important;
7941
- box-shadow: inset 0 0 0 2px var(--mb-adapt-drop-border, rgba(99, 102, 241, 0.6));
7972
+ background: var(--_drop-header-bg) !important;
7973
+ box-shadow: inset 0 0 0 2px var(--_drop-border);
7942
7974
  }
7943
7975
 
7944
7976
  /* \u2500\u2500 Pointer-drag ghost element \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
@@ -7947,14 +7979,14 @@ cap-widget::part(attribution) {
7947
7979
  pointer-events: none;
7948
7980
  z-index: 999999;
7949
7981
  padding: 4px 10px;
7950
- background: var(--mb-adapt-fork-tab-bg);
7951
- color: var(--mb-adapt-fork-tab-color);
7952
- border: 1px solid var(--mb-adapt-fork-separator);
7953
- border-radius: 4px;
7954
- font-size: 13px;
7955
- font-family: var(--mb-adapt-font);
7982
+ background: var(--_fork-tab-bg);
7983
+ color: var(--_fork-tab-color);
7984
+ border: 1px solid var(--_fork-separator);
7985
+ border-radius: var(--_tab-radius, 4px);
7986
+ font-size: var(--_tab-font-size);
7987
+ font-family: var(--_font);
7956
7988
  white-space: nowrap;
7957
- box-shadow: var(--mb-adapt-drag-ghost-shadow);
7989
+ box-shadow: var(--_drag-ghost-shadow);
7958
7990
  opacity: 0.92;
7959
7991
  display: flex;
7960
7992
  align-items: center;
@@ -7967,8 +7999,8 @@ cap-widget::part(attribution) {
7967
7999
 
7968
8000
  /* \u2500\u2500 Drop target highlight on group header \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
7969
8001
  .mb-group-header--drop-target {
7970
- background: var(--mb-adapt-drop-header-bg, rgba(99, 102, 241, 0.18)) !important;
7971
- box-shadow: inset 0 0 0 2px var(--mb-adapt-drop-border, rgba(99, 102, 241, 0.6));
8002
+ background: var(--_drop-header-bg) !important;
8003
+ box-shadow: inset 0 0 0 2px var(--_drop-border);
7972
8004
  }
7973
8005
 
7974
8006
  /* \u2500\u2500 Drop overlay (content-area and dock-strip indicators) */
@@ -7983,16 +8015,16 @@ cap-widget::part(attribution) {
7983
8015
  }
7984
8016
 
7985
8017
  .mb-drop-overlay[data-zone="center"] {
7986
- background: var(--mb-adapt-drop-center-bg, rgba(99, 102, 241, 0.12));
7987
- border: 2px solid var(--mb-adapt-drop-border, rgba(99, 102, 241, 0.55));
8018
+ background: var(--_drop-center-bg);
8019
+ border: 2px solid var(--_drop-border);
7988
8020
  }
7989
8021
 
7990
8022
  .mb-drop-overlay[data-zone="top"],
7991
8023
  .mb-drop-overlay[data-zone="bottom"],
7992
8024
  .mb-drop-overlay[data-zone="left"],
7993
8025
  .mb-drop-overlay[data-zone="right"] {
7994
- background: var(--mb-adapt-drop-split-bg, rgba(99, 102, 241, 0.14));
7995
- border: 2px solid var(--mb-adapt-drop-border, rgba(99, 102, 241, 0.55));
8026
+ background: var(--_drop-split-bg);
8027
+ border: 2px solid var(--_drop-border);
7996
8028
  }
7997
8029
 
7998
8030
  /* \u2500\u2500 Iframe pointer-event guard during drag \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
@@ -8024,7 +8056,7 @@ html.mb-dragging webview {
8024
8056
 
8025
8057
  .mb-tab-popout:hover {
8026
8058
  opacity: 1 !important;
8027
- background: var(--mb-adapt-button-hover-bg);
8059
+ background: var(--_button-hover-bg);
8028
8060
  }
8029
8061
 
8030
8062
  .mb-tab-popout svg {
@@ -10960,6 +10992,78 @@ html.mb-dragging webview {
10960
10992
  }
10961
10993
  };
10962
10994
 
10995
+ // src/theme.ts
10996
+ function parseHex(hex) {
10997
+ const m = /^#([0-9a-f]{3,8})$/i.exec(hex.trim());
10998
+ if (!m) return null;
10999
+ const h = m[1];
11000
+ if (h.length === 3) {
11001
+ return [
11002
+ parseInt(h[0] + h[0], 16),
11003
+ parseInt(h[1] + h[1], 16),
11004
+ parseInt(h[2] + h[2], 16)
11005
+ ];
11006
+ }
11007
+ if (h.length === 6 || h.length === 8) {
11008
+ return [
11009
+ parseInt(h.slice(0, 2), 16),
11010
+ parseInt(h.slice(2, 4), 16),
11011
+ parseInt(h.slice(4, 6), 16)
11012
+ ];
11013
+ }
11014
+ return null;
11015
+ }
11016
+ function hexToRgba(hex, alpha) {
11017
+ const rgb = parseHex(hex);
11018
+ if (!rgb) return hex;
11019
+ return `rgba(${rgb[0]}, ${rgb[1]}, ${rgb[2]}, ${alpha})`;
11020
+ }
11021
+ function resolveTheme(theme) {
11022
+ const result = {};
11023
+ if (theme.primary) {
11024
+ const p = theme.primary;
11025
+ result["--mb-adapt-separator-active"] = hexToRgba(p, 0.4);
11026
+ result["--mb-adapt-drop-border"] = p;
11027
+ result["--mb-adapt-drop-header-bg"] = hexToRgba(p, 0.15);
11028
+ result["--mb-adapt-drop-center-bg"] = hexToRgba(p, 0.1);
11029
+ result["--mb-adapt-drop-split-bg"] = hexToRgba(p, 0.12);
11030
+ result["--mb-adapt-status-icon-bg"] = hexToRgba(p, 0.08);
11031
+ result["--mb-adapt-cap-spinner-color"] = p;
11032
+ }
11033
+ if (theme.background) {
11034
+ result["--mb-adapt-bg"] = theme.background;
11035
+ result["--mb-adapt-fork-tab-active-bg"] = theme.background;
11036
+ result["--mb-adapt-status-card-bg"] = theme.background;
11037
+ }
11038
+ if (theme.surface) {
11039
+ result["--mb-adapt-fork-bg"] = theme.surface;
11040
+ result["--mb-adapt-fork-tab-bg"] = theme.surface;
11041
+ }
11042
+ if (theme.text) {
11043
+ result["--mb-adapt-fork-tab-color"] = theme.text;
11044
+ result["--mb-adapt-status-text"] = theme.text;
11045
+ result["--mb-adapt-cap-color"] = theme.text;
11046
+ }
11047
+ if (theme.textSecondary) {
11048
+ result["--mb-adapt-fork-tab-inactive-color"] = theme.textSecondary;
11049
+ }
11050
+ if (theme.border) {
11051
+ result["--mb-adapt-fork-separator"] = theme.border;
11052
+ result["--mb-adapt-status-card-border"] = theme.border;
11053
+ result["--mb-adapt-cap-border-color"] = theme.border;
11054
+ }
11055
+ if (theme.font) {
11056
+ result["--mb-adapt-font"] = theme.font;
11057
+ result["--mb-adapt-cap-font"] = theme.font;
11058
+ }
11059
+ if (theme.vars) {
11060
+ for (const [key, value] of Object.entries(theme.vars)) {
11061
+ result[`--mb-adapt-${key}`] = value;
11062
+ }
11063
+ }
11064
+ return result;
11065
+ }
11066
+
10963
11067
  // src/AdaptAutomationElement.ts
10964
11068
  var OBSERVED_ATTRIBUTES = [
10965
11069
  "automation-id",
@@ -10992,6 +11096,13 @@ html.mb-dragging webview {
10992
11096
  static get observedAttributes() {
10993
11097
  return OBSERVED_ATTRIBUTES;
10994
11098
  }
11099
+ get theme() {
11100
+ return this._theme;
11101
+ }
11102
+ set theme(v) {
11103
+ this._theme = v;
11104
+ this._client?.setTheme(v);
11105
+ }
10995
11106
  // --- Attribute ↔ Property reflection ---
10996
11107
  get automationId() {
10997
11108
  return this.getAttribute("automation-id");
@@ -11244,6 +11355,7 @@ html.mb-dragging webview {
11244
11355
  if (this.classNames !== void 0) options.classNames = this.classNames;
11245
11356
  if (this.styles !== void 0) options.styles = this.styles;
11246
11357
  if (this.text !== void 0) options.text = this.text;
11358
+ if (this._theme !== void 0) options.theme = this._theme;
11247
11359
  if (this.persistOptions !== void 0) {
11248
11360
  options.persist = this.persistOptions;
11249
11361
  } else if (this.persist) {
@@ -11334,6 +11446,7 @@ html.mb-dragging webview {
11334
11446
  this.allowMaximize = options.allowMaximize ?? true;
11335
11447
  this.floatingAutoResize = options.floatingAutoResize ?? false;
11336
11448
  this.confirmOnClose = options.confirmOnClose ?? false;
11449
+ this.theme = options.theme;
11337
11450
  const container = typeof options.container === "string" ? document.getElementById(options.container) : options.container;
11338
11451
  if (!container) {
11339
11452
  throw new Error(`Container with id '${options.container}' not found`);
@@ -11536,11 +11649,43 @@ html.mb-dragging webview {
11536
11649
  this.darkMode = darkMode;
11537
11650
  this.rootElement?.classList.toggle("mb-adapt--dark", darkMode);
11538
11651
  this.capWidgetInstance?.setDarkMode(darkMode);
11652
+ this.applyTheme();
11539
11653
  const msg = { type: "adapt-darkMode", darkMode };
11540
11654
  for (const c of this.components.values()) {
11541
11655
  this.postToComponent(c, msg);
11542
11656
  }
11543
11657
  }
11658
+ /**
11659
+ * Set the theme. Applies CSS custom properties derived from semantic tokens.
11660
+ * Pass `undefined` to clear all theme overrides.
11661
+ */
11662
+ setTheme(theme) {
11663
+ this.theme = theme;
11664
+ this.clearThemeVars();
11665
+ if (theme?.mode !== void 0) {
11666
+ const dark = theme.mode === "dark";
11667
+ if (this.darkMode !== dark) {
11668
+ this.setDarkMode(dark);
11669
+ return;
11670
+ }
11671
+ }
11672
+ this.applyTheme();
11673
+ }
11674
+ clearThemeVars() {
11675
+ if (!this.rootElement || !this._appliedThemeVars) return;
11676
+ for (const key of this._appliedThemeVars) {
11677
+ this.rootElement.style.removeProperty(key);
11678
+ }
11679
+ this._appliedThemeVars = void 0;
11680
+ }
11681
+ applyTheme() {
11682
+ if (!this.rootElement || !this.theme) return;
11683
+ const vars = resolveTheme(this.theme);
11684
+ for (const [key, value] of Object.entries(vars)) {
11685
+ this.rootElement.style.setProperty(key, value);
11686
+ }
11687
+ this._appliedThemeVars = Object.keys(vars);
11688
+ }
11544
11689
  /**
11545
11690
  * Enable or disable auto-resizing based on iframe content height.
11546
11691
  */
@@ -11745,6 +11890,7 @@ html.mb-dragging webview {
11745
11890
  if (this.options.styles) {
11746
11891
  Object.assign(this.rootElement.style, this.options.styles);
11747
11892
  }
11893
+ this.applyTheme();
11748
11894
  this.container.appendChild(this.rootElement);
11749
11895
  }
11750
11896
  // --- URL handling ---
@@ -12973,7 +13119,7 @@ html.mb-dragging webview {
12973
13119
  // src/cap-adapter.ts
12974
13120
  if (typeof window !== "undefined" && true && !window.CAP_CUSTOM_WASM_URL) {
12975
13121
  window.CAP_CUSTOM_WASM_URL = new URL(
12976
- "https://cdn.mochabug.com/adapt/web/1.0.1-rc.11/cap_wasm.js",
13122
+ "https://cdn.mochabug.com/adapt/web/1.0.1-rc.13/cap_wasm.js",
12977
13123
  window.location.href
12978
13124
  ).href;
12979
13125
  }