@widgetstools/dock-manager-core 0.1.0 → 0.1.1

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/dist/index.cjs CHANGED
@@ -36,6 +36,7 @@ __export(src_exports, {
36
36
  countPanels: () => countPanels,
37
37
  createDefaultState: () => createDefaultState,
38
38
  createPreventableEvent: () => createPreventableEvent,
39
+ createTheme: () => createTheme,
39
40
  defaultResourceStrings: () => defaultResourceStrings,
40
41
  deserialize: () => deserialize,
41
42
  detectPanelEdge: () => detectPanelEdge,
@@ -4231,9 +4232,8 @@ var UnpinnedStripView = class {
4231
4232
  this.stripEl.removeEventListener("click", this.boundStripClick);
4232
4233
  this.boundStripClick = null;
4233
4234
  }
4234
- if (this.element.parentNode) {
4235
- this.element.parentNode.removeChild(this.element);
4236
- }
4235
+ this.stripEl.remove();
4236
+ this.element.remove();
4237
4237
  }
4238
4238
  // ── Private: Event delegation ──────────────────────────────────
4239
4239
  /** Set up event delegation on stripEl for all tab interactions */
@@ -4458,328 +4458,166 @@ function applyTheme(container, theme) {
4458
4458
  container.style.setProperty("--dock-scrollbar-thumb", colors.textMuted);
4459
4459
  container.style.setProperty("--dock-scrollbar-track", "transparent");
4460
4460
  }
4461
- var vsCodeLight = {
4462
- name: "VS Code Light",
4463
- mode: "light",
4464
- colors: {
4465
- bg: "220 20% 96%",
4466
- surface: "0 0% 100%",
4467
- surfaceAlt: "220 14% 95%",
4468
- panelHeader: "220 14% 92%",
4469
- tabBar: "220 14% 93%",
4470
- tabActive: "0 0% 100%",
4471
- tabText: "0 0% 38%",
4472
- tabTextActive: "217 91% 50%",
4473
- text: "0 0% 15%",
4474
- textSecondary: "0 0% 35%",
4475
- textMuted: "0 0% 50%",
4476
- border: "220 13% 82%",
4477
- splitter: "220 13% 87%",
4478
- splitterHover: "217 91% 60%",
4479
- hover: "220 14% 93%",
4480
- primary: "217 91% 50%",
4481
- floatShadow: "0 0% 0%"
4482
- }
4483
- };
4484
- var githubLight = {
4485
- name: "GitHub Light",
4486
- mode: "light",
4487
- colors: {
4488
- bg: "210 20% 97%",
4489
- surface: "0 0% 100%",
4490
- surfaceAlt: "210 18% 96%",
4491
- panelHeader: "210 18% 92%",
4492
- tabBar: "210 15% 94%",
4493
- tabActive: "0 0% 100%",
4494
- tabText: "210 10% 35%",
4495
- tabTextActive: "212 92% 45%",
4496
- text: "210 12% 16%",
4497
- textSecondary: "210 10% 32%",
4498
- textMuted: "210 8% 48%",
4499
- border: "210 14% 80%",
4500
- splitter: "210 14% 89%",
4501
- splitterHover: "212 92% 55%",
4502
- hover: "210 15% 94%",
4503
- primary: "212 92% 45%",
4504
- floatShadow: "210 20% 20%"
4461
+ var hsl = (h, s, l) => `${h} ${s}% ${l}%`;
4462
+ function createTheme(name, mode, base, accent, overrides) {
4463
+ const { hue: h, sat: s } = base;
4464
+ const { hue: ah, sat: as_ } = accent;
4465
+ let colors;
4466
+ if (mode === "light") {
4467
+ const bl = base.light ?? 96;
4468
+ const al = accent.light ?? 50;
4469
+ const ts = Math.max(s - 6, 0);
4470
+ colors = {
4471
+ bg: hsl(h, s, bl),
4472
+ surface: hsl(h, Math.max(s - 5, 0), Math.min(bl + 3, 100)),
4473
+ surfaceAlt: hsl(h, Math.max(s - 2, 0), bl - 1),
4474
+ panelHeader: hsl(h, Math.max(s - 2, 0), bl - 4),
4475
+ tabBar: hsl(h, Math.max(s - 5, 0), bl - 3),
4476
+ tabActive: hsl(h, Math.max(s - 5, 0), Math.min(bl + 3, 100)),
4477
+ tabText: hsl(h - 10, Math.max(ts - 8, 0), 35),
4478
+ tabTextActive: hsl(ah, as_, al),
4479
+ text: hsl(h - 10, Math.max(ts - 2, 0), 15),
4480
+ textSecondary: hsl(h - 10, Math.max(ts - 8, 0), 32),
4481
+ textMuted: hsl(h - 10, Math.max(ts - 12, 0), 48),
4482
+ border: hsl(h, Math.max(s - 6, 0), 80),
4483
+ splitter: hsl(h, Math.max(s - 6, 0), 87),
4484
+ splitterHover: hsl(ah, as_, al + 8),
4485
+ hover: hsl(h, Math.max(s - 5, 0), bl - 3),
4486
+ primary: hsl(ah, as_, al),
4487
+ floatShadow: hsl(h, Math.max(s, 0), 15)
4488
+ };
4489
+ } else {
4490
+ const bl = base.light ?? 10;
4491
+ const al = accent.light ?? 65;
4492
+ const ts = Math.round(s * 0.5);
4493
+ colors = {
4494
+ bg: hsl(h, s, bl),
4495
+ surface: hsl(h, s, bl + 3),
4496
+ surfaceAlt: hsl(h, Math.max(s - 2, 0), bl + 5),
4497
+ panelHeader: hsl(h, Math.max(s - 2, 0), bl + 8),
4498
+ tabBar: hsl(h, s, bl + 1),
4499
+ tabActive: hsl(h, s, bl + 3),
4500
+ tabText: hsl(h - 5, Math.max(ts, 8), 65),
4501
+ tabTextActive: hsl(ah, as_, al),
4502
+ text: hsl(h - 5, Math.round(s * 0.8), 90),
4503
+ textSecondary: hsl(h - 5, Math.max(ts, 8), 68),
4504
+ textMuted: hsl(h - 5, Math.max(ts - 3, 6), 50),
4505
+ border: hsl(h, Math.max(s - 2, 0), bl + 14),
4506
+ splitter: hsl(h, Math.max(s - 2, 0), bl + 10),
4507
+ splitterHover: hsl(ah, as_, al - 8),
4508
+ hover: hsl(h, Math.max(s - 2, 0), bl + 8),
4509
+ primary: hsl(ah, as_, al),
4510
+ floatShadow: hsl(h, Math.min(s + 5, 100), Math.max(bl - 7, 0))
4511
+ };
4505
4512
  }
4506
- };
4507
- var warmLight = {
4508
- name: "Warm Light",
4509
- mode: "light",
4510
- colors: {
4511
- bg: "40 30% 96%",
4512
- surface: "40 20% 99%",
4513
- surfaceAlt: "40 25% 95%",
4514
- panelHeader: "40 25% 91%",
4515
- tabBar: "40 20% 93%",
4516
- tabActive: "40 20% 99%",
4517
- tabText: "30 10% 35%",
4518
- tabTextActive: "25 80% 45%",
4519
- text: "30 15% 15%",
4520
- textSecondary: "30 10% 32%",
4521
- textMuted: "30 8% 48%",
4522
- border: "35 15% 80%",
4523
- splitter: "35 15% 87%",
4524
- splitterHover: "25 80% 55%",
4525
- hover: "40 20% 93%",
4526
- primary: "25 80% 45%",
4527
- floatShadow: "30 20% 15%"
4513
+ if (overrides) {
4514
+ Object.assign(colors, overrides);
4528
4515
  }
4529
- };
4530
- var solarizedLight = {
4531
- name: "Solarized Light",
4532
- mode: "light",
4533
- colors: {
4534
- bg: "44 87% 94%",
4535
- surface: "44 87% 97%",
4536
- surfaceAlt: "44 60% 93%",
4537
- panelHeader: "44 60% 89%",
4538
- tabBar: "44 50% 91%",
4539
- tabActive: "44 87% 97%",
4516
+ return { name, mode, colors };
4517
+ }
4518
+ var vsCodeLight = createTheme(
4519
+ "VS Code Light",
4520
+ "light",
4521
+ { hue: 220, sat: 20 },
4522
+ { hue: 217, sat: 91, light: 50 },
4523
+ { floatShadow: "0 0% 0%" }
4524
+ );
4525
+ var githubLight = createTheme(
4526
+ "GitHub Light",
4527
+ "light",
4528
+ { hue: 210, sat: 20, light: 97 },
4529
+ { hue: 212, sat: 92, light: 45 },
4530
+ { floatShadow: "210 20% 20%" }
4531
+ );
4532
+ var warmLight = createTheme(
4533
+ "Warm Light",
4534
+ "light",
4535
+ { hue: 40, sat: 30 },
4536
+ { hue: 25, sat: 80, light: 45 }
4537
+ );
4538
+ var solarizedLight = createTheme(
4539
+ "Solarized Light",
4540
+ "light",
4541
+ { hue: 44, sat: 87, light: 94 },
4542
+ { hue: 175, sat: 59, light: 35 },
4543
+ {
4540
4544
  tabText: "194 14% 35%",
4541
- tabTextActive: "175 59% 35%",
4542
4545
  text: "192 81% 14%",
4543
4546
  textSecondary: "194 14% 32%",
4544
4547
  textMuted: "180 8% 48%",
4545
- border: "44 30% 80%",
4546
- splitter: "44 30% 85%",
4547
- splitterHover: "175 59% 45%",
4548
- hover: "44 50% 91%",
4549
- primary: "175 59% 35%",
4550
4548
  floatShadow: "44 20% 30%"
4551
4549
  }
4552
- };
4553
- var sepiaLight = {
4554
- name: "Sepia",
4555
- mode: "light",
4556
- colors: {
4557
- bg: "35 35% 94%",
4558
- surface: "35 30% 97%",
4559
- surfaceAlt: "35 28% 93%",
4560
- panelHeader: "35 28% 88%",
4561
- tabBar: "35 25% 90%",
4562
- tabActive: "35 30% 97%",
4563
- tabText: "25 12% 35%",
4564
- tabTextActive: "18 60% 42%",
4565
- text: "25 20% 18%",
4566
- textSecondary: "25 12% 32%",
4567
- textMuted: "25 8% 48%",
4568
- border: "30 18% 80%",
4569
- splitter: "30 18% 85%",
4570
- splitterHover: "18 60% 50%",
4571
- hover: "35 25% 91%",
4572
- primary: "18 60% 42%",
4573
- floatShadow: "25 15% 25%"
4574
- }
4575
- };
4576
- var mintLight = {
4577
- name: "Mint",
4578
- mode: "light",
4579
- colors: {
4580
- bg: "150 20% 96%",
4581
- surface: "150 15% 99%",
4582
- surfaceAlt: "150 18% 95%",
4583
- panelHeader: "150 18% 90%",
4584
- tabBar: "150 15% 92%",
4585
- tabActive: "150 15% 99%",
4586
- tabText: "160 10% 35%",
4587
- tabTextActive: "162 63% 35%",
4588
- text: "160 18% 14%",
4589
- textSecondary: "160 10% 32%",
4590
- textMuted: "155 8% 48%",
4591
- border: "150 14% 80%",
4592
- splitter: "150 14% 87%",
4593
- splitterHover: "162 63% 45%",
4594
- hover: "150 15% 93%",
4595
- primary: "162 63% 35%",
4596
- floatShadow: "155 15% 20%"
4597
- }
4598
- };
4599
- var lavenderLight = {
4600
- name: "Lavender",
4601
- mode: "light",
4602
- colors: {
4603
- bg: "260 20% 96%",
4604
- surface: "260 15% 99%",
4605
- surfaceAlt: "260 16% 95%",
4606
- panelHeader: "260 16% 90%",
4607
- tabBar: "260 14% 92%",
4608
- tabActive: "260 15% 99%",
4609
- tabText: "265 10% 35%",
4610
- tabTextActive: "262 52% 50%",
4611
- text: "265 18% 16%",
4612
- textSecondary: "265 10% 32%",
4613
- textMuted: "260 8% 48%",
4614
- border: "260 14% 80%",
4615
- splitter: "260 14% 87%",
4616
- splitterHover: "262 52% 58%",
4617
- hover: "260 14% 93%",
4618
- primary: "262 52% 50%",
4619
- floatShadow: "260 15% 22%"
4620
- }
4621
- };
4622
- var vsCodeDark = {
4623
- name: "VS Code Dark",
4624
- mode: "dark",
4625
- colors: {
4626
- bg: "222 47% 7%",
4627
- surface: "222 47% 10%",
4628
- surfaceAlt: "222 47% 12%",
4629
- panelHeader: "222 47% 15%",
4630
- tabBar: "222 47% 11%",
4631
- tabActive: "222 47% 10%",
4632
- tabText: "215 20% 65%",
4633
- tabTextActive: "217 91% 70%",
4634
- text: "210 40% 96%",
4635
- textSecondary: "215 20% 68%",
4636
- textMuted: "215 15% 50%",
4637
- border: "217 33% 24%",
4638
- splitter: "217 33% 20%",
4639
- splitterHover: "217 91% 60%",
4640
- hover: "217 33% 16%",
4641
- primary: "217 91% 70%",
4642
- floatShadow: "0 0% 0%"
4643
- }
4644
- };
4645
- var draculaDark = {
4646
- name: "Dracula Dark",
4647
- mode: "dark",
4648
- colors: {
4649
- bg: "231 15% 14%",
4650
- surface: "231 15% 17%",
4651
- surfaceAlt: "231 15% 19%",
4652
- panelHeader: "231 15% 22%",
4653
- tabBar: "231 15% 16%",
4654
- tabActive: "231 15% 17%",
4655
- tabText: "225 15% 65%",
4656
- tabTextActive: "265 90% 72%",
4657
- text: "60 30% 92%",
4658
- textSecondary: "225 15% 68%",
4659
- textMuted: "225 12% 50%",
4660
- border: "231 15% 28%",
4661
- splitter: "231 15% 24%",
4662
- splitterHover: "265 90% 60%",
4663
- hover: "231 15% 22%",
4664
- primary: "265 90% 72%",
4665
- floatShadow: "231 20% 5%"
4666
- }
4667
- };
4668
- var nordDark = {
4669
- name: "Nord Dark",
4670
- mode: "dark",
4671
- colors: {
4672
- bg: "220 16% 16%",
4673
- surface: "220 16% 20%",
4674
- surfaceAlt: "220 16% 22%",
4675
- panelHeader: "220 16% 25%",
4676
- tabBar: "220 16% 19%",
4677
- tabActive: "220 16% 20%",
4678
- tabText: "219 14% 65%",
4679
- tabTextActive: "193 43% 60%",
4680
- text: "219 28% 88%",
4681
- textSecondary: "219 14% 68%",
4682
- textMuted: "219 12% 50%",
4683
- border: "220 16% 30%",
4684
- splitter: "220 16% 26%",
4685
- splitterHover: "193 43% 50%",
4686
- hover: "220 16% 24%",
4687
- primary: "193 43% 60%",
4688
- floatShadow: "220 20% 8%"
4689
- }
4690
- };
4691
- var solarizedDark = {
4692
- name: "Solarized Dark",
4693
- mode: "dark",
4694
- colors: {
4695
- bg: "192 81% 8%",
4696
- surface: "192 81% 11%",
4697
- surfaceAlt: "192 60% 13%",
4698
- panelHeader: "192 60% 16%",
4699
- tabBar: "192 70% 10%",
4700
- tabActive: "192 81% 11%",
4550
+ );
4551
+ var sepiaLight = createTheme(
4552
+ "Sepia",
4553
+ "light",
4554
+ { hue: 35, sat: 35, light: 94 },
4555
+ { hue: 18, sat: 60, light: 42 }
4556
+ );
4557
+ var mintLight = createTheme(
4558
+ "Mint",
4559
+ "light",
4560
+ { hue: 150, sat: 20 },
4561
+ { hue: 162, sat: 63, light: 35 }
4562
+ );
4563
+ var lavenderLight = createTheme(
4564
+ "Lavender",
4565
+ "light",
4566
+ { hue: 260, sat: 20 },
4567
+ { hue: 262, sat: 52, light: 50 }
4568
+ );
4569
+ var vsCodeDark = createTheme(
4570
+ "VS Code Dark",
4571
+ "dark",
4572
+ { hue: 222, sat: 47, light: 7 },
4573
+ { hue: 217, sat: 91, light: 70 },
4574
+ { text: "210 40% 96%", floatShadow: "0 0% 0%" }
4575
+ );
4576
+ var draculaDark = createTheme(
4577
+ "Dracula Dark",
4578
+ "dark",
4579
+ { hue: 231, sat: 15, light: 14 },
4580
+ { hue: 265, sat: 90, light: 72 },
4581
+ { text: "60 30% 92%" }
4582
+ );
4583
+ var nordDark = createTheme(
4584
+ "Nord Dark",
4585
+ "dark",
4586
+ { hue: 220, sat: 16, light: 16 },
4587
+ { hue: 193, sat: 43, light: 60 },
4588
+ { text: "219 28% 88%" }
4589
+ );
4590
+ var solarizedDark = createTheme(
4591
+ "Solarized Dark",
4592
+ "dark",
4593
+ { hue: 192, sat: 81, light: 8 },
4594
+ { hue: 175, sat: 59, light: 55 },
4595
+ {
4701
4596
  tabText: "180 8% 65%",
4702
- tabTextActive: "175 59% 55%",
4703
4597
  text: "44 87% 94%",
4704
4598
  textSecondary: "180 8% 68%",
4705
4599
  textMuted: "194 14% 50%",
4706
- border: "192 50% 24%",
4707
- splitter: "192 50% 16%",
4708
- splitterHover: "175 59% 50%",
4709
- hover: "192 60% 15%",
4710
- primary: "175 59% 55%",
4711
4600
  floatShadow: "192 60% 3%"
4712
4601
  }
4713
- };
4714
- var midnightDark = {
4715
- name: "Midnight Blue",
4716
- mode: "dark",
4717
- colors: {
4718
- bg: "225 30% 10%",
4719
- surface: "225 28% 13%",
4720
- surfaceAlt: "225 26% 15%",
4721
- panelHeader: "225 26% 18%",
4722
- tabBar: "225 28% 12%",
4723
- tabActive: "225 28% 13%",
4724
- tabText: "220 15% 65%",
4725
- tabTextActive: "210 60% 65%",
4726
- text: "220 25% 90%",
4727
- textSecondary: "220 15% 68%",
4728
- textMuted: "220 12% 50%",
4729
- border: "225 25% 24%",
4730
- splitter: "225 25% 20%",
4731
- splitterHover: "210 60% 55%",
4732
- hover: "225 26% 18%",
4733
- primary: "210 60% 65%",
4734
- floatShadow: "225 30% 4%"
4735
- }
4736
- };
4737
- var forestDark = {
4738
- name: "Forest Dark",
4739
- mode: "dark",
4740
- colors: {
4741
- bg: "160 18% 9%",
4742
- surface: "160 16% 12%",
4743
- surfaceAlt: "160 14% 14%",
4744
- panelHeader: "160 14% 17%",
4745
- tabBar: "160 16% 11%",
4746
- tabActive: "160 16% 12%",
4747
- tabText: "155 10% 65%",
4748
- tabTextActive: "152 50% 55%",
4749
- text: "150 15% 90%",
4750
- textSecondary: "155 10% 68%",
4751
- textMuted: "155 8% 50%",
4752
- border: "160 14% 24%",
4753
- splitter: "160 14% 18%",
4754
- splitterHover: "152 50% 48%",
4755
- hover: "160 14% 16%",
4756
- primary: "152 50% 55%",
4757
- floatShadow: "160 18% 3%"
4758
- }
4759
- };
4760
- var slateDark = {
4761
- name: "Slate Dark",
4762
- mode: "dark",
4763
- colors: {
4764
- bg: "215 12% 11%",
4765
- surface: "215 10% 14%",
4766
- surfaceAlt: "215 9% 16%",
4767
- panelHeader: "215 9% 19%",
4768
- tabBar: "215 10% 13%",
4769
- tabActive: "215 10% 14%",
4770
- tabText: "210 8% 65%",
4771
- tabTextActive: "205 40% 62%",
4772
- text: "210 15% 90%",
4773
- textSecondary: "210 8% 68%",
4774
- textMuted: "210 6% 50%",
4775
- border: "215 9% 24%",
4776
- splitter: "215 9% 20%",
4777
- splitterHover: "205 40% 52%",
4778
- hover: "215 9% 18%",
4779
- primary: "205 40% 62%",
4780
- floatShadow: "215 12% 4%"
4781
- }
4782
- };
4602
+ );
4603
+ var midnightDark = createTheme(
4604
+ "Midnight Blue",
4605
+ "dark",
4606
+ { hue: 225, sat: 30 },
4607
+ { hue: 210, sat: 60, light: 65 }
4608
+ );
4609
+ var forestDark = createTheme(
4610
+ "Forest Dark",
4611
+ "dark",
4612
+ { hue: 160, sat: 18, light: 9 },
4613
+ { hue: 152, sat: 50, light: 55 }
4614
+ );
4615
+ var slateDark = createTheme(
4616
+ "Slate Dark",
4617
+ "dark",
4618
+ { hue: 215, sat: 12, light: 11 },
4619
+ { hue: 205, sat: 40, light: 62 }
4620
+ );
4783
4621
  var themes = {
4784
4622
  // Light
4785
4623
  vsCodeLight,
@@ -6253,6 +6091,7 @@ var PaneNavigator = class {
6253
6091
  countPanels,
6254
6092
  createDefaultState,
6255
6093
  createPreventableEvent,
6094
+ createTheme,
6256
6095
  defaultResourceStrings,
6257
6096
  deserialize,
6258
6097
  detectPanelEdge,
package/dist/index.d.cts CHANGED
@@ -856,6 +856,7 @@ declare class PanelApi {
856
856
  * 1. Use a built-in theme: `theme: themes.vsCodeLight`
857
857
  * 2. Create a custom theme: `theme: { name: 'custom', mode: 'light', colors: { ... } }`
858
858
  * 3. Extend a built-in theme: `theme: { ...themes.vsCodeLight, colors: { ...themes.vsCodeLight.colors, primary: '#ff0000' } }`
859
+ * 4. Use createTheme factory: `theme: createTheme('My Theme', 'dark', { hue: 220, sat: 16 }, { hue: 193, sat: 43, light: 60 })`
859
860
  */
860
861
  interface DockThemeColors {
861
862
  /** Main background behind all panels */
@@ -906,33 +907,39 @@ interface DockTheme {
906
907
  * This scopes the theme to that element's subtree.
907
908
  */
908
909
  declare function applyTheme(container: HTMLElement, theme: DockTheme): void;
909
- /** VS Code-inspired light theme — clean whites and grays */
910
+ interface ThemeBase {
911
+ hue: number;
912
+ sat: number;
913
+ light?: number;
914
+ }
915
+ interface ThemeAccent {
916
+ hue: number;
917
+ sat: number;
918
+ light?: number;
919
+ }
920
+ /**
921
+ * Create a theme from a base palette and accent color.
922
+ *
923
+ * @param name - Human-readable theme name
924
+ * @param mode - 'light' or 'dark'
925
+ * @param base - Background hue/saturation (lightness auto-derived from mode)
926
+ * @param accent - Primary accent hue/saturation
927
+ * @param overrides - Optional per-color overrides for special themes
928
+ */
929
+ declare function createTheme(name: string, mode: 'light' | 'dark', base: ThemeBase, accent: ThemeAccent, overrides?: Partial<DockThemeColors>): DockTheme;
910
930
  declare const vsCodeLight: DockTheme;
911
- /** GitHub-inspired light theme — warm grays with subtle blue accent */
912
931
  declare const githubLight: DockTheme;
913
- /** Soft warm light theme — cream tones with amber accent */
914
932
  declare const warmLight: DockTheme;
915
- /** Solarized Light — low-contrast cream with teal accents, designed for all-day use */
916
933
  declare const solarizedLight: DockTheme;
917
- /** Sepia — book-like warmth with brown tones, very gentle on eyes */
918
934
  declare const sepiaLight: DockTheme;
919
- /** Mint — soft green tones, refreshing and calming */
920
935
  declare const mintLight: DockTheme;
921
- /** Lavender — soft purple-gray, elegant and easy on eyes */
922
936
  declare const lavenderLight: DockTheme;
923
- /** VS Code-inspired dark theme — deep blues and grays */
924
937
  declare const vsCodeDark: DockTheme;
925
- /** Dracula-inspired dark theme — purple accents on dark gray */
926
938
  declare const draculaDark: DockTheme;
927
- /** Nord-inspired dark theme — arctic blue-gray palette */
928
939
  declare const nordDark: DockTheme;
929
- /** Solarized Dark — low-contrast dark with teal accents, designed for all-day use */
930
940
  declare const solarizedDark: DockTheme;
931
- /** Midnight Blue — deep navy with soft blue accents, very easy on eyes at night */
932
941
  declare const midnightDark: DockTheme;
933
- /** Forest — deep green-gray with emerald accents, nature-inspired calm */
934
942
  declare const forestDark: DockTheme;
935
- /** Slate — neutral gray with warm undertones, minimalist and gentle */
936
943
  declare const slateDark: DockTheme;
937
944
  /** All built-in themes */
938
945
  declare const themes: {
@@ -1475,4 +1482,4 @@ declare class PanelFinder {
1475
1482
  dispose(): void;
1476
1483
  }
1477
1484
 
1478
- export { AddPanelOptions, ContextMenuManager, ContextMenuManagerOptions, DockAction, DockEdge, DockManagerState, DockPosition, DockResourceStrings, DockTheme, DockThemeColors, DockviewApi, DockviewComponent, DockviewComponentOptions, EventEmitter, FloatPanelOptions, FloatingPanel, HeaderPosition, IDisposable, KeyboardManager, KeyboardManagerOptions, LayoutConstraints, LayoutNode, MovePanelOptions, PaneNavigator, PaneNavigatorOptions, PanelApi, PanelConfig, PanelFinder, PanelFinderOptions, PopoutPanel, PreventableDockEvent, SerializedDockLayout, SplitDirection, SplitNode, StateHistoryManager, TabGroupNode, UnpinnedPanel, applyTheme, clearLocalStorage, collectAllPanelsOrdered, collectLayoutPanelIds, countPanels, createDefaultState, createPreventableEvent, defaultResourceStrings, deserialize, detectPanelEdge, dockReducer, draculaDark, exportAsUrl, exportToFile, findAllTabGroups, findFirstTabGroup, findTabGroupByEdge, findTabGroupById, findTabGroupForPanel, forestDark, genId, getThemeByName, getThemesByMode, githubLight, importFromFile, importFromUrl, insertAtEdge, insertBySplit, insertInGroup, isPanelPlaced, lavenderLight, loadFromLocalStorage, midnightDark, mintLight, movePanel, nordDark, removePanel, resetIdCounter, saveToLocalStorage, sepiaLight, serialize, slateDark, solarizedDark, solarizedLight, themes, validateState, vsCodeDark, vsCodeLight, warmLight };
1485
+ export { AddPanelOptions, ContextMenuManager, ContextMenuManagerOptions, DockAction, DockEdge, DockManagerState, DockPosition, DockResourceStrings, DockTheme, DockThemeColors, DockviewApi, DockviewComponent, DockviewComponentOptions, EventEmitter, FloatPanelOptions, FloatingPanel, HeaderPosition, IDisposable, KeyboardManager, KeyboardManagerOptions, LayoutConstraints, LayoutNode, MovePanelOptions, PaneNavigator, PaneNavigatorOptions, PanelApi, PanelConfig, PanelFinder, PanelFinderOptions, PopoutPanel, PreventableDockEvent, SerializedDockLayout, SplitDirection, SplitNode, StateHistoryManager, TabGroupNode, UnpinnedPanel, applyTheme, clearLocalStorage, collectAllPanelsOrdered, collectLayoutPanelIds, countPanels, createDefaultState, createPreventableEvent, createTheme, defaultResourceStrings, deserialize, detectPanelEdge, dockReducer, draculaDark, exportAsUrl, exportToFile, findAllTabGroups, findFirstTabGroup, findTabGroupByEdge, findTabGroupById, findTabGroupForPanel, forestDark, genId, getThemeByName, getThemesByMode, githubLight, importFromFile, importFromUrl, insertAtEdge, insertBySplit, insertInGroup, isPanelPlaced, lavenderLight, loadFromLocalStorage, midnightDark, mintLight, movePanel, nordDark, removePanel, resetIdCounter, saveToLocalStorage, sepiaLight, serialize, slateDark, solarizedDark, solarizedLight, themes, validateState, vsCodeDark, vsCodeLight, warmLight };
package/dist/index.d.ts CHANGED
@@ -856,6 +856,7 @@ declare class PanelApi {
856
856
  * 1. Use a built-in theme: `theme: themes.vsCodeLight`
857
857
  * 2. Create a custom theme: `theme: { name: 'custom', mode: 'light', colors: { ... } }`
858
858
  * 3. Extend a built-in theme: `theme: { ...themes.vsCodeLight, colors: { ...themes.vsCodeLight.colors, primary: '#ff0000' } }`
859
+ * 4. Use createTheme factory: `theme: createTheme('My Theme', 'dark', { hue: 220, sat: 16 }, { hue: 193, sat: 43, light: 60 })`
859
860
  */
860
861
  interface DockThemeColors {
861
862
  /** Main background behind all panels */
@@ -906,33 +907,39 @@ interface DockTheme {
906
907
  * This scopes the theme to that element's subtree.
907
908
  */
908
909
  declare function applyTheme(container: HTMLElement, theme: DockTheme): void;
909
- /** VS Code-inspired light theme — clean whites and grays */
910
+ interface ThemeBase {
911
+ hue: number;
912
+ sat: number;
913
+ light?: number;
914
+ }
915
+ interface ThemeAccent {
916
+ hue: number;
917
+ sat: number;
918
+ light?: number;
919
+ }
920
+ /**
921
+ * Create a theme from a base palette and accent color.
922
+ *
923
+ * @param name - Human-readable theme name
924
+ * @param mode - 'light' or 'dark'
925
+ * @param base - Background hue/saturation (lightness auto-derived from mode)
926
+ * @param accent - Primary accent hue/saturation
927
+ * @param overrides - Optional per-color overrides for special themes
928
+ */
929
+ declare function createTheme(name: string, mode: 'light' | 'dark', base: ThemeBase, accent: ThemeAccent, overrides?: Partial<DockThemeColors>): DockTheme;
910
930
  declare const vsCodeLight: DockTheme;
911
- /** GitHub-inspired light theme — warm grays with subtle blue accent */
912
931
  declare const githubLight: DockTheme;
913
- /** Soft warm light theme — cream tones with amber accent */
914
932
  declare const warmLight: DockTheme;
915
- /** Solarized Light — low-contrast cream with teal accents, designed for all-day use */
916
933
  declare const solarizedLight: DockTheme;
917
- /** Sepia — book-like warmth with brown tones, very gentle on eyes */
918
934
  declare const sepiaLight: DockTheme;
919
- /** Mint — soft green tones, refreshing and calming */
920
935
  declare const mintLight: DockTheme;
921
- /** Lavender — soft purple-gray, elegant and easy on eyes */
922
936
  declare const lavenderLight: DockTheme;
923
- /** VS Code-inspired dark theme — deep blues and grays */
924
937
  declare const vsCodeDark: DockTheme;
925
- /** Dracula-inspired dark theme — purple accents on dark gray */
926
938
  declare const draculaDark: DockTheme;
927
- /** Nord-inspired dark theme — arctic blue-gray palette */
928
939
  declare const nordDark: DockTheme;
929
- /** Solarized Dark — low-contrast dark with teal accents, designed for all-day use */
930
940
  declare const solarizedDark: DockTheme;
931
- /** Midnight Blue — deep navy with soft blue accents, very easy on eyes at night */
932
941
  declare const midnightDark: DockTheme;
933
- /** Forest — deep green-gray with emerald accents, nature-inspired calm */
934
942
  declare const forestDark: DockTheme;
935
- /** Slate — neutral gray with warm undertones, minimalist and gentle */
936
943
  declare const slateDark: DockTheme;
937
944
  /** All built-in themes */
938
945
  declare const themes: {
@@ -1475,4 +1482,4 @@ declare class PanelFinder {
1475
1482
  dispose(): void;
1476
1483
  }
1477
1484
 
1478
- export { AddPanelOptions, ContextMenuManager, ContextMenuManagerOptions, DockAction, DockEdge, DockManagerState, DockPosition, DockResourceStrings, DockTheme, DockThemeColors, DockviewApi, DockviewComponent, DockviewComponentOptions, EventEmitter, FloatPanelOptions, FloatingPanel, HeaderPosition, IDisposable, KeyboardManager, KeyboardManagerOptions, LayoutConstraints, LayoutNode, MovePanelOptions, PaneNavigator, PaneNavigatorOptions, PanelApi, PanelConfig, PanelFinder, PanelFinderOptions, PopoutPanel, PreventableDockEvent, SerializedDockLayout, SplitDirection, SplitNode, StateHistoryManager, TabGroupNode, UnpinnedPanel, applyTheme, clearLocalStorage, collectAllPanelsOrdered, collectLayoutPanelIds, countPanels, createDefaultState, createPreventableEvent, defaultResourceStrings, deserialize, detectPanelEdge, dockReducer, draculaDark, exportAsUrl, exportToFile, findAllTabGroups, findFirstTabGroup, findTabGroupByEdge, findTabGroupById, findTabGroupForPanel, forestDark, genId, getThemeByName, getThemesByMode, githubLight, importFromFile, importFromUrl, insertAtEdge, insertBySplit, insertInGroup, isPanelPlaced, lavenderLight, loadFromLocalStorage, midnightDark, mintLight, movePanel, nordDark, removePanel, resetIdCounter, saveToLocalStorage, sepiaLight, serialize, slateDark, solarizedDark, solarizedLight, themes, validateState, vsCodeDark, vsCodeLight, warmLight };
1485
+ export { AddPanelOptions, ContextMenuManager, ContextMenuManagerOptions, DockAction, DockEdge, DockManagerState, DockPosition, DockResourceStrings, DockTheme, DockThemeColors, DockviewApi, DockviewComponent, DockviewComponentOptions, EventEmitter, FloatPanelOptions, FloatingPanel, HeaderPosition, IDisposable, KeyboardManager, KeyboardManagerOptions, LayoutConstraints, LayoutNode, MovePanelOptions, PaneNavigator, PaneNavigatorOptions, PanelApi, PanelConfig, PanelFinder, PanelFinderOptions, PopoutPanel, PreventableDockEvent, SerializedDockLayout, SplitDirection, SplitNode, StateHistoryManager, TabGroupNode, UnpinnedPanel, applyTheme, clearLocalStorage, collectAllPanelsOrdered, collectLayoutPanelIds, countPanels, createDefaultState, createPreventableEvent, createTheme, defaultResourceStrings, deserialize, detectPanelEdge, dockReducer, draculaDark, exportAsUrl, exportToFile, findAllTabGroups, findFirstTabGroup, findTabGroupByEdge, findTabGroupById, findTabGroupForPanel, forestDark, genId, getThemeByName, getThemesByMode, githubLight, importFromFile, importFromUrl, insertAtEdge, insertBySplit, insertInGroup, isPanelPlaced, lavenderLight, loadFromLocalStorage, midnightDark, mintLight, movePanel, nordDark, removePanel, resetIdCounter, saveToLocalStorage, sepiaLight, serialize, slateDark, solarizedDark, solarizedLight, themes, validateState, vsCodeDark, vsCodeLight, warmLight };
package/dist/index.js CHANGED
@@ -4148,9 +4148,8 @@ var UnpinnedStripView = class {
4148
4148
  this.stripEl.removeEventListener("click", this.boundStripClick);
4149
4149
  this.boundStripClick = null;
4150
4150
  }
4151
- if (this.element.parentNode) {
4152
- this.element.parentNode.removeChild(this.element);
4153
- }
4151
+ this.stripEl.remove();
4152
+ this.element.remove();
4154
4153
  }
4155
4154
  // ── Private: Event delegation ──────────────────────────────────
4156
4155
  /** Set up event delegation on stripEl for all tab interactions */
@@ -4375,328 +4374,166 @@ function applyTheme(container, theme) {
4375
4374
  container.style.setProperty("--dock-scrollbar-thumb", colors.textMuted);
4376
4375
  container.style.setProperty("--dock-scrollbar-track", "transparent");
4377
4376
  }
4378
- var vsCodeLight = {
4379
- name: "VS Code Light",
4380
- mode: "light",
4381
- colors: {
4382
- bg: "220 20% 96%",
4383
- surface: "0 0% 100%",
4384
- surfaceAlt: "220 14% 95%",
4385
- panelHeader: "220 14% 92%",
4386
- tabBar: "220 14% 93%",
4387
- tabActive: "0 0% 100%",
4388
- tabText: "0 0% 38%",
4389
- tabTextActive: "217 91% 50%",
4390
- text: "0 0% 15%",
4391
- textSecondary: "0 0% 35%",
4392
- textMuted: "0 0% 50%",
4393
- border: "220 13% 82%",
4394
- splitter: "220 13% 87%",
4395
- splitterHover: "217 91% 60%",
4396
- hover: "220 14% 93%",
4397
- primary: "217 91% 50%",
4398
- floatShadow: "0 0% 0%"
4399
- }
4400
- };
4401
- var githubLight = {
4402
- name: "GitHub Light",
4403
- mode: "light",
4404
- colors: {
4405
- bg: "210 20% 97%",
4406
- surface: "0 0% 100%",
4407
- surfaceAlt: "210 18% 96%",
4408
- panelHeader: "210 18% 92%",
4409
- tabBar: "210 15% 94%",
4410
- tabActive: "0 0% 100%",
4411
- tabText: "210 10% 35%",
4412
- tabTextActive: "212 92% 45%",
4413
- text: "210 12% 16%",
4414
- textSecondary: "210 10% 32%",
4415
- textMuted: "210 8% 48%",
4416
- border: "210 14% 80%",
4417
- splitter: "210 14% 89%",
4418
- splitterHover: "212 92% 55%",
4419
- hover: "210 15% 94%",
4420
- primary: "212 92% 45%",
4421
- floatShadow: "210 20% 20%"
4377
+ var hsl = (h, s, l) => `${h} ${s}% ${l}%`;
4378
+ function createTheme(name, mode, base, accent, overrides) {
4379
+ const { hue: h, sat: s } = base;
4380
+ const { hue: ah, sat: as_ } = accent;
4381
+ let colors;
4382
+ if (mode === "light") {
4383
+ const bl = base.light ?? 96;
4384
+ const al = accent.light ?? 50;
4385
+ const ts = Math.max(s - 6, 0);
4386
+ colors = {
4387
+ bg: hsl(h, s, bl),
4388
+ surface: hsl(h, Math.max(s - 5, 0), Math.min(bl + 3, 100)),
4389
+ surfaceAlt: hsl(h, Math.max(s - 2, 0), bl - 1),
4390
+ panelHeader: hsl(h, Math.max(s - 2, 0), bl - 4),
4391
+ tabBar: hsl(h, Math.max(s - 5, 0), bl - 3),
4392
+ tabActive: hsl(h, Math.max(s - 5, 0), Math.min(bl + 3, 100)),
4393
+ tabText: hsl(h - 10, Math.max(ts - 8, 0), 35),
4394
+ tabTextActive: hsl(ah, as_, al),
4395
+ text: hsl(h - 10, Math.max(ts - 2, 0), 15),
4396
+ textSecondary: hsl(h - 10, Math.max(ts - 8, 0), 32),
4397
+ textMuted: hsl(h - 10, Math.max(ts - 12, 0), 48),
4398
+ border: hsl(h, Math.max(s - 6, 0), 80),
4399
+ splitter: hsl(h, Math.max(s - 6, 0), 87),
4400
+ splitterHover: hsl(ah, as_, al + 8),
4401
+ hover: hsl(h, Math.max(s - 5, 0), bl - 3),
4402
+ primary: hsl(ah, as_, al),
4403
+ floatShadow: hsl(h, Math.max(s, 0), 15)
4404
+ };
4405
+ } else {
4406
+ const bl = base.light ?? 10;
4407
+ const al = accent.light ?? 65;
4408
+ const ts = Math.round(s * 0.5);
4409
+ colors = {
4410
+ bg: hsl(h, s, bl),
4411
+ surface: hsl(h, s, bl + 3),
4412
+ surfaceAlt: hsl(h, Math.max(s - 2, 0), bl + 5),
4413
+ panelHeader: hsl(h, Math.max(s - 2, 0), bl + 8),
4414
+ tabBar: hsl(h, s, bl + 1),
4415
+ tabActive: hsl(h, s, bl + 3),
4416
+ tabText: hsl(h - 5, Math.max(ts, 8), 65),
4417
+ tabTextActive: hsl(ah, as_, al),
4418
+ text: hsl(h - 5, Math.round(s * 0.8), 90),
4419
+ textSecondary: hsl(h - 5, Math.max(ts, 8), 68),
4420
+ textMuted: hsl(h - 5, Math.max(ts - 3, 6), 50),
4421
+ border: hsl(h, Math.max(s - 2, 0), bl + 14),
4422
+ splitter: hsl(h, Math.max(s - 2, 0), bl + 10),
4423
+ splitterHover: hsl(ah, as_, al - 8),
4424
+ hover: hsl(h, Math.max(s - 2, 0), bl + 8),
4425
+ primary: hsl(ah, as_, al),
4426
+ floatShadow: hsl(h, Math.min(s + 5, 100), Math.max(bl - 7, 0))
4427
+ };
4422
4428
  }
4423
- };
4424
- var warmLight = {
4425
- name: "Warm Light",
4426
- mode: "light",
4427
- colors: {
4428
- bg: "40 30% 96%",
4429
- surface: "40 20% 99%",
4430
- surfaceAlt: "40 25% 95%",
4431
- panelHeader: "40 25% 91%",
4432
- tabBar: "40 20% 93%",
4433
- tabActive: "40 20% 99%",
4434
- tabText: "30 10% 35%",
4435
- tabTextActive: "25 80% 45%",
4436
- text: "30 15% 15%",
4437
- textSecondary: "30 10% 32%",
4438
- textMuted: "30 8% 48%",
4439
- border: "35 15% 80%",
4440
- splitter: "35 15% 87%",
4441
- splitterHover: "25 80% 55%",
4442
- hover: "40 20% 93%",
4443
- primary: "25 80% 45%",
4444
- floatShadow: "30 20% 15%"
4429
+ if (overrides) {
4430
+ Object.assign(colors, overrides);
4445
4431
  }
4446
- };
4447
- var solarizedLight = {
4448
- name: "Solarized Light",
4449
- mode: "light",
4450
- colors: {
4451
- bg: "44 87% 94%",
4452
- surface: "44 87% 97%",
4453
- surfaceAlt: "44 60% 93%",
4454
- panelHeader: "44 60% 89%",
4455
- tabBar: "44 50% 91%",
4456
- tabActive: "44 87% 97%",
4432
+ return { name, mode, colors };
4433
+ }
4434
+ var vsCodeLight = createTheme(
4435
+ "VS Code Light",
4436
+ "light",
4437
+ { hue: 220, sat: 20 },
4438
+ { hue: 217, sat: 91, light: 50 },
4439
+ { floatShadow: "0 0% 0%" }
4440
+ );
4441
+ var githubLight = createTheme(
4442
+ "GitHub Light",
4443
+ "light",
4444
+ { hue: 210, sat: 20, light: 97 },
4445
+ { hue: 212, sat: 92, light: 45 },
4446
+ { floatShadow: "210 20% 20%" }
4447
+ );
4448
+ var warmLight = createTheme(
4449
+ "Warm Light",
4450
+ "light",
4451
+ { hue: 40, sat: 30 },
4452
+ { hue: 25, sat: 80, light: 45 }
4453
+ );
4454
+ var solarizedLight = createTheme(
4455
+ "Solarized Light",
4456
+ "light",
4457
+ { hue: 44, sat: 87, light: 94 },
4458
+ { hue: 175, sat: 59, light: 35 },
4459
+ {
4457
4460
  tabText: "194 14% 35%",
4458
- tabTextActive: "175 59% 35%",
4459
4461
  text: "192 81% 14%",
4460
4462
  textSecondary: "194 14% 32%",
4461
4463
  textMuted: "180 8% 48%",
4462
- border: "44 30% 80%",
4463
- splitter: "44 30% 85%",
4464
- splitterHover: "175 59% 45%",
4465
- hover: "44 50% 91%",
4466
- primary: "175 59% 35%",
4467
4464
  floatShadow: "44 20% 30%"
4468
4465
  }
4469
- };
4470
- var sepiaLight = {
4471
- name: "Sepia",
4472
- mode: "light",
4473
- colors: {
4474
- bg: "35 35% 94%",
4475
- surface: "35 30% 97%",
4476
- surfaceAlt: "35 28% 93%",
4477
- panelHeader: "35 28% 88%",
4478
- tabBar: "35 25% 90%",
4479
- tabActive: "35 30% 97%",
4480
- tabText: "25 12% 35%",
4481
- tabTextActive: "18 60% 42%",
4482
- text: "25 20% 18%",
4483
- textSecondary: "25 12% 32%",
4484
- textMuted: "25 8% 48%",
4485
- border: "30 18% 80%",
4486
- splitter: "30 18% 85%",
4487
- splitterHover: "18 60% 50%",
4488
- hover: "35 25% 91%",
4489
- primary: "18 60% 42%",
4490
- floatShadow: "25 15% 25%"
4491
- }
4492
- };
4493
- var mintLight = {
4494
- name: "Mint",
4495
- mode: "light",
4496
- colors: {
4497
- bg: "150 20% 96%",
4498
- surface: "150 15% 99%",
4499
- surfaceAlt: "150 18% 95%",
4500
- panelHeader: "150 18% 90%",
4501
- tabBar: "150 15% 92%",
4502
- tabActive: "150 15% 99%",
4503
- tabText: "160 10% 35%",
4504
- tabTextActive: "162 63% 35%",
4505
- text: "160 18% 14%",
4506
- textSecondary: "160 10% 32%",
4507
- textMuted: "155 8% 48%",
4508
- border: "150 14% 80%",
4509
- splitter: "150 14% 87%",
4510
- splitterHover: "162 63% 45%",
4511
- hover: "150 15% 93%",
4512
- primary: "162 63% 35%",
4513
- floatShadow: "155 15% 20%"
4514
- }
4515
- };
4516
- var lavenderLight = {
4517
- name: "Lavender",
4518
- mode: "light",
4519
- colors: {
4520
- bg: "260 20% 96%",
4521
- surface: "260 15% 99%",
4522
- surfaceAlt: "260 16% 95%",
4523
- panelHeader: "260 16% 90%",
4524
- tabBar: "260 14% 92%",
4525
- tabActive: "260 15% 99%",
4526
- tabText: "265 10% 35%",
4527
- tabTextActive: "262 52% 50%",
4528
- text: "265 18% 16%",
4529
- textSecondary: "265 10% 32%",
4530
- textMuted: "260 8% 48%",
4531
- border: "260 14% 80%",
4532
- splitter: "260 14% 87%",
4533
- splitterHover: "262 52% 58%",
4534
- hover: "260 14% 93%",
4535
- primary: "262 52% 50%",
4536
- floatShadow: "260 15% 22%"
4537
- }
4538
- };
4539
- var vsCodeDark = {
4540
- name: "VS Code Dark",
4541
- mode: "dark",
4542
- colors: {
4543
- bg: "222 47% 7%",
4544
- surface: "222 47% 10%",
4545
- surfaceAlt: "222 47% 12%",
4546
- panelHeader: "222 47% 15%",
4547
- tabBar: "222 47% 11%",
4548
- tabActive: "222 47% 10%",
4549
- tabText: "215 20% 65%",
4550
- tabTextActive: "217 91% 70%",
4551
- text: "210 40% 96%",
4552
- textSecondary: "215 20% 68%",
4553
- textMuted: "215 15% 50%",
4554
- border: "217 33% 24%",
4555
- splitter: "217 33% 20%",
4556
- splitterHover: "217 91% 60%",
4557
- hover: "217 33% 16%",
4558
- primary: "217 91% 70%",
4559
- floatShadow: "0 0% 0%"
4560
- }
4561
- };
4562
- var draculaDark = {
4563
- name: "Dracula Dark",
4564
- mode: "dark",
4565
- colors: {
4566
- bg: "231 15% 14%",
4567
- surface: "231 15% 17%",
4568
- surfaceAlt: "231 15% 19%",
4569
- panelHeader: "231 15% 22%",
4570
- tabBar: "231 15% 16%",
4571
- tabActive: "231 15% 17%",
4572
- tabText: "225 15% 65%",
4573
- tabTextActive: "265 90% 72%",
4574
- text: "60 30% 92%",
4575
- textSecondary: "225 15% 68%",
4576
- textMuted: "225 12% 50%",
4577
- border: "231 15% 28%",
4578
- splitter: "231 15% 24%",
4579
- splitterHover: "265 90% 60%",
4580
- hover: "231 15% 22%",
4581
- primary: "265 90% 72%",
4582
- floatShadow: "231 20% 5%"
4583
- }
4584
- };
4585
- var nordDark = {
4586
- name: "Nord Dark",
4587
- mode: "dark",
4588
- colors: {
4589
- bg: "220 16% 16%",
4590
- surface: "220 16% 20%",
4591
- surfaceAlt: "220 16% 22%",
4592
- panelHeader: "220 16% 25%",
4593
- tabBar: "220 16% 19%",
4594
- tabActive: "220 16% 20%",
4595
- tabText: "219 14% 65%",
4596
- tabTextActive: "193 43% 60%",
4597
- text: "219 28% 88%",
4598
- textSecondary: "219 14% 68%",
4599
- textMuted: "219 12% 50%",
4600
- border: "220 16% 30%",
4601
- splitter: "220 16% 26%",
4602
- splitterHover: "193 43% 50%",
4603
- hover: "220 16% 24%",
4604
- primary: "193 43% 60%",
4605
- floatShadow: "220 20% 8%"
4606
- }
4607
- };
4608
- var solarizedDark = {
4609
- name: "Solarized Dark",
4610
- mode: "dark",
4611
- colors: {
4612
- bg: "192 81% 8%",
4613
- surface: "192 81% 11%",
4614
- surfaceAlt: "192 60% 13%",
4615
- panelHeader: "192 60% 16%",
4616
- tabBar: "192 70% 10%",
4617
- tabActive: "192 81% 11%",
4466
+ );
4467
+ var sepiaLight = createTheme(
4468
+ "Sepia",
4469
+ "light",
4470
+ { hue: 35, sat: 35, light: 94 },
4471
+ { hue: 18, sat: 60, light: 42 }
4472
+ );
4473
+ var mintLight = createTheme(
4474
+ "Mint",
4475
+ "light",
4476
+ { hue: 150, sat: 20 },
4477
+ { hue: 162, sat: 63, light: 35 }
4478
+ );
4479
+ var lavenderLight = createTheme(
4480
+ "Lavender",
4481
+ "light",
4482
+ { hue: 260, sat: 20 },
4483
+ { hue: 262, sat: 52, light: 50 }
4484
+ );
4485
+ var vsCodeDark = createTheme(
4486
+ "VS Code Dark",
4487
+ "dark",
4488
+ { hue: 222, sat: 47, light: 7 },
4489
+ { hue: 217, sat: 91, light: 70 },
4490
+ { text: "210 40% 96%", floatShadow: "0 0% 0%" }
4491
+ );
4492
+ var draculaDark = createTheme(
4493
+ "Dracula Dark",
4494
+ "dark",
4495
+ { hue: 231, sat: 15, light: 14 },
4496
+ { hue: 265, sat: 90, light: 72 },
4497
+ { text: "60 30% 92%" }
4498
+ );
4499
+ var nordDark = createTheme(
4500
+ "Nord Dark",
4501
+ "dark",
4502
+ { hue: 220, sat: 16, light: 16 },
4503
+ { hue: 193, sat: 43, light: 60 },
4504
+ { text: "219 28% 88%" }
4505
+ );
4506
+ var solarizedDark = createTheme(
4507
+ "Solarized Dark",
4508
+ "dark",
4509
+ { hue: 192, sat: 81, light: 8 },
4510
+ { hue: 175, sat: 59, light: 55 },
4511
+ {
4618
4512
  tabText: "180 8% 65%",
4619
- tabTextActive: "175 59% 55%",
4620
4513
  text: "44 87% 94%",
4621
4514
  textSecondary: "180 8% 68%",
4622
4515
  textMuted: "194 14% 50%",
4623
- border: "192 50% 24%",
4624
- splitter: "192 50% 16%",
4625
- splitterHover: "175 59% 50%",
4626
- hover: "192 60% 15%",
4627
- primary: "175 59% 55%",
4628
4516
  floatShadow: "192 60% 3%"
4629
4517
  }
4630
- };
4631
- var midnightDark = {
4632
- name: "Midnight Blue",
4633
- mode: "dark",
4634
- colors: {
4635
- bg: "225 30% 10%",
4636
- surface: "225 28% 13%",
4637
- surfaceAlt: "225 26% 15%",
4638
- panelHeader: "225 26% 18%",
4639
- tabBar: "225 28% 12%",
4640
- tabActive: "225 28% 13%",
4641
- tabText: "220 15% 65%",
4642
- tabTextActive: "210 60% 65%",
4643
- text: "220 25% 90%",
4644
- textSecondary: "220 15% 68%",
4645
- textMuted: "220 12% 50%",
4646
- border: "225 25% 24%",
4647
- splitter: "225 25% 20%",
4648
- splitterHover: "210 60% 55%",
4649
- hover: "225 26% 18%",
4650
- primary: "210 60% 65%",
4651
- floatShadow: "225 30% 4%"
4652
- }
4653
- };
4654
- var forestDark = {
4655
- name: "Forest Dark",
4656
- mode: "dark",
4657
- colors: {
4658
- bg: "160 18% 9%",
4659
- surface: "160 16% 12%",
4660
- surfaceAlt: "160 14% 14%",
4661
- panelHeader: "160 14% 17%",
4662
- tabBar: "160 16% 11%",
4663
- tabActive: "160 16% 12%",
4664
- tabText: "155 10% 65%",
4665
- tabTextActive: "152 50% 55%",
4666
- text: "150 15% 90%",
4667
- textSecondary: "155 10% 68%",
4668
- textMuted: "155 8% 50%",
4669
- border: "160 14% 24%",
4670
- splitter: "160 14% 18%",
4671
- splitterHover: "152 50% 48%",
4672
- hover: "160 14% 16%",
4673
- primary: "152 50% 55%",
4674
- floatShadow: "160 18% 3%"
4675
- }
4676
- };
4677
- var slateDark = {
4678
- name: "Slate Dark",
4679
- mode: "dark",
4680
- colors: {
4681
- bg: "215 12% 11%",
4682
- surface: "215 10% 14%",
4683
- surfaceAlt: "215 9% 16%",
4684
- panelHeader: "215 9% 19%",
4685
- tabBar: "215 10% 13%",
4686
- tabActive: "215 10% 14%",
4687
- tabText: "210 8% 65%",
4688
- tabTextActive: "205 40% 62%",
4689
- text: "210 15% 90%",
4690
- textSecondary: "210 8% 68%",
4691
- textMuted: "210 6% 50%",
4692
- border: "215 9% 24%",
4693
- splitter: "215 9% 20%",
4694
- splitterHover: "205 40% 52%",
4695
- hover: "215 9% 18%",
4696
- primary: "205 40% 62%",
4697
- floatShadow: "215 12% 4%"
4698
- }
4699
- };
4518
+ );
4519
+ var midnightDark = createTheme(
4520
+ "Midnight Blue",
4521
+ "dark",
4522
+ { hue: 225, sat: 30 },
4523
+ { hue: 210, sat: 60, light: 65 }
4524
+ );
4525
+ var forestDark = createTheme(
4526
+ "Forest Dark",
4527
+ "dark",
4528
+ { hue: 160, sat: 18, light: 9 },
4529
+ { hue: 152, sat: 50, light: 55 }
4530
+ );
4531
+ var slateDark = createTheme(
4532
+ "Slate Dark",
4533
+ "dark",
4534
+ { hue: 215, sat: 12, light: 11 },
4535
+ { hue: 205, sat: 40, light: 62 }
4536
+ );
4700
4537
  var themes = {
4701
4538
  // Light
4702
4539
  vsCodeLight,
@@ -6169,6 +6006,7 @@ export {
6169
6006
  countPanels,
6170
6007
  createDefaultState,
6171
6008
  createPreventableEvent,
6009
+ createTheme,
6172
6010
  defaultResourceStrings,
6173
6011
  deserialize,
6174
6012
  detectPanelEdge,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@widgetstools/dock-manager-core",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "description": "Zero-dependency layout manager supporting tabs, splits, floating windows, and auto-hide panels. Framework-agnostic core.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",
@@ -25,7 +25,7 @@
25
25
  "LICENSE"
26
26
  ],
27
27
  "scripts": {
28
- "build": "npx tsup src/index.ts --format esm,cjs --dts --clean && cp -r src/styles dist/",
28
+ "build": "npx tsup src/index.ts --format esm,cjs --dts --clean && node -e \"const fs=require('fs');fs.cpSync('src/styles','dist/styles',{recursive:true})\"",
29
29
  "dev": "npx tsup src/index.ts --format esm,cjs --dts --watch"
30
30
  },
31
31
  "devDependencies": {
@@ -57,4 +57,4 @@
57
57
  "access": "public"
58
58
  },
59
59
  "sideEffects": false
60
- }
60
+ }