2 files changed
+41
src/App.css
+9
@@ -451,6 +451,15 @@ html, body {
451
color: var(--text-secondary);
452
}
453
454
+.row-link {
455
+ text-decoration: none;
456
+}
457
+
458
+.row-link:hover,
459
+.row-link:active {
460
+ color: var(--text-primary);
461
+}
462
+
463
.select-wrap {
464
position: relative;
465
display: flex;
src/Settings.tsx
+32
@@ -1,6 +1,7 @@
1
import { useEffect, useMemo, useState } from "react";
2
import type { ChatStatus, ModelInfo } from "./api";
3
import { formatSize, getAppVersion, getBuildVersion } from "./api";
4
+import { openUrl } from "@tauri-apps/plugin-opener";
5
6
interface SettingsProps {
7
open: boolean;
@@ -41,6 +42,11 @@ export default function Settings({
42
const busy = status === "loading";
43
const line = statusLine(status, statusError);
44
45
+ const handleOpenUrl = (url: string) => (e: React.MouseEvent) => {
46
+ e.preventDefault();
47
+ void openUrl(url);
48
+ };
49
+
50
// Real app version (CFBundleShortVersionString) and build number
51
// (CFBundleVersion), read from the bundle rather than hardcoded.
52
const [appVersion, setAppVersion] = useState("");
@@ -134,6 +140,32 @@ export default function Settings({
140
<span className="row-value">On-device · private</span>
141
</div>
142
</div>
143
+ </section>
144
+
145
+ <section className="settings-section">
146
+ <p className="section-label">Contact</p>
147
+ <div className="settings-card about">
148
+ <div className="settings-row">
149
+ <span className="row-label">GitHub</span>
150
+ <a
151
+ className="row-value row-link"
152
+ href="https://github.com/ondeinference/sitiai"
153
+ onClick={handleOpenUrl("https://github.com/ondeinference/sitiai")}
154
+ >
155
+ ondeinference/sitiai
156
+ </a>
157
+ </div>
158
+ <div className="settings-row">
159
+ <span className="row-label">Website</span>
160
+ <a
161
+ className="row-value row-link"
162
+ href="https://getsiti.5mb.app"
163
+ onClick={handleOpenUrl("https://getsiti.5mb.app")}
164
+ >
165
+ https://getsiti.5mb.app
166
+ </a>
167
+ </div>
168
+ </div>
169
<p className="settings-note">Profoundly personal. Entirely private.</p>
170
</section>
171
</div>