dialog-settings-v2.tsx 3.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. import { Component, createSignal, startTransition } from "solid-js"
  2. import { Dialog } from "@kirincode-ai/ui/v2/dialog-v2"
  3. import { TabsV2 } from "@kirincode-ai/ui/v2/tabs-v2"
  4. import { Icon } from "@kirincode-ai/ui/icon"
  5. import { useLanguage } from "@/context/language"
  6. import { usePlatform } from "@/context/platform"
  7. import { SettingsGeneralV2 } from "./general"
  8. import { SettingsKeybinds } from "../settings-keybinds"
  9. import { SettingsProvidersV2 } from "./providers"
  10. import { SettingsModelsV2 } from "./models"
  11. import "./settings-v2.css"
  12. import { SettingsServersV2 } from "./servers"
  13. import { useDialog } from "@kirincode-ai/ui/context/dialog"
  14. export const DialogSettings: Component<{
  15. sessionID?: string
  16. defaultValue?: string
  17. }> = (props) => {
  18. const language = useLanguage()
  19. const platform = usePlatform()
  20. const dialog = useDialog()
  21. const [tab, setTab] = createSignal(props.defaultValue ?? "general")
  22. const showProviders = () => {
  23. void dialog.show(() => <DialogSettings sessionID={props.sessionID} defaultValue="providers" />)
  24. }
  25. return (
  26. <Dialog size="x-large" variant="settings" class="settings-v2-dialog">
  27. <TabsV2
  28. orientation="vertical"
  29. variant="settings"
  30. value={tab()}
  31. onChange={(value) => void startTransition(() => setTab(value))}
  32. class="settings-v2"
  33. >
  34. <TabsV2.List>
  35. <div class="flex flex-col justify-between h-full w-full">
  36. <div class="flex flex-col gap-3 w-full">
  37. <div class="flex flex-col gap-3">
  38. <div class="flex flex-col gap-1.5">
  39. <TabsV2.SectionTitle>{language.t("settings.section.desktop")}</TabsV2.SectionTitle>
  40. <div class="flex flex-col gap-1.5 w-full">
  41. <TabsV2.Trigger value="general">
  42. <Icon name="sliders" />
  43. {language.t("settings.tab.general")}
  44. </TabsV2.Trigger>
  45. <TabsV2.Trigger value="shortcuts">
  46. <Icon name="keyboard" />
  47. {language.t("settings.tab.shortcuts")}
  48. </TabsV2.Trigger>
  49. </div>
  50. </div>
  51. <div class="flex flex-col gap-1.5">
  52. <TabsV2.SectionTitle>{language.t("settings.section.server")}</TabsV2.SectionTitle>
  53. <div class="flex flex-col gap-1.5 w-full">
  54. <TabsV2.Trigger value="servers">
  55. <Icon name="server" />
  56. {language.t("status.popover.tab.servers")}
  57. </TabsV2.Trigger>
  58. <TabsV2.Trigger value="providers">
  59. <Icon name="providers" />
  60. {language.t("settings.providers.title")}
  61. </TabsV2.Trigger>
  62. <TabsV2.Trigger value="models">
  63. <Icon name="models" />
  64. {language.t("settings.models.title")}
  65. </TabsV2.Trigger>
  66. </div>
  67. </div>
  68. </div>
  69. </div>
  70. <div class="settings-v2-nav-footer">
  71. <span>{language.t("app.name.desktop")}</span>
  72. <span>v{platform.version}</span>
  73. </div>
  74. </div>
  75. </TabsV2.List>
  76. <TabsV2.Content value="general" class="settings-v2-panel">
  77. <SettingsGeneralV2 sessionID={props.sessionID} />
  78. </TabsV2.Content>
  79. <TabsV2.Content value="shortcuts" class="settings-v2-panel">
  80. <SettingsKeybinds v2 />
  81. </TabsV2.Content>
  82. <TabsV2.Content value="servers" class="settings-v2-panel">
  83. <SettingsServersV2 />
  84. </TabsV2.Content>
  85. <TabsV2.Content value="providers" class="settings-v2-panel">
  86. <SettingsProvidersV2 onBack={showProviders} />
  87. </TabsV2.Content>
  88. <TabsV2.Content value="models" class="settings-v2-panel">
  89. <SettingsModelsV2 />
  90. </TabsV2.Content>
  91. </TabsV2>
  92. </Dialog>
  93. )
  94. }