@tutti-os/workbench-surface 0.0.43 → 0.0.45
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.js +14 -3
- package/dist/index.js.map +1 -1
- package/dist/styles/workbench.css +41 -10
- package/dist/styles/workbenchStyle.test.ts +56 -0
- package/package.json +5 -5
|
@@ -273,24 +273,51 @@
|
|
|
273
273
|
transition: background-color 160ms ease;
|
|
274
274
|
}
|
|
275
275
|
|
|
276
|
-
.workbench-window-traffic-
|
|
277
|
-
|
|
276
|
+
.workbench-window-traffic-light__icon {
|
|
277
|
+
position: absolute;
|
|
278
|
+
z-index: 1;
|
|
279
|
+
inset: 5px;
|
|
280
|
+
width: 10px;
|
|
281
|
+
height: 10px;
|
|
282
|
+
color: color-mix(in srgb, #000 68%, transparent);
|
|
283
|
+
opacity: 0;
|
|
284
|
+
pointer-events: none;
|
|
285
|
+
transition: opacity 120ms ease;
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
.workbench-window-traffic-lights:hover .workbench-window-traffic-light,
|
|
289
|
+
.workbench-window-traffic-lights:focus-within .workbench-window-traffic-light {
|
|
278
290
|
opacity: 1;
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
.workbench-window-traffic-light:focus-visible {
|
|
279
294
|
outline: none;
|
|
280
295
|
}
|
|
281
296
|
|
|
282
|
-
.workbench-window-traffic-
|
|
283
|
-
.workbench-window-traffic-
|
|
297
|
+
.workbench-window-traffic-lights:hover .workbench-window-traffic-light__icon,
|
|
298
|
+
.workbench-window-traffic-lights:focus-within
|
|
299
|
+
.workbench-window-traffic-light__icon {
|
|
300
|
+
opacity: 1;
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
.workbench-window-traffic-lights:hover
|
|
304
|
+
.workbench-window-traffic-light[data-workbench-traffic-light="close"]::before,
|
|
305
|
+
.workbench-window-traffic-lights:focus-within
|
|
306
|
+
.workbench-window-traffic-light[data-workbench-traffic-light="close"]::before {
|
|
284
307
|
background-color: #ff5f57;
|
|
285
308
|
}
|
|
286
309
|
|
|
287
|
-
.workbench-window-traffic-
|
|
288
|
-
.workbench-window-traffic-light[data-workbench-traffic-light="minimize"]
|
|
310
|
+
.workbench-window-traffic-lights:hover
|
|
311
|
+
.workbench-window-traffic-light[data-workbench-traffic-light="minimize"]::before,
|
|
312
|
+
.workbench-window-traffic-lights:focus-within
|
|
313
|
+
.workbench-window-traffic-light[data-workbench-traffic-light="minimize"]::before {
|
|
289
314
|
background-color: #ffbd2e;
|
|
290
315
|
}
|
|
291
316
|
|
|
292
|
-
.workbench-window-traffic-
|
|
293
|
-
.workbench-window-traffic-light[data-workbench-traffic-light="maximize"]
|
|
317
|
+
.workbench-window-traffic-lights:hover
|
|
318
|
+
.workbench-window-traffic-light[data-workbench-traffic-light="maximize"]::before,
|
|
319
|
+
.workbench-window-traffic-lights:focus-within
|
|
320
|
+
.workbench-window-traffic-light[data-workbench-traffic-light="maximize"]::before {
|
|
294
321
|
background-color: #28c840;
|
|
295
322
|
}
|
|
296
323
|
|
|
@@ -533,6 +560,7 @@
|
|
|
533
560
|
}
|
|
534
561
|
|
|
535
562
|
.workbench-mission-control {
|
|
563
|
+
z-index: var(--z-tooltip, 100700);
|
|
536
564
|
opacity: 1;
|
|
537
565
|
}
|
|
538
566
|
|
|
@@ -607,6 +635,7 @@
|
|
|
607
635
|
100%
|
|
608
636
|
);
|
|
609
637
|
box-shadow: none;
|
|
638
|
+
pointer-events: auto;
|
|
610
639
|
transition:
|
|
611
640
|
width 180ms cubic-bezier(0.22, 1, 0.36, 1),
|
|
612
641
|
background-color 160ms ease,
|
|
@@ -733,7 +762,7 @@
|
|
|
733
762
|
background: transparent;
|
|
734
763
|
box-shadow: none;
|
|
735
764
|
overflow: visible;
|
|
736
|
-
pointer-events:
|
|
765
|
+
pointer-events: none;
|
|
737
766
|
transition: width 220ms cubic-bezier(0.22, 1, 0.36, 1);
|
|
738
767
|
-webkit-app-region: no-drag;
|
|
739
768
|
}
|
|
@@ -772,7 +801,7 @@
|
|
|
772
801
|
background: transparent;
|
|
773
802
|
box-shadow: none;
|
|
774
803
|
line-height: 0;
|
|
775
|
-
pointer-events:
|
|
804
|
+
pointer-events: none;
|
|
776
805
|
transition: width 600ms cubic-bezier(0.16, 1, 0.3, 1);
|
|
777
806
|
-webkit-app-region: no-drag;
|
|
778
807
|
}
|
|
@@ -827,6 +856,7 @@
|
|
|
827
856
|
overflow: visible;
|
|
828
857
|
padding: 0 var(--desktop-dock-items-padding)
|
|
829
858
|
var(--desktop-dock-items-padding-block-end);
|
|
859
|
+
pointer-events: none;
|
|
830
860
|
scroll-behavior: smooth;
|
|
831
861
|
scrollbar-width: none;
|
|
832
862
|
}
|
|
@@ -1114,6 +1144,7 @@
|
|
|
1114
1144
|
justify-content: center;
|
|
1115
1145
|
overflow: visible;
|
|
1116
1146
|
line-height: 0;
|
|
1147
|
+
pointer-events: auto;
|
|
1117
1148
|
}
|
|
1118
1149
|
|
|
1119
1150
|
.desktop-dock[data-dock-placement="left"] .desktop-dock__slot {
|
|
@@ -23,6 +23,18 @@ test("traffic lights keep visual layout while expanding the pointer hit area", (
|
|
|
23
23
|
css,
|
|
24
24
|
/\.workbench-window-traffic-light::before\s*{[^}]*inset:\s*4px;[^}]*content:\s*"";[^}]*transition:\s*background-color 160ms ease;/s
|
|
25
25
|
);
|
|
26
|
+
assert.match(
|
|
27
|
+
css,
|
|
28
|
+
/\.workbench-window-traffic-light__icon\s*{[^}]*inset:\s*5px;[^}]*width:\s*10px;[^}]*height:\s*10px;[^}]*opacity:\s*0;[^}]*transition:\s*opacity 120ms ease;/s
|
|
29
|
+
);
|
|
30
|
+
assert.match(
|
|
31
|
+
css,
|
|
32
|
+
/\.workbench-window-traffic-lights:hover\s+\.workbench-window-traffic-light__icon,\s*\.workbench-window-traffic-lights:focus-within\s+\.workbench-window-traffic-light__icon\s*{[^}]*opacity:\s*1;/s
|
|
33
|
+
);
|
|
34
|
+
assert.match(
|
|
35
|
+
css,
|
|
36
|
+
/\.workbench-window-traffic-lights:hover\s+\.workbench-window-traffic-light\[data-workbench-traffic-light="close"\]::before,\s*\.workbench-window-traffic-lights:focus-within\s+\.workbench-window-traffic-light\[data-workbench-traffic-light="close"\]::before\s*{[^}]*background-color:\s*#ff5f57;/s
|
|
37
|
+
);
|
|
26
38
|
});
|
|
27
39
|
|
|
28
40
|
test("floating window corner resize handles do not intrude further than the edge handles", () => {
|
|
@@ -50,6 +62,31 @@ test("mission control hidden presentation windows are invisible and inert", () =
|
|
|
50
62
|
);
|
|
51
63
|
});
|
|
52
64
|
|
|
65
|
+
test("mission control overlay lets layout controls sit above dialog overlays", () => {
|
|
66
|
+
const css = readFileSync(resolve("src/styles/workbench.css"), "utf8");
|
|
67
|
+
const source = readFileSync(
|
|
68
|
+
resolve("src/mission-control/WorkbenchMissionControlOverlay.tsx"),
|
|
69
|
+
"utf8"
|
|
70
|
+
);
|
|
71
|
+
|
|
72
|
+
assert.match(
|
|
73
|
+
css,
|
|
74
|
+
/\.workbench-mission-control\s*{[^}]*z-index:\s*var\(--z-tooltip,\s*100700\);/s
|
|
75
|
+
);
|
|
76
|
+
assert.match(
|
|
77
|
+
source,
|
|
78
|
+
/className="workbench-mission-control pointer-events-none absolute inset-0 overflow-hidden"/
|
|
79
|
+
);
|
|
80
|
+
assert.match(
|
|
81
|
+
source,
|
|
82
|
+
/className="workbench-mission-control__layout-dock desktop-dock-plate pointer-events-auto"/
|
|
83
|
+
);
|
|
84
|
+
assert.match(
|
|
85
|
+
css,
|
|
86
|
+
/\.desktop-dock-plate\.workbench-mission-control__layout-dock\s*{[^}]*pointer-events:\s*auto;/s
|
|
87
|
+
);
|
|
88
|
+
});
|
|
89
|
+
|
|
53
90
|
test("dialog popover node layer sits above dialog overlays and remains clickable", () => {
|
|
54
91
|
const css = readFileSync(resolve("src/styles/workbench.css"), "utf8");
|
|
55
92
|
|
|
@@ -92,6 +129,25 @@ test("dock retained entry removal animates width and icon exit", () => {
|
|
|
92
129
|
assert.match(css, /@keyframes desktop-dock-separator-collapse-left/);
|
|
93
130
|
});
|
|
94
131
|
|
|
132
|
+
test("dock transparent hover padding lets clicks reach windows behind it", () => {
|
|
133
|
+
const css = readFileSync(resolve("src/styles/workbench.css"), "utf8");
|
|
134
|
+
|
|
135
|
+
assert.match(
|
|
136
|
+
css,
|
|
137
|
+
/\.desktop-dock-plate\s*{[^}]*pointer-events:\s*none;[^}]*transition:\s*width 220ms/s
|
|
138
|
+
);
|
|
139
|
+
assert.match(
|
|
140
|
+
css,
|
|
141
|
+
/\.desktop-dock\s*{[^}]*pointer-events:\s*none;[^}]*transition:\s*width 600ms/s
|
|
142
|
+
);
|
|
143
|
+
assert.match(css, /\.desktop-dock__items\s*{[^}]*pointer-events:\s*none;/s);
|
|
144
|
+
assert.match(css, /\.desktop-dock__slot\s*{[^}]*pointer-events:\s*auto;/s);
|
|
145
|
+
assert.match(
|
|
146
|
+
css,
|
|
147
|
+
/\.desktop-dock__hover-panel\s*{[^}]*pointer-events:\s*auto;/s
|
|
148
|
+
);
|
|
149
|
+
});
|
|
150
|
+
|
|
95
151
|
test("dock badge chrome uses inverted outlines and 11px count text", () => {
|
|
96
152
|
const css = readFileSync(resolve("src/styles/workbench.css"), "utf8");
|
|
97
153
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tutti-os/workbench-surface",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.45",
|
|
4
4
|
"private": false,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -34,10 +34,10 @@
|
|
|
34
34
|
"@tutti-os/config-tsconfig": "0.0.0"
|
|
35
35
|
},
|
|
36
36
|
"dependencies": {
|
|
37
|
-
"@tutti-os/ui-i18n-runtime": "0.0.
|
|
38
|
-
"@tutti-os/ui-react-hooks": "0.0.
|
|
39
|
-
"@tutti-os/workbench-snapshot": "0.0.
|
|
40
|
-
"@tutti-os/ui-system": "0.0.
|
|
37
|
+
"@tutti-os/ui-i18n-runtime": "0.0.45",
|
|
38
|
+
"@tutti-os/ui-react-hooks": "0.0.45",
|
|
39
|
+
"@tutti-os/workbench-snapshot": "0.0.45",
|
|
40
|
+
"@tutti-os/ui-system": "0.0.45"
|
|
41
41
|
},
|
|
42
42
|
"peerDependencies": {
|
|
43
43
|
"react": "^19.1.0",
|