neoagent 2.4.1-beta.21 → 2.4.1-beta.23
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/extensions/chrome-browser/icons/logo.svg +21 -2
- package/flutter_app/android/app/src/main/res/mipmap-hdpi/ic_launcher.png +0 -0
- package/flutter_app/android/app/src/main/res/mipmap-mdpi/ic_launcher.png +0 -0
- package/flutter_app/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png +0 -0
- package/flutter_app/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png +0 -0
- package/flutter_app/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png +0 -0
- package/flutter_app/assets/branding/app_icon_1024.png +0 -0
- package/flutter_app/assets/branding/app_icon_128.png +0 -0
- package/flutter_app/assets/branding/app_icon_192.png +0 -0
- package/flutter_app/assets/branding/app_icon_256.png +0 -0
- package/flutter_app/assets/branding/app_icon_32.png +0 -0
- package/flutter_app/assets/branding/app_icon_512.png +0 -0
- package/flutter_app/assets/branding/app_icon_64.png +0 -0
- package/flutter_app/assets/branding/app_icon_light_1024.png +0 -0
- package/flutter_app/assets/branding/app_icon_light_128.png +0 -0
- package/flutter_app/assets/branding/app_icon_light_192.png +0 -0
- package/flutter_app/assets/branding/app_icon_light_256.png +0 -0
- package/flutter_app/assets/branding/app_icon_light_32.png +0 -0
- package/flutter_app/assets/branding/app_icon_light_512.png +0 -0
- package/flutter_app/assets/branding/app_icon_light_64.png +0 -0
- package/flutter_app/assets/branding/tray_icon_light_template.png +0 -0
- package/flutter_app/assets/branding/tray_icon_template.png +0 -0
- package/flutter_app/linux/runner/resources/app_icon.png +0 -0
- package/flutter_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png +0 -0
- package/flutter_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png +0 -0
- package/flutter_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png +0 -0
- package/flutter_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png +0 -0
- package/flutter_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png +0 -0
- package/flutter_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png +0 -0
- package/flutter_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png +0 -0
- package/flutter_app/tool/generate_desktop_branding.py +170 -36
- package/flutter_app/web/favicon.png +0 -0
- package/flutter_app/web/favicon.svg +21 -2
- package/flutter_app/web/favicon_light.svg +21 -2
- package/flutter_app/web/icons/Icon-192-light.png +0 -0
- package/flutter_app/web/icons/Icon-192.png +0 -0
- package/flutter_app/web/icons/Icon-512-light.png +0 -0
- package/flutter_app/web/icons/Icon-512.png +0 -0
- package/flutter_app/web/icons/Icon-maskable-192-light.png +0 -0
- package/flutter_app/web/icons/Icon-maskable-192.png +0 -0
- package/flutter_app/web/icons/Icon-maskable-512-light.png +0 -0
- package/flutter_app/web/icons/Icon-maskable-512.png +0 -0
- package/flutter_app/windows/runner/main.cpp +7 -1
- package/flutter_app/windows/runner/resources/app_icon.ico +0 -0
- package/package.json +1 -1
- package/server/public/.last_build_id +1 -1
- package/server/public/assets/assets/branding/app_icon_256.png +0 -0
- package/server/public/assets/assets/branding/app_icon_512.png +0 -0
- package/server/public/assets/assets/branding/app_icon_light_256.png +0 -0
- package/server/public/assets/assets/branding/app_icon_light_512.png +0 -0
- package/server/public/assets/assets/branding/tray_icon_light_template.png +0 -0
- package/server/public/assets/assets/branding/tray_icon_template.png +0 -0
- package/server/public/assets/web/icons/Icon-192.png +0 -0
- package/server/public/favicon.png +0 -0
- package/server/public/favicon.svg +21 -2
- package/server/public/favicon_light.svg +21 -2
- package/server/public/flutter_bootstrap.js +1 -1
- package/server/public/icons/Icon-192-light.png +0 -0
- package/server/public/icons/Icon-192.png +0 -0
- package/server/public/icons/Icon-512-light.png +0 -0
- package/server/public/icons/Icon-512.png +0 -0
- package/server/public/icons/Icon-maskable-192-light.png +0 -0
- package/server/public/icons/Icon-maskable-192.png +0 -0
- package/server/public/icons/Icon-maskable-512-light.png +0 -0
- package/server/public/icons/Icon-maskable-512.png +0 -0
- package/server/public/main.dart.js +4 -4
|
@@ -1,3 +1,22 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg"
|
|
2
|
-
<
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
|
|
2
|
+
<defs>
|
|
3
|
+
<linearGradient id="bg" x1="0%" y1="0%" x2="100%" y2="100%">
|
|
4
|
+
<stop offset="0%" stop-color="#9e8052"/>
|
|
5
|
+
<stop offset="100%" stop-color="#439081"/>
|
|
6
|
+
</linearGradient>
|
|
7
|
+
<radialGradient id="shine" cx="24%" cy="15%" r="70%">
|
|
8
|
+
<stop offset="0%" stop-color="#fff4d8" stop-opacity="0.24"/>
|
|
9
|
+
<stop offset="100%" stop-color="#fff4d8" stop-opacity="0"/>
|
|
10
|
+
</radialGradient>
|
|
11
|
+
</defs>
|
|
12
|
+
<rect x="2.5" y="2.5" width="27" height="27" rx="9" ry="9" fill="url(#bg)" stroke="#ffffff" stroke-opacity="0.16" stroke-width="1"/>
|
|
13
|
+
<rect x="2.5" y="2.5" width="27" height="27" rx="9" ry="9" fill="url(#shine)"/>
|
|
14
|
+
<path d="M2.5 17h27v3.5c0 5-4 9-9 9h-9c-5 0-9-4-9-9Z" fill="#000000" opacity="0.08"/>
|
|
15
|
+
<rect x="3" y="3" width="26" height="26" rx="8.5" ry="8.5" fill="none" stroke="#ffffff" stroke-opacity="0.18" stroke-width="1"/>
|
|
16
|
+
<path d="M16 6.25 26.15 12.3 16 16.3 5.85 12.3Z" fill="#000000" opacity="0.20" transform="translate(0 0.65)"/>
|
|
17
|
+
<path d="M16 14.75 25.85 19.45 16 22.25 6.15 19.45Z" fill="#000000" opacity="0.20" transform="translate(0 0.65)"/>
|
|
18
|
+
<path d="M16 20.45 24.85 24.75 16 26.85 7.15 24.75Z" fill="#000000" opacity="0.20" transform="translate(0 0.65)"/>
|
|
19
|
+
<path d="M16 5.7 26.8 12.1 16 16.5 5.2 12.1Z" fill="#ffffff"/>
|
|
20
|
+
<path d="M16 14.2 26.5 19.3 16 22.4 5.5 19.3Z" fill="#ffffff"/>
|
|
21
|
+
<path d="M16 20 25.4 24.6 16 27 6.6 24.6Z" fill="#ffffff"/>
|
|
3
22
|
</svg>
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
|
-
import math
|
|
6
5
|
from pathlib import Path
|
|
7
6
|
|
|
8
7
|
from PIL import Image, ImageDraw, ImageFilter
|
|
@@ -18,9 +17,15 @@ LINUX_ICON_DIR = ROOT / "linux" / "runner" / "resources"
|
|
|
18
17
|
ANDROID_RES_DIR = ROOT / "android" / "app" / "src" / "main" / "res"
|
|
19
18
|
SERVER_PUBLIC_DIR = ROOT.parent / "server" / "public"
|
|
20
19
|
SERVER_PUBLIC_ICONS_DIR = SERVER_PUBLIC_DIR / "icons"
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
20
|
+
STATIC_IMG_DIR = ROOT.parent / "static" / "img"
|
|
21
|
+
LANDING_LOGO_PATH = ROOT.parent / "landing" / "assets" / "logo.svg"
|
|
22
|
+
EXTENSION_LOGO_PATH = ROOT.parent / "extensions" / "chrome-browser" / "icons" / "logo.svg"
|
|
23
|
+
|
|
24
|
+
ACCENT = (104, 78, 44)
|
|
25
|
+
ACCENT_ALT = (35, 92, 82)
|
|
26
|
+
ACCENT_DARK = (158, 128, 82)
|
|
27
|
+
ACCENT_ALT_DARK = (67, 144, 129)
|
|
28
|
+
SYMBOL_LIGHT = (255, 247, 232, 255)
|
|
24
29
|
WHITE = (255, 255, 255, 255)
|
|
25
30
|
TRANSPARENT = (0, 0, 0, 0)
|
|
26
31
|
|
|
@@ -29,56 +34,83 @@ def lerp(a: float, b: float, t: float) -> float:
|
|
|
29
34
|
return a + (b - a) * t
|
|
30
35
|
|
|
31
36
|
|
|
32
|
-
def
|
|
37
|
+
def mix_channel(value: int, target: int, amount: float) -> int:
|
|
38
|
+
return max(0, min(255, round(lerp(value, target, amount))))
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
def mix_color(color: tuple[int, int, int], target: int, amount: float) -> tuple[int, int, int]:
|
|
42
|
+
return (
|
|
43
|
+
mix_channel(color[0], target, amount),
|
|
44
|
+
mix_channel(color[1], target, amount),
|
|
45
|
+
mix_channel(color[2], target, amount),
|
|
46
|
+
)
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
def gradient_background(
|
|
50
|
+
size: int,
|
|
51
|
+
start: tuple[int, int, int],
|
|
52
|
+
end: tuple[int, int, int],
|
|
53
|
+
) -> Image.Image:
|
|
33
54
|
img = Image.new("RGBA", (size, size), TRANSPARENT)
|
|
34
55
|
px = img.load()
|
|
35
56
|
for y in range(size):
|
|
36
57
|
for x in range(size):
|
|
37
58
|
tx = x / max(size - 1, 1)
|
|
38
59
|
ty = y / max(size - 1, 1)
|
|
39
|
-
|
|
60
|
+
diagonal = (tx * 0.58) + (ty * 0.42)
|
|
61
|
+
glow = max(0.0, 1.0 - (((tx - 0.25) ** 2 + (ty - 0.18) ** 2) ** 0.5) / 0.58)
|
|
62
|
+
shade = max(0.0, 1.0 - (((tx - 0.86) ** 2 + (ty - 0.94) ** 2) ** 0.5) / 0.72)
|
|
63
|
+
t = min(1.0, max(0.0, diagonal + glow * 0.12 - shade * 0.08))
|
|
64
|
+
base = (
|
|
65
|
+
int(lerp(start[0], end[0], t)),
|
|
66
|
+
int(lerp(start[1], end[1], t)),
|
|
67
|
+
int(lerp(start[2], end[2], t)),
|
|
68
|
+
)
|
|
69
|
+
lit = mix_color(base, 255, glow * 0.14)
|
|
70
|
+
final = mix_color(lit, 0, shade * 0.16)
|
|
40
71
|
px[x, y] = (
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
72
|
+
final[0],
|
|
73
|
+
final[1],
|
|
74
|
+
final[2],
|
|
44
75
|
255,
|
|
45
76
|
)
|
|
46
77
|
return img
|
|
47
78
|
|
|
48
79
|
|
|
49
|
-
def logo_paths(size: int, padding_ratio: float = 0.
|
|
80
|
+
def logo_paths(size: int, padding_ratio: float = 0.16):
|
|
50
81
|
pad = size * padding_ratio
|
|
51
82
|
inner = size - pad * 2
|
|
52
83
|
def point(x: float, y: float) -> tuple[float, float]:
|
|
53
84
|
return (pad + inner * x, pad + inner * y)
|
|
54
85
|
|
|
55
|
-
top = [point(0.5, 0.08), point(0.
|
|
56
|
-
middle = [point(0.
|
|
57
|
-
bottom = [point(0.
|
|
58
|
-
return top, middle, bottom
|
|
86
|
+
top = [point(0.5, 0.08), point(0.92, 0.35), point(0.5, 0.53), point(0.08, 0.35)]
|
|
87
|
+
middle = [point(0.5, 0.43), point(0.9, 0.64), point(0.5, 0.76), point(0.1, 0.64)]
|
|
88
|
+
bottom = [point(0.5, 0.67), point(0.86, 0.86), point(0.5, 0.96), point(0.14, 0.86)]
|
|
89
|
+
return top, middle, bottom
|
|
59
90
|
|
|
60
91
|
|
|
61
92
|
def draw_logo(draw: ImageDraw.ImageDraw, size: int, color: tuple[int, int, int, int]) -> None:
|
|
62
|
-
top, middle, bottom
|
|
63
|
-
stroke = max(2, round(inner * 0.08))
|
|
93
|
+
top, middle, bottom = logo_paths(size)
|
|
64
94
|
draw.polygon(top, fill=color)
|
|
65
|
-
draw.
|
|
66
|
-
draw.
|
|
95
|
+
draw.polygon(middle, fill=color)
|
|
96
|
+
draw.polygon(bottom, fill=color)
|
|
67
97
|
|
|
68
98
|
|
|
69
|
-
def make_app_icon(size: int) -> Image.Image:
|
|
99
|
+
def make_app_icon(size: int, *, light: bool = False) -> Image.Image:
|
|
70
100
|
canvas = Image.new("RGBA", (size, size), TRANSPARENT)
|
|
101
|
+
start = ACCENT if light else ACCENT_DARK
|
|
102
|
+
end = ACCENT_ALT if light else ACCENT_ALT_DARK
|
|
103
|
+
symbol = SYMBOL_LIGHT if light else WHITE
|
|
71
104
|
|
|
72
105
|
shadow = Image.new("RGBA", (size, size), TRANSPARENT)
|
|
73
106
|
shadow_draw = ImageDraw.Draw(shadow)
|
|
74
|
-
|
|
75
|
-
corner = round(size * 0.34)
|
|
107
|
+
corner = round(size * 0.3)
|
|
76
108
|
shadow_draw.rounded_rectangle(
|
|
77
|
-
(size * 0.
|
|
109
|
+
(size * 0.075, size * 0.09, size * 0.925, size * 0.94),
|
|
78
110
|
radius=corner,
|
|
79
|
-
fill=(0, 0, 0,
|
|
111
|
+
fill=(0, 0, 0, 64 if light else 86),
|
|
80
112
|
)
|
|
81
|
-
shadow = shadow.filter(ImageFilter.GaussianBlur(radius=max(2, size * 0.
|
|
113
|
+
shadow = shadow.filter(ImageFilter.GaussianBlur(radius=max(2, size * 0.035)))
|
|
82
114
|
canvas.alpha_composite(shadow)
|
|
83
115
|
|
|
84
116
|
base_mask = Image.new("L", (size, size), 0)
|
|
@@ -86,32 +118,92 @@ def make_app_icon(size: int) -> Image.Image:
|
|
|
86
118
|
base_rect = (size * 0.08, size * 0.08, size * 0.92, size * 0.92)
|
|
87
119
|
mask_draw.rounded_rectangle(base_rect, radius=corner, fill=255)
|
|
88
120
|
|
|
89
|
-
base = gradient_background(size)
|
|
121
|
+
base = gradient_background(size, start, end)
|
|
90
122
|
clipped = Image.new("RGBA", (size, size), TRANSPARENT)
|
|
91
123
|
clipped.paste(base, mask=base_mask)
|
|
92
124
|
canvas.alpha_composite(clipped)
|
|
93
125
|
|
|
126
|
+
shine = Image.new("RGBA", (size, size), TRANSPARENT)
|
|
127
|
+
shine_draw = ImageDraw.Draw(shine)
|
|
128
|
+
shine_draw.ellipse(
|
|
129
|
+
(size * -0.12, size * -0.18, size * 0.78, size * 0.58),
|
|
130
|
+
fill=(255, 255, 255, 30 if light else 42),
|
|
131
|
+
)
|
|
132
|
+
shine.putalpha(Image.composite(shine.getchannel("A"), Image.new("L", (size, size), 0), base_mask))
|
|
133
|
+
canvas.alpha_composite(shine)
|
|
134
|
+
|
|
135
|
+
lower_glaze = Image.new("RGBA", (size, size), TRANSPARENT)
|
|
136
|
+
lower_draw = ImageDraw.Draw(lower_glaze)
|
|
137
|
+
lower_draw.rounded_rectangle(
|
|
138
|
+
base_rect,
|
|
139
|
+
radius=corner,
|
|
140
|
+
fill=(0, 0, 0, 18 if light else 12),
|
|
141
|
+
)
|
|
142
|
+
lower_mask = Image.new("L", (size, size), 0)
|
|
143
|
+
lower_mask_draw = ImageDraw.Draw(lower_mask)
|
|
144
|
+
lower_mask_draw.rectangle((0, size * 0.55, size, size), fill=255)
|
|
145
|
+
lower_glaze.putalpha(Image.composite(lower_glaze.getchannel("A"), Image.new("L", (size, size), 0), lower_mask))
|
|
146
|
+
canvas.alpha_composite(lower_glaze)
|
|
147
|
+
|
|
94
148
|
ring = Image.new("RGBA", (size, size), TRANSPARENT)
|
|
95
149
|
ring_draw = ImageDraw.Draw(ring)
|
|
96
150
|
ring_draw.rounded_rectangle(
|
|
97
151
|
base_rect,
|
|
98
152
|
radius=corner,
|
|
99
|
-
outline=(255, 255, 255,
|
|
153
|
+
outline=(255, 255, 255, 58 if light else 48),
|
|
100
154
|
width=max(1, round(size * 0.012)),
|
|
101
155
|
)
|
|
156
|
+
inset = size * 0.018
|
|
157
|
+
ring_draw.rounded_rectangle(
|
|
158
|
+
(
|
|
159
|
+
base_rect[0] + inset,
|
|
160
|
+
base_rect[1] + inset,
|
|
161
|
+
base_rect[2] - inset,
|
|
162
|
+
base_rect[3] - inset,
|
|
163
|
+
),
|
|
164
|
+
radius=max(1, corner - round(inset)),
|
|
165
|
+
outline=(0, 0, 0, 26 if light else 20),
|
|
166
|
+
width=max(1, round(size * 0.006)),
|
|
167
|
+
)
|
|
102
168
|
canvas.alpha_composite(ring)
|
|
103
169
|
|
|
170
|
+
glyph_shadow = Image.new("RGBA", (size, size), TRANSPARENT)
|
|
171
|
+
shadow_draw = ImageDraw.Draw(glyph_shadow)
|
|
172
|
+
draw_logo(shadow_draw, size, (0, 0, 0, 76 if light else 58))
|
|
173
|
+
glyph_shadow = glyph_shadow.transform(
|
|
174
|
+
glyph_shadow.size,
|
|
175
|
+
Image.Transform.AFFINE,
|
|
176
|
+
(1, 0, 0, 0, 1, size * 0.018),
|
|
177
|
+
resample=Image.Resampling.BICUBIC,
|
|
178
|
+
)
|
|
179
|
+
glyph_shadow = glyph_shadow.filter(ImageFilter.GaussianBlur(radius=max(1, size * 0.006)))
|
|
180
|
+
canvas.alpha_composite(glyph_shadow)
|
|
181
|
+
|
|
104
182
|
glyph = Image.new("RGBA", (size, size), TRANSPARENT)
|
|
105
183
|
draw = ImageDraw.Draw(glyph)
|
|
106
|
-
draw_logo(draw, size,
|
|
184
|
+
draw_logo(draw, size, symbol)
|
|
107
185
|
canvas.alpha_composite(glyph)
|
|
186
|
+
|
|
187
|
+
glyph_highlight = Image.new("RGBA", (size, size), TRANSPARENT)
|
|
188
|
+
highlight_draw = ImageDraw.Draw(glyph_highlight)
|
|
189
|
+
draw_logo(highlight_draw, size, (255, 255, 255, 26 if light else 34))
|
|
190
|
+
glyph_highlight = glyph_highlight.transform(
|
|
191
|
+
glyph_highlight.size,
|
|
192
|
+
Image.Transform.AFFINE,
|
|
193
|
+
(1, 0, 0, 0, 1, -size * 0.012),
|
|
194
|
+
resample=Image.Resampling.BICUBIC,
|
|
195
|
+
)
|
|
196
|
+
canvas.alpha_composite(glyph_highlight)
|
|
108
197
|
return canvas
|
|
109
198
|
|
|
110
199
|
|
|
111
|
-
def make_tray_template(
|
|
200
|
+
def make_tray_template(
|
|
201
|
+
size: int = 64,
|
|
202
|
+
color: tuple[int, int, int, int] = (0, 0, 0, 255),
|
|
203
|
+
) -> Image.Image:
|
|
112
204
|
img = Image.new("RGBA", (size, size), TRANSPARENT)
|
|
113
205
|
draw = ImageDraw.Draw(img)
|
|
114
|
-
draw_logo(draw, size,
|
|
206
|
+
draw_logo(draw, size, color)
|
|
115
207
|
return img
|
|
116
208
|
|
|
117
209
|
|
|
@@ -121,6 +213,9 @@ def ensure_dirs() -> None:
|
|
|
121
213
|
MAC_ICON_DIR.mkdir(parents=True, exist_ok=True)
|
|
122
214
|
LINUX_ICON_DIR.mkdir(parents=True, exist_ok=True)
|
|
123
215
|
SERVER_PUBLIC_ICONS_DIR.mkdir(parents=True, exist_ok=True)
|
|
216
|
+
STATIC_IMG_DIR.mkdir(parents=True, exist_ok=True)
|
|
217
|
+
LANDING_LOGO_PATH.parent.mkdir(parents=True, exist_ok=True)
|
|
218
|
+
EXTENSION_LOGO_PATH.parent.mkdir(parents=True, exist_ok=True)
|
|
124
219
|
|
|
125
220
|
|
|
126
221
|
def write_text(path: Path, content: str) -> None:
|
|
@@ -132,18 +227,36 @@ def copy_png(image: Image.Image, path: Path, size: int) -> None:
|
|
|
132
227
|
save_png(image, path, size)
|
|
133
228
|
|
|
134
229
|
|
|
135
|
-
def write_favicon_svg(path: Path) -> None:
|
|
230
|
+
def write_favicon_svg(path: Path, *, light: bool = False) -> None:
|
|
231
|
+
start = ACCENT if light else ACCENT_DARK
|
|
232
|
+
end = ACCENT_ALT if light else ACCENT_ALT_DARK
|
|
233
|
+
symbol = "#fff9ed" if light else "#ffffff"
|
|
234
|
+
stroke = "#000000" if light else "#ffffff"
|
|
235
|
+
stroke_opacity = "0.24" if light else "0.16"
|
|
236
|
+
glow = "#ffffff" if light else "#fff4d8"
|
|
237
|
+
top_opacity = "0.20" if light else "0.24"
|
|
238
|
+
shade_opacity = "0.12" if light else "0.08"
|
|
136
239
|
svg = f"""<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
|
|
137
240
|
<defs>
|
|
138
241
|
<linearGradient id="bg" x1="0%" y1="0%" x2="100%" y2="100%">
|
|
139
|
-
<stop offset="0%" stop-color="#{
|
|
140
|
-
<stop offset="100%" stop-color="#{
|
|
242
|
+
<stop offset="0%" stop-color="#{start[0]:02x}{start[1]:02x}{start[2]:02x}"/>
|
|
243
|
+
<stop offset="100%" stop-color="#{end[0]:02x}{end[1]:02x}{end[2]:02x}"/>
|
|
141
244
|
</linearGradient>
|
|
245
|
+
<radialGradient id="shine" cx="24%" cy="15%" r="70%">
|
|
246
|
+
<stop offset="0%" stop-color="{glow}" stop-opacity="{top_opacity}"/>
|
|
247
|
+
<stop offset="100%" stop-color="{glow}" stop-opacity="0"/>
|
|
248
|
+
</radialGradient>
|
|
142
249
|
</defs>
|
|
143
|
-
<rect x="2.5" y="2.5" width="27" height="27" rx="9" ry="9" fill="url(#bg)" stroke="
|
|
144
|
-
<
|
|
145
|
-
<
|
|
146
|
-
<
|
|
250
|
+
<rect x="2.5" y="2.5" width="27" height="27" rx="9" ry="9" fill="url(#bg)" stroke="{stroke}" stroke-opacity="{stroke_opacity}" stroke-width="1"/>
|
|
251
|
+
<rect x="2.5" y="2.5" width="27" height="27" rx="9" ry="9" fill="url(#shine)"/>
|
|
252
|
+
<path d="M2.5 17h27v3.5c0 5-4 9-9 9h-9c-5 0-9-4-9-9Z" fill="#000000" opacity="{shade_opacity}"/>
|
|
253
|
+
<rect x="3" y="3" width="26" height="26" rx="8.5" ry="8.5" fill="none" stroke="#ffffff" stroke-opacity="0.18" stroke-width="1"/>
|
|
254
|
+
<path d="M16 6.25 26.15 12.3 16 16.3 5.85 12.3Z" fill="#000000" opacity="0.20" transform="translate(0 0.65)"/>
|
|
255
|
+
<path d="M16 14.75 25.85 19.45 16 22.25 6.15 19.45Z" fill="#000000" opacity="0.20" transform="translate(0 0.65)"/>
|
|
256
|
+
<path d="M16 20.45 24.85 24.75 16 26.85 7.15 24.75Z" fill="#000000" opacity="0.20" transform="translate(0 0.65)"/>
|
|
257
|
+
<path d="M16 5.7 26.8 12.1 16 16.5 5.2 12.1Z" fill="{symbol}"/>
|
|
258
|
+
<path d="M16 14.2 26.5 19.3 16 22.4 5.5 19.3Z" fill="{symbol}"/>
|
|
259
|
+
<path d="M16 20 25.4 24.6 16 27 6.6 24.6Z" fill="{symbol}"/>
|
|
147
260
|
</svg>
|
|
148
261
|
"""
|
|
149
262
|
write_text(path, svg)
|
|
@@ -156,6 +269,7 @@ def save_png(image: Image.Image, path: Path, size: int) -> None:
|
|
|
156
269
|
def main() -> None:
|
|
157
270
|
ensure_dirs()
|
|
158
271
|
master = make_app_icon(1024)
|
|
272
|
+
light_master = make_app_icon(1024, light=True)
|
|
159
273
|
|
|
160
274
|
save_png(master, BRANDING_DIR / "app_icon_1024.png", 1024)
|
|
161
275
|
save_png(master, BRANDING_DIR / "app_icon_512.png", 512)
|
|
@@ -164,9 +278,18 @@ def main() -> None:
|
|
|
164
278
|
save_png(master, BRANDING_DIR / "app_icon_128.png", 128)
|
|
165
279
|
save_png(master, BRANDING_DIR / "app_icon_64.png", 64)
|
|
166
280
|
save_png(master, BRANDING_DIR / "app_icon_32.png", 32)
|
|
281
|
+
save_png(light_master, BRANDING_DIR / "app_icon_light_1024.png", 1024)
|
|
282
|
+
save_png(light_master, BRANDING_DIR / "app_icon_light_512.png", 512)
|
|
283
|
+
save_png(light_master, BRANDING_DIR / "app_icon_light_256.png", 256)
|
|
284
|
+
save_png(light_master, BRANDING_DIR / "app_icon_light_192.png", 192)
|
|
285
|
+
save_png(light_master, BRANDING_DIR / "app_icon_light_128.png", 128)
|
|
286
|
+
save_png(light_master, BRANDING_DIR / "app_icon_light_64.png", 64)
|
|
287
|
+
save_png(light_master, BRANDING_DIR / "app_icon_light_32.png", 32)
|
|
167
288
|
|
|
168
289
|
tray = make_tray_template(64)
|
|
169
290
|
save_png(tray, BRANDING_DIR / "tray_icon_template.png", 64)
|
|
291
|
+
light_tray = make_tray_template(64, WHITE)
|
|
292
|
+
save_png(light_tray, BRANDING_DIR / "tray_icon_light_template.png", 64)
|
|
170
293
|
|
|
171
294
|
icon_sizes = {
|
|
172
295
|
16: "app_icon_16.png",
|
|
@@ -196,13 +319,24 @@ def main() -> None:
|
|
|
196
319
|
for size, filename in web_icon_sizes.items():
|
|
197
320
|
copy_png(master, WEB_ICONS_DIR / filename, size)
|
|
198
321
|
copy_png(master, WEB_ICONS_DIR / filename.replace("Icon-", "Icon-maskable-"), size)
|
|
322
|
+
copy_png(light_master, WEB_ICONS_DIR / filename.replace(".png", "-light.png"), size)
|
|
323
|
+
copy_png(light_master, WEB_ICONS_DIR / filename.replace("Icon-", "Icon-maskable-").replace(".png", "-light.png"), size)
|
|
199
324
|
copy_png(master, SERVER_PUBLIC_ICONS_DIR / filename, size)
|
|
200
325
|
copy_png(master, SERVER_PUBLIC_ICONS_DIR / filename.replace("Icon-", "Icon-maskable-"), size)
|
|
201
326
|
|
|
202
327
|
copy_png(master, WEB_DIR / "favicon.png", 32)
|
|
203
328
|
copy_png(master, SERVER_PUBLIC_DIR / "favicon.png", 32)
|
|
204
329
|
write_favicon_svg(WEB_DIR / "favicon.svg")
|
|
330
|
+
write_favicon_svg(WEB_DIR / "favicon_light.svg", light=True)
|
|
205
331
|
write_favicon_svg(SERVER_PUBLIC_DIR / "favicon.svg")
|
|
332
|
+
write_favicon_svg(SERVER_PUBLIC_DIR / "favicon_light.svg", light=True)
|
|
333
|
+
write_favicon_svg(LANDING_LOGO_PATH, light=True)
|
|
334
|
+
write_favicon_svg(EXTENSION_LOGO_PATH)
|
|
335
|
+
copy_png(master, STATIC_IMG_DIR / "app_icon.png", 512)
|
|
336
|
+
copy_png(light_master, STATIC_IMG_DIR / "app_icon_light.png", 512)
|
|
337
|
+
copy_png(master, SERVER_PUBLIC_DIR / "assets" / "assets" / "branding" / "app_icon_256.png", 256)
|
|
338
|
+
copy_png(tray, SERVER_PUBLIC_DIR / "assets" / "assets" / "branding" / "tray_icon_template.png", 64)
|
|
339
|
+
copy_png(master, SERVER_PUBLIC_DIR / "assets" / "web" / "icons" / "Icon-192.png", 192)
|
|
206
340
|
|
|
207
341
|
android_icon_sizes = {
|
|
208
342
|
"mipmap-mdpi": 48,
|
|
Binary file
|
|
@@ -1,3 +1,22 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg"
|
|
2
|
-
<
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
|
|
2
|
+
<defs>
|
|
3
|
+
<linearGradient id="bg" x1="0%" y1="0%" x2="100%" y2="100%">
|
|
4
|
+
<stop offset="0%" stop-color="#9e8052"/>
|
|
5
|
+
<stop offset="100%" stop-color="#439081"/>
|
|
6
|
+
</linearGradient>
|
|
7
|
+
<radialGradient id="shine" cx="24%" cy="15%" r="70%">
|
|
8
|
+
<stop offset="0%" stop-color="#fff4d8" stop-opacity="0.24"/>
|
|
9
|
+
<stop offset="100%" stop-color="#fff4d8" stop-opacity="0"/>
|
|
10
|
+
</radialGradient>
|
|
11
|
+
</defs>
|
|
12
|
+
<rect x="2.5" y="2.5" width="27" height="27" rx="9" ry="9" fill="url(#bg)" stroke="#ffffff" stroke-opacity="0.16" stroke-width="1"/>
|
|
13
|
+
<rect x="2.5" y="2.5" width="27" height="27" rx="9" ry="9" fill="url(#shine)"/>
|
|
14
|
+
<path d="M2.5 17h27v3.5c0 5-4 9-9 9h-9c-5 0-9-4-9-9Z" fill="#000000" opacity="0.08"/>
|
|
15
|
+
<rect x="3" y="3" width="26" height="26" rx="8.5" ry="8.5" fill="none" stroke="#ffffff" stroke-opacity="0.18" stroke-width="1"/>
|
|
16
|
+
<path d="M16 6.25 26.15 12.3 16 16.3 5.85 12.3Z" fill="#000000" opacity="0.20" transform="translate(0 0.65)"/>
|
|
17
|
+
<path d="M16 14.75 25.85 19.45 16 22.25 6.15 19.45Z" fill="#000000" opacity="0.20" transform="translate(0 0.65)"/>
|
|
18
|
+
<path d="M16 20.45 24.85 24.75 16 26.85 7.15 24.75Z" fill="#000000" opacity="0.20" transform="translate(0 0.65)"/>
|
|
19
|
+
<path d="M16 5.7 26.8 12.1 16 16.5 5.2 12.1Z" fill="#ffffff"/>
|
|
20
|
+
<path d="M16 14.2 26.5 19.3 16 22.4 5.5 19.3Z" fill="#ffffff"/>
|
|
21
|
+
<path d="M16 20 25.4 24.6 16 27 6.6 24.6Z" fill="#ffffff"/>
|
|
3
22
|
</svg>
|
|
@@ -1,3 +1,22 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg"
|
|
2
|
-
<
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
|
|
2
|
+
<defs>
|
|
3
|
+
<linearGradient id="bg" x1="0%" y1="0%" x2="100%" y2="100%">
|
|
4
|
+
<stop offset="0%" stop-color="#684e2c"/>
|
|
5
|
+
<stop offset="100%" stop-color="#235c52"/>
|
|
6
|
+
</linearGradient>
|
|
7
|
+
<radialGradient id="shine" cx="24%" cy="15%" r="70%">
|
|
8
|
+
<stop offset="0%" stop-color="#ffffff" stop-opacity="0.20"/>
|
|
9
|
+
<stop offset="100%" stop-color="#ffffff" stop-opacity="0"/>
|
|
10
|
+
</radialGradient>
|
|
11
|
+
</defs>
|
|
12
|
+
<rect x="2.5" y="2.5" width="27" height="27" rx="9" ry="9" fill="url(#bg)" stroke="#000000" stroke-opacity="0.24" stroke-width="1"/>
|
|
13
|
+
<rect x="2.5" y="2.5" width="27" height="27" rx="9" ry="9" fill="url(#shine)"/>
|
|
14
|
+
<path d="M2.5 17h27v3.5c0 5-4 9-9 9h-9c-5 0-9-4-9-9Z" fill="#000000" opacity="0.12"/>
|
|
15
|
+
<rect x="3" y="3" width="26" height="26" rx="8.5" ry="8.5" fill="none" stroke="#ffffff" stroke-opacity="0.18" stroke-width="1"/>
|
|
16
|
+
<path d="M16 6.25 26.15 12.3 16 16.3 5.85 12.3Z" fill="#000000" opacity="0.20" transform="translate(0 0.65)"/>
|
|
17
|
+
<path d="M16 14.75 25.85 19.45 16 22.25 6.15 19.45Z" fill="#000000" opacity="0.20" transform="translate(0 0.65)"/>
|
|
18
|
+
<path d="M16 20.45 24.85 24.75 16 26.85 7.15 24.75Z" fill="#000000" opacity="0.20" transform="translate(0 0.65)"/>
|
|
19
|
+
<path d="M16 5.7 26.8 12.1 16 16.5 5.2 12.1Z" fill="#fff9ed"/>
|
|
20
|
+
<path d="M16 14.2 26.5 19.3 16 22.4 5.5 19.3Z" fill="#fff9ed"/>
|
|
21
|
+
<path d="M16 20 25.4 24.6 16 27 6.6 24.6Z" fill="#fff9ed"/>
|
|
3
22
|
</svg>
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -28,10 +28,16 @@ int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev,
|
|
|
28
28
|
Win32Window::Point origin(10, 10);
|
|
29
29
|
Win32Window::Size size(1280, 720);
|
|
30
30
|
if (!window.Create(L"NeoAgent", origin, size)) {
|
|
31
|
+
::MessageBoxW(nullptr,
|
|
32
|
+
L"NeoAgent failed to start. The Flutter engine could not be "
|
|
33
|
+
L"initialized. Ensure the application was installed correctly "
|
|
34
|
+
L"and all required files are present.",
|
|
35
|
+
L"NeoAgent — Startup Error",
|
|
36
|
+
MB_OK | MB_ICONERROR);
|
|
31
37
|
::CoUninitialize();
|
|
32
38
|
return EXIT_FAILURE;
|
|
33
39
|
}
|
|
34
|
-
window.SetQuitOnClose(
|
|
40
|
+
window.SetQuitOnClose(true);
|
|
35
41
|
|
|
36
42
|
::MSG msg;
|
|
37
43
|
while (true) {
|
|
Binary file
|
package/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
2285030b457380c855d32a3568048ed7
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -1,3 +1,22 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg"
|
|
2
|
-
<
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
|
|
2
|
+
<defs>
|
|
3
|
+
<linearGradient id="bg" x1="0%" y1="0%" x2="100%" y2="100%">
|
|
4
|
+
<stop offset="0%" stop-color="#9e8052"/>
|
|
5
|
+
<stop offset="100%" stop-color="#439081"/>
|
|
6
|
+
</linearGradient>
|
|
7
|
+
<radialGradient id="shine" cx="24%" cy="15%" r="70%">
|
|
8
|
+
<stop offset="0%" stop-color="#fff4d8" stop-opacity="0.24"/>
|
|
9
|
+
<stop offset="100%" stop-color="#fff4d8" stop-opacity="0"/>
|
|
10
|
+
</radialGradient>
|
|
11
|
+
</defs>
|
|
12
|
+
<rect x="2.5" y="2.5" width="27" height="27" rx="9" ry="9" fill="url(#bg)" stroke="#ffffff" stroke-opacity="0.16" stroke-width="1"/>
|
|
13
|
+
<rect x="2.5" y="2.5" width="27" height="27" rx="9" ry="9" fill="url(#shine)"/>
|
|
14
|
+
<path d="M2.5 17h27v3.5c0 5-4 9-9 9h-9c-5 0-9-4-9-9Z" fill="#000000" opacity="0.08"/>
|
|
15
|
+
<rect x="3" y="3" width="26" height="26" rx="8.5" ry="8.5" fill="none" stroke="#ffffff" stroke-opacity="0.18" stroke-width="1"/>
|
|
16
|
+
<path d="M16 6.25 26.15 12.3 16 16.3 5.85 12.3Z" fill="#000000" opacity="0.20" transform="translate(0 0.65)"/>
|
|
17
|
+
<path d="M16 14.75 25.85 19.45 16 22.25 6.15 19.45Z" fill="#000000" opacity="0.20" transform="translate(0 0.65)"/>
|
|
18
|
+
<path d="M16 20.45 24.85 24.75 16 26.85 7.15 24.75Z" fill="#000000" opacity="0.20" transform="translate(0 0.65)"/>
|
|
19
|
+
<path d="M16 5.7 26.8 12.1 16 16.5 5.2 12.1Z" fill="#ffffff"/>
|
|
20
|
+
<path d="M16 14.2 26.5 19.3 16 22.4 5.5 19.3Z" fill="#ffffff"/>
|
|
21
|
+
<path d="M16 20 25.4 24.6 16 27 6.6 24.6Z" fill="#ffffff"/>
|
|
3
22
|
</svg>
|
|
@@ -1,3 +1,22 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg"
|
|
2
|
-
<
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
|
|
2
|
+
<defs>
|
|
3
|
+
<linearGradient id="bg" x1="0%" y1="0%" x2="100%" y2="100%">
|
|
4
|
+
<stop offset="0%" stop-color="#684e2c"/>
|
|
5
|
+
<stop offset="100%" stop-color="#235c52"/>
|
|
6
|
+
</linearGradient>
|
|
7
|
+
<radialGradient id="shine" cx="24%" cy="15%" r="70%">
|
|
8
|
+
<stop offset="0%" stop-color="#ffffff" stop-opacity="0.20"/>
|
|
9
|
+
<stop offset="100%" stop-color="#ffffff" stop-opacity="0"/>
|
|
10
|
+
</radialGradient>
|
|
11
|
+
</defs>
|
|
12
|
+
<rect x="2.5" y="2.5" width="27" height="27" rx="9" ry="9" fill="url(#bg)" stroke="#000000" stroke-opacity="0.24" stroke-width="1"/>
|
|
13
|
+
<rect x="2.5" y="2.5" width="27" height="27" rx="9" ry="9" fill="url(#shine)"/>
|
|
14
|
+
<path d="M2.5 17h27v3.5c0 5-4 9-9 9h-9c-5 0-9-4-9-9Z" fill="#000000" opacity="0.12"/>
|
|
15
|
+
<rect x="3" y="3" width="26" height="26" rx="8.5" ry="8.5" fill="none" stroke="#ffffff" stroke-opacity="0.18" stroke-width="1"/>
|
|
16
|
+
<path d="M16 6.25 26.15 12.3 16 16.3 5.85 12.3Z" fill="#000000" opacity="0.20" transform="translate(0 0.65)"/>
|
|
17
|
+
<path d="M16 14.75 25.85 19.45 16 22.25 6.15 19.45Z" fill="#000000" opacity="0.20" transform="translate(0 0.65)"/>
|
|
18
|
+
<path d="M16 20.45 24.85 24.75 16 26.85 7.15 24.75Z" fill="#000000" opacity="0.20" transform="translate(0 0.65)"/>
|
|
19
|
+
<path d="M16 5.7 26.8 12.1 16 16.5 5.2 12.1Z" fill="#fff9ed"/>
|
|
20
|
+
<path d="M16 14.2 26.5 19.3 16 22.4 5.5 19.3Z" fill="#fff9ed"/>
|
|
21
|
+
<path d="M16 20 25.4 24.6 16 27 6.6 24.6Z" fill="#fff9ed"/>
|
|
3
22
|
</svg>
|
|
@@ -37,6 +37,6 @@ _flutter.buildConfig = {"engineRevision":"4c525dac5ebe5971c5708ef73558ed8edcf4a3
|
|
|
37
37
|
|
|
38
38
|
_flutter.loader.load({
|
|
39
39
|
serviceWorkerSettings: {
|
|
40
|
-
serviceWorkerVersion: "
|
|
40
|
+
serviceWorkerVersion: "4078228684" /* Flutter's service worker is deprecated and will be removed in a future Flutter release. */
|
|
41
41
|
}
|
|
42
42
|
});
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -132757,7 +132757,7 @@ r===$&&A.b()
|
|
|
132757
132757
|
o.push(A.jJ(p,A.j7(!1,new A.a3(B.uk,A.e1(new A.cJ(B.ho,new A.a7e(r,p),p),p,p),p),!1,B.H,!0),p,p,0,0,0,p))}r=!1
|
|
132758
132758
|
if(!s.ay)if(!s.ch){r=s.e
|
|
132759
132759
|
r===$&&A.b()
|
|
132760
|
-
r=B.b.t("
|
|
132760
|
+
r=B.b.t("mppvjj3c-da55ad8").length!==0&&r.b}if(r){r=s.d
|
|
132761
132761
|
r===$&&A.b()
|
|
132762
132762
|
r=r.ad&&!r.Z?84:0
|
|
132763
132763
|
q=s.e
|
|
@@ -138212,7 +138212,7 @@ $S:0}
|
|
|
138212
138212
|
A.ZH.prototype={}
|
|
138213
138213
|
A.Sw.prototype={
|
|
138214
138214
|
nc(a){var s=this
|
|
138215
|
-
if(B.b.t("
|
|
138215
|
+
if(B.b.t("mppvjj3c-da55ad8").length===0||s.a!=null)return
|
|
138216
138216
|
s.AH()
|
|
138217
138217
|
s.a=A.qf(B.R3,new A.b9B(s))},
|
|
138218
138218
|
AH(){var s=0,r=A.l(t.H),q,p=2,o=[],n=this,m,l,k,j,i,h,g,f
|
|
@@ -138230,7 +138230,7 @@ if(!t.f.b(k)){s=1
|
|
|
138230
138230
|
break}i=J.U(k,"buildId")
|
|
138231
138231
|
h=i==null?null:B.b.t(J.p(i))
|
|
138232
138232
|
j=h==null?"":h
|
|
138233
|
-
if(J.bj(j)===0||J.d(j,"
|
|
138233
|
+
if(J.bj(j)===0||J.d(j,"mppvjj3c-da55ad8")){s=1
|
|
138234
138234
|
break}n.b=!0
|
|
138235
138235
|
n.F()
|
|
138236
138236
|
p=2
|
|
@@ -138247,7 +138247,7 @@ case 2:return A.i(o.at(-1),r)}})
|
|
|
138247
138247
|
return A.k($async$AH,r)},
|
|
138248
138248
|
vs(){var s=0,r=A.l(t.H),q,p=2,o=[],n=this,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1
|
|
138249
138249
|
var $async$vs=A.h(function(a2,a3){if(a2===1){o.push(a3)
|
|
138250
|
-
s=p}for(;;)switch(s){case 0:if(B.b.t("
|
|
138250
|
+
s=p}for(;;)switch(s){case 0:if(B.b.t("mppvjj3c-da55ad8").length===0||n.c){s=1
|
|
138251
138251
|
break}n.c=!0
|
|
138252
138252
|
n.F()
|
|
138253
138253
|
p=4
|