@widgetstools/dock-manager-core 0.1.0

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.
@@ -0,0 +1,632 @@
1
+ /**
2
+ * Dock Manager - Shared CSS Custom Properties & Base Styles
3
+ *
4
+ * This file defines the CSS variables and base styles shared between
5
+ * React and Angular dock manager packages. Both frameworks import this
6
+ * file to ensure visual consistency.
7
+ *
8
+ * Usage:
9
+ * React: import '@widgetstools/dock-manager-core/dist/styles/dock-manager.css'
10
+ * Angular: @import '@widgetstools/dock-manager-core/dist/styles/dock-manager.css'
11
+ */
12
+
13
+ /* ══════════════════════════════════════════════════════════════════════
14
+ * CSS Custom Properties – Light Mode (default)
15
+ * ══════════════════════════════════════════════════════════════════════ */
16
+ :root {
17
+ --dock-bg: 220 20% 96%;
18
+ --dock-surface: 0 0% 100%;
19
+ --dock-surface-alt: 220 14% 94%;
20
+ --dock-panel-header: 220 14% 92%;
21
+ --dock-tab-bar: 220 14% 90%;
22
+ --dock-tab-active: 0 0% 100%;
23
+ --dock-tab-text: 0 0% 38%;
24
+ --dock-tab-text-active: 217 91% 48%;
25
+ --dock-text: 0 0% 12%;
26
+ --dock-text-secondary: 0 0% 35%;
27
+ --dock-text-muted: 0 0% 50%;
28
+ --dock-border: 220 13% 82%;
29
+ --dock-splitter: 220 13% 82%;
30
+ --dock-splitter-hover: 217 91% 55%;
31
+ --dock-hover: 220 14% 90%;
32
+ --dock-primary: 217 91% 48%;
33
+ --dock-float-shadow: 0 0% 0%;
34
+ --dock-unpinned-bg: 220 14% 92%;
35
+ --dock-maximize-overlay-bg: 220 20% 96%;
36
+ --dock-tab-overflow-bg: 220 14% 92%;
37
+ --dock-tab-overflow-hover: 220 14% 88%;
38
+ --dock-scrollbar-thumb: 0 0% 55%;
39
+ --dock-scrollbar-track: transparent;
40
+ --dock-scrollbar-width: 6px;
41
+ }
42
+
43
+ /* ══════════════════════════════════════════════════════════════════════
44
+ * CSS Custom Properties – Dark Mode
45
+ * ══════════════════════════════════════════════════════════════════════ */
46
+ .dark {
47
+ --dock-bg: 222 47% 7%;
48
+ --dock-surface: 222 47% 10%;
49
+ --dock-surface-alt: 222 47% 13%;
50
+ --dock-panel-header: 222 47% 15%;
51
+ --dock-tab-bar: 222 47% 12%;
52
+ --dock-tab-active: 222 47% 10%;
53
+ --dock-tab-text: 215 20% 65%;
54
+ --dock-tab-text-active: 217 91% 72%;
55
+ --dock-text: 210 40% 96%;
56
+ --dock-text-secondary: 215 20% 70%;
57
+ --dock-text-muted: 215 15% 50%;
58
+ --dock-border: 217 33% 24%;
59
+ --dock-splitter: 217 33% 24%;
60
+ --dock-splitter-hover: 217 91% 60%;
61
+ --dock-hover: 217 33% 18%;
62
+ --dock-primary: 217 91% 72%;
63
+ --dock-float-shadow: 0 0% 0%;
64
+ --dock-unpinned-bg: 222 47% 14%;
65
+ --dock-maximize-overlay-bg: 222 47% 7%;
66
+ --dock-tab-overflow-bg: 222 47% 12%;
67
+ --dock-tab-overflow-hover: 222 47% 16%;
68
+ --dock-scrollbar-thumb: 215 20% 40%;
69
+ --dock-scrollbar-track: transparent;
70
+ }
71
+
72
+ /* ══════════════════════════════════════════════════════════════════════
73
+ * Base font & box-sizing (applied to dock containers)
74
+ * ══════════════════════════════════════════════════════════════════════ */
75
+ dock-manager,
76
+ .dock-manager-root,
77
+ [data-dock-target] {
78
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto,
79
+ 'Helvetica Neue', Arial, sans-serif;
80
+ font-size: 12px;
81
+ line-height: 1.4;
82
+ box-sizing: border-box;
83
+ }
84
+
85
+ dock-manager *,
86
+ .dock-manager-root *,
87
+ [data-dock-target] * {
88
+ box-sizing: border-box;
89
+ }
90
+
91
+ /* ══════════════════════════════════════════════════════════════════════
92
+ * Tab overflow dropdown animation
93
+ * ══════════════════════════════════════════════════════════════════════ */
94
+ .dock-overflow-dropdown {
95
+ animation: dock-fade-in 0.1s ease-out;
96
+ }
97
+
98
+ @keyframes dock-fade-in {
99
+ from { opacity: 0; transform: translateY(-4px); }
100
+ to { opacity: 1; transform: translateY(0); }
101
+ }
102
+
103
+ /* ══════════════════════════════════════════════════════════════════════
104
+ * Focus ring for dock targets
105
+ * ══════════════════════════════════════════════════════════════════════ */
106
+ [data-dock-target]:focus-visible {
107
+ outline: 2px solid hsl(var(--dock-splitter-hover));
108
+ outline-offset: -2px;
109
+ }
110
+
111
+ /* ══════════════════════════════════════════════════════════════════════
112
+ * Core layout structure (used by DockviewComponent DOM renderer)
113
+ * ══════════════════════════════════════════════════════════════════════ */
114
+ .dock-manager-root {
115
+ display: flex;
116
+ flex-direction: column;
117
+ width: 100%;
118
+ height: 100%;
119
+ overflow: hidden;
120
+ background: hsl(var(--dock-bg));
121
+ color: hsl(var(--dock-text));
122
+ position: relative;
123
+ }
124
+
125
+ .dock-tab-group {
126
+ display: flex;
127
+ flex-direction: column;
128
+ width: 100%;
129
+ height: 100%;
130
+ background: hsl(var(--dock-surface));
131
+ overflow: hidden;
132
+ position: relative;
133
+ }
134
+
135
+ .dock-panel-header {
136
+ display: flex;
137
+ align-items: center;
138
+ min-height: 32px;
139
+ padding: 0 8px;
140
+ background: hsl(var(--dock-panel-header));
141
+ border-bottom: 1px solid hsl(var(--dock-border));
142
+ flex-shrink: 0;
143
+ user-select: none;
144
+ }
145
+
146
+ /* ── Tab styling (Infragistics-inspired) ── */
147
+
148
+ .dock-tab {
149
+ display: flex;
150
+ align-items: center;
151
+ gap: 4px;
152
+ padding: 6px 12px;
153
+ cursor: pointer;
154
+ user-select: none;
155
+ font-size: 12px;
156
+ white-space: nowrap;
157
+ color: hsl(var(--dock-tab-text));
158
+ border-bottom: 2px solid transparent;
159
+ margin-bottom: -1px;
160
+ transition: color 0.15s, background-color 0.15s;
161
+ position: relative;
162
+ }
163
+
164
+ /* Vertical separator between tabs */
165
+ .dock-tab + .dock-tab::before {
166
+ content: '';
167
+ position: absolute;
168
+ left: 0;
169
+ top: 15%;
170
+ height: 70%;
171
+ width: 1px;
172
+ background: hsl(var(--dock-border));
173
+ opacity: 1;
174
+ }
175
+
176
+ .dock-tab:hover {
177
+ color: hsl(var(--dock-tab-text-active));
178
+ background: hsl(var(--dock-hover));
179
+ }
180
+
181
+ /* Remove separator when hovering adjacent tabs */
182
+ .dock-tab:hover + .dock-tab::before,
183
+ .dock-tab:hover::before {
184
+ opacity: 0;
185
+ }
186
+
187
+ /* Selected tab in inactive group: bolder text + raised appearance */
188
+ .dock-tab.dock-tab-selected {
189
+ font-weight: 500;
190
+ color: hsl(var(--dock-text));
191
+ background: hsl(var(--dock-surface));
192
+ border-bottom-color: hsl(var(--dock-surface));
193
+ box-shadow: -1px 0 0 hsl(var(--dock-border)), 1px 0 0 hsl(var(--dock-border)), 0 -1px 0 hsl(var(--dock-border));
194
+ z-index: 1;
195
+ }
196
+
197
+ /* Remove separator next to selected tab */
198
+ .dock-tab.dock-tab-selected + .dock-tab::before,
199
+ .dock-tab.dock-tab-selected::before {
200
+ opacity: 0;
201
+ }
202
+
203
+ /* Selected tab in ACTIVE group: blue text + blue underline + raised appearance */
204
+ .dock-pane-active .dock-tab.dock-tab-selected {
205
+ color: hsl(var(--dock-tab-text-active));
206
+ background: hsl(var(--dock-surface));
207
+ border-bottom-color: hsl(var(--dock-primary));
208
+ }
209
+
210
+ .dock-tab-label {
211
+ overflow: hidden;
212
+ text-overflow: ellipsis;
213
+ }
214
+
215
+ .dock-tab-close {
216
+ display: flex;
217
+ align-items: center;
218
+ justify-content: center;
219
+ padding: 2px;
220
+ border: none;
221
+ background: none;
222
+ cursor: pointer;
223
+ border-radius: 3px;
224
+ color: inherit;
225
+ opacity: 0;
226
+ transition: opacity 0.15s, background-color 0.15s;
227
+ margin-left: 2px;
228
+ }
229
+
230
+ .dock-tab:hover .dock-tab-close,
231
+ .dock-tab.dock-tab-selected .dock-tab-close {
232
+ opacity: 0.5;
233
+ }
234
+
235
+ .dock-tab-close:hover {
236
+ opacity: 1 !important;
237
+ background: hsl(var(--dock-hover));
238
+ }
239
+
240
+ /* Inactive pane title — uses secondary text for clear visibility */
241
+ .dock-panel-title {
242
+ font-size: 12px;
243
+ font-weight: 600;
244
+ flex: 1;
245
+ overflow: hidden;
246
+ text-overflow: ellipsis;
247
+ white-space: nowrap;
248
+ color: hsl(var(--dock-text-secondary));
249
+ }
250
+
251
+ /* Active pane title turns blue */
252
+ .dock-pane-active > .dock-panel-header > .dock-panel-title {
253
+ color: hsl(var(--dock-primary));
254
+ }
255
+
256
+ .dock-content-slot {
257
+ flex: 1;
258
+ overflow: hidden;
259
+ position: relative;
260
+ }
261
+
262
+ .dock-action-btn {
263
+ display: flex;
264
+ align-items: center;
265
+ justify-content: center;
266
+ padding: 4px;
267
+ border: none;
268
+ background: none;
269
+ cursor: pointer;
270
+ color: hsl(var(--dock-text-muted));
271
+ transition: color 0.1s;
272
+ }
273
+
274
+ .dock-action-btn:hover {
275
+ color: hsl(var(--dock-text));
276
+ }
277
+
278
+ .dock-splitter {
279
+ flex-shrink: 0;
280
+ background: hsl(var(--dock-splitter));
281
+ position: relative;
282
+ z-index: 1;
283
+ transition: background-color 0.15s;
284
+ }
285
+
286
+ .dock-splitter:hover {
287
+ background: hsl(var(--dock-splitter-hover));
288
+ }
289
+
290
+ /* Horizontal splitter (between left/right panes) */
291
+ .dock-splitter[data-direction="horizontal"] {
292
+ width: 1px;
293
+ cursor: col-resize;
294
+ }
295
+
296
+ /* Vertical splitter (between top/bottom panes) */
297
+ .dock-splitter[data-direction="vertical"] {
298
+ height: 1px;
299
+ cursor: row-resize;
300
+ }
301
+
302
+ /* Wider invisible hit area for splitters */
303
+ .dock-splitter::before {
304
+ content: '';
305
+ position: absolute;
306
+ z-index: 1;
307
+ }
308
+
309
+ .dock-splitter[data-direction="horizontal"]::before {
310
+ top: 0; bottom: 0;
311
+ left: -3px; right: -3px;
312
+ }
313
+
314
+ .dock-splitter[data-direction="vertical"]::before {
315
+ left: 0; right: 0;
316
+ top: -3px; bottom: -3px;
317
+ }
318
+
319
+ .dock-floating-window {
320
+ position: absolute;
321
+ display: flex;
322
+ flex-direction: column;
323
+ background: hsl(var(--dock-surface));
324
+ border: 1px solid hsl(var(--dock-border));
325
+ border-radius: 2px;
326
+ box-shadow: 0 8px 32px hsl(var(--dock-float-shadow) / 0.18),
327
+ 0 2px 8px hsl(var(--dock-float-shadow) / 0.1);
328
+ overflow: visible;
329
+ }
330
+
331
+ .dock-floating-titlebar {
332
+ display: flex;
333
+ align-items: center;
334
+ justify-content: space-between;
335
+ padding: 4px 12px;
336
+ background: hsl(var(--dock-panel-header));
337
+ border-bottom: 2px solid transparent;
338
+ cursor: move;
339
+ user-select: none;
340
+ flex-shrink: 0;
341
+ min-height: 32px;
342
+ }
343
+
344
+ /* Inactive floating title — clearly visible */
345
+ .dock-floating-title {
346
+ font-size: 12px;
347
+ font-weight: 600;
348
+ color: hsl(var(--dock-text-secondary));
349
+ }
350
+
351
+ /* Active floating title turns blue */
352
+ .dock-pane-active .dock-floating-title {
353
+ color: hsl(var(--dock-primary));
354
+ }
355
+
356
+ /* Floating window titlebar buttons */
357
+ .dock-floating-titlebar-btn {
358
+ padding: 4px;
359
+ color: hsl(var(--dock-text-muted));
360
+ cursor: pointer;
361
+ background: none;
362
+ border: none;
363
+ display: flex;
364
+ align-items: center;
365
+ transition: color 0.15s;
366
+ }
367
+
368
+ .dock-floating-titlebar-btn:hover {
369
+ color: hsl(var(--dock-text));
370
+ }
371
+
372
+ .dock-empty-placeholder {
373
+ display: flex;
374
+ align-items: center;
375
+ justify-content: center;
376
+ flex: 1;
377
+ color: hsl(var(--dock-text-muted));
378
+ font-size: 11px;
379
+ }
380
+
381
+ /* ══════════════════════════════════════════════════════════════════════
382
+ * Active pane indicator line
383
+ *
384
+ * Only ONE pane is active across the entire dock manager at any time.
385
+ * The active pane's header shows a blue bottom-border line (2px).
386
+ * This applies to docked tab groups AND floating pane title bars.
387
+ * ══════════════════════════════════════════════════════════════════════ */
388
+
389
+ /* Docked tab group header — default: no indicator line */
390
+ .dock-tab-group .dock-panel-header {
391
+ border-bottom-color: transparent;
392
+ position: relative;
393
+ }
394
+
395
+ /* Active docked pane — blue bottom border on header (single-panel only, not when tabs exist) */
396
+ .dock-tab-group.dock-pane-active:not([data-has-tabs]) > .dock-panel-header {
397
+ border-bottom: 2px solid hsl(var(--dock-primary));
398
+ }
399
+
400
+ /* Active pane title text turns blue */
401
+ .dock-tab-group.dock-pane-active > .dock-panel-header > .dock-panel-title {
402
+ color: hsl(var(--dock-primary));
403
+ }
404
+
405
+ /* Floating pane — default: no indicator line */
406
+ .dock-floating-window .dock-floating-titlebar,
407
+ .dock-floating-window .dock-float-titlebar {
408
+ border-bottom: 2px solid transparent;
409
+ }
410
+
411
+ /* Active floating pane — blue bottom border on title bar */
412
+ .dock-floating-window.dock-pane-active .dock-floating-titlebar,
413
+ .dock-floating-window.dock-pane-active .dock-float-titlebar {
414
+ border-bottom: 2px solid hsl(var(--dock-primary));
415
+ }
416
+
417
+ /* Active floating pane title text turns blue */
418
+ .dock-floating-window.dock-pane-active .dock-floating-titlebar .dock-floating-title,
419
+ .dock-floating-window.dock-pane-active .dock-float-titlebar .dock-float-title {
420
+ color: hsl(var(--dock-primary));
421
+ }
422
+
423
+ /* ══════════════════════════════════════════════════════════════════════
424
+ * Unpinned strip tabs
425
+ * ══════════════════════════════════════════════════════════════════════ */
426
+ .dock-unpinned-tab {
427
+ display: flex;
428
+ align-items: center;
429
+ justify-content: center;
430
+ transition: background-color 0.15s, color 0.15s;
431
+ position: relative;
432
+ background: none;
433
+ border: none;
434
+ cursor: pointer;
435
+ color: hsl(var(--dock-text-muted));
436
+ }
437
+
438
+ .dock-unpinned-tab:hover {
439
+ background-color: hsl(var(--dock-hover));
440
+ color: hsl(var(--dock-tab-text-active));
441
+ }
442
+
443
+ /* Flyout resize handle hover */
444
+ .dock-flyout-resize:hover {
445
+ background-color: hsl(var(--dock-primary));
446
+ }
447
+
448
+ /* ══════════════════════════════════════════════════════════════════════
449
+ * Custom scrollbar styling
450
+ * ══════════════════════════════════════════════════════════════════════ */
451
+ .dock-scrollable::-webkit-scrollbar {
452
+ width: var(--dock-scrollbar-width, 6px);
453
+ height: var(--dock-scrollbar-width, 6px);
454
+ }
455
+
456
+ .dock-scrollable::-webkit-scrollbar-track {
457
+ background: var(--dock-scrollbar-track, transparent);
458
+ }
459
+
460
+ .dock-scrollable::-webkit-scrollbar-thumb {
461
+ background: hsl(var(--dock-scrollbar-thumb, 0 0% 60%));
462
+ border-radius: 3px;
463
+ }
464
+
465
+ .dock-scrollable::-webkit-scrollbar-thumb:hover {
466
+ background: hsl(var(--dock-scrollbar-thumb, 0 0% 50%));
467
+ }
468
+
469
+ /* ══════════════════════════════════════════════════════════════════════
470
+ * Context menu (right-click on tabs)
471
+ * ══════════════════════════════════════════════════════════════════════ */
472
+ .dock-context-menu {
473
+ background: hsl(var(--dock-surface));
474
+ border: 1px solid hsl(var(--dock-border));
475
+ border-radius: 4px;
476
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
477
+ padding: 4px 0;
478
+ min-width: 140px;
479
+ font-size: 12px;
480
+ color: hsl(var(--dock-text));
481
+ animation: dock-fade-in 0.1s ease-out;
482
+ }
483
+
484
+ .dock-context-menu-item {
485
+ padding: 6px 16px;
486
+ cursor: pointer;
487
+ transition: background-color 0.1s;
488
+ white-space: nowrap;
489
+ user-select: none;
490
+ }
491
+
492
+ .dock-context-menu-item:hover {
493
+ background: hsl(var(--dock-hover));
494
+ }
495
+
496
+ .dock-context-menu-item.disabled {
497
+ opacity: 0.4;
498
+ cursor: default;
499
+ pointer-events: none;
500
+ }
501
+
502
+ .dock-context-menu-separator {
503
+ height: 1px;
504
+ margin: 4px 8px;
505
+ background: hsl(var(--dock-border));
506
+ }
507
+
508
+ /* ══════════════════════════════════════════════════════════════════════
509
+ * Disabled tab styling
510
+ * ══════════════════════════════════════════════════════════════════════ */
511
+ .dock-tab-disabled {
512
+ opacity: 0.5;
513
+ cursor: not-allowed;
514
+ pointer-events: none;
515
+ }
516
+
517
+ /* ══════════════════════════════════════════════════════════════════════
518
+ * Pane Navigator (Ctrl+Tab overlay)
519
+ * ══════════════════════════════════════════════════════════════════════ */
520
+ .dock-pane-navigator {
521
+ animation: dock-fade-in 0.1s ease-out;
522
+ }
523
+
524
+ .dock-pane-navigator-item {
525
+ padding: 6px 8px;
526
+ border-radius: 4px;
527
+ cursor: pointer;
528
+ transition: background-color 0.1s;
529
+ }
530
+
531
+ .dock-pane-navigator-item:hover {
532
+ background: hsl(var(--dock-hover));
533
+ }
534
+
535
+ .dock-pane-navigator-item.active {
536
+ background: hsl(var(--dock-primary) / 0.15);
537
+ color: hsl(var(--dock-primary));
538
+ }
539
+
540
+ /* ══════════════════════════════════════════════════════════════════════
541
+ * Animation & Transitions (#9)
542
+ * ══════════════════════════════════════════════════════════════════════ */
543
+
544
+ /* Tab reorder: smooth FLIP animation for sibling tabs sliding into place */
545
+ .dock-tab-reordering {
546
+ transition: transform 0.2s cubic-bezier(0.2, 0, 0, 1);
547
+ }
548
+
549
+ /* Tab being dragged during reorder — lifted appearance */
550
+ .dock-tab-drag-source {
551
+ opacity: 0.85 !important;
552
+ z-index: 10;
553
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.2);
554
+ position: relative;
555
+ }
556
+
557
+ /* Disable entrance animation during reorder to prevent conflicts */
558
+ .dock-tab-reordering.dock-tab {
559
+ animation: none;
560
+ }
561
+
562
+ /* Tab insertion/removal fade */
563
+ .dock-tab {
564
+ animation: dock-tab-in 0.12s ease-out;
565
+ }
566
+
567
+ @keyframes dock-tab-in {
568
+ from { opacity: 0; transform: translateY(-4px); }
569
+ to { opacity: 1; transform: translateY(0); }
570
+ }
571
+
572
+ /* Panel content crossfade */
573
+ .dock-tab-group > [role="tabpanel"] > div {
574
+ animation: dock-content-in 0.12s ease-out;
575
+ }
576
+
577
+ @keyframes dock-content-in {
578
+ from { opacity: 0; }
579
+ to { opacity: 1; }
580
+ }
581
+
582
+ /* Floating window entrance */
583
+ .dock-floating-window {
584
+ animation: dock-float-in 0.15s ease-out;
585
+ }
586
+
587
+ @keyframes dock-float-in {
588
+ from { opacity: 0; transform: scale(0.95); }
589
+ to { opacity: 1; transform: scale(1); }
590
+ }
591
+
592
+ /* ══════════════════════════════════════════════════════════════════════
593
+ * Attention animation (#14 PanelApi wiring)
594
+ * ══════════════════════════════════════════════════════════════════════ */
595
+ .dock-tab-attention,
596
+ .dock-attention {
597
+ animation: dock-attention-pulse 0.6s ease-in-out 3;
598
+ }
599
+
600
+ @keyframes dock-attention-pulse {
601
+ 0%, 100% { background-color: transparent; }
602
+ 50% { background-color: hsl(var(--dock-primary) / 0.2); }
603
+ }
604
+
605
+ /* ══════════════════════════════════════════════════════════════════════
606
+ * Debug overlay (#11)
607
+ * ══════════════════════════════════════════════════════════════════════ */
608
+ .dock-debug-overlay {
609
+ pointer-events: none;
610
+ font-family: monospace;
611
+ font-size: 9px;
612
+ }
613
+
614
+ /* ══════════════════════════════════════════════════════════════════════
615
+ * Panel finder (#8)
616
+ * ══════════════════════════════════════════════════════════════════════ */
617
+ .dock-panel-finder-overlay {
618
+ animation: dock-fade-in 0.1s ease-out;
619
+ }
620
+
621
+ .dock-panel-finder {
622
+ animation: dock-panel-finder-in 0.12s ease-out;
623
+ }
624
+
625
+ @keyframes dock-panel-finder-in {
626
+ from { opacity: 0; transform: translateY(-8px); }
627
+ to { opacity: 1; transform: translateY(0); }
628
+ }
629
+
630
+ .dock-panel-finder-item:hover {
631
+ background: hsl(var(--dock-hover));
632
+ }
package/package.json ADDED
@@ -0,0 +1,60 @@
1
+ {
2
+ "name": "@widgetstools/dock-manager-core",
3
+ "version": "0.1.0",
4
+ "description": "Zero-dependency layout manager supporting tabs, splits, floating windows, and auto-hide panels. Framework-agnostic core.",
5
+ "type": "module",
6
+ "main": "./dist/index.cjs",
7
+ "module": "./dist/index.js",
8
+ "types": "./dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "import": {
12
+ "types": "./dist/index.d.ts",
13
+ "default": "./dist/index.js"
14
+ },
15
+ "require": {
16
+ "types": "./dist/index.d.cts",
17
+ "default": "./dist/index.cjs"
18
+ }
19
+ },
20
+ "./styles.css": "./dist/styles/dock-manager.css"
21
+ },
22
+ "files": [
23
+ "dist",
24
+ "README.md",
25
+ "LICENSE"
26
+ ],
27
+ "scripts": {
28
+ "build": "npx tsup src/index.ts --format esm,cjs --dts --clean && cp -r src/styles dist/",
29
+ "dev": "npx tsup src/index.ts --format esm,cjs --dts --watch"
30
+ },
31
+ "devDependencies": {
32
+ "tsup": "^7.2.0",
33
+ "typescript": "~5.9.3"
34
+ },
35
+ "keywords": [
36
+ "dock-manager",
37
+ "layout",
38
+ "tabs",
39
+ "split-pane",
40
+ "floating-panels",
41
+ "drag-and-drop",
42
+ "docking",
43
+ "auto-hide",
44
+ "zero-dependencies"
45
+ ],
46
+ "license": "MIT",
47
+ "repository": {
48
+ "type": "git",
49
+ "url": "https://github.com/widgetstools/dockmanager.git",
50
+ "directory": "packages/dock-manager-core"
51
+ },
52
+ "homepage": "https://github.com/widgetstools/dockmanager#readme",
53
+ "bugs": {
54
+ "url": "https://github.com/widgetstools/dockmanager/issues"
55
+ },
56
+ "publishConfig": {
57
+ "access": "public"
58
+ },
59
+ "sideEffects": false
60
+ }