roxxie-proxy-u-prod 0.1.0 → 0.2.2
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/README.md +62 -74
- package/dist/assets/{index-DcvPYWS3.js → index-CttvagWK.js} +164 -172
- package/dist/assets/index-EeRhLAof.css +1 -0
- package/dist/assets/{inject-BnVzMVpl.js → inject-xtH4w5z9.js} +8 -5
- package/dist/favicon.png +0 -0
- package/embed.js +2 -1
- package/examples/single-page.html +3 -1
- package/package.json +43 -41
- package/runtime/index.html +5 -4
- package/scripts/build.mjs +11 -5
- package/scripts/smoke.mjs +264 -73
- package/scripts/verify.mjs +100 -1
- package/source/packages/chrome/index.html +3 -2
- package/source/packages/chrome/public/favicon.png +0 -0
- package/source/packages/chrome/src/Tab/Tab.tsx +1 -1
- package/source/packages/chrome/src/assets/favicon.ts +1 -1
- package/source/packages/chrome/src/components/Button.tsx +11 -22
- package/source/packages/chrome/src/components/Checkbox.tsx +8 -12
- package/source/packages/chrome/src/components/Input.tsx +3 -4
- package/source/packages/chrome/src/components/StartScreen.tsx +34 -49
- package/source/packages/chrome/src/components/TopSiteButton.tsx +2 -2
- package/source/packages/chrome/src/pages/NewTabPage.tsx +42 -10
- package/source/packages/chrome/src/pages/SettingsPage.tsx +10 -11
- package/source/packages/chrome/src/runtime-base.ts +1 -1
- package/source/packages/chrome/src/services/SettingsService.ts +1 -1
- package/source/packages/chrome/src/style.css +7 -7
- package/source/packages/chrome/src/themes.ts +21 -21
- package/source/packages/inject/src/errorpage/errorpage.css +22 -35
- package/source/packages/inject/src/errorpage/errorpage.ts +6 -3
- package/source/packages/roxxie-transport/package.json +1 -1
- package/source/packages/roxxie-transport/src/connection.ts +1 -1
- package/source/packages/roxxie-transport/src/transport.ts +2 -2
- package/source/packages/scramjet/packages/core/dist/scramjet.js +1 -1
- package/source/packages/scramjet/packages/core/dist/scramjet.mjs +1 -1
- package/source/packages/scramjet/packages/core/dist/scramjet_bundled.js +1 -1
- package/source/packages/scramjet/packages/core/dist/scramjet_bundled.mjs +1 -1
- package/source/packages/tracker-protocol/package.json +1 -1
- package/source/packages/tracker-protocol/src/index.ts +34 -10
- package/source/pnpm-lock.yaml +4 -1
- package/standalone.html +27 -0
- package/dist/assets/index-BdRlQ7d_.css +0 -1
- package/dist/icon.png +0 -0
- package/dist/roxxie-icon.svg +0 -12
- package/source/packages/chrome/public/icon.png +0 -0
- package/source/packages/chrome/public/roxxie-icon.svg +0 -12
- package/source/packages/scramjet/packages/core/dist/temp-types-build/index.js +0 -23
- package/source/packages/scramjet/packages/core/dist/temp-types-build/index.js.map +0 -1
|
@@ -119,31 +119,31 @@ export const THEMES: readonly ThemeDefinition[] = [
|
|
|
119
119
|
},
|
|
120
120
|
{
|
|
121
121
|
id: "dark",
|
|
122
|
-
name: "
|
|
122
|
+
name: "EDUrocks Dark",
|
|
123
123
|
appearance: "dark",
|
|
124
|
-
description: "
|
|
124
|
+
description: "Roxxie's flat dark theme based on EDUrocks.",
|
|
125
125
|
preview: {
|
|
126
|
-
toolbar: "#
|
|
127
|
-
field: "#
|
|
128
|
-
text: "#
|
|
129
|
-
accent: "#
|
|
126
|
+
toolbar: "#222230",
|
|
127
|
+
field: "#11111b",
|
|
128
|
+
text: "#ebeff5",
|
|
129
|
+
accent: "#eb458b",
|
|
130
130
|
},
|
|
131
131
|
tokens: {
|
|
132
|
-
frame: "#
|
|
133
|
-
toolbar: "#
|
|
134
|
-
toolbar_text: "#
|
|
135
|
-
tab_background_text: "#
|
|
136
|
-
toolbar_field: "#
|
|
137
|
-
toolbar_field_text: "#
|
|
138
|
-
tab_line: "#
|
|
139
|
-
popup: "#
|
|
140
|
-
popup_border: "#
|
|
141
|
-
popup_text: "#
|
|
142
|
-
icons: "#
|
|
143
|
-
ntp_background: "#
|
|
144
|
-
ntp_text: "#
|
|
145
|
-
toolbar_top_separator: "#
|
|
146
|
-
tab_loading: "#
|
|
132
|
+
frame: "#11111b",
|
|
133
|
+
toolbar: "#222230",
|
|
134
|
+
toolbar_text: "#ebeff5",
|
|
135
|
+
tab_background_text: "#ebeff5",
|
|
136
|
+
toolbar_field: "#11111b",
|
|
137
|
+
toolbar_field_text: "#ebeff5",
|
|
138
|
+
tab_line: "#eb458b",
|
|
139
|
+
popup: "#222230",
|
|
140
|
+
popup_border: "#4f526b",
|
|
141
|
+
popup_text: "#ebeff5",
|
|
142
|
+
icons: "#b2bdcb",
|
|
143
|
+
ntp_background: "#11111b",
|
|
144
|
+
ntp_text: "#ebeff5",
|
|
145
|
+
toolbar_top_separator: "#4f526b",
|
|
146
|
+
tab_loading: "#eb458b",
|
|
147
147
|
},
|
|
148
148
|
},
|
|
149
149
|
{
|
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
:root {
|
|
2
2
|
/* Fallbacks from themes.ts DEFAULT_THEME_ID (dark) */
|
|
3
|
-
--bg: #
|
|
4
|
-
--text: #
|
|
5
|
-
--toolbar_field: #
|
|
6
|
-
--toolbar_field_text: #
|
|
7
|
-
--tab_line: #
|
|
3
|
+
--bg: #11111b;
|
|
4
|
+
--text: #ebeff5;
|
|
5
|
+
--toolbar_field: #222230;
|
|
6
|
+
--toolbar_field_text: #ebeff5;
|
|
7
|
+
--tab_line: #eb458b;
|
|
8
|
+
--border: #4f526b;
|
|
9
|
+
--button-text: #11111b;
|
|
10
|
+
--hover: #383a4c;
|
|
8
11
|
|
|
9
12
|
/* Local derived utility tokens used by error page + buttons */
|
|
10
13
|
--radius-xs: 3px;
|
|
@@ -25,10 +28,6 @@
|
|
|
25
28
|
--text-20: color-mix(in srgb, var(--text) 20%, transparent);
|
|
26
29
|
--text-40: color-mix(in srgb, var(--text) 40%, transparent);
|
|
27
30
|
|
|
28
|
-
--accent-shade-5: color-mix(in srgb, var(--tab_line) 95%, black);
|
|
29
|
-
--accent-shade-10: color-mix(in srgb, var(--tab_line) 90%, black);
|
|
30
|
-
--accent-shade-20: color-mix(in srgb, var(--tab_line) 80%, black);
|
|
31
|
-
--accent-shade-25: color-mix(in srgb, var(--tab_line) 75%, black);
|
|
32
31
|
}
|
|
33
32
|
|
|
34
33
|
html,
|
|
@@ -55,8 +54,8 @@ body {
|
|
|
55
54
|
display: flex;
|
|
56
55
|
gap: 24px;
|
|
57
56
|
align-items: flex-start;
|
|
58
|
-
background:
|
|
59
|
-
border: 1px solid var(--
|
|
57
|
+
background: var(--toolbar_field);
|
|
58
|
+
border: 1px solid var(--border);
|
|
60
59
|
border-radius: var(--radius-xl);
|
|
61
60
|
padding: 24px;
|
|
62
61
|
box-sizing: border-box;
|
|
@@ -138,7 +137,7 @@ body {
|
|
|
138
137
|
.btn {
|
|
139
138
|
color: inherit;
|
|
140
139
|
background: var(--toolbar_field);
|
|
141
|
-
border: 1px solid var(--
|
|
140
|
+
border: 1px solid var(--border);
|
|
142
141
|
border-radius: var(--radius-md);
|
|
143
142
|
padding: 0.5em 1em;
|
|
144
143
|
font-size: 0.9em;
|
|
@@ -148,36 +147,24 @@ body {
|
|
|
148
147
|
}
|
|
149
148
|
|
|
150
149
|
.btn:hover {
|
|
151
|
-
background: var(--
|
|
152
|
-
background-image: radial-gradient(
|
|
153
|
-
70% 80% at 50% 100%,
|
|
154
|
-
var(--text-8),
|
|
155
|
-
var(--text-5)
|
|
156
|
-
);
|
|
150
|
+
background: var(--hover);
|
|
157
151
|
}
|
|
158
152
|
|
|
159
153
|
.btn-primary {
|
|
160
|
-
background
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
var(--tab_line),
|
|
164
|
-
var(--accent-shade-20)
|
|
165
|
-
);
|
|
166
|
-
box-shadow: inset 0px 0.05em 0.025em rgb(255 255 255 / 30%);
|
|
167
|
-
text-shadow: 0 0.055em 0.05em var(--accent-shade-20);
|
|
168
|
-
color: white;
|
|
169
|
-
font-weight: 500;
|
|
154
|
+
background: var(--tab_line);
|
|
155
|
+
color: var(--button-text);
|
|
156
|
+
font-weight: 650;
|
|
170
157
|
border-color: var(--tab_line);
|
|
171
158
|
}
|
|
172
159
|
|
|
173
160
|
.btn-primary:hover {
|
|
174
|
-
background
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
);
|
|
180
|
-
|
|
161
|
+
background: color-mix(in srgb, var(--tab_line) 92%, black);
|
|
162
|
+
border-color: color-mix(in srgb, var(--tab_line) 92%, black);
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
.btn:focus-visible {
|
|
166
|
+
outline: 2px solid var(--tab_line);
|
|
167
|
+
outline-offset: 2px;
|
|
181
168
|
}
|
|
182
169
|
|
|
183
170
|
.btn:disabled,
|
|
@@ -10,10 +10,13 @@ export function applyTheme(theme: ThemeDefinition) {
|
|
|
10
10
|
--font: "Inter", system-ui, sans-serif;
|
|
11
11
|
--bg: ${theme.tokens.ntp_background};
|
|
12
12
|
--text: ${theme.tokens.ntp_text};
|
|
13
|
-
--muted:
|
|
14
|
-
--
|
|
15
|
-
--
|
|
13
|
+
--muted: ${theme.tokens.icons};
|
|
14
|
+
--toolbar_field: ${theme.tokens.toolbar_field};
|
|
15
|
+
--toolbar_field_text: ${theme.tokens.toolbar_field_text};
|
|
16
|
+
--tab_line: ${theme.tokens.tab_line};
|
|
17
|
+
--border: ${theme.tokens.popup_border};
|
|
16
18
|
--button-text: ${theme.tokens.ntp_background};
|
|
19
|
+
--hover: color-mix(in srgb, ${theme.tokens.toolbar_field} 72%, ${theme.tokens.ntp_text});
|
|
17
20
|
}`;
|
|
18
21
|
}
|
|
19
22
|
|
|
@@ -541,7 +541,7 @@ export class RoxxieConnection {
|
|
|
541
541
|
frame.operation !== S2CRequestTypes.HTTPResponseChunk
|
|
542
542
|
) {
|
|
543
543
|
throw new Error(
|
|
544
|
-
|
|
544
|
+
"Node sent invalid operation for canceled HTTP sequence"
|
|
545
545
|
);
|
|
546
546
|
}
|
|
547
547
|
} else {
|
|
@@ -250,8 +250,8 @@ export class RoxxieProxyTransport implements ProxyTransport {
|
|
|
250
250
|
.slice(0, 3)
|
|
251
251
|
.sort(
|
|
252
252
|
(left, right) =>
|
|
253
|
-
left.
|
|
254
|
-
left.
|
|
253
|
+
left.activeSessions - right.activeSessions ||
|
|
254
|
+
left.utilization - right.utilization
|
|
255
255
|
);
|
|
256
256
|
const compatible = discovered.filter(
|
|
257
257
|
(candidate) => candidate.protocolVersion === PROTOCOL_VERSION
|
|
@@ -13534,7 +13534,7 @@ __webpack_require__.d(__webpack_exports__, {
|
|
|
13534
13534
|
const versionInfo = {
|
|
13535
13535
|
version: "2.0.67-alpha.2",
|
|
13536
13536
|
build: "e3005a3b",
|
|
13537
|
-
date: "2026-07-
|
|
13537
|
+
date: "2026-07-27T22:03:54.891Z"
|
|
13538
13538
|
};
|
|
13539
13539
|
const defaultConfig = {
|
|
13540
13540
|
globals: {
|
|
@@ -13533,7 +13533,7 @@ __webpack_require__.d(__webpack_exports__, {
|
|
|
13533
13533
|
const versionInfo = {
|
|
13534
13534
|
version: "2.0.67-alpha.2",
|
|
13535
13535
|
build: "e3005a3b",
|
|
13536
|
-
date: "2026-07-
|
|
13536
|
+
date: "2026-07-27T22:03:54.938Z"
|
|
13537
13537
|
};
|
|
13538
13538
|
const defaultConfig = {
|
|
13539
13539
|
globals: {
|
|
@@ -13534,7 +13534,7 @@ __webpack_require__.d(__webpack_exports__, {
|
|
|
13534
13534
|
const versionInfo = {
|
|
13535
13535
|
version: "2.0.67-alpha.2",
|
|
13536
13536
|
build: "e3005a3b",
|
|
13537
|
-
date: "2026-07-
|
|
13537
|
+
date: "2026-07-27T22:03:54.921Z"
|
|
13538
13538
|
};
|
|
13539
13539
|
const defaultConfig = {
|
|
13540
13540
|
globals: {
|
|
@@ -13533,7 +13533,7 @@ __webpack_require__.d(__webpack_exports__, {
|
|
|
13533
13533
|
const versionInfo = {
|
|
13534
13534
|
version: "2.0.67-alpha.2",
|
|
13535
13535
|
build: "e3005a3b",
|
|
13536
|
-
date: "2026-07-
|
|
13536
|
+
date: "2026-07-27T22:03:54.961Z"
|
|
13537
13537
|
};
|
|
13538
13538
|
const defaultConfig = {
|
|
13539
13539
|
globals: {
|
|
@@ -37,7 +37,16 @@ export type NodeLifecycleState =
|
|
|
37
37
|
| "revoked";
|
|
38
38
|
|
|
39
39
|
export type NodeAvailability = "online" | "unhealthy" | "offline";
|
|
40
|
-
|
|
40
|
+
/**
|
|
41
|
+
* `registration` is a node-generated bootstrap secret used for public
|
|
42
|
+
* admission. `enrollment` remains accepted for rolling compatibility with
|
|
43
|
+
* older, administrator-token-based nodes.
|
|
44
|
+
*/
|
|
45
|
+
export type NodeCredentialKind =
|
|
46
|
+
| "registration"
|
|
47
|
+
| "enrollment"
|
|
48
|
+
| "pending"
|
|
49
|
+
| "approved";
|
|
41
50
|
|
|
42
51
|
export interface SessionDescriptionJSON {
|
|
43
52
|
type: "offer" | "answer" | "pranswer" | "rollback";
|
|
@@ -77,12 +86,17 @@ export interface NodeMetadata {
|
|
|
77
86
|
nodeVersion: string;
|
|
78
87
|
platform: string;
|
|
79
88
|
arch: string;
|
|
89
|
+
/**
|
|
90
|
+
* Rolling-compatibility load scale. This field is not a concurrent-session
|
|
91
|
+
* limit and must not be used to reject a connection.
|
|
92
|
+
*/
|
|
80
93
|
maxSessions: number;
|
|
81
94
|
protocolVersion: string;
|
|
82
95
|
}
|
|
83
96
|
|
|
84
97
|
export interface NodeMetrics {
|
|
85
98
|
activeSessions: number;
|
|
99
|
+
/** @see NodeMetadata.maxSessions */
|
|
86
100
|
maxSessions: number;
|
|
87
101
|
uptimeSeconds: number;
|
|
88
102
|
}
|
|
@@ -91,6 +105,7 @@ export interface CandidateNode {
|
|
|
91
105
|
nodeId: string;
|
|
92
106
|
name: string;
|
|
93
107
|
activeSessions: number;
|
|
108
|
+
/** @see NodeMetadata.maxSessions */
|
|
94
109
|
maxSessions: number;
|
|
95
110
|
utilization: number;
|
|
96
111
|
protocolVersion: string;
|
|
@@ -291,6 +306,16 @@ function requestId(value: unknown): string {
|
|
|
291
306
|
return result;
|
|
292
307
|
}
|
|
293
308
|
|
|
309
|
+
function registrationCredential(value: unknown): string {
|
|
310
|
+
const result = stringValue(value, "credential", 43);
|
|
311
|
+
if (!/^[A-Za-z0-9_-]{43}$/u.test(result)) {
|
|
312
|
+
throw new TrackerProtocolError(
|
|
313
|
+
"registration credential must be a 32-byte base64url secret"
|
|
314
|
+
);
|
|
315
|
+
}
|
|
316
|
+
return result;
|
|
317
|
+
}
|
|
318
|
+
|
|
294
319
|
function assertMessageBase(value: unknown): Record<string, unknown> {
|
|
295
320
|
const message = objectValue(value, "message");
|
|
296
321
|
stringValue(message.type, "type", 64);
|
|
@@ -425,13 +450,17 @@ export function assertNodeClientMessage(
|
|
|
425
450
|
);
|
|
426
451
|
}
|
|
427
452
|
if (
|
|
428
|
-
!(
|
|
429
|
-
|
|
430
|
-
)
|
|
453
|
+
!(
|
|
454
|
+
["registration", "enrollment", "pending", "approved"] as unknown[]
|
|
455
|
+
).includes(message.credentialKind)
|
|
431
456
|
) {
|
|
432
457
|
throw new TrackerProtocolError("credentialKind is invalid");
|
|
433
458
|
}
|
|
434
|
-
|
|
459
|
+
if (message.credentialKind === "registration") {
|
|
460
|
+
registrationCredential(message.credential);
|
|
461
|
+
} else {
|
|
462
|
+
stringValue(message.credential, "credential", 512);
|
|
463
|
+
}
|
|
435
464
|
const metadata = objectValue(message.metadata, "metadata");
|
|
436
465
|
assertNodeId(metadata.nodeId, "metadata.nodeId");
|
|
437
466
|
stringValue(
|
|
@@ -483,11 +512,6 @@ export function assertNodeClientMessage(
|
|
|
483
512
|
if ((metrics.maxSessions as number) < 1) {
|
|
484
513
|
throw new TrackerProtocolError("maxSessions must be at least one");
|
|
485
514
|
}
|
|
486
|
-
if (
|
|
487
|
-
(metrics.activeSessions as number) > (metrics.maxSessions as number)
|
|
488
|
-
) {
|
|
489
|
-
throw new TrackerProtocolError("activeSessions exceeds maxSessions");
|
|
490
|
-
}
|
|
491
515
|
return;
|
|
492
516
|
}
|
|
493
517
|
case "node.webrtc.answer": {
|
package/source/pnpm-lock.yaml
CHANGED
|
@@ -341,7 +341,7 @@ importers:
|
|
|
341
341
|
specifier: 6.0.0
|
|
342
342
|
version: link:../adrift-protocol
|
|
343
343
|
roxxie-transports-tracker-protocol:
|
|
344
|
-
specifier: 1.
|
|
344
|
+
specifier: 1.2.0
|
|
345
345
|
version: link:../tracker-protocol
|
|
346
346
|
ws:
|
|
347
347
|
specifier: 8.21.1
|
|
@@ -368,6 +368,9 @@ importers:
|
|
|
368
368
|
'@roamhq/wrtc':
|
|
369
369
|
specifier: 0.10.0
|
|
370
370
|
version: 0.10.0
|
|
371
|
+
ipaddr.js:
|
|
372
|
+
specifier: 2.4.0
|
|
373
|
+
version: 2.4.0
|
|
371
374
|
roxxie-transports:
|
|
372
375
|
specifier: workspace:*
|
|
373
376
|
version: link:../roxxie-transport
|
package/standalone.html
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8" />
|
|
5
|
+
<meta name="viewport" content="width=device-width,initial-scale=1" />
|
|
6
|
+
<title>Roxxie Proxy U</title>
|
|
7
|
+
<style>
|
|
8
|
+
html,
|
|
9
|
+
body,
|
|
10
|
+
#roxxie-browser {
|
|
11
|
+
width: 100%;
|
|
12
|
+
height: 100%;
|
|
13
|
+
margin: 0;
|
|
14
|
+
}
|
|
15
|
+
</style>
|
|
16
|
+
</head>
|
|
17
|
+
<body>
|
|
18
|
+
<div id="roxxie-browser"></div>
|
|
19
|
+
<script
|
|
20
|
+
defer
|
|
21
|
+
src="https://cdn.jsdelivr.net/npm/roxxie-proxy-u-prod@0.2.2/embed.js"
|
|
22
|
+
integrity="sha384-3QVF5CQiWk0SKqCDSEAoupN0KXK0bxo9qaZeS5Tj8/8mO8J719dv+fvmrqmdthH2"
|
|
23
|
+
crossorigin="anonymous"
|
|
24
|
+
data-roxxie-target="#roxxie-browser"
|
|
25
|
+
></script>
|
|
26
|
+
</body>
|
|
27
|
+
</html>
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas,details,embed,figure,figcaption,footer,header,hgroup,menu,nav,output,ruby,section,summary,time,mark,audio,video{margin:0;padding:0;border:0;font-size:100%;font:inherit;vertical-align:baseline}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}body{line-height:1}ol,ul{list-style:none}blockquote,q{quotes:none}blockquote:before,blockquote:after,q:before,q:after{content:"";content:none}table{border-collapse:collapse;border-spacing:0}body,html,#app,#main{width:100vw;height:100vh;margin:0;padding:0;overflow:hidden;display:flex;flex-direction:column}#app.vertical-tabs{flex-direction:row}body.sidebar-right #app.vertical-tabs{flex-direction:row-reverse}#app.layout-bottom{flex-direction:column-reverse}iframe{height:100%}html,body{font-family:var(--font);color:var(--toolbar_text);background:var(--toolbar);accent-color:var(--tab_line);color-scheme:dark;--text-5: color-mix(in oklab, var(--toolbar_text) 5%, transparent);--text-8: color-mix(in oklab, var(--toolbar_text) 8%, transparent);--text-10: color-mix(in oklab, var(--toolbar_text) 10%, transparent);--text-15: color-mix(in oklab, var(--toolbar_text) 15%, transparent);--text-20: color-mix(in oklab, var(--toolbar_text) 20%, transparent);--text-30: color-mix(in oklab, var(--toolbar_text) 30%, transparent);--text-35: color-mix(in oklab, var(--toolbar_text) 35%, transparent);--text-40: color-mix(in oklab, var(--toolbar_text) 40%, transparent);--text-50: color-mix(in oklab, var(--toolbar_text) 50%, transparent);--text-60: color-mix(in oklab, var(--toolbar_text) 60%, transparent);--text-65: color-mix(in oklab, var(--toolbar_text) 65%, transparent);--text-70: color-mix(in oklab, var(--toolbar_text) 70%, transparent);--ntp-text-5: color-mix(in oklab, var(--ntp_text) 5%, transparent);--ntp-text-8: color-mix(in oklab, var(--ntp_text) 8%, transparent);--ntp-text-10: color-mix(in oklab, var(--ntp_text) 10%, transparent);--ntp-text-15: color-mix(in oklab, var(--ntp_text) 15%, transparent);--ntp-text-20: color-mix(in oklab, var(--ntp_text) 20%, transparent);--ntp-text-60: color-mix(in oklab, var(--ntp_text) 60%, transparent);--ntp-text-70: color-mix(in oklab, var(--ntp_text) 70%, transparent);--field-text-50: color-mix( in oklab, var(--toolbar_field_text) 50%, transparent );--field-text-60: color-mix( in oklab, var(--toolbar_field_text) 60%, transparent );--accent-75: color-mix(in oklab, var(--tab_line) 75%, transparent);--accent-50: color-mix(in oklab, var(--tab_line) 50%, transparent);--accent-40: color-mix(in oklab, var(--tab_line) 40%, transparent);--accent-30: color-mix(in oklab, var(--tab_line) 30%, transparent);--accent-25: color-mix(in oklab, var(--tab_line) 25%, transparent);--accent-20: color-mix(in oklab, var(--tab_line) 20%, transparent);--accent-15: color-mix(in oklab, var(--tab_line) 15%, transparent);--accent-10: color-mix(in oklab, var(--tab_line) 10%, transparent);--accent-tint-10: color-mix(in oklab, white 10%, var(--tab_line));--accent-tint-20: color-mix(in oklab, white 20%, var(--tab_line));--accent-tint-35: color-mix(in oklab, white 35%, var(--tab_line));--accent-tint-50: color-mix(in oklab, white 50%, var(--tab_line));--accent-shade-5: color-mix(in oklab, black 5%, var(--tab_line));--accent-shade-10: color-mix(in oklab, black 10%, var(--tab_line));--accent-shade-15: color-mix(in oklab, black 15%, var(--tab_line));--accent-shade-20: color-mix(in oklab, black 20%, var(--tab_line));--accent-shade-25: color-mix(in oklab, black 25%, var(--tab_line));--accent-shade-30: color-mix(in oklab, black 30%, var(--tab_line));--accent-shade-40: color-mix(in oklab, black 40%, var(--tab_line));--accent-shade-50: color-mix(in oklab, black 50%, var(--tab_line));--radius-xs: 3px;--radius-sm: 4px;--radius-md: 5px;--radius-lg: 6px;--radius-xl: 8px;--space-xxs: .15rem;--space-xs: .225rem;--space-sm: .375rem;--space-md: .6rem;--space-lg: .75rem;--space-xl: .95rem;--space-xxl: 1.25rem;--tab-height: 2rem;--omnibar-height: 2.5rem}body.ui-compact{--radius-xs: 2px;--radius-sm: 3px;--radius-md: 4px;--radius-lg: 5px;--radius-xl: 6px;--space-xxs: .1rem;--space-xs: .175rem;--space-sm: .25rem;--space-md: .35rem;--space-lg: .6rem;--space-xl: .75rem;--space-xxl: 1rem;--tab-height: 1.75rem;--omnibar-height: 2.25rem}body.ui-touch{--radius-xs: 5px;--radius-sm: 6px;--radius-md: 8px;--radius-lg: 10px;--radius-xl: 12px;--space-xxs: .175rem;--space-xs: .25rem;--space-sm: .5rem;--space-md: .75rem;--space-lg: 1rem;--space-xl: 1.25rem;--space-xxl: 1.5rem;--tab-height: 2.2rem;--omnibar-height: 2.8rem}::selection{background:var(--accent-30)}body.light-mode{color-scheme:light}:root{--font: "Inter", system-ui, sans-serif;font-family:var(--font);--toolbarbutton-hover-background: color-mix( in srgb, currentColor 17%, transparent );--toolbarbutton-active-background: color-mix( in srgb, currentColor 30%, transparent )}body.full-vertical-tabs{--omnibar-height: 2.25rem}body.full-vertical-tabs.ui-compact{--omnibar-height: 2rem}body.full-vertical-tabs.ui-touch{--omnibar-height: 2.5rem}*{box-sizing:border-box}h1{font-size:2em}button{border:none;background:none;color:var(--toolbar_text);padding:0;cursor:pointer;font-family:var(--font)}#tabstrip #hovercard{transition:opacity .2s ease .7s,scale .2s cubic-bezier(.43,.91,.34,1.3) .7s,visibility 0s,left .2s cubic-bezier(.33,.22,.18,1.17);scale:1}#tabstrip:is(:has(:active),:not(:has(:hover:not(.extra,.extra *)))) #hovercard{visibility:hidden;opacity:0;scale:.8;transition:none}#tabstrip .extra.top:has(>.pinned-tabs.empty){padding:0}
|
package/dist/icon.png
DELETED
|
Binary file
|
package/dist/roxxie-icon.svg
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" role="img" aria-label="Roxxie Proxy U">
|
|
2
|
-
<defs>
|
|
3
|
-
<linearGradient id="g" x1="8" y1="5" x2="57" y2="59" gradientUnits="userSpaceOnUse">
|
|
4
|
-
<stop stop-color="#7c3aed"/>
|
|
5
|
-
<stop offset="0.52" stop-color="#2563eb"/>
|
|
6
|
-
<stop offset="1" stop-color="#06b6d4"/>
|
|
7
|
-
</linearGradient>
|
|
8
|
-
</defs>
|
|
9
|
-
<rect x="3" y="3" width="58" height="58" rx="15" fill="url(#g)"/>
|
|
10
|
-
<path d="M16 46V17h13.2c7.3 0 11.9 3.9 11.9 10.1 0 4.3-2.4 7.6-6.4 9.1L43 46h-8.2l-7.1-8.7h-4.4V46H16Zm7.3-15h5.4c3.2 0 5-1.4 5-3.9 0-2.6-1.8-3.9-5-3.9h-5.4V31Z" fill="white"/>
|
|
11
|
-
<path d="M45.5 17v17.1c0 4.5 1.4 6.5 4.5 6.5 1.1 0 2-.2 2.8-.7v6.2c-1.4.6-3 .9-4.7.9-6.5 0-9.8-4.1-9.8-12.3V17h7.2Z" fill="white" fill-opacity=".78"/>
|
|
12
|
-
</svg>
|
|
Binary file
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" role="img" aria-label="Roxxie Proxy U">
|
|
2
|
-
<defs>
|
|
3
|
-
<linearGradient id="g" x1="8" y1="5" x2="57" y2="59" gradientUnits="userSpaceOnUse">
|
|
4
|
-
<stop stop-color="#7c3aed"/>
|
|
5
|
-
<stop offset="0.52" stop-color="#2563eb"/>
|
|
6
|
-
<stop offset="1" stop-color="#06b6d4"/>
|
|
7
|
-
</linearGradient>
|
|
8
|
-
</defs>
|
|
9
|
-
<rect x="3" y="3" width="58" height="58" rx="15" fill="url(#g)"/>
|
|
10
|
-
<path d="M16 46V17h13.2c7.3 0 11.9 3.9 11.9 10.1 0 4.3-2.4 7.6-6.4 9.1L43 46h-8.2l-7.1-8.7h-4.4V46H16Zm7.3-15h5.4c3.2 0 5-1.4 5-3.9 0-2.6-1.8-3.9-5-3.9h-5.4V31Z" fill="white"/>
|
|
11
|
-
<path d="M45.5 17v17.1c0 4.5 1.4 6.5 4.5 6.5 1.1 0 2-.2 2.8-.7v6.2c-1.4.6-3 .9-4.7.9-6.5 0-9.8-4.1-9.8-12.3V17h7.2Z" fill="white" fill-opacity=".78"/>
|
|
12
|
-
</svg>
|