react-dockable-desktop 1.1.0 → 1.2.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.
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +6 -2
- package/dist/index.d.ts +6 -2
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/styles.css +321 -5
- package/package.json +1 -1
package/dist/styles.css
CHANGED
|
@@ -116,6 +116,10 @@ body,
|
|
|
116
116
|
background-color: var(--bg-panel);
|
|
117
117
|
border: 1px solid var(--border-panel);
|
|
118
118
|
box-shadow: inset 0 0 20px rgba(0, 0, 0, 0.15);
|
|
119
|
+
width: 100%;
|
|
120
|
+
height: 100%;
|
|
121
|
+
display: flex;
|
|
122
|
+
flex-direction: column;
|
|
119
123
|
}
|
|
120
124
|
|
|
121
125
|
/* Tab Headers Bar */
|
|
@@ -123,6 +127,10 @@ body,
|
|
|
123
127
|
background-color: var(--bg-tab-bar);
|
|
124
128
|
border-bottom: 1px solid var(--border-panel);
|
|
125
129
|
padding: 0 4px;
|
|
130
|
+
display: flex;
|
|
131
|
+
flex-direction: row;
|
|
132
|
+
justify-content: space-between;
|
|
133
|
+
align-items: center;
|
|
126
134
|
}
|
|
127
135
|
|
|
128
136
|
/* Tab Headers Container */
|
|
@@ -134,6 +142,8 @@ body,
|
|
|
134
142
|
padding-left: 6px;
|
|
135
143
|
position: relative;
|
|
136
144
|
margin-bottom: -1px;
|
|
145
|
+
flex-grow: 1;
|
|
146
|
+
overflow-x: auto;
|
|
137
147
|
}
|
|
138
148
|
|
|
139
149
|
/* Premium Tab styling (VS Code Style) */
|
|
@@ -346,10 +356,25 @@ body.resizing-col-active * {
|
|
|
346
356
|
border-top: 1px solid var(--taskbar-border) !important;
|
|
347
357
|
backdrop-filter: blur(12px) saturate(180%);
|
|
348
358
|
-webkit-backdrop-filter: blur(12px) saturate(180%);
|
|
359
|
+
flex-shrink: 0;
|
|
360
|
+
width: 100%;
|
|
361
|
+
display: flex;
|
|
362
|
+
flex-direction: row;
|
|
363
|
+
align-items: center;
|
|
364
|
+
justify-content: center;
|
|
365
|
+
padding: 0 1rem;
|
|
349
366
|
}
|
|
350
367
|
|
|
351
368
|
.taskbar-nav-btn {
|
|
352
369
|
color: var(--taskbar-nav-color) !important;
|
|
370
|
+
background: transparent;
|
|
371
|
+
border: none;
|
|
372
|
+
cursor: pointer;
|
|
373
|
+
font-family: monospace;
|
|
374
|
+
padding: 0;
|
|
375
|
+
text-decoration: none;
|
|
376
|
+
font-size: 0.875rem;
|
|
377
|
+
line-height: 1;
|
|
353
378
|
}
|
|
354
379
|
|
|
355
380
|
.taskbar-nav-btn:hover {
|
|
@@ -365,6 +390,11 @@ body.resizing-col-active * {
|
|
|
365
390
|
color: var(--taskbar-item-text) !important;
|
|
366
391
|
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
|
|
367
392
|
transition: all 0.25s cubic-bezier(0.4, 0, 0.2, 1) !important;
|
|
393
|
+
display: flex;
|
|
394
|
+
align-items: center;
|
|
395
|
+
justify-content: center;
|
|
396
|
+
border-radius: 4px;
|
|
397
|
+
cursor: pointer;
|
|
368
398
|
}
|
|
369
399
|
|
|
370
400
|
.taskbar-glassmorphic-item:hover {
|
|
@@ -415,6 +445,7 @@ body.resizing-col-active * {
|
|
|
415
445
|
animation: tooltipFadeIn 0.15s cubic-bezier(0.4, 0, 0.2, 1) forwards;
|
|
416
446
|
display: flex;
|
|
417
447
|
flex-direction: column;
|
|
448
|
+
gap: 0.25rem;
|
|
418
449
|
}
|
|
419
450
|
|
|
420
451
|
/* Invisible bridge so mouse transitions smoothly to tooltip */
|
|
@@ -573,6 +604,10 @@ body.resizing-col-active * {
|
|
|
573
604
|
background-color: var(--window-header-bg);
|
|
574
605
|
border-bottom: 1px solid var(--window-border);
|
|
575
606
|
min-height: 38px;
|
|
607
|
+
display: flex;
|
|
608
|
+
flex-direction: row;
|
|
609
|
+
justify-content: space-between;
|
|
610
|
+
align-items: center;
|
|
576
611
|
}
|
|
577
612
|
|
|
578
613
|
.floating-window-title {
|
|
@@ -581,6 +616,12 @@ body.resizing-col-active * {
|
|
|
581
616
|
font-weight: 600;
|
|
582
617
|
color: var(--window-text);
|
|
583
618
|
letter-spacing: 0.02em;
|
|
619
|
+
display: flex;
|
|
620
|
+
align-items: center;
|
|
621
|
+
overflow: hidden;
|
|
622
|
+
text-overflow: ellipsis;
|
|
623
|
+
white-space: nowrap;
|
|
624
|
+
margin-inline-end: 0.5rem;
|
|
584
625
|
}
|
|
585
626
|
|
|
586
627
|
.cursor-move {
|
|
@@ -727,6 +768,10 @@ body.resizing-col-active * {
|
|
|
727
768
|
.header-close-empty-group {
|
|
728
769
|
opacity: 0 !important;
|
|
729
770
|
transition: opacity 0.12s ease, background-color 0.12s ease, color 0.12s ease !important;
|
|
771
|
+
display: flex;
|
|
772
|
+
align-items: center;
|
|
773
|
+
justify-content: center;
|
|
774
|
+
margin-inline-end: 0.5rem;
|
|
730
775
|
}
|
|
731
776
|
|
|
732
777
|
.workspace-panel:hover .header-close-empty-group {
|
|
@@ -959,7 +1004,7 @@ body.resizing-col-active * {
|
|
|
959
1004
|
[data-workspace-skin="macos"] .floating-window-titlebar .floating-window-title > * {
|
|
960
1005
|
pointer-events: auto;
|
|
961
1006
|
}
|
|
962
|
-
[data-workspace-skin="macos"] .floating-window-titlebar .
|
|
1007
|
+
[data-workspace-skin="macos"] .floating-window-titlebar .fw-titlebar-actions {
|
|
963
1008
|
flex-direction: row-reverse !important;
|
|
964
1009
|
position: relative !important;
|
|
965
1010
|
z-index: 1 !important;
|
|
@@ -1846,9 +1891,9 @@ html:not(.enable-animations) *::after {
|
|
|
1846
1891
|
flex-direction: row-reverse !important;
|
|
1847
1892
|
}
|
|
1848
1893
|
|
|
1849
|
-
[dir="rtl"] [data-workspace-skin="vscode"] .floating-window-titlebar .
|
|
1850
|
-
[dir="rtl"] [data-workspace-skin="chrome"] .floating-window-titlebar .
|
|
1851
|
-
[dir="rtl"] [data-workspace-skin="slate"] .floating-window-titlebar .
|
|
1894
|
+
[dir="rtl"] [data-workspace-skin="vscode"] .floating-window-titlebar .fw-titlebar-actions,
|
|
1895
|
+
[dir="rtl"] [data-workspace-skin="chrome"] .floating-window-titlebar .fw-titlebar-actions,
|
|
1896
|
+
[dir="rtl"] [data-workspace-skin="slate"] .floating-window-titlebar .fw-titlebar-actions {
|
|
1852
1897
|
flex-direction: row-reverse !important;
|
|
1853
1898
|
}
|
|
1854
1899
|
|
|
@@ -1899,7 +1944,7 @@ html:not(.enable-animations) *::after {
|
|
|
1899
1944
|
|
|
1900
1945
|
/* Button group: keep dots in correct visual order (Red → Yellow → Green)
|
|
1901
1946
|
from left to right regardless of text direction */
|
|
1902
|
-
[dir="rtl"][data-workspace-skin="macos"] .floating-window-titlebar .
|
|
1947
|
+
[dir="rtl"][data-workspace-skin="macos"] .floating-window-titlebar .fw-titlebar-actions {
|
|
1903
1948
|
flex-direction: row !important;
|
|
1904
1949
|
}
|
|
1905
1950
|
|
|
@@ -1908,3 +1953,274 @@ html:not(.enable-animations) *::after {
|
|
|
1908
1953
|
margin-left: 0 !important;
|
|
1909
1954
|
margin-right: 2px !important;
|
|
1910
1955
|
}
|
|
1956
|
+
|
|
1957
|
+
/* ==========================================================================
|
|
1958
|
+
FRAMEWORK-AGNOSTIC UTILITY CLASSES
|
|
1959
|
+
(replaces Bootstrap utility class dependencies)
|
|
1960
|
+
========================================================================== */
|
|
1961
|
+
|
|
1962
|
+
/* Text truncation (equivalent to Bootstrap .text-truncate) */
|
|
1963
|
+
.text-truncate {
|
|
1964
|
+
overflow: hidden;
|
|
1965
|
+
text-overflow: ellipsis;
|
|
1966
|
+
white-space: nowrap;
|
|
1967
|
+
}
|
|
1968
|
+
|
|
1969
|
+
/* Floating window titlebar button group */
|
|
1970
|
+
.fw-titlebar-actions {
|
|
1971
|
+
display: flex;
|
|
1972
|
+
align-items: center;
|
|
1973
|
+
}
|
|
1974
|
+
|
|
1975
|
+
/* Window custom header actions slot */
|
|
1976
|
+
.window-header-actions {
|
|
1977
|
+
display: flex;
|
|
1978
|
+
align-items: center;
|
|
1979
|
+
margin-inline-end: 0.25rem;
|
|
1980
|
+
gap: var(--header-button-gap, 4px);
|
|
1981
|
+
}
|
|
1982
|
+
|
|
1983
|
+
/* Tab header custom actions slot */
|
|
1984
|
+
.tab-header-actions {
|
|
1985
|
+
margin-inline-start: auto;
|
|
1986
|
+
display: flex;
|
|
1987
|
+
align-items: center;
|
|
1988
|
+
margin-inline-end: 0.25rem;
|
|
1989
|
+
gap: var(--header-button-gap, 4px);
|
|
1990
|
+
}
|
|
1991
|
+
|
|
1992
|
+
/* Panel body (tab content area / floating window content area) */
|
|
1993
|
+
.dw-panel-body {
|
|
1994
|
+
flex-grow: 1;
|
|
1995
|
+
width: 100%;
|
|
1996
|
+
height: 100%;
|
|
1997
|
+
}
|
|
1998
|
+
|
|
1999
|
+
/* Empty workspace section placeholder text */
|
|
2000
|
+
.empty-leaf-placeholder {
|
|
2001
|
+
width: 100%;
|
|
2002
|
+
height: 100%;
|
|
2003
|
+
display: flex;
|
|
2004
|
+
align-items: center;
|
|
2005
|
+
justify-content: center;
|
|
2006
|
+
font-family: monospace;
|
|
2007
|
+
font-size: 0.875rem;
|
|
2008
|
+
color: var(--text-secondary, #94a3b8);
|
|
2009
|
+
}
|
|
2010
|
+
|
|
2011
|
+
/* Empty workspace grid (no panels loaded) */
|
|
2012
|
+
.empty-workspace-grid {
|
|
2013
|
+
width: 100%;
|
|
2014
|
+
height: 100%;
|
|
2015
|
+
display: flex;
|
|
2016
|
+
align-items: center;
|
|
2017
|
+
justify-content: center;
|
|
2018
|
+
color: var(--text-secondary, #94a3b8);
|
|
2019
|
+
font-family: monospace;
|
|
2020
|
+
font-size: 0.875rem;
|
|
2021
|
+
}
|
|
2022
|
+
|
|
2023
|
+
/* Unregistered component error panel */
|
|
2024
|
+
.dw-unregistered-panel {
|
|
2025
|
+
width: 100%;
|
|
2026
|
+
height: 100%;
|
|
2027
|
+
display: flex;
|
|
2028
|
+
flex-direction: column;
|
|
2029
|
+
align-items: center;
|
|
2030
|
+
justify-content: center;
|
|
2031
|
+
background: transparent;
|
|
2032
|
+
color: #dc3545;
|
|
2033
|
+
font-family: monospace;
|
|
2034
|
+
padding: 1rem;
|
|
2035
|
+
text-align: center;
|
|
2036
|
+
box-sizing: border-box;
|
|
2037
|
+
}
|
|
2038
|
+
|
|
2039
|
+
/* Taskbar scrollable items row */
|
|
2040
|
+
.taskbar-items-container {
|
|
2041
|
+
display: flex;
|
|
2042
|
+
flex-direction: row;
|
|
2043
|
+
gap: 0.5rem;
|
|
2044
|
+
overflow-x: auto;
|
|
2045
|
+
align-items: center;
|
|
2046
|
+
margin: 0 0.5rem;
|
|
2047
|
+
padding: 2px 4px;
|
|
2048
|
+
scrollbar-width: none;
|
|
2049
|
+
scroll-snap-type: x mandatory;
|
|
2050
|
+
max-width: 800px;
|
|
2051
|
+
}
|
|
2052
|
+
|
|
2053
|
+
.taskbar-items-container::-webkit-scrollbar {
|
|
2054
|
+
display: none;
|
|
2055
|
+
}
|
|
2056
|
+
|
|
2057
|
+
/* Tooltip header row (title + close button) */
|
|
2058
|
+
.tooltip-header-row {
|
|
2059
|
+
display: flex;
|
|
2060
|
+
flex-direction: row;
|
|
2061
|
+
align-items: center;
|
|
2062
|
+
justify-content: space-between;
|
|
2063
|
+
width: 100%;
|
|
2064
|
+
gap: 0.75rem;
|
|
2065
|
+
padding: 0 0.25rem;
|
|
2066
|
+
}
|
|
2067
|
+
|
|
2068
|
+
/* Drag ghost tab preview (floating label while dragging) */
|
|
2069
|
+
.drag-ghost-tab {
|
|
2070
|
+
position: fixed;
|
|
2071
|
+
background: rgba(0, 0, 0, 0.8);
|
|
2072
|
+
border: 1px solid var(--accent-color, #38bdf8);
|
|
2073
|
+
border-left: 3px solid var(--accent-color, #38bdf8);
|
|
2074
|
+
border-radius: 4px;
|
|
2075
|
+
color: var(--accent-color, #38bdf8);
|
|
2076
|
+
font-family: monospace;
|
|
2077
|
+
padding: 0.375rem 1rem;
|
|
2078
|
+
box-shadow: 0 8px 24px rgba(0, 0, 0, 0.5);
|
|
2079
|
+
display: flex;
|
|
2080
|
+
align-items: center;
|
|
2081
|
+
gap: 0.5rem;
|
|
2082
|
+
font-size: 0.75rem;
|
|
2083
|
+
white-space: nowrap;
|
|
2084
|
+
pointer-events: none;
|
|
2085
|
+
}
|
|
2086
|
+
|
|
2087
|
+
/* ConfirmationForm component styles */
|
|
2088
|
+
.confirmation-form-body {
|
|
2089
|
+
padding: 0.75rem;
|
|
2090
|
+
display: flex;
|
|
2091
|
+
flex-direction: column;
|
|
2092
|
+
gap: 0.75rem;
|
|
2093
|
+
}
|
|
2094
|
+
|
|
2095
|
+
.confirmation-alert {
|
|
2096
|
+
display: flex;
|
|
2097
|
+
align-items: center;
|
|
2098
|
+
gap: 0.5rem;
|
|
2099
|
+
margin: 0;
|
|
2100
|
+
padding: 0.625rem;
|
|
2101
|
+
font-size: 0.875rem;
|
|
2102
|
+
border-radius: 0.375rem;
|
|
2103
|
+
}
|
|
2104
|
+
|
|
2105
|
+
.confirmation-alert-danger {
|
|
2106
|
+
background: rgba(220, 53, 69, 0.15);
|
|
2107
|
+
border: 1px solid rgba(220, 53, 69, 0.3);
|
|
2108
|
+
color: #f87171;
|
|
2109
|
+
}
|
|
2110
|
+
|
|
2111
|
+
.confirmation-alert-info {
|
|
2112
|
+
background: rgba(13, 202, 240, 0.15);
|
|
2113
|
+
border: 1px solid rgba(13, 202, 240, 0.3);
|
|
2114
|
+
color: #67e8f9;
|
|
2115
|
+
}
|
|
2116
|
+
|
|
2117
|
+
.confirmation-alert-warning {
|
|
2118
|
+
background: rgba(255, 193, 7, 0.15);
|
|
2119
|
+
border: 1px solid rgba(255, 193, 7, 0.3);
|
|
2120
|
+
color: #fbbf24;
|
|
2121
|
+
}
|
|
2122
|
+
|
|
2123
|
+
.confirmation-alert-success {
|
|
2124
|
+
background: rgba(25, 135, 84, 0.15);
|
|
2125
|
+
border: 1px solid rgba(25, 135, 84, 0.3);
|
|
2126
|
+
color: #4ade80;
|
|
2127
|
+
}
|
|
2128
|
+
|
|
2129
|
+
.confirmation-actions {
|
|
2130
|
+
display: flex;
|
|
2131
|
+
justify-content: flex-end;
|
|
2132
|
+
gap: 0.5rem;
|
|
2133
|
+
}
|
|
2134
|
+
|
|
2135
|
+
/* Sidebar drawer header */
|
|
2136
|
+
.sidebar-drawer-header {
|
|
2137
|
+
display: flex;
|
|
2138
|
+
align-items: center;
|
|
2139
|
+
justify-content: space-between;
|
|
2140
|
+
border-bottom: 1px solid var(--sidebar-border, rgba(255, 255, 255, 0.08));
|
|
2141
|
+
padding: 0 0.75rem;
|
|
2142
|
+
flex-shrink: 0;
|
|
2143
|
+
background: rgba(0, 0, 0, 0.08);
|
|
2144
|
+
min-height: 38px;
|
|
2145
|
+
}
|
|
2146
|
+
|
|
2147
|
+
/* Sidebar drawer close button */
|
|
2148
|
+
.sidebar-close-btn {
|
|
2149
|
+
background: transparent;
|
|
2150
|
+
border: none;
|
|
2151
|
+
padding: 0;
|
|
2152
|
+
color: var(--text-secondary, #94a3b8);
|
|
2153
|
+
display: flex;
|
|
2154
|
+
align-items: center;
|
|
2155
|
+
cursor: pointer;
|
|
2156
|
+
border-radius: 4px;
|
|
2157
|
+
transition: color 0.15s ease;
|
|
2158
|
+
text-decoration: none;
|
|
2159
|
+
}
|
|
2160
|
+
|
|
2161
|
+
.sidebar-close-btn:hover {
|
|
2162
|
+
color: var(--text-primary, #f1f5f9);
|
|
2163
|
+
}
|
|
2164
|
+
|
|
2165
|
+
/* Sidebar drawer content body */
|
|
2166
|
+
.sidebar-drawer-body {
|
|
2167
|
+
flex-grow: 1;
|
|
2168
|
+
overflow: auto;
|
|
2169
|
+
}
|
|
2170
|
+
|
|
2171
|
+
/* Button base — used in ConfirmationForm and similar dialogs */
|
|
2172
|
+
.dw-btn {
|
|
2173
|
+
display: inline-flex;
|
|
2174
|
+
align-items: center;
|
|
2175
|
+
justify-content: center;
|
|
2176
|
+
font-family: monospace;
|
|
2177
|
+
font-weight: 500;
|
|
2178
|
+
cursor: pointer;
|
|
2179
|
+
border-radius: 4px;
|
|
2180
|
+
transition: all 0.15s ease;
|
|
2181
|
+
white-space: nowrap;
|
|
2182
|
+
user-select: none;
|
|
2183
|
+
line-height: 1.2;
|
|
2184
|
+
}
|
|
2185
|
+
|
|
2186
|
+
.dw-btn-sm {
|
|
2187
|
+
padding: 0.25rem 0.75rem;
|
|
2188
|
+
font-size: 0.8125rem;
|
|
2189
|
+
}
|
|
2190
|
+
|
|
2191
|
+
.dw-btn-outline {
|
|
2192
|
+
background: transparent;
|
|
2193
|
+
border: 1px solid var(--text-secondary, #6c757d);
|
|
2194
|
+
color: var(--text-secondary, #6c757d);
|
|
2195
|
+
}
|
|
2196
|
+
|
|
2197
|
+
.dw-btn-outline:hover {
|
|
2198
|
+
background: rgba(255, 255, 255, 0.08);
|
|
2199
|
+
border-color: var(--text-primary, #f1f5f9);
|
|
2200
|
+
color: var(--text-primary, #f1f5f9);
|
|
2201
|
+
}
|
|
2202
|
+
|
|
2203
|
+
[data-bs-theme="light"] .dw-btn-outline {
|
|
2204
|
+
border-color: #6c757d;
|
|
2205
|
+
color: #6c757d;
|
|
2206
|
+
}
|
|
2207
|
+
|
|
2208
|
+
[data-bs-theme="light"] .dw-btn-outline:hover {
|
|
2209
|
+
background: rgba(0, 0, 0, 0.05);
|
|
2210
|
+
border-color: #495057;
|
|
2211
|
+
color: #495057;
|
|
2212
|
+
}
|
|
2213
|
+
|
|
2214
|
+
.dw-btn-primary {
|
|
2215
|
+
background: var(--accent-color, #38bdf8);
|
|
2216
|
+
border: 1px solid var(--accent-color, #38bdf8);
|
|
2217
|
+
color: #090b11;
|
|
2218
|
+
}
|
|
2219
|
+
|
|
2220
|
+
.dw-btn-primary:hover {
|
|
2221
|
+
filter: brightness(1.1);
|
|
2222
|
+
}
|
|
2223
|
+
|
|
2224
|
+
[data-bs-theme="light"] .dw-btn-primary {
|
|
2225
|
+
color: #ffffff;
|
|
2226
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-dockable-desktop",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.2.0",
|
|
4
4
|
"description": "A premium, state-of-the-art window manager and dockable layout engine for React. Supports fluid grid splits, tabbed groups, floating resizable windows, zero-unmount state preservation, context menus, and internationalization.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"module": "dist/index.mjs",
|