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/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 .d-flex.align-items-center {
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 .d-flex.align-items-center,
1850
- [dir="rtl"] [data-workspace-skin="chrome"] .floating-window-titlebar .d-flex.align-items-center,
1851
- [dir="rtl"] [data-workspace-skin="slate"] .floating-window-titlebar .d-flex.align-items-center {
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 .d-flex.align-items-center {
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.1.0",
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",