+ assertSetting.onChange(event.target.value as T[keyof T])}
+ label={assertSetting.label}
+ />
+ )
+ break
}
default: {
return null
diff --git a/src/renderer/src/modules/settings/tabs/integration.tsx b/src/renderer/src/modules/settings/tabs/integration.tsx
new file mode 100644
index 000000000..272886107
--- /dev/null
+++ b/src/renderer/src/modules/settings/tabs/integration.tsx
@@ -0,0 +1,90 @@
+import { createSetting } from "@renderer/atoms/settings/helper"
+import {
+ setIntegrationSetting,
+ useIntegrationSettingValue,
+} from "@renderer/atoms/settings/integration"
+import {
+ createDefaultSettings,
+ setUISetting,
+ useUISettingSelector,
+} from "@renderer/atoms/settings/ui"
+import { SimpleIconsEagle, SimpleIconsReadwise } from "@renderer/components/ui/platform-icon/icons"
+import {
+ Select,
+ SelectContent,
+ SelectItem,
+ SelectTrigger,
+ SelectValue,
+} from "@renderer/components/ui/select"
+import { tipcClient } from "@renderer/lib/client"
+import { useQuery } from "@tanstack/react-query"
+
+import { SettingsTitle } from "../title"
+
+const { defineSettingItem, SettingBuilder } = createSetting(
+ useIntegrationSettingValue,
+ setIntegrationSetting,
+)
+export const SettingIntegration = () => (
+ <>
+
+
+
Eagle,
+ },
+ defineSettingItem("enableEagle", {
+ label: "Enable",
+ description: <>Display Save media to Eagle button when available.>,
+ }),
+ {
+ type: "title",
+ value: Readwise,
+ },
+ defineSettingItem("enableReadwise", {
+ label: "Enable",
+ description: <>Display Save to Readwise button when available.>,
+ }),
+ defineSettingItem("readwiseToken", {
+ label: "Readwise Access Token",
+ description: <>You can get it here: readwise.io/access_token.>,
+ }),
+ ]}
+ />
+
+ >
+)
+
+export const VoiceSelector = () => {
+ const { data } = useQuery({
+ queryFn: () => tipcClient?.getVoices(),
+ queryKey: ["voices"],
+ })
+ const voice = useUISettingSelector((state) => state.voice)
+
+ return (
+
+ Voices
+
+
+ )
+}
diff --git a/src/renderer/src/pages/settings/(settings)/integration.tsx b/src/renderer/src/pages/settings/(settings)/integration.tsx
new file mode 100644
index 000000000..b96519afe
--- /dev/null
+++ b/src/renderer/src/pages/settings/(settings)/integration.tsx
@@ -0,0 +1,16 @@
+import { SettingIntegration } from "@renderer/modules/settings/tabs/integration"
+import { defineSettingPage } from "@renderer/modules/settings/utils"
+
+const iconName = "i-mgc-department-cute-re"
+const name = "Integration"
+const priority = 1025
+
+export const loader = defineSettingPage({
+ iconName,
+ name,
+ priority,
+})
+
+export function Component() {
+ return
+}
diff --git a/src/shared/src/interface/settings.ts b/src/shared/src/interface/settings.ts
index 2ea53125f..f4f92c387 100644
--- a/src/shared/src/interface/settings.ts
+++ b/src/shared/src/interface/settings.ts
@@ -33,3 +33,9 @@ export interface UISettings {
// tts
voice: string
}
+
+export interface IntegrationSettings {
+ enableEagle: boolean
+ enableReadwise: boolean
+ readwiseToken: string
+}