@domicile-desktop/manganese-window-management 1.0.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/package.json +9 -9
- package/src/BrowserWindow.tsx +6 -0
- package/src/browser/AddressBar.tsx +24 -1
package/package.json
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"dependencies": {
|
|
3
3
|
"@cprussin/option-result": "^2.0.1",
|
|
4
|
-
"@domicile-desktop/component-library": "
|
|
5
|
-
"@domicile-desktop/manganese-address": "1.0.
|
|
6
|
-
"@domicile-desktop/manganese-bar": "1.
|
|
7
|
-
"@domicile-desktop/manganese-host": "
|
|
8
|
-
"@domicile-desktop/manganese-page-requests": "1.
|
|
9
|
-
"@domicile-desktop/sdk": "1.0
|
|
10
|
-
"@domicile-desktop/system-apps": "1.
|
|
4
|
+
"@domicile-desktop/component-library": "2.0.1",
|
|
5
|
+
"@domicile-desktop/manganese-address": "1.0.2",
|
|
6
|
+
"@domicile-desktop/manganese-bar": "1.1.1",
|
|
7
|
+
"@domicile-desktop/manganese-host": "2.0.1",
|
|
8
|
+
"@domicile-desktop/manganese-page-requests": "1.1.1",
|
|
9
|
+
"@domicile-desktop/sdk": "2.1.0",
|
|
10
|
+
"@domicile-desktop/system-apps": "1.1.1",
|
|
11
11
|
"@pandacss/dev": "^1.12.1",
|
|
12
12
|
"@phosphor-icons/react": "^2.1.10",
|
|
13
13
|
"react": "^19.2.8",
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
"description": "Manganese's window management: sway's layout tree, tiling, floating, workspaces, keybindings and the windows' chrome.",
|
|
17
17
|
"devDependencies": {
|
|
18
18
|
"@cprussin/tsconfig": "^5.0.0",
|
|
19
|
-
"@domicile-desktop/test-support": "0.0.
|
|
19
|
+
"@domicile-desktop/test-support": "0.0.2",
|
|
20
20
|
"@pandacss/preset-panda": "^1.12.1",
|
|
21
21
|
"@testing-library/react": "^16.3.3",
|
|
22
22
|
"@testing-library/user-event": "^14.6.7",
|
|
@@ -85,5 +85,5 @@
|
|
|
85
85
|
"test:unit": "bun test"
|
|
86
86
|
},
|
|
87
87
|
"type": "module",
|
|
88
|
-
"version": "1.
|
|
88
|
+
"version": "1.2.0"
|
|
89
89
|
}
|
package/src/BrowserWindow.tsx
CHANGED
|
@@ -657,9 +657,15 @@ export const BrowserWindow = ({
|
|
|
657
657
|
onBack={drive((loaded) => {
|
|
658
658
|
loaded.goBack();
|
|
659
659
|
})}
|
|
660
|
+
onBackInNewWindow={drive((loaded) => {
|
|
661
|
+
loaded.goBackInNewWindow();
|
|
662
|
+
})}
|
|
660
663
|
onForward={drive((loaded) => {
|
|
661
664
|
loaded.goForward();
|
|
662
665
|
})}
|
|
666
|
+
onForwardInNewWindow={drive((loaded) => {
|
|
667
|
+
loaded.goForwardInNewWindow();
|
|
668
|
+
})}
|
|
663
669
|
onNavigate={navigate}
|
|
664
670
|
onReload={drive((loaded) => {
|
|
665
671
|
loaded.reload();
|
|
@@ -22,7 +22,7 @@ import { ClockCounterClockwiseIcon } from "@phosphor-icons/react/dist/ssr/ClockC
|
|
|
22
22
|
import { DetectiveIcon } from "@phosphor-icons/react/dist/ssr/Detective";
|
|
23
23
|
import { GlobeSimpleIcon } from "@phosphor-icons/react/dist/ssr/GlobeSimple";
|
|
24
24
|
import { MagnifyingGlassIcon } from "@phosphor-icons/react/dist/ssr/MagnifyingGlass";
|
|
25
|
-
import type { CSSProperties, FormEvent } from "react";
|
|
25
|
+
import type { CSSProperties, FormEvent, MouseEvent } from "react";
|
|
26
26
|
import { useState } from "react";
|
|
27
27
|
import { css } from "../../styled-system/css";
|
|
28
28
|
import { hstack } from "../../styled-system/patterns";
|
|
@@ -61,7 +61,11 @@ type Props = {
|
|
|
61
61
|
/** Whether a page is loading, which turns Reload into Stop. */
|
|
62
62
|
loading: boolean;
|
|
63
63
|
onBack: () => void;
|
|
64
|
+
/** Goes back in a new window, for a middle click on Back. */
|
|
65
|
+
onBackInNewWindow: () => void;
|
|
64
66
|
onForward: () => void;
|
|
67
|
+
/** Goes forward in a new window, for a middle click on Forward. */
|
|
68
|
+
onForwardInNewWindow: () => void;
|
|
65
69
|
/** Loads `url`, already resolved from what was typed. */
|
|
66
70
|
onNavigate: (url: string) => void;
|
|
67
71
|
onReload: () => void;
|
|
@@ -103,7 +107,9 @@ export const AddressBar = ({
|
|
|
103
107
|
loading,
|
|
104
108
|
mediaDevices,
|
|
105
109
|
onBack,
|
|
110
|
+
onBackInNewWindow,
|
|
106
111
|
onForward,
|
|
112
|
+
onForwardInNewWindow,
|
|
107
113
|
onNavigate,
|
|
108
114
|
onReload,
|
|
109
115
|
onSetSitePermission,
|
|
@@ -148,6 +154,7 @@ export const AddressBar = ({
|
|
|
148
154
|
<Button
|
|
149
155
|
disabled={!canGoBack}
|
|
150
156
|
label="Back"
|
|
157
|
+
onAuxClick={onMiddleClick(onBackInNewWindow)}
|
|
151
158
|
onClick={onBack}
|
|
152
159
|
rounded
|
|
153
160
|
size="sm"
|
|
@@ -158,6 +165,7 @@ export const AddressBar = ({
|
|
|
158
165
|
<Button
|
|
159
166
|
disabled={!canGoForward}
|
|
160
167
|
label="Forward"
|
|
168
|
+
onAuxClick={onMiddleClick(onForwardInNewWindow)}
|
|
161
169
|
onClick={onForward}
|
|
162
170
|
rounded
|
|
163
171
|
size="sm"
|
|
@@ -267,6 +275,21 @@ export const AddressBar = ({
|
|
|
267
275
|
);
|
|
268
276
|
};
|
|
269
277
|
|
|
278
|
+
/** `MouseEvent.button` for the middle button. */
|
|
279
|
+
const MIDDLE_BUTTON = 1;
|
|
280
|
+
|
|
281
|
+
/**
|
|
282
|
+
* An `onAuxClick` that calls `open` for a middle click, as Chrome opens a
|
|
283
|
+
* middle-clicked Back or Forward in a new tab. A right click is left alone.
|
|
284
|
+
*/
|
|
285
|
+
const onMiddleClick =
|
|
286
|
+
(open: () => void) =>
|
|
287
|
+
(event: MouseEvent): void => {
|
|
288
|
+
if (event.button === MIDDLE_BUTTON) {
|
|
289
|
+
open();
|
|
290
|
+
}
|
|
291
|
+
};
|
|
292
|
+
|
|
270
293
|
/**
|
|
271
294
|
* Inline style handing `progress` to `loadingStyles` as `--load-progress`.
|
|
272
295
|
* Inline because Panda only extracts build-time literals.
|