Browse Source

去掉深色模式样式,显示出来侧边对话记录

master
mk 1 year ago
parent
commit
c78fac09f5
  1. 22
      src/lib/components/AddConnectionModal.svelte
  2. 4
      src/lib/components/AddFilesPlaceholder.svelte
  3. 14
      src/lib/components/ChangelogModal.svelte
  4. 4
      src/lib/components/NotificationToast.svelte
  5. 2
      src/lib/components/admin/Evaluations.svelte
  6. 4
      src/lib/components/admin/Evaluations/FeedbackMenu.svelte
  7. 26
      src/lib/components/admin/Evaluations/Feedbacks.svelte
  8. 18
      src/lib/components/admin/Evaluations/Leaderboard.svelte
  9. 24
      src/lib/components/admin/Functions.svelte
  10. 8
      src/lib/components/admin/Functions/FunctionEditor.svelte
  11. 16
      src/lib/components/admin/Functions/FunctionMenu.svelte
  12. 2
      src/lib/components/admin/Settings.svelte
  13. 50
      src/lib/components/admin/Settings/Audio.svelte
  14. 12
      src/lib/components/admin/Settings/CodeExecution.svelte
  15. 10
      src/lib/components/admin/Settings/Connections.svelte
  16. 4
      src/lib/components/admin/Settings/Connections/ManageOllamaModal.svelte
  17. 4
      src/lib/components/admin/Settings/Connections/OllamaConnection.svelte
  18. 2
      src/lib/components/admin/Settings/Connections/OpenAIConnection.svelte
  19. 10
      src/lib/components/admin/Settings/Database.svelte
  20. 44
      src/lib/components/admin/Settings/Documents.svelte
  21. 4
      src/lib/components/admin/Settings/Evaluations.svelte
  22. 24
      src/lib/components/admin/Settings/Evaluations/ArenaModelModal.svelte
  23. 2
      src/lib/components/admin/Settings/Evaluations/Model.svelte
  24. 22
      src/lib/components/admin/Settings/General.svelte
  25. 34
      src/lib/components/admin/Settings/Images.svelte
  26. 22
      src/lib/components/admin/Settings/Interface.svelte
  27. 12
      src/lib/components/admin/Settings/Models.svelte
  28. 14
      src/lib/components/admin/Settings/Models/ConfigureModelsModal.svelte
  29. 2
      src/lib/components/admin/Settings/Models/Manage/ManageMultipleOllama.svelte
  30. 30
      src/lib/components/admin/Settings/Models/Manage/ManageOllama.svelte
  31. 6
      src/lib/components/admin/Settings/Models/ManageModelsModal.svelte
  32. 26
      src/lib/components/admin/Settings/Pipelines.svelte
  33. 24
      src/lib/components/admin/Settings/WebSearch.svelte
  34. 2
      src/lib/components/admin/Users.svelte
  35. 14
      src/lib/components/admin/Users/Groups.svelte
  36. 10
      src/lib/components/admin/Users/Groups/AddGroupModal.svelte
  37. 6
      src/lib/components/admin/Users/Groups/Display.svelte
  38. 10
      src/lib/components/admin/Users/Groups/EditGroupModal.svelte
  39. 2
      src/lib/components/admin/Users/Groups/GroupItem.svelte
  40. 10
      src/lib/components/admin/Users/Groups/Permissions.svelte
  41. 14
      src/lib/components/admin/Users/UserList.svelte
  42. 14
      src/lib/components/admin/Users/UserList/AddUserModal.svelte
  43. 14
      src/lib/components/admin/Users/UserList/EditUserModal.svelte
  44. 10
      src/lib/components/admin/Users/UserList/UserChatsModal.svelte
  45. 2
      src/lib/components/app/AppSidebar.svelte
  46. 2
      src/lib/components/channel/Channel.svelte
  47. 12
      src/lib/components/channel/MessageInput.svelte
  48. 6
      src/lib/components/channel/MessageInput/InputMenu.svelte
  49. 22
      src/lib/components/channel/Messages/Message.svelte
  50. 2
      src/lib/components/channel/Messages/Message/ProfilePreview.svelte
  51. 8
      src/lib/components/channel/Messages/Message/ReactionPicker.svelte
  52. 17
      src/lib/components/channel/Navbar.svelte
  53. 4
      src/lib/components/channel/Thread.svelte
  54. 20
      src/lib/components/chat/Artifacts.svelte
  55. 4
      src/lib/components/chat/ChatControls.svelte
  56. 4
      src/lib/components/chat/ChatPlaceholder.svelte
  57. 18
      src/lib/components/chat/ContentRenderer/FloatingButtons.svelte
  58. 14
      src/lib/components/chat/Controls/Controls.svelte
  59. 24
      src/lib/components/chat/MessageInput.svelte
  60. 4
      src/lib/components/chat/MessageInput/CallOverlay.svelte
  61. 4
      src/lib/components/chat/MessageInput/CallOverlay/VideoInputMenu.svelte
  62. 4
      src/lib/components/chat/MessageInput/Commands.svelte
  63. 32
      src/lib/components/chat/MessageInput/Commands/Knowledge.svelte
  64. 8
      src/lib/components/chat/MessageInput/Commands/Models.svelte
  65. 12
      src/lib/components/chat/MessageInput/Commands/Prompts.svelte
  66. 8
      src/lib/components/chat/MessageInput/InputMenu.svelte
  67. 4
      src/lib/components/chat/MessageInput/VoiceRecording.svelte
  68. 8
      src/lib/components/chat/Messages/Citations.svelte
  69. 24
      src/lib/components/chat/Messages/CitationsModal.svelte
  70. 18
      src/lib/components/chat/Messages/CodeBlock.svelte
  71. 10
      src/lib/components/chat/Messages/CodeExecutionModal.svelte
  72. 2
      src/lib/components/chat/Messages/CodeExecutions.svelte
  73. 12
      src/lib/components/chat/Messages/Markdown/MarkdownTokens.svelte
  74. 2
      src/lib/components/chat/Messages/Markdown/Source.svelte
  75. 6
      src/lib/components/chat/Messages/MultiResponseMessages.svelte
  76. 8
      src/lib/components/chat/Messages/RateComment.svelte
  77. 26
      src/lib/components/chat/Messages/ResponseMessage.svelte
  78. 6
      src/lib/components/chat/Messages/ResponseMessage/WebSearchResults.svelte
  79. 18
      src/lib/components/chat/Messages/UserMessage.svelte
  80. 26
      src/lib/components/chat/ModelSelector/Selector.svelte
  81. 28
      src/lib/components/chat/Navbar.svelte
  82. 2
      src/lib/components/chat/Overview.svelte
  83. 6
      src/lib/components/chat/Overview/Node.svelte
  84. 4
      src/lib/components/chat/Placeholder.svelte
  85. 14
      src/lib/components/chat/Settings/About.svelte
  86. 22
      src/lib/components/chat/Settings/Account.svelte
  87. 8
      src/lib/components/chat/Settings/Account/UpdatePassword.svelte
  88. 6
      src/lib/components/chat/Settings/Advanced/AdvancedParams.svelte
  89. 10
      src/lib/components/chat/Settings/Audio.svelte
  90. 10
      src/lib/components/chat/Settings/Chats.svelte
  91. 2
      src/lib/components/chat/Settings/Connections.svelte
  92. 2
      src/lib/components/chat/Settings/Connections/Connection.svelte
  93. 10
      src/lib/components/chat/Settings/General.svelte
  94. 2
      src/lib/components/chat/Settings/Interface.svelte
  95. 4
      src/lib/components/chat/Settings/Personalization.svelte
  96. 4
      src/lib/components/chat/Settings/Personalization/AddMemoryModal.svelte
  97. 4
      src/lib/components/chat/Settings/Personalization/EditMemoryModal.svelte
  98. 10
      src/lib/components/chat/Settings/Personalization/ManageModal.svelte
  99. 8
      src/lib/components/chat/SettingsModal.svelte
  100. 8
      src/lib/components/chat/ShareChatModal.svelte

22
src/lib/components/AddConnectionModal.svelte

@ -126,7 +126,7 @@
<Modal size="sm" bind:show>
<div>
<div class=" flex justify-between dark:text-gray-100 px-5 pt-4 pb-2">
<div class=" flex justify-between px-5 pt-4 pb-2">
<div class=" text-lg font-medium self-center font-primary">
{#if edit}
{$i18n.t('Edit Connection')}
@ -153,7 +153,7 @@
</button>
</div>
<div class="flex flex-col md:flex-row w-full px-4 pb-4 md:space-x-4 dark:text-gray-200">
<div class="flex flex-col md:flex-row w-full px-4 pb-4 md:space-x-4 ">
<div class=" flex flex-col w-full sm:flex-row sm:justify-center sm:space-x-6">
<form
class="flex flex-col w-full"
@ -169,7 +169,7 @@
<div class="flex-1">
<input
class="w-full text-sm bg-transparent placeholder:text-gray-300 dark:placeholder:text-gray-700 outline-hidden"
class="w-full text-sm bg-transparent placeholder:text-gray-300 outline-hidden"
type="text"
bind:value={url}
placeholder={$i18n.t('API Base URL')}
@ -181,7 +181,7 @@
<Tooltip content="Verify Connection" className="self-end -mb-1">
<button
class="self-center p-1 bg-transparent hover:bg-gray-100 dark:hover:bg-gray-850 rounded-lg transition"
class="self-center p-1 bg-transparent hover:bg-gray-100 rounded-lg transition"
on:click={() => {
verifyHandler();
}}
@ -215,7 +215,7 @@
<div class="flex-1">
<SensitiveInput
className="w-full text-sm bg-transparent placeholder:text-gray-300 dark:placeholder:text-gray-700 outline-hidden"
className="w-full text-sm bg-transparent placeholder:text-gray-300 outline-hidden"
bind:value={key}
placeholder={$i18n.t('API Key')}
required={!ollama}
@ -233,7 +233,7 @@
)}
>
<input
class="w-full text-sm bg-transparent placeholder:text-gray-300 dark:placeholder:text-gray-700 outline-hidden"
class="w-full text-sm bg-transparent placeholder:text-gray-300 outline-hidden"
type="text"
bind:value={prefixId}
placeholder={$i18n.t('Prefix ID')}
@ -244,7 +244,7 @@
</div>
</div>
<hr class=" border-gray-100 dark:border-gray-700/10 my-2.5 w-full" />
<hr class=" border-gray-100 my-2.5 w-full" />
<div class="flex flex-col w-full">
<div class="mb-1 flex justify-between">
@ -286,13 +286,13 @@
{/if}
</div>
<hr class=" border-gray-100 dark:border-gray-700/10 my-2.5 w-full" />
<hr class=" border-gray-100 my-2.5 w-full" />
<div class="flex items-center">
<input
class="w-full py-1 text-sm rounded-lg bg-transparent {modelId
? ''
: 'text-gray-500'} placeholder:text-gray-300 dark:placeholder:text-gray-700 outline-hidden"
: 'text-gray-500'} placeholder:text-gray-300 outline-hidden"
bind:value={modelId}
placeholder={$i18n.t('Add a model ID')}
/>
@ -313,7 +313,7 @@
<div class="flex justify-end pt-3 text-sm font-medium gap-1.5">
{#if edit}
<button
class="px-3.5 py-1.5 text-sm font-medium dark:bg-black dark:hover:bg-gray-900 dark:text-white bg-white text-black hover:bg-gray-100 transition rounded-full flex flex-row space-x-1 items-center"
class="px-3.5 py-1.5 text-sm font-medium bg-white text-black hover:bg-gray-100 transition rounded-full flex flex-row space-x-1 items-center"
type="button"
on:click={() => {
onDelete();
@ -325,7 +325,7 @@
{/if}
<button
class="px-3.5 py-1.5 text-sm font-medium bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black dark:hover:bg-gray-100 transition rounded-full flex flex-row space-x-1 items-center {loading
class="px-3.5 py-1.5 text-sm font-medium bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black transition rounded-full flex flex-row space-x-1 items-center {loading
? ' cursor-not-allowed'
: ''}"
type="submit"

4
src/lib/components/AddFilesPlaceholder.svelte

@ -8,7 +8,7 @@
<div class="px-3">
<div class="text-center text-6xl mb-3">📄</div>
<div class="text-center dark:text-white text-xl font-semibold z-50">
<div class="text-center text-xl font-semibold z-50">
{#if title}
{title}
{:else}
@ -17,7 +17,7 @@
</div>
<slot
><div class="px-2 mt-2 text-center text-sm dark:text-gray-200 w-full">
><div class="px-2 mt-2 text-center text-sm w-full">
{#if content}
{content}
{:else}

14
src/lib/components/ChangelogModal.svelte

@ -23,7 +23,7 @@
</script>
<Modal bind:show size="lg">
<div class="px-5 pt-4 dark:text-gray-300 text-gray-700">
<div class="px-5 pt-4 text-gray-700">
<div class="flex justify-between items-start">
<div class="text-xl font-semibold">
{$i18n.t('What’s New in')}
@ -50,25 +50,25 @@
</button>
</div>
<div class="flex items-center mt-1">
<div class="text-sm dark:text-gray-200">{$i18n.t('Release Notes')}</div>
<div class="text-sm ">{$i18n.t('Release Notes')}</div>
<div class="flex self-center w-[1px] h-6 mx-2.5 bg-gray-200 dark:bg-gray-700" />
<div class="text-sm dark:text-gray-200">
<div class="text-sm ">
v{WEBUI_VERSION}
</div>
</div>
</div>
<div class=" w-full p-4 px-5 text-gray-700 dark:text-gray-100">
<div class=" w-full p-4 px-5 text-gray-700 ">
<div class=" overflow-y-scroll max-h-96 scrollbar-hidden">
<div class="mb-3">
{#if changelog}
{#each Object.keys(changelog) as version}
<div class=" mb-3 pr-2">
<div class="font-semibold text-xl mb-1 dark:text-white">
<div class="font-semibold text-xl mb-1 ">
v{version} - {changelog[version].date}
</div>
<hr class="border-gray-100 dark:border-gray-850 my-2" />
<hr class="border-gray-100 my-2" />
{#each Object.keys(changelog[version]).filter((section) => section !== 'date') as section}
<div class="">
@ -111,7 +111,7 @@
await updateUserSettings(localStorage.token, { ui: $settings });
show = false;
}}
class="px-3.5 py-1.5 text-sm font-medium bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black dark:hover:bg-gray-100 transition rounded-full"
class="px-3.5 py-1.5 text-sm font-medium bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black transition rounded-full"
>
<span class="relative">{$i18n.t("Okay, Let's Go!")}</span>
</button>

4
src/lib/components/NotificationToast.svelte

@ -31,7 +31,7 @@
</script>
<button
class="flex gap-2.5 text-left min-w-[var(--width)] w-full dark:bg-gray-850 dark:text-white bg-white text-black border border-gray-100 dark:border-gray-850 rounded-xl px-3.5 py-3.5"
class="flex gap-2.5 text-left min-w-[var(--width)] w-full bg-white text-black border border-gray-100 rounded-xl px-3.5 py-3.5"
on:click={() => {
onClick();
dispatch('closeToast');
@ -46,7 +46,7 @@
<div class=" text-[13px] font-medium mb-0.5 line-clamp-1 capitalize">{title}</div>
{/if}
<div class=" line-clamp-2 text-xs self-center dark:text-gray-300 font-normal">
<div class=" line-clamp-2 text-xs self-center font-normal">
{@html DOMPurify.sanitize(marked(content))}
</div>
</div>

2
src/lib/components/admin/Evaluations.svelte

@ -34,7 +34,7 @@
<div class="flex flex-col lg:flex-row w-full h-full pb-2 lg:space-x-4">
<div
id="users-tabs-container"
class="tabs flex flex-row overflow-x-auto gap-2.5 max-w-full lg:gap-1 lg:flex-col lg:flex-none lg:w-40 dark:text-gray-200 text-sm font-medium text-left scrollbar-none"
class="tabs flex flex-row overflow-x-auto gap-2.5 max-w-full lg:gap-1 lg:flex-col lg:flex-none lg:w-40 text-sm font-medium text-left scrollbar-none"
>
<button
class="px-0.5 py-1 min-w-fit rounded-lg lg:flex-none flex text-right transition {selectedTab ===

4
src/lib/components/admin/Evaluations/FeedbackMenu.svelte

@ -25,14 +25,14 @@
<div slot="content">
<DropdownMenu.Content
class="w-full max-w-[150px] rounded-xl px-1 py-1.5 z-50 bg-white dark:bg-gray-850 dark:text-white shadow-lg"
class="w-full max-w-[150px] rounded-xl px-1 py-1.5 z-50 bg-white shadow-lg"
sideOffset={-2}
side="bottom"
align="start"
transition={flyAndScale}
>
<DropdownMenu.Item
class="flex gap-2 items-center px-3 py-1.5 text-sm cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-800 rounded-md"
class="flex gap-2 items-center px-3 py-1.5 text-sm cursor-pointer hover:bg-gray-50 rounded-md"
on:click={() => {
dispatch('delete');
show = false;

26
src/lib/components/admin/Evaluations/Feedbacks.svelte

@ -110,16 +110,16 @@
<div class="flex md:self-center text-lg font-medium px-0.5">
{$i18n.t('Feedback History')}
<div class="flex self-center w-[1px] h-6 mx-2.5 bg-gray-50 dark:bg-gray-850" />
<div class="flex self-center w-[1px] h-6 mx-2.5 bg-gray-50 " />
<span class="text-lg font-medium text-gray-500 dark:text-gray-300">{feedbacks.length}</span>
<span class="text-lg font-medium text-gray-500 ">{feedbacks.length}</span>
</div>
<div>
<div>
<Tooltip content={$i18n.t('Export')}>
<button
class=" p-2 rounded-xl hover:bg-gray-100 dark:hover:bg-gray-850 transition font-medium text-sm flex items-center space-x-1"
class=" p-2 rounded-xl hover:bg-gray-100 transition font-medium text-sm flex items-center space-x-1"
on:click={() => {
exportHandler();
}}
@ -135,15 +135,15 @@
class="scrollbar-hidden relative whitespace-nowrap overflow-x-auto max-w-full rounded-sm pt-0.5"
>
{#if (feedbacks ?? []).length === 0}
<div class="text-center text-xs text-gray-500 dark:text-gray-400 py-1">
<div class="text-center text-xs text-gray-500 py-1">
{$i18n.t('No feedbacks found')}
</div>
{:else}
<table
class="w-full text-sm text-left text-gray-500 dark:text-gray-400 table-auto max-w-full rounded-sm"
class="w-full text-sm text-left text-gray-500 table-auto max-w-full rounded-sm"
>
<thead
class="text-xs text-gray-700 uppercase bg-gray-50 dark:bg-gray-850 dark:text-gray-400 -translate-y-0.5"
class="text-xs text-gray-700 uppercase bg-gray-50 -translate-y-0.5"
>
<tr class="">
<th scope="col" class="px-3 text-right cursor-pointer select-none w-0">
@ -167,7 +167,7 @@
</thead>
<tbody class="">
{#each paginatedFeedbacks as feedback (feedback.id)}
<tr class="bg-white dark:border-gray-850 text-xs">
<tr class="bg-white text-xs">
<td class=" py-0.5 text-right font-semibold">
<div class="flex justify-center">
<Tooltip content={feedback?.user?.name}>
@ -186,12 +186,12 @@
<div class="flex flex-col items-start gap-0.5 h-full">
<div class="flex flex-col h-full">
{#if feedback.data?.sibling_model_ids}
<div class="font-semibold text-gray-600 dark:text-gray-400 flex-1">
<div class="font-semibold text-gray-600 flex-1">
{feedback.data?.model_id}
</div>
<Tooltip content={feedback.data.sibling_model_ids.join(', ')}>
<div class=" text-[0.65rem] text-gray-600 dark:text-gray-400 line-clamp-1">
<div class=" text-[0.65rem] text-gray-600 line-clamp-1">
{#if feedback.data.sibling_model_ids.length > 2}
<!-- {$i18n.t('and {{COUNT}} more')} -->
{feedback.data.sibling_model_ids.slice(0, 2).join(', ')}, {$i18n.t(
@ -205,7 +205,7 @@
</Tooltip>
{:else}
<div
class=" text-sm font-medium text-gray-600 dark:text-gray-400 flex-1 py-1.5"
class=" text-sm font-medium text-gray-600 flex-1 py-1.5"
>
{feedback.data?.model_id}
</div>
@ -213,7 +213,7 @@
</div>
</div>
</td>
<td class="px-3 py-1 text-right font-medium text-gray-900 dark:text-white w-max">
<td class="px-3 py-1 text-right font-medium text-gray-900 w-max">
<div class=" flex justify-end">
{#if feedback.data.rating.toString() === '1'}
<Badge type="info" content={$i18n.t('Won')} />
@ -236,7 +236,7 @@
}}
>
<button
class="self-center w-fit text-sm p-1.5 dark:text-gray-300 dark:hover:text-white hover:bg-black/5 dark:hover:bg-white/5 rounded-xl"
class="self-center w-fit text-sm p-1.5 dark:hover:text-white hover:bg-black/5 dark:hover:bg-white/5 rounded-xl"
>
<EllipsisHorizontal />
</button>
@ -262,7 +262,7 @@
)}
>
<button
class="flex text-xs items-center px-3 py-1.5 rounded-xl bg-gray-50 hover:bg-gray-100 dark:bg-gray-850 dark:hover:bg-gray-800 dark:text-gray-200 transition"
class="flex text-xs items-center px-3 py-1.5 rounded-xl bg-gray-50 hover:bg-gray-100 transition"
on:click={async () => {
shareHandler();
}}

18
src/lib/components/admin/Evaluations/Leaderboard.svelte

@ -274,9 +274,9 @@
{$i18n.t('Leaderboard')}
</div>
<div class="flex self-center w-[1px] h-6 mx-2.5 bg-gray-50 dark:bg-gray-850" />
<div class="flex self-center w-[1px] h-6 mx-2.5 bg-gray-50 " />
<span class="text-lg font-medium text-gray-500 dark:text-gray-300 mr-1.5"
<span class="text-lg font-medium text-gray-500 mr-1.5"
>{rankedModels.length}</span
>
</div>
@ -311,17 +311,17 @@
</div>
{/if}
{#if (rankedModels ?? []).length === 0}
<div class="text-center text-xs text-gray-500 dark:text-gray-400 py-1">
<div class="text-center text-xs text-gray-500 py-1">
{$i18n.t('No models found')}
</div>
{:else}
<table
class="w-full text-sm text-left text-gray-500 dark:text-gray-400 table-auto max-w-full rounded {loadingLeaderboard
class="w-full text-sm text-left text-gray-500 table-auto max-w-full rounded {loadingLeaderboard
? 'opacity-20'
: ''}"
>
<thead
class="text-xs text-gray-700 uppercase bg-gray-50 dark:bg-gray-850 dark:text-gray-400 -translate-y-0.5"
class="text-xs text-gray-700 uppercase bg-gray-50 -translate-y-0.5"
>
<tr class="">
<th scope="col" class="px-3 py-1.5 cursor-pointer select-none w-3">
@ -343,8 +343,8 @@
</thead>
<tbody class="">
{#each rankedModels as model, modelIdx (model.id)}
<tr class="bg-white dark:border-gray-850 text-xs group">
<td class="px-3 py-1.5 text-left font-medium text-gray-900 dark:text-white w-fit">
<tr class="bg-white text-xs group">
<td class="px-3 py-1.5 text-left font-medium text-gray-900 w-fit">
<div class=" line-clamp-1">
{model?.rating !== '-' ? modelIdx + 1 : '-'}
</div>
@ -359,12 +359,12 @@
/>
</div>
<div class="font-medium text-gray-800 dark:text-gray-200 pr-4">
<div class="font-medium text-gray-800 pr-4">
{model.name}
</div>
</div>
</td>
<td class="px-3 py-1.5 text-right font-medium text-gray-900 dark:text-white w-max">
<td class="px-3 py-1.5 text-right font-medium text-gray-900 w-max">
{model.rating}
</td>

24
src/lib/components/admin/Functions.svelte

@ -200,8 +200,8 @@
<div class="flex justify-between items-center">
<div class="flex md:self-center text-xl items-center font-medium px-0.5">
{$i18n.t('Functions')}
<div class="flex self-center w-[1px] h-6 mx-2.5 bg-gray-50 dark:bg-gray-850" />
<span class="text-base font-lg text-gray-500 dark:text-gray-300">{filteredItems.length}</span>
<div class="flex self-center w-[1px] h-6 mx-2.5 bg-gray-50 " />
<span class="text-base font-lg text-gray-500 ">{filteredItems.length}</span>
</div>
</div>
@ -219,7 +219,7 @@
<div>
<a
class=" px-2 py-2 rounded-xl hover:bg-gray-700/10 dark:hover:bg-gray-100/10 dark:text-gray-300 dark:hover:text-white transition font-medium text-sm flex items-center space-x-1"
class=" px-2 py-2 rounded-xl hover:bg-gray-700/10 dark:hover:text-white transition font-medium text-sm flex items-center space-x-1"
href="/admin/functions/create"
>
<Plus className="size-3.5" />
@ -241,14 +241,14 @@
<div class=" flex-1 self-center pl-1">
<div class=" font-semibold flex items-center gap-1.5">
<div
class=" text-xs font-bold px-1 rounded-sm uppercase line-clamp-1 bg-gray-500/20 text-gray-700 dark:text-gray-200"
class=" text-xs font-bold px-1 rounded-sm uppercase line-clamp-1 bg-gray-500/20 text-gray-700 "
>
{func.type}
</div>
{#if func?.meta?.manifest?.version}
<div
class="text-xs font-bold px-1 rounded-sm line-clamp-1 bg-gray-500/20 text-gray-700 dark:text-gray-200"
class="text-xs font-bold px-1 rounded-sm line-clamp-1 bg-gray-500/20 text-gray-700 "
>
v{func?.meta?.manifest?.version ?? ''}
</div>
@ -273,7 +273,7 @@
{#if shiftKey}
<Tooltip content={$i18n.t('Delete')}>
<button
class="self-center w-fit text-sm px-2 py-2 dark:text-gray-300 dark:hover:text-white hover:bg-black/5 dark:hover:bg-white/5 rounded-xl"
class="self-center w-fit text-sm px-2 py-2 dark:hover:text-white hover:bg-black/5 dark:hover:bg-white/5 rounded-xl"
type="button"
on:click={() => {
deleteHandler(func);
@ -286,7 +286,7 @@
{#if func?.meta?.manifest?.funding_url ?? false}
<Tooltip content={$i18n.t('Support')}>
<button
class="self-center w-fit text-sm px-2 py-2 dark:text-gray-300 dark:hover:text-white hover:bg-black/5 dark:hover:bg-white/5 rounded-xl"
class="self-center w-fit text-sm px-2 py-2 dark:hover:text-white hover:bg-black/5 dark:hover:bg-white/5 rounded-xl"
type="button"
on:click={() => {
selectedFunction = func;
@ -300,7 +300,7 @@
<Tooltip content={$i18n.t('Valves')}>
<button
class="self-center w-fit text-sm px-2 py-2 dark:text-gray-300 dark:hover:text-white hover:bg-black/5 dark:hover:bg-white/5 rounded-xl"
class="self-center w-fit text-sm px-2 py-2 dark:hover:text-white hover:bg-black/5 dark:hover:bg-white/5 rounded-xl"
type="button"
on:click={() => {
selectedFunction = func;
@ -355,7 +355,7 @@
onClose={() => {}}
>
<button
class="self-center w-fit text-sm p-1.5 dark:text-gray-300 dark:hover:text-white hover:bg-black/5 dark:hover:bg-white/5 rounded-xl"
class="self-center w-fit text-sm p-1.5 dark:hover:text-white hover:bg-black/5 dark:hover:bg-white/5 rounded-xl"
type="button"
>
<EllipsisHorizontal className="size-5" />
@ -407,7 +407,7 @@
/>
<button
class="flex text-xs items-center space-x-1 px-3 py-1.5 rounded-xl bg-gray-50 hover:bg-gray-100 dark:bg-gray-800 dark:hover:bg-gray-700 dark:text-gray-200 transition"
class="flex text-xs items-center space-x-1 px-3 py-1.5 rounded-xl bg-gray-50 hover:bg-gray-100 transition"
on:click={() => {
functionsImportInputElement.click();
}}
@ -431,7 +431,7 @@
</button>
<button
class="flex text-xs items-center space-x-1 px-3 py-1.5 rounded-xl bg-gray-50 hover:bg-gray-100 dark:bg-gray-800 dark:hover:bg-gray-700 dark:text-gray-200 transition"
class="flex text-xs items-center space-x-1 px-3 py-1.5 rounded-xl bg-gray-50 hover:bg-gray-100 transition"
on:click={async () => {
const _functions = await exportFunctions(localStorage.token).catch((error) => {
toast.error(`${error}`);
@ -473,7 +473,7 @@
</div>
<a
class=" flex cursor-pointer items-center justify-between hover:bg-gray-50 dark:hover:bg-gray-850 w-full mb-2 px-3.5 py-1.5 rounded-xl transition"
class=" flex cursor-pointer items-center justify-between hover:bg-gray-50 w-full mb-2 px-3.5 py-1.5 rounded-xl transition"
href="https://openwebui.com/#open-webui-community"
target="_blank"
>

8
src/lib/components/admin/Functions/FunctionEditor.svelte

@ -303,7 +303,7 @@ class Pipe:
<div class=" shrink-0 mr-2">
<Tooltip content={$i18n.t('Back')}>
<button
class="w-full text-left text-sm py-1.5 px-1 rounded-lg dark:text-gray-300 dark:hover:text-white hover:bg-black/5 dark:hover:bg-gray-850"
class="w-full text-left text-sm py-1.5 px-1 rounded-lg dark:hover:text-white hover:bg-black/5 "
on:click={() => {
goto('/admin/functions');
}}
@ -385,16 +385,16 @@ class Pipe:
<div class="pb-3 flex justify-between">
<div class="flex-1 pr-3">
<div class="text-xs text-gray-500 line-clamp-2">
<span class=" font-semibold dark:text-gray-200">{$i18n.t('Warning:')}</span>
<span class=" font-semibold ">{$i18n.t('Warning:')}</span>
{$i18n.t('Functions allow arbitrary code execution')} <br />
<span class=" font-medium dark:text-gray-400"
<span class=" font-medium "
>{$i18n.t(`don't install random functions from sources you don't trust.`)}</span
>
</div>
</div>
<button
class="px-3.5 py-1.5 text-sm font-medium bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black dark:hover:bg-gray-100 transition rounded-full"
class="px-3.5 py-1.5 text-sm font-medium bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black transition rounded-full"
type="submit"
>
{$i18n.t('Save')}

16
src/lib/components/admin/Functions/FunctionMenu.svelte

@ -42,7 +42,7 @@
<div slot="content">
<DropdownMenu.Content
class="w-full max-w-[180px] rounded-xl px-1 py-1.5 border border-gray-300/30 dark:border-gray-700/50 z-50 bg-white dark:bg-gray-850 dark:text-white shadow-sm"
class="w-full max-w-[180px] rounded-xl px-1 py-1.5 border border-gray-300/30 dark:border-gray-700/50 z-50 bg-white shadow-sm"
sideOffset={-2}
side="bottom"
align="start"
@ -63,11 +63,11 @@
</div>
</div>
<hr class="border-gray-100 dark:border-gray-850 my-1" />
<hr class="border-gray-100 my-1" />
{/if}
<DropdownMenu.Item
class="flex gap-2 items-center px-3 py-2 text-sm font-medium cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-800 rounded-md"
class="flex gap-2 items-center px-3 py-2 text-sm font-medium cursor-pointer hover:bg-gray-50 rounded-md"
on:click={() => {
editHandler();
}}
@ -91,7 +91,7 @@
</DropdownMenu.Item>
<DropdownMenu.Item
class="flex gap-2 items-center px-3 py-2 text-sm font-medium cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-800 rounded-md"
class="flex gap-2 items-center px-3 py-2 text-sm font-medium cursor-pointer hover:bg-gray-50 rounded-md"
on:click={() => {
shareHandler();
}}
@ -101,7 +101,7 @@
</DropdownMenu.Item>
<DropdownMenu.Item
class="flex gap-2 items-center px-3 py-2 text-sm font-medium cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-800 rounded-md"
class="flex gap-2 items-center px-3 py-2 text-sm font-medium cursor-pointer hover:bg-gray-50 rounded-md"
on:click={() => {
cloneHandler();
}}
@ -112,7 +112,7 @@
</DropdownMenu.Item>
<DropdownMenu.Item
class="flex gap-2 items-center px-3 py-2 text-sm font-medium cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-800 rounded-md"
class="flex gap-2 items-center px-3 py-2 text-sm font-medium cursor-pointer hover:bg-gray-50 rounded-md"
on:click={() => {
exportHandler();
}}
@ -122,10 +122,10 @@
<div class="flex items-center">{$i18n.t('Export')}</div>
</DropdownMenu.Item>
<hr class="border-gray-100 dark:border-gray-850 my-1" />
<hr class="border-gray-100 my-1" />
<DropdownMenu.Item
class="flex gap-2 items-center px-3 py-2 text-sm font-medium cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-800 rounded-md"
class="flex gap-2 items-center px-3 py-2 text-sm font-medium cursor-pointer hover:bg-gray-50 rounded-md"
on:click={() => {
deleteHandler();
}}

2
src/lib/components/admin/Settings.svelte

@ -42,7 +42,7 @@
<div class="flex flex-col lg:flex-row w-full h-full pb-2 lg:space-x-4">
<div
id="admin-settings-tabs-container"
class="tabs flex flex-row overflow-x-auto gap-2.5 max-w-full lg:gap-1 lg:flex-col lg:flex-none lg:w-40 dark:text-gray-200 text-sm font-medium text-left scrollbar-none"
class="tabs flex flex-row overflow-x-auto gap-2.5 max-w-full lg:gap-1 lg:flex-col lg:flex-none lg:w-40 text-sm font-medium text-left scrollbar-none"
>
<button
class="px-0.5 py-1 min-w-fit rounded-lg flex-1 lg:flex-none flex text-right transition {selectedTab ===

50
src/lib/components/admin/Settings/Audio.svelte

@ -198,7 +198,7 @@
</div>
</div>
<hr class="border-gray-100 dark:border-gray-850 my-2" />
<hr class="border-gray-100 my-2" />
<div>
<div class=" mb-1.5 text-sm font-medium">{$i18n.t('STT Model')}</div>
@ -206,7 +206,7 @@
<div class="flex-1">
<input
list="model-list"
class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 dark:text-gray-300 dark:bg-gray-850 outline-hidden"
class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 outline-hidden"
bind:value={STT_MODEL}
placeholder="Select a model"
/>
@ -224,14 +224,14 @@
</div>
</div>
<hr class="border-gray-100 dark:border-gray-850 my-2" />
<hr class="border-gray-100 my-2" />
<div>
<div class=" mb-1.5 text-sm font-medium">{$i18n.t('STT Model')}</div>
<div class="flex w-full">
<div class="flex-1">
<input
class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 dark:text-gray-300 dark:bg-gray-850 outline-hidden"
class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 outline-hidden"
bind:value={STT_MODEL}
placeholder="Select a model (optional)"
/>
@ -240,7 +240,7 @@
<div class="mt-2 mb-1 text-xs text-gray-400 dark:text-gray-500">
{$i18n.t('Leave model field empty to use the default model.')}
<a
class=" hover:underline dark:text-gray-200 text-gray-800"
class=" hover:underline text-gray-800"
href="https://developers.deepgram.com/docs/models"
target="_blank"
>
@ -255,14 +255,14 @@
<div class="flex w-full">
<div class="flex-1 mr-2">
<input
class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 dark:text-gray-300 dark:bg-gray-850 outline-hidden"
class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 outline-hidden"
placeholder={$i18n.t('Set whisper model')}
bind:value={STT_WHISPER_MODEL}
/>
</div>
<button
class="px-2.5 bg-gray-50 hover:bg-gray-200 text-gray-800 dark:bg-gray-850 dark:hover:bg-gray-800 dark:text-gray-100 rounded-lg transition"
class="px-2.5 bg-gray-50 hover:bg-gray-200 text-gray-800 rounded-lg transition"
on:click={() => {
sttModelUpdateHandler();
}}
@ -320,7 +320,7 @@
{$i18n.t(`Open WebUI uses faster-whisper internally.`)}
<a
class=" hover:underline dark:text-gray-200 text-gray-800"
class=" hover:underline text-gray-800"
href="https://github.com/SYSTRAN/faster-whisper"
target="_blank"
>
@ -333,7 +333,7 @@
{/if}
</div>
<hr class="border-gray-100 dark:border-gray-850" />
<hr class="border-gray-100 " />
<div>
<div class=" mb-1 text-sm font-medium">{$i18n.t('TTS Settings')}</div>
@ -385,7 +385,7 @@
<div>
<div class="mt-1 flex gap-2 mb-1">
<input
class="flex-1 w-full rounded-lg py-2 pl-4 text-sm bg-gray-50 dark:text-gray-300 dark:bg-gray-850 outline-hidden"
class="flex-1 w-full rounded-lg py-2 pl-4 text-sm bg-gray-50 outline-hidden"
placeholder={$i18n.t('API Key')}
bind:value={TTS_API_KEY}
required
@ -396,13 +396,13 @@
<div>
<div class="mt-1 flex gap-2 mb-1">
<input
class="flex-1 w-full rounded-lg py-2 pl-4 text-sm bg-gray-50 dark:text-gray-300 dark:bg-gray-850 outline-hidden"
class="flex-1 w-full rounded-lg py-2 pl-4 text-sm bg-gray-50 outline-hidden"
placeholder={$i18n.t('API Key')}
bind:value={TTS_API_KEY}
required
/>
<input
class="flex-1 w-full rounded-lg py-2 pl-4 text-sm bg-gray-50 dark:text-gray-300 dark:bg-gray-850 outline-hidden"
class="flex-1 w-full rounded-lg py-2 pl-4 text-sm bg-gray-50 outline-hidden"
placeholder={$i18n.t('Azure Region')}
bind:value={TTS_AZURE_SPEECH_REGION}
required
@ -411,7 +411,7 @@
</div>
{/if}
<hr class="border-gray-100 dark:border-gray-850 my-2" />
<hr class="border-gray-100 my-2" />
{#if TTS_ENGINE === ''}
<div>
@ -419,7 +419,7 @@
<div class="flex w-full">
<div class="flex-1">
<select
class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 dark:text-gray-300 dark:bg-gray-850 outline-hidden"
class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 outline-hidden"
bind:value={TTS_VOICE}
>
<option value="" selected={TTS_VOICE !== ''}>{$i18n.t('Default')}</option>
@ -442,7 +442,7 @@
<div class="flex-1">
<input
list="model-list"
class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 dark:text-gray-300 dark:bg-gray-850 outline-hidden"
class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 outline-hidden"
bind:value={TTS_MODEL}
placeholder="CMU ARCTIC speaker embedding name"
/>
@ -458,7 +458,7 @@
To learn more about SpeechT5,
<a
class=" hover:underline dark:text-gray-200 text-gray-800"
class=" hover:underline text-gray-800"
href="https://github.com/microsoft/SpeechT5"
target="_blank"
>
@ -468,7 +468,7 @@
</a>
To see the available CMU Arctic speaker embeddings,
<a
class=" hover:underline dark:text-gray-200 text-gray-800"
class=" hover:underline text-gray-800"
href="https://huggingface.co/datasets/Matthijs/cmu-arctic-xvectors"
target="_blank"
>
@ -484,7 +484,7 @@
<div class="flex-1">
<input
list="voice-list"
class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 dark:text-gray-300 dark:bg-gray-850 outline-hidden"
class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 outline-hidden"
bind:value={TTS_VOICE}
placeholder="Select a voice"
/>
@ -503,7 +503,7 @@
<div class="flex-1">
<input
list="tts-model-list"
class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 dark:text-gray-300 dark:bg-gray-850 outline-hidden"
class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 outline-hidden"
bind:value={TTS_MODEL}
placeholder="Select a model"
/>
@ -525,7 +525,7 @@
<div class="flex-1">
<input
list="voice-list"
class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 dark:text-gray-300 dark:bg-gray-850 outline-hidden"
class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 outline-hidden"
bind:value={TTS_VOICE}
placeholder="Select a voice"
/>
@ -544,7 +544,7 @@
<div class="flex-1">
<input
list="tts-model-list"
class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 dark:text-gray-300 dark:bg-gray-850 outline-hidden"
class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 outline-hidden"
bind:value={TTS_MODEL}
placeholder="Select a model"
/>
@ -566,7 +566,7 @@
<div class="flex-1">
<input
list="voice-list"
class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 dark:text-gray-300 dark:bg-gray-850 outline-hidden"
class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 outline-hidden"
bind:value={TTS_VOICE}
placeholder="Select a voice"
/>
@ -593,7 +593,7 @@
<div class="flex-1">
<input
list="tts-model-list"
class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 dark:text-gray-300 dark:bg-gray-850 outline-hidden"
class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 outline-hidden"
bind:value={TTS_AZURE_SPEECH_OUTPUT_FORMAT}
placeholder="Select a output format"
/>
@ -603,7 +603,7 @@
</div>
{/if}
<hr class="border-gray-100 dark:border-gray-850 my-2" />
<hr class="border-gray-100 my-2" />
<div class="pt-0.5 flex w-full justify-between">
<div class="self-center text-xs font-medium">{$i18n.t('Response splitting')}</div>
@ -631,7 +631,7 @@
</div>
<div class="flex justify-end text-sm font-medium">
<button
class="px-3.5 py-1.5 text-sm font-medium bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black dark:hover:bg-gray-100 transition rounded-full"
class="px-3.5 py-1.5 text-sm font-medium bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black transition rounded-full"
type="submit"
>
{$i18n.t('Save')}

12
src/lib/components/admin/Settings/CodeExecution.svelte

@ -43,7 +43,7 @@
<div class="mb-3.5">
<div class=" mb-2.5 text-base font-medium">{$i18n.t('General')}</div>
<hr class=" border-gray-100 dark:border-gray-850 my-2" />
<hr class=" border-gray-100 my-2" />
<div class="mb-2.5">
<div class="flex w-full justify-between">
@ -81,7 +81,7 @@
<div class="flex w-full">
<div class="flex-1">
<input
class="w-full text-sm py-0.5 placeholder:text-gray-300 dark:placeholder:text-gray-700 bg-transparent outline-hidden"
class="w-full text-sm py-0.5 placeholder:text-gray-300 bg-transparent outline-hidden"
type="text"
placeholder={$i18n.t('Enter Jupyter URL')}
bind:value={config.CODE_EXECUTION_JUPYTER_URL}
@ -156,7 +156,7 @@
<div class="mb-3.5">
<div class=" mb-2.5 text-base font-medium">{$i18n.t('Code Interpreter')}</div>
<hr class=" border-gray-100 dark:border-gray-850 my-2" />
<hr class=" border-gray-100 my-2" />
<div class="mb-2.5">
<div class=" flex w-full justify-between">
@ -207,7 +207,7 @@
<div class="flex w-full">
<div class="flex-1">
<input
class="w-full text-sm py-0.5 placeholder:text-gray-300 dark:placeholder:text-gray-700 bg-transparent outline-hidden"
class="w-full text-sm py-0.5 placeholder:text-gray-300 bg-transparent outline-hidden"
type="text"
placeholder={$i18n.t('Enter Jupyter URL')}
bind:value={config.CODE_INTERPRETER_JUPYTER_URL}
@ -278,7 +278,7 @@
</div>
{/if}
<hr class="border-gray-100 dark:border-gray-850 my-2" />
<hr class="border-gray-100 my-2" />
<div>
<div class="py-0.5 w-full">
@ -308,7 +308,7 @@
</div>
<div class="flex justify-end pt-3 text-sm font-medium">
<button
class="px-3.5 py-1.5 text-sm font-medium bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black dark:hover:bg-gray-100 transition rounded-full"
class="px-3.5 py-1.5 text-sm font-medium bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black transition rounded-full"
type="submit"
>
{$i18n.t('Save')}

10
src/lib/components/admin/Settings/Connections.svelte

@ -234,7 +234,7 @@
</div>
{#if ENABLE_OPENAI_API}
<hr class=" border-gray-100 dark:border-gray-850" />
<hr class=" border-gray-100 " />
<div class="">
<div class="flex justify-between items-center">
@ -283,7 +283,7 @@
</div>
</div>
<hr class=" border-gray-100 dark:border-gray-850" />
<hr class=" border-gray-100 " />
<div class="pr-1.5 my-2">
<div class="flex justify-between items-center text-sm mb-2">
@ -300,7 +300,7 @@
</div>
{#if ENABLE_OLLAMA_API}
<hr class=" border-gray-100 dark:border-gray-850 my-2" />
<hr class=" border-gray-100 my-2" />
<div class="">
<div class="flex justify-between items-center">
@ -357,7 +357,7 @@
{/if}
</div>
<hr class=" border-gray-100 dark:border-gray-850" />
<hr class=" border-gray-100 " />
<div class="pr-1.5 my-2">
<div class="flex justify-between items-center text-sm">
@ -394,7 +394,7 @@
<div class="flex justify-end pt-3 text-sm font-medium">
<button
class="px-3.5 py-1.5 text-sm font-medium bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black dark:hover:bg-gray-100 transition rounded-full"
class="px-3.5 py-1.5 text-sm font-medium bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black transition rounded-full"
type="submit"
>
{$i18n.t('Save')}

4
src/lib/components/admin/Settings/Connections/ManageOllamaModal.svelte

@ -12,7 +12,7 @@
<Modal size="sm" bind:show>
<div>
<div class=" flex justify-between dark:text-gray-100 px-5 pt-4 pb-2">
<div class=" flex justify-between px-5 pt-4 pb-2">
<div
class="flex w-full justify-between items-center text-lg font-medium self-center font-primary"
>
@ -39,7 +39,7 @@
</button>
</div>
<div class="flex flex-col md:flex-row w-full px-5 pb-4 md:space-x-4 dark:text-gray-200">
<div class="flex flex-col md:flex-row w-full px-5 pb-4 md:space-x-4 ">
<ManageOllama {urlIdx} />
</div>
</div>

4
src/lib/components/admin/Settings/Connections/OllamaConnection.svelte

@ -65,7 +65,7 @@
<div class="flex gap-1">
<Tooltip content={$i18n.t('Manage')} className="self-start">
<button
class="self-center p-1 bg-transparent hover:bg-gray-100 dark:hover:bg-gray-850 rounded-lg transition"
class="self-center p-1 bg-transparent hover:bg-gray-100 rounded-lg transition"
on:click={() => {
showManageModal = true;
}}
@ -77,7 +77,7 @@
<Tooltip content={$i18n.t('Configure')} className="self-start">
<button
class="self-center p-1 bg-transparent hover:bg-gray-100 dark:hover:bg-gray-850 rounded-lg transition"
class="self-center p-1 bg-transparent hover:bg-gray-100 rounded-lg transition"
on:click={() => {
showConfigModal = true;
}}

2
src/lib/components/admin/Settings/Connections/OpenAIConnection.svelte

@ -95,7 +95,7 @@
<div class="flex gap-1">
<Tooltip content={$i18n.t('Configure')} className="self-start">
<button
class="self-center p-1 bg-transparent hover:bg-gray-100 dark:hover:bg-gray-850 rounded-lg transition"
class="self-center p-1 bg-transparent hover:bg-gray-100 rounded-lg transition"
on:click={() => {
showConfigModal = true;
}}

10
src/lib/components/admin/Settings/Database.svelte

@ -63,7 +63,7 @@
<button
type="button"
class=" flex rounded-md py-2 px-3 w-full hover:bg-gray-200 dark:hover:bg-gray-800 transition"
class=" flex rounded-md py-2 px-3 w-full hover:bg-gray-200 transition"
on:click={async () => {
document.getElementById('config-json-input').click();
}}
@ -90,7 +90,7 @@
<button
type="button"
class=" flex rounded-md py-2 px-3 w-full hover:bg-gray-200 dark:hover:bg-gray-800 transition"
class=" flex rounded-md py-2 px-3 w-full hover:bg-gray-200 transition"
on:click={async () => {
const config = await exportConfig(localStorage.token);
const blob = new Blob([JSON.stringify(config)], {
@ -119,14 +119,14 @@
</div>
</button>
<hr class="border-gray-100 dark:border-gray-850 my-1" />
<hr class="border-gray-100 my-1" />
{#if $config?.features.enable_admin_export ?? true}
<div class=" flex w-full justify-between">
<!-- <div class=" self-center text-xs font-medium">{$i18n.t('Allow Chat Deletion')}</div> -->
<button
class=" flex rounded-md py-1.5 px-3 w-full hover:bg-gray-200 dark:hover:bg-gray-800 transition"
class=" flex rounded-md py-1.5 px-3 w-full hover:bg-gray-200 transition"
type="button"
on:click={() => {
// exportAllUserChats();
@ -156,7 +156,7 @@
</div>
<button
class=" flex rounded-md py-2 px-3 w-full hover:bg-gray-200 dark:hover:bg-gray-800 transition"
class=" flex rounded-md py-2 px-3 w-full hover:bg-gray-200 transition"
on:click={() => {
exportAllUserChats();
}}

44
src/lib/components/admin/Settings/Documents.svelte

@ -407,7 +407,7 @@
</div>
</div>
<hr class="border-gray-100 dark:border-gray-850" />
<hr class="border-gray-100 " />
<div class="space-y-2" />
<div>
@ -417,7 +417,7 @@
<div class="flex w-full">
<div class="flex-1 mr-2">
<input
class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 dark:text-gray-300 dark:bg-gray-850 outline-hidden"
class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 outline-hidden"
bind:value={embeddingModel}
placeholder={$i18n.t('Set embedding model')}
required
@ -428,7 +428,7 @@
<div class="flex w-full">
<div class="flex-1 mr-2">
<input
class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 dark:text-gray-300 dark:bg-gray-850 outline-hidden"
class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 outline-hidden"
placeholder={$i18n.t('Set embedding model (e.g. {{model}})', {
model: embeddingModel.slice(-40)
})}
@ -438,7 +438,7 @@
{#if embeddingEngine === ''}
<button
class="px-2.5 bg-gray-50 hover:bg-gray-200 text-gray-800 dark:bg-gray-850 dark:hover:bg-gray-800 dark:text-gray-100 rounded-lg transition"
class="px-2.5 bg-gray-50 hover:bg-gray-200 text-gray-800 rounded-lg transition"
on:click={() => {
embeddingModelUpdateHandler();
}}
@ -507,7 +507,7 @@
<div class="flex w-full">
<div class="flex-1 mr-2">
<input
class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 dark:text-gray-300 dark:bg-gray-850 outline-hidden"
class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 outline-hidden"
placeholder={$i18n.t('Set reranking model (e.g. {{model}})', {
model: 'BAAI/bge-reranker-v2-m3'
})}
@ -515,7 +515,7 @@
/>
</div>
<button
class="px-2.5 bg-gray-50 hover:bg-gray-200 text-gray-800 dark:bg-gray-850 dark:hover:bg-gray-800 dark:text-gray-100 rounded-lg transition"
class="px-2.5 bg-gray-50 hover:bg-gray-200 text-gray-800 rounded-lg transition"
on:click={() => {
rerankingModelUpdateHandler();
}}
@ -572,7 +572,7 @@
{/if}
</div>
<hr class=" border-gray-100 dark:border-gray-850" />
<hr class=" border-gray-100 " />
<div class="">
<div class="text-sm font-medium mb-1">{$i18n.t('Content Extraction')}</div>
@ -597,7 +597,7 @@
<div class="flex w-full mt-1">
<div class="flex-1 mr-2">
<input
class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 dark:text-gray-300 dark:bg-gray-850 outline-hidden"
class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 outline-hidden"
placeholder={$i18n.t('Enter Tika Server URL')}
bind:value={tikaServerUrl}
/>
@ -606,7 +606,7 @@
{/if}
</div>
<hr class=" border-gray-100 dark:border-gray-850" />
<hr class=" border-gray-100 " />
<div class="text-sm font-medium mb-1">{$i18n.t('Google Drive')}</div>
@ -619,7 +619,7 @@
</div>
</div>
<hr class=" border-gray-100 dark:border-gray-850" />
<hr class=" border-gray-100 " />
<div class=" ">
<div class=" text-sm font-medium mb-1">{$i18n.t('Query Params')}</div>
@ -630,7 +630,7 @@
<div class="w-full">
<input
class=" w-full rounded-lg py-1.5 px-4 text-sm bg-gray-50 dark:text-gray-300 dark:bg-gray-850 outline-hidden"
class=" w-full rounded-lg py-1.5 px-4 text-sm bg-gray-50 outline-hidden"
type="number"
placeholder={$i18n.t('Enter Top K')}
bind:value={querySettings.k}
@ -648,7 +648,7 @@
<div class="w-full">
<input
class=" w-full rounded-lg py-1.5 px-4 text-sm bg-gray-50 dark:text-gray-300 dark:bg-gray-850 outline-hidden"
class=" w-full rounded-lg py-1.5 px-4 text-sm bg-gray-50 outline-hidden"
type="number"
step="0.01"
placeholder={$i18n.t('Enter Score')}
@ -684,7 +684,7 @@
</div>
</div>
<hr class=" border-gray-100 dark:border-gray-850" />
<hr class=" border-gray-100 " />
<div class=" ">
<div class="mb-1 text-sm font-medium">{$i18n.t('Chunk Params')}</div>
@ -709,7 +709,7 @@
</div>
<div class="self-center">
<input
class=" w-full rounded-lg py-1.5 px-4 text-sm bg-gray-50 dark:text-gray-300 dark:bg-gray-850 outline-hidden"
class=" w-full rounded-lg py-1.5 px-4 text-sm bg-gray-50 outline-hidden"
type="number"
placeholder={$i18n.t('Enter Chunk Size')}
bind:value={chunkSize}
@ -726,7 +726,7 @@
<div class="self-center">
<input
class="w-full rounded-lg py-1.5 px-4 text-sm bg-gray-50 dark:text-gray-300 dark:bg-gray-850 outline-hidden"
class="w-full rounded-lg py-1.5 px-4 text-sm bg-gray-50 outline-hidden"
type="number"
placeholder={$i18n.t('Enter Chunk Overlap')}
bind:value={chunkOverlap}
@ -748,7 +748,7 @@
</div>
</div>
<hr class=" border-gray-100 dark:border-gray-850" />
<hr class=" border-gray-100 " />
<div class="">
<div class="text-sm font-medium mb-1">{$i18n.t('Files')}</div>
@ -767,7 +767,7 @@
placement="top-start"
>
<input
class="w-full rounded-lg py-1.5 px-4 text-sm bg-gray-50 dark:text-gray-300 dark:bg-gray-850 outline-hidden"
class="w-full rounded-lg py-1.5 px-4 text-sm bg-gray-50 outline-hidden"
type="number"
placeholder={$i18n.t('Leave empty for unlimited')}
bind:value={fileMaxSize}
@ -790,7 +790,7 @@
placement="top-start"
>
<input
class=" w-full rounded-lg py-1.5 px-4 text-sm bg-gray-50 dark:text-gray-300 dark:bg-gray-850 outline-hidden"
class=" w-full rounded-lg py-1.5 px-4 text-sm bg-gray-50 outline-hidden"
type="number"
placeholder={$i18n.t('Leave empty for unlimited')}
bind:value={fileMaxCount}
@ -803,11 +803,11 @@
</div>
</div>
<hr class=" border-gray-100 dark:border-gray-850" />
<hr class=" border-gray-100 " />
<div>
<button
class=" flex rounded-xl py-2 px-3.5 w-full hover:bg-gray-200 dark:hover:bg-gray-800 transition"
class=" flex rounded-xl py-2 px-3.5 w-full hover:bg-gray-200 transition"
on:click={() => {
showResetUploadDirConfirm = true;
}}
@ -834,7 +834,7 @@
</button>
<button
class=" flex rounded-xl py-2 px-3.5 w-full hover:bg-gray-200 dark:hover:bg-gray-800 transition"
class=" flex rounded-xl py-2 px-3.5 w-full hover:bg-gray-200 transition"
on:click={() => {
showResetConfirm = true;
}}
@ -862,7 +862,7 @@
</div>
<div class="flex justify-end pt-3 text-sm font-medium">
<button
class="px-3.5 py-1.5 text-sm font-medium bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black dark:hover:bg-gray-100 transition rounded-full"
class="px-3.5 py-1.5 text-sm font-medium bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black transition rounded-full"
type="submit"
>
{$i18n.t('Save')}

4
src/lib/components/admin/Settings/Evaluations.svelte

@ -116,7 +116,7 @@
</div>
{#if evaluationConfig.ENABLE_EVALUATION_ARENA_MODELS}
<hr class=" border-gray-50 dark:border-gray-700/10 my-2" />
<hr class=" border-gray-50 my-2" />
<div class="flex justify-between items-center mb-2">
<div class="text-sm font-medium">{$i18n.t('Manage Arena Models')}</div>
@ -170,7 +170,7 @@
<div class="flex justify-end pt-3 text-sm font-medium">
<button
class="px-3.5 py-1.5 text-sm font-medium bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black dark:hover:bg-gray-100 transition rounded-full"
class="px-3.5 py-1.5 text-sm font-medium bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black transition rounded-full"
type="submit"
>
{$i18n.t('Save')}

24
src/lib/components/admin/Settings/Evaluations/ArenaModelModal.svelte

@ -117,7 +117,7 @@
<Modal size="sm" bind:show>
<div>
<div class=" flex justify-between dark:text-gray-100 px-5 pt-4 pb-2">
<div class=" flex justify-between px-5 pt-4 pb-2">
<div class=" text-lg font-medium self-center font-primary">
{#if edit}
{$i18n.t('Edit Arena Model')}
@ -144,7 +144,7 @@
</button>
</div>
<div class="flex flex-col md:flex-row w-full px-4 pb-4 md:space-x-4 dark:text-gray-200">
<div class="flex flex-col md:flex-row w-full px-4 pb-4 md:space-x-4 ">
<div class=" flex flex-col w-full sm:flex-row sm:justify-center sm:space-x-6">
<form
class="flex flex-col w-full"
@ -245,7 +245,7 @@
<div class="flex-1">
<input
class="w-full text-sm bg-transparent placeholder:text-gray-300 dark:placeholder:text-gray-700 outline-hidden"
class="w-full text-sm bg-transparent placeholder:text-gray-300 outline-hidden"
type="text"
bind:value={name}
placeholder={$i18n.t('Model Name')}
@ -260,7 +260,7 @@
<div class="flex-1">
<input
class="w-full text-sm bg-transparent placeholder:text-gray-300 dark:placeholder:text-gray-700 outline-hidden"
class="w-full text-sm bg-transparent placeholder:text-gray-300 outline-hidden"
type="text"
bind:value={id}
placeholder={$i18n.t('Model ID')}
@ -277,7 +277,7 @@
<div class="flex-1">
<input
class="w-full text-sm bg-transparent placeholder:text-gray-300 dark:placeholder:text-gray-700 outline-hidden"
class="w-full text-sm bg-transparent placeholder:text-gray-300 outline-hidden"
type="text"
bind:value={description}
placeholder={$i18n.t('Enter description')}
@ -286,15 +286,15 @@
</div>
</div>
<hr class=" border-gray-100 dark:border-gray-700/10 my-2.5 w-full" />
<hr class=" border-gray-100 my-2.5 w-full" />
<div class="my-2 -mx-2">
<div class="px-3 py-2 bg-gray-50 dark:bg-gray-950 rounded-lg">
<div class="px-3 py-2 bg-gray-50 rounded-lg">
<AccessControl bind:accessControl />
</div>
</div>
<hr class=" border-gray-100 dark:border-gray-700/10 my-2.5 w-full" />
<hr class=" border-gray-100 my-2.5 w-full" />
<div class="flex flex-col w-full">
<div class="mb-1 flex justify-between">
@ -344,13 +344,13 @@
{/if}
</div>
<hr class=" border-gray-100 dark:border-gray-700/10 my-2.5 w-full" />
<hr class=" border-gray-100 my-2.5 w-full" />
<div class="flex items-center">
<select
class="w-full py-1 text-sm rounded-lg bg-transparent {selectedModelId
? ''
: 'text-gray-500'} placeholder:text-gray-300 dark:placeholder:text-gray-700 outline-hidden"
: 'text-gray-500'} placeholder:text-gray-300 outline-hidden"
bind:value={selectedModelId}
>
<option value="">{$i18n.t('Select a model')}</option>
@ -375,7 +375,7 @@
<div class="flex justify-end pt-3 text-sm font-medium gap-1.5">
{#if edit}
<button
class="px-3.5 py-1.5 text-sm font-medium dark:bg-black dark:hover:bg-gray-950 dark:text-white bg-white text-black hover:bg-gray-100 transition rounded-full flex flex-row space-x-1 items-center"
class="px-3.5 py-1.5 text-sm font-medium bg-white text-black hover:bg-gray-100 transition rounded-full flex flex-row space-x-1 items-center"
type="button"
on:click={() => {
dispatch('delete', model);
@ -387,7 +387,7 @@
{/if}
<button
class="px-3.5 py-1.5 text-sm font-medium bg-black hover:bg-gray-950 text-white dark:bg-white dark:text-black dark:hover:bg-gray-100 transition rounded-full flex flex-row space-x-1 items-center {loading
class="px-3.5 py-1.5 text-sm font-medium bg-black hover:bg-gray-950 text-white dark:bg-white dark:text-black transition rounded-full flex flex-row space-x-1 items-center {loading
? ' cursor-not-allowed'
: ''}"
type="submit"

2
src/lib/components/admin/Settings/Evaluations/Model.svelte

@ -50,7 +50,7 @@
<div class="flex items-center">
<button
class="self-center w-fit text-sm p-1.5 dark:text-gray-300 dark:hover:text-white hover:bg-black/5 dark:hover:bg-white/5 rounded-xl"
class="self-center w-fit text-sm p-1.5 dark:hover:text-white hover:bg-black/5 dark:hover:bg-white/5 rounded-xl"
type="button"
on:click={() => {
showModel = true;

22
src/lib/components/admin/Settings/General.svelte

@ -118,7 +118,7 @@
<div class="mb-3.5">
<div class=" mb-2.5 text-base font-medium">{$i18n.t('General')}</div>
<hr class=" border-gray-100 dark:border-gray-850 my-2" />
<hr class=" border-gray-100 my-2" />
<div class="mb-2.5">
<div class=" mb-1 text-xs font-medium flex space-x-2 items-center">
@ -127,7 +127,7 @@
</div>
</div>
<div class="flex w-full justify-between items-center">
<div class="flex flex-col text-xs text-gray-700 dark:text-gray-200">
<div class="flex flex-col text-xs text-gray-700 ">
<div class="flex gap-1">
<Tooltip content={WEBUI_BUILD_HASH}>
v{WEBUI_VERSION}
@ -157,7 +157,7 @@
</div>
<button
class=" text-xs px-3 py-1.5 bg-gray-50 hover:bg-gray-100 dark:bg-gray-850 dark:hover:bg-gray-800 transition rounded-lg font-medium"
class=" text-xs px-3 py-1.5 bg-gray-50 hover:bg-gray-100 transition rounded-lg font-medium"
type="button"
on:click={() => {
checkForVersionUpdates();
@ -232,7 +232,7 @@
</div>
<!-- <button
class="flex-shrink-0 text-xs px-3 py-1.5 bg-gray-50 hover:bg-gray-100 dark:bg-gray-850 dark:hover:bg-gray-800 transition rounded-lg font-medium"
class="flex-shrink-0 text-xs px-3 py-1.5 bg-gray-50 hover:bg-gray-100 transition rounded-lg font-medium"
>
{$i18n.t('Activate')}
</button> -->
@ -243,7 +243,7 @@
<div class="mb-3">
<div class=" mb-2.5 text-base font-medium">{$i18n.t('Authentication')}</div>
<hr class=" border-gray-100 dark:border-gray-850 my-2" />
<hr class=" border-gray-100 my-2" />
<div class=" mb-2.5 flex w-full justify-between">
<div class=" self-center text-xs font-medium">{$i18n.t('Default User Role')}</div>
@ -296,7 +296,7 @@
</div>
<input
class="w-full mt-1 rounded-lg text-sm dark:text-gray-300 bg-transparent outline-hidden"
class="w-full mt-1 rounded-lg text-sm bg-transparent outline-hidden"
type="text"
placeholder={`e.g.) /api/v1/messages, /api/v1/channels`}
bind:value={adminConfig.API_KEY_ALLOWED_ENDPOINTS}
@ -323,7 +323,7 @@
<div class="flex mt-2 space-x-2">
<input
class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 dark:text-gray-300 dark:bg-gray-850 outline-hidden"
class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 outline-hidden"
type="text"
placeholder={`e.g.) "30m","1h", "10d". `}
bind:value={adminConfig.JWT_EXPIRES_IN}
@ -555,7 +555,7 @@
<div class="mb-3">
<div class=" mb-2.5 text-base font-medium">{$i18n.t('Features')}</div>
<hr class=" border-gray-100 dark:border-gray-850 my-2" />
<hr class=" border-gray-100 my-2" />
<div class="mb-2.5 flex w-full items-center justify-between pr-2">
<div class=" self-center text-xs font-medium">
@ -586,7 +586,7 @@
<div class="flex mt-2 space-x-2">
<input
class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 dark:text-gray-300 dark:bg-gray-850 outline-hidden"
class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 outline-hidden"
type="text"
placeholder={`e.g.) "http://localhost:3000"`}
bind:value={adminConfig.WEBUI_URL}
@ -607,7 +607,7 @@
<div class="flex mt-2 space-x-2">
<input
class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 dark:text-gray-300 dark:bg-gray-850 outline-hidden"
class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 outline-hidden"
type="text"
placeholder={`https://example.com/webhook`}
bind:value={webhookUrl}
@ -621,7 +621,7 @@
<div class="flex justify-end pt-3 text-sm font-medium">
<button
class="px-3.5 py-1.5 text-sm font-medium bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black dark:hover:bg-gray-100 transition rounded-full"
class="px-3.5 py-1.5 text-sm font-medium bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black transition rounded-full"
type="submit"
>
{$i18n.t('Save')}

34
src/lib/components/admin/Settings/Images.svelte

@ -302,7 +302,7 @@
</div>
</div>
</div>
<hr class=" border-gray-100 dark:border-gray-850" />
<hr class=" border-gray-100 " />
<div class="flex flex-col gap-2">
{#if (config?.engine ?? 'automatic1111') === 'automatic1111'}
@ -311,13 +311,13 @@
<div class="flex w-full">
<div class="flex-1 mr-2">
<input
class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 dark:text-gray-300 dark:bg-gray-850 outline-hidden"
class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 outline-hidden"
placeholder={$i18n.t('Enter URL (e.g. http://127.0.0.1:7860/)')}
bind:value={config.automatic1111.AUTOMATIC1111_BASE_URL}
/>
</div>
<button
class="px-2.5 bg-gray-50 hover:bg-gray-100 text-gray-800 dark:bg-gray-850 dark:hover:bg-gray-800 dark:text-gray-100 rounded-lg transition"
class="px-2.5 bg-gray-50 hover:bg-gray-100 text-gray-800 rounded-lg transition"
type="button"
on:click={async () => {
await updateConfigHandler();
@ -390,7 +390,7 @@
<Tooltip content={$i18n.t('Enter Sampler (e.g. Euler a)')} placement="top-start">
<input
list="sampler-list"
class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 dark:text-gray-300 dark:bg-gray-850 outline-hidden"
class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 outline-hidden"
placeholder={$i18n.t('Enter Sampler (e.g. Euler a)')}
bind:value={config.automatic1111.AUTOMATIC1111_SAMPLER}
/>
@ -412,7 +412,7 @@
<Tooltip content={$i18n.t('Enter Scheduler (e.g. Karras)')} placement="top-start">
<input
list="scheduler-list"
class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 dark:text-gray-300 dark:bg-gray-850 outline-hidden"
class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 outline-hidden"
placeholder={$i18n.t('Enter Scheduler (e.g. Karras)')}
bind:value={config.automatic1111.AUTOMATIC1111_SCHEDULER}
/>
@ -433,7 +433,7 @@
<div class="flex-1 mr-2">
<Tooltip content={$i18n.t('Enter CFG Scale (e.g. 7.0)')} placement="top-start">
<input
class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 dark:text-gray-300 dark:bg-gray-850 outline-hidden"
class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 outline-hidden"
placeholder={$i18n.t('Enter CFG Scale (e.g. 7.0)')}
bind:value={config.automatic1111.AUTOMATIC1111_CFG_SCALE}
/>
@ -447,13 +447,13 @@
<div class="flex w-full">
<div class="flex-1 mr-2">
<input
class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 dark:text-gray-300 dark:bg-gray-850 outline-hidden"
class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 outline-hidden"
placeholder={$i18n.t('Enter URL (e.g. http://127.0.0.1:7860/)')}
bind:value={config.comfyui.COMFYUI_BASE_URL}
/>
</div>
<button
class="px-2.5 bg-gray-50 hover:bg-gray-100 text-gray-800 dark:bg-gray-850 dark:hover:bg-gray-800 dark:text-gray-100 rounded-lg transition"
class="px-2.5 bg-gray-50 hover:bg-gray-100 text-gray-800 rounded-lg transition"
type="button"
on:click={async () => {
await updateConfigHandler();
@ -501,7 +501,7 @@
{#if config.comfyui.COMFYUI_WORKFLOW}
<textarea
class="w-full rounded-lg mb-1 py-2 px-4 text-xs bg-gray-50 dark:text-gray-300 dark:bg-gray-850 outline-hidden disabled:text-gray-600 resize-none"
class="w-full rounded-lg mb-1 py-2 px-4 text-xs bg-gray-50 outline-hidden disabled:text-gray-600 resize-none"
rows="10"
bind:value={config.comfyui.COMFYUI_WORKFLOW}
required
@ -529,7 +529,7 @@
/>
<button
class="w-full text-sm font-medium py-2 bg-transparent hover:bg-gray-100 border border-dashed dark:border-gray-850 dark:hover:bg-gray-850 text-center rounded-xl"
class="w-full text-sm font-medium py-2 bg-transparent hover:bg-gray-100 border border-dashed text-center rounded-xl"
type="button"
on:click={() => {
document.getElementById('upload-comfyui-workflow-input')?.click();
@ -551,7 +551,7 @@
<div class="text-xs flex flex-col gap-1.5">
{#each requiredWorkflowNodes as node}
<div class="flex w-full items-center border dark:border-gray-850 rounded-lg">
<div class="flex w-full items-center border rounded-lg">
<div class="shrink-0">
<div
class=" capitalize line-clamp-1 font-medium px-3 py-1 w-20 text-center rounded-l-lg bg-green-500/10 text-green-700 dark:text-green-200"
@ -562,7 +562,7 @@
<div class="">
<Tooltip content="Input Key (e.g. text, unet_name, steps)">
<input
class="py-1 px-3 w-24 text-xs text-center bg-transparent outline-hidden border-r dark:border-gray-850"
class="py-1 px-3 w-24 text-xs text-center bg-transparent outline-hidden border-r "
placeholder="Key"
bind:value={node.key}
required
@ -631,7 +631,7 @@
</div>
{#if config?.enabled}
<hr class=" border-gray-100 dark:border-gray-850" />
<hr class=" border-gray-100 " />
<div>
<div class=" mb-2.5 text-sm font-medium">{$i18n.t('Set Default Model')}</div>
@ -642,7 +642,7 @@
<Tooltip content={$i18n.t('Enter Model ID')} placement="top-start">
<input
list="model-list"
class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 dark:text-gray-300 dark:bg-gray-850 outline-hidden"
class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 outline-hidden"
bind:value={imageGenerationConfig.MODEL}
placeholder="Select a model"
required
@ -666,7 +666,7 @@
<div class="flex-1 mr-2">
<Tooltip content={$i18n.t('Enter Image Size (e.g. 512x512)')} placement="top-start">
<input
class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 dark:text-gray-300 dark:bg-gray-850 outline-hidden"
class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 outline-hidden"
placeholder={$i18n.t('Enter Image Size (e.g. 512x512)')}
bind:value={imageGenerationConfig.IMAGE_SIZE}
required
@ -682,7 +682,7 @@
<div class="flex-1 mr-2">
<Tooltip content={$i18n.t('Enter Number of Steps (e.g. 50)')} placement="top-start">
<input
class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 dark:text-gray-300 dark:bg-gray-850 outline-hidden"
class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 outline-hidden"
placeholder={$i18n.t('Enter Number of Steps (e.g. 50)')}
bind:value={imageGenerationConfig.IMAGE_STEPS}
required
@ -697,7 +697,7 @@
<div class="flex justify-end pt-3 text-sm font-medium">
<button
class="px-3.5 py-1.5 text-sm font-medium bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black dark:hover:bg-gray-100 transition rounded-full flex flex-row space-x-1 items-center {loading
class="px-3.5 py-1.5 text-sm font-medium bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black transition rounded-full flex flex-row space-x-1 items-center {loading
? ' cursor-not-allowed'
: ''}"
type="submit"

22
src/lib/components/admin/Settings/Interface.svelte

@ -72,7 +72,7 @@
<div class="mb-3.5">
<div class=" mb-2.5 text-base font-medium">{$i18n.t('Tasks')}</div>
<hr class=" border-gray-100 dark:border-gray-850 my-2" />
<hr class=" border-gray-100 my-2" />
<div class=" mb-1 font-medium flex items-center">
<div class=" text-xs mr-1">{$i18n.t('Set Task Model')}</div>
@ -102,7 +102,7 @@
<div class="flex-1">
<div class=" text-xs mb-1">{$i18n.t('Local Models')}</div>
<select
class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 dark:text-gray-300 dark:bg-gray-850 outline-hidden"
class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 outline-hidden"
bind:value={taskConfig.TASK_MODEL}
placeholder={$i18n.t('Select a model')}
>
@ -118,7 +118,7 @@
<div class="flex-1">
<div class=" text-xs mb-1">{$i18n.t('External Models')}</div>
<select
class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 dark:text-gray-300 dark:bg-gray-850 outline-hidden"
class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 outline-hidden"
bind:value={taskConfig.TASK_MODEL_EXTERNAL}
placeholder={$i18n.t('Select a model')}
>
@ -281,7 +281,7 @@
<div class="mb-3.5">
<div class=" mb-2.5 text-base font-medium">{$i18n.t('UI')}</div>
<hr class=" border-gray-100 dark:border-gray-850 my-2" />
<hr class=" border-gray-100 my-2" />
<div class=" {banners.length > 0 ? ' mb-3' : ''}">
<div class="mb-2.5 flex w-full justify-between">
@ -325,7 +325,7 @@
{#each banners as banner, bannerIdx}
<div class=" flex justify-between">
<div
class="flex flex-row flex-1 border rounded-xl border-gray-100 dark:border-gray-850"
class="flex flex-row flex-1 border rounded-xl border-gray-100 "
>
<select
class="w-fit capitalize rounded-xl py-2 px-4 text-xs bg-transparent outline-hidden"
@ -411,25 +411,25 @@
<div class="grid lg:grid-cols-2 flex-col gap-1.5">
{#each promptSuggestions as prompt, promptIdx}
<div
class=" flex border border-gray-100 dark:border-none dark:bg-gray-850 rounded-xl py-1.5"
class=" flex border border-gray-100 dark:border-none rounded-xl py-1.5"
>
<div class="flex flex-col flex-1 pl-1">
<div class="flex border-b border-gray-100 dark:border-gray-850 w-full">
<div class="flex border-b border-gray-100 w-full">
<input
class="px-3 py-1.5 text-xs w-full bg-transparent outline-hidden border-r border-gray-100 dark:border-gray-850"
class="px-3 py-1.5 text-xs w-full bg-transparent outline-hidden border-r border-gray-100 "
placeholder={$i18n.t('Title (e.g. Tell me a fun fact)')}
bind:value={prompt.title[0]}
/>
<input
class="px-3 py-1.5 text-xs w-full bg-transparent outline-hidden border-r border-gray-100 dark:border-gray-850"
class="px-3 py-1.5 text-xs w-full bg-transparent outline-hidden border-r border-gray-100 "
placeholder={$i18n.t('Subtitle (e.g. about the Roman Empire)')}
bind:value={prompt.title[1]}
/>
</div>
<textarea
class="px-3 py-1.5 text-xs w-full bg-transparent outline-hidden border-r border-gray-100 dark:border-gray-850 resize-none"
class="px-3 py-1.5 text-xs w-full bg-transparent outline-hidden border-r border-gray-100 resize-none"
placeholder={$i18n.t(
'Prompt (e.g. Tell me a fun fact about the Roman Empire)'
)}
@ -473,7 +473,7 @@
<div class="flex justify-end text-sm font-medium">
<button
class="px-3.5 py-1.5 text-sm font-medium bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black dark:hover:bg-gray-100 transition rounded-full"
class="px-3.5 py-1.5 text-sm font-medium bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black transition rounded-full"
type="submit"
>
{$i18n.t('Save')}

12
src/lib/components/admin/Settings/Models.svelte

@ -160,8 +160,8 @@
<div class="flex justify-between items-center">
<div class="flex items-center md:self-center text-xl font-medium px-0.5">
{$i18n.t('Models')}
<div class="flex self-center w-[1px] h-6 mx-2.5 bg-gray-50 dark:bg-gray-850" />
<span class="text-lg font-medium text-gray-500 dark:text-gray-300"
<div class="flex self-center w-[1px] h-6 mx-2.5 bg-gray-50 " />
<span class="text-lg font-medium text-gray-500 "
>{filteredModels.length}</span
>
</div>
@ -262,7 +262,7 @@
</button>
<div class="flex flex-row gap-0.5 items-center self-center">
<button
class="self-center w-fit text-sm px-2 py-2 dark:text-gray-300 dark:hover:text-white hover:bg-black/5 dark:hover:bg-white/5 rounded-xl"
class="self-center w-fit text-sm px-2 py-2 dark:hover:text-white hover:bg-black/5 dark:hover:bg-white/5 rounded-xl"
type="button"
on:click={() => {
selectedModelId = model.id;
@ -301,7 +301,7 @@
{/each}
{:else}
<div class="flex flex-col items-center justify-center w-full h-20">
<div class="text-gray-500 dark:text-gray-400 text-xs">
<div class="text-gray-500 text-xs">
{$i18n.t('No models found')}
</div>
</div>
@ -355,7 +355,7 @@
/>
<button
class="flex text-xs items-center space-x-1 px-3 py-1.5 rounded-xl bg-gray-50 hover:bg-gray-100 dark:bg-gray-800 dark:hover:bg-gray-700 dark:text-gray-200 transition"
class="flex text-xs items-center space-x-1 px-3 py-1.5 rounded-xl bg-gray-50 hover:bg-gray-100 transition"
on:click={() => {
modelsImportInputElement.click();
}}
@ -381,7 +381,7 @@
</button>
<button
class="flex text-xs items-center space-x-1 px-3 py-1.5 rounded-xl bg-gray-50 hover:bg-gray-100 dark:bg-gray-800 dark:hover:bg-gray-700 dark:text-gray-200 transition"
class="flex text-xs items-center space-x-1 px-3 py-1.5 rounded-xl bg-gray-50 hover:bg-gray-100 transition"
on:click={async () => {
downloadModels(models);
}}

14
src/lib/components/admin/Settings/Models/ConfigureModelsModal.svelte

@ -111,7 +111,7 @@
<Modal size="sm" bind:show>
<div>
<div class=" flex justify-between dark:text-gray-100 px-5 pt-4 pb-2">
<div class=" flex justify-between px-5 pt-4 pb-2">
<div class=" text-lg font-medium self-center font-primary">
{$i18n.t('Settings')}
</div>
@ -134,7 +134,7 @@
</button>
</div>
<div class="flex flex-col md:flex-row w-full px-5 pb-4 md:space-x-4 dark:text-gray-200">
<div class="flex flex-col md:flex-row w-full px-5 pb-4 md:space-x-4 ">
<div class=" flex flex-col w-full sm:flex-row sm:justify-center sm:space-x-6">
{#if config}
<form
@ -153,7 +153,7 @@
</div>
</div>
<hr class=" border-gray-100 dark:border-gray-700/10 my-2.5 w-full" />
<hr class=" border-gray-100 my-2.5 w-full" />
<div>
<div class="flex flex-col w-full">
@ -165,7 +165,7 @@
<select
class="w-full py-1 text-sm rounded-lg bg-transparent {selectedModelId
? ''
: 'text-gray-500'} placeholder:text-gray-300 dark:placeholder:text-gray-700 outline-hidden"
: 'text-gray-500'} placeholder:text-gray-300 outline-hidden"
bind:value={selectedModelId}
>
<option value="">{$i18n.t('Select a model')}</option>
@ -177,7 +177,7 @@
</select>
</div>
<!-- <hr class=" border-gray-100 dark:border-gray-700/10 my-2.5 w-full" /> -->
<!-- <hr class=" border-gray-100 my-2.5 w-full" /> -->
{#if defaultModelIds.length > 0}
<div class="flex flex-col">
@ -212,7 +212,7 @@
<div class="flex justify-between pt-3 text-sm font-medium gap-1.5">
<Tooltip content={$i18n.t('This will delete all models including custom models')}>
<button
class="px-3.5 py-1.5 text-sm font-medium dark:bg-black dark:hover:bg-gray-950 dark:text-white bg-white text-black hover:bg-gray-100 transition rounded-full flex flex-row space-x-1 items-center"
class="px-3.5 py-1.5 text-sm font-medium bg-white text-black hover:bg-gray-100 transition rounded-full flex flex-row space-x-1 items-center"
type="button"
on:click={() => {
showResetModal = true;
@ -224,7 +224,7 @@
</Tooltip>
<button
class="px-3.5 py-1.5 text-sm font-medium bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black dark:hover:bg-gray-100 transition rounded-full flex flex-row space-x-1 items-center {loading
class="px-3.5 py-1.5 text-sm font-medium bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black transition rounded-full flex flex-row space-x-1 items-center {loading
? ' cursor-not-allowed'
: ''}"
type="submit"

2
src/lib/components/admin/Settings/Models/Manage/ManageMultipleOllama.svelte

@ -10,7 +10,7 @@
</script>
{#if ollamaConfig}
<div class="flex-1 mb-2.5 pr-1.5 rounded-lg bg-gray-50 dark:text-gray-300 dark:bg-gray-850">
<div class="flex-1 mb-2.5 pr-1.5 rounded-lg bg-gray-50 ">
<select
class="w-full py-2 px-4 text-sm outline-hidden bg-transparent"
bind:value={selectedUrlIdx}

30
src/lib/components/admin/Settings/Models/Manage/ManageOllama.svelte

@ -598,7 +598,7 @@
<div class="flex w-full">
<div class="flex-1 mr-2">
<input
class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 dark:text-gray-300 dark:bg-gray-850 outline-hidden"
class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 outline-hidden"
placeholder={$i18n.t('Enter model tag (e.g. {{modelTag}})', {
modelTag: 'mistral:7b'
})}
@ -606,7 +606,7 @@
/>
</div>
<button
class="px-2.5 bg-gray-50 hover:bg-gray-200 text-gray-800 dark:bg-gray-850 dark:hover:bg-gray-800 dark:text-gray-100 rounded-lg transition"
class="px-2.5 bg-gray-50 hover:bg-gray-200 text-gray-800 rounded-lg transition"
on:click={() => {
pullModelHandler();
}}
@ -663,7 +663,7 @@
<div class="mt-2 mb-1 text-xs text-gray-400 dark:text-gray-500">
{$i18n.t('To access the available model names for downloading,')}
<a
class=" text-gray-500 dark:text-gray-300 font-medium underline"
class=" text-gray-500 font-medium underline"
href="https://ollama.com/library"
target="_blank">{$i18n.t('click here.')}</a
>
@ -696,13 +696,13 @@
<Tooltip content={$i18n.t('Cancel')}>
<button
class="text-gray-800 dark:text-gray-100"
class="text-gray-800 "
on:click={() => {
cancelModelPullHandler(model);
}}
>
<svg
class="w-4 h-4 text-gray-800 dark:text-white"
class="w-4 h-4 text-gray-800 "
aria-hidden="true"
xmlns="http://www.w3.org/2000/svg"
width="24"
@ -737,7 +737,7 @@
<div class=" mb-2 text-sm font-medium">{$i18n.t('Delete a model')}</div>
<div class="flex w-full">
<div
class="flex-1 mr-2 pr-1.5 rounded-lg bg-gray-50 dark:text-gray-300 dark:bg-gray-850"
class="flex-1 mr-2 pr-1.5 rounded-lg bg-gray-50 "
>
<select
class="w-full py-2 px-4 text-sm outline-hidden bg-transparent"
@ -755,7 +755,7 @@
</select>
</div>
<button
class="px-2.5 bg-gray-50 hover:bg-gray-200 text-gray-800 dark:bg-gray-850 dark:hover:bg-gray-800 dark:text-gray-100 rounded-lg transition"
class="px-2.5 bg-gray-50 hover:bg-gray-200 text-gray-800 rounded-lg transition"
on:click={() => {
showModelDeleteConfirm = true;
}}
@ -781,7 +781,7 @@
<div class="flex w-full">
<div class="flex-1 mr-2 flex flex-col gap-2">
<input
class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 dark:text-gray-300 dark:bg-gray-850 outline-hidden"
class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 outline-hidden"
placeholder={$i18n.t('Enter model tag (e.g. {{modelTag}})', {
modelTag: 'my-modelfile'
})}
@ -791,7 +791,7 @@
<textarea
bind:value={createModelObject}
class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 dark:text-gray-100 dark:bg-gray-850 outline-hidden resize-none scrollbar-hidden"
class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 outline-hidden resize-none scrollbar-hidden"
rows="6"
placeholder={`e.g. {"model": "my-modelfile", "from": "ollama:7b"})`}
disabled={createModelLoading}
@ -800,7 +800,7 @@
<div class="flex self-start">
<button
class="px-2.5 py-2.5 bg-gray-50 hover:bg-gray-200 text-gray-800 dark:bg-gray-850 dark:hover:bg-gray-800 dark:text-gray-100 rounded-lg transition disabled:cursor-not-allowed"
class="px-2.5 py-2.5 bg-gray-50 hover:bg-gray-200 text-gray-800 rounded-lg transition disabled:cursor-not-allowed"
on:click={() => {
createModelHandler();
}}
@ -907,7 +907,7 @@
<button
type="button"
class="w-full rounded-lg text-left py-2 px-4 bg-gray-50 dark:text-gray-300 dark:bg-gray-850"
class="w-full rounded-lg text-left py-2 px-4 bg-gray-50 "
on:click={() => {
modelUploadInputElement.click();
}}
@ -922,7 +922,7 @@
{:else}
<div class="flex-1 {modelFileUrl !== '' ? 'mr-2' : ''}">
<input
class="w-full rounded-lg text-left py-2 px-4 bg-gray-50 dark:text-gray-300 dark:bg-gray-850 outline-hidden {modelFileUrl !==
class="w-full rounded-lg text-left py-2 px-4 bg-gray-50 outline-hidden {modelFileUrl !==
''
? 'mr-2'
: ''}"
@ -937,7 +937,7 @@
{#if (modelUploadMode === 'file' && modelInputFile && modelInputFile.length > 0) || (modelUploadMode === 'url' && modelFileUrl !== '')}
<button
class="px-2.5 bg-gray-50 hover:bg-gray-200 text-gray-800 dark:bg-gray-850 dark:hover:bg-gray-800 dark:text-gray-100 rounded-lg disabled:cursor-not-allowed transition"
class="px-2.5 bg-gray-50 hover:bg-gray-200 text-gray-800 rounded-lg disabled:cursor-not-allowed transition"
type="submit"
disabled={modelTransferring}
>
@ -998,7 +998,7 @@
</div>
<textarea
bind:value={modelFileContent}
class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 dark:text-gray-100 dark:bg-gray-850 outline-hidden resize-none"
class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 outline-hidden resize-none"
rows="6"
/>
</div>
@ -1007,7 +1007,7 @@
<div class=" mt-1 text-xs text-gray-400 dark:text-gray-500">
{$i18n.t('To access the GGUF models available for downloading,')}
<a
class=" text-gray-500 dark:text-gray-300 font-medium underline"
class=" text-gray-500 font-medium underline"
href="https://huggingface.co/models?search=gguf"
target="_blank">{$i18n.t('click here.')}</a
>

6
src/lib/components/admin/Settings/Models/ManageModelsModal.svelte

@ -38,7 +38,7 @@
<Modal size="sm" bind:show>
<div>
<div class=" flex justify-between dark:text-gray-100 px-5 pt-4">
<div class=" flex justify-between px-5 pt-4">
<div class=" text-lg font-medium self-center font-primary">
{$i18n.t('Manage Models')}
</div>
@ -61,7 +61,7 @@
</button>
</div>
<div class="flex flex-col md:flex-row w-full px-3 pb-4 md:space-x-4 dark:text-gray-200">
<div class="flex flex-col md:flex-row w-full px-3 pb-4 md:space-x-4 ">
<div class=" flex flex-col w-full sm:flex-row sm:justify-center sm:space-x-6">
{#if selected === ''}
<div class=" py-5 text-gray-400 text-xs">
@ -72,7 +72,7 @@
{:else if selected !== null}
<div class=" flex w-full flex-col">
<div
class="flex gap-1 scrollbar-none overflow-x-auto w-fit text-center text-sm font-medium rounded-full bg-transparent dark:text-gray-200"
class="flex gap-1 scrollbar-none overflow-x-auto w-fit text-center text-sm font-medium rounded-full bg-transparent "
>
<button
class="min-w-fit rounded-full p-1.5 {selected === 'ollama'

26
src/lib/components/admin/Settings/Pipelines.svelte

@ -234,7 +234,7 @@
<div class="flex gap-2">
<div class="flex-1">
<select
class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 dark:text-gray-300 dark:bg-gray-850 outline-hidden"
class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 outline-hidden"
bind:value={selectedPipelinesUrlIdx}
placeholder={$i18n.t('Select a pipeline url')}
on:change={async () => {
@ -271,7 +271,7 @@
/>
<button
class="w-full text-sm font-medium py-2 bg-transparent hover:bg-gray-100 border border-dashed dark:border-gray-850 dark:hover:bg-gray-850 text-center rounded-xl"
class="w-full text-sm font-medium py-2 bg-transparent hover:bg-gray-100 border border-dashed text-center rounded-xl"
type="button"
on:click={() => {
document.getElementById('pipelines-upload-input')?.click();
@ -285,7 +285,7 @@
</button>
</div>
<button
class="px-2.5 bg-gray-100 hover:bg-gray-200 text-gray-800 dark:bg-gray-850 dark:hover:bg-gray-800 dark:text-gray-100 rounded-lg transition"
class="px-2.5 bg-gray-100 hover:bg-gray-200 text-gray-800 rounded-lg transition"
on:click={() => {
uploadPipelineHandler();
}}
@ -348,13 +348,13 @@
<div class="flex w-full">
<div class="flex-1 mr-2">
<input
class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 dark:text-gray-300 dark:bg-gray-850 outline-hidden"
class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 outline-hidden"
placeholder={$i18n.t('Enter Github Raw URL')}
bind:value={pipelineDownloadUrl}
/>
</div>
<button
class="px-2.5 bg-gray-100 hover:bg-gray-200 text-gray-800 dark:bg-gray-850 dark:hover:bg-gray-800 dark:text-gray-100 rounded-lg transition"
class="px-2.5 bg-gray-100 hover:bg-gray-200 text-gray-800 rounded-lg transition"
on:click={() => {
addPipelineHandler();
}}
@ -410,15 +410,15 @@
</div>
<div class="mt-2 text-xs text-gray-500">
<span class=" font-semibold dark:text-gray-200">Warning:</span> Pipelines are a plugin
<span class=" font-semibold ">Warning:</span> Pipelines are a plugin
system with arbitrary code execution —
<span class=" font-medium dark:text-gray-400"
<span class=" font-medium "
>don't fetch random pipelines from sources you don't trust.</span
>
</div>
</div>
<hr class="border-gray-100 dark:border-gray-850 my-3 w-full" />
<hr class="border-gray-100 my-3 w-full" />
{#if pipelines !== null}
{#if pipelines.length > 0}
@ -432,7 +432,7 @@
<div class="flex gap-2">
<div class="flex-1">
<select
class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 dark:text-gray-300 dark:bg-gray-850 outline-hidden"
class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 outline-hidden"
bind:value={selectedPipelineIdx}
placeholder={$i18n.t('Select a pipeline')}
on:change={async () => {
@ -449,7 +449,7 @@
</div>
<button
class="px-2.5 bg-gray-100 hover:bg-gray-200 text-gray-800 dark:bg-gray-850 dark:hover:bg-gray-800 dark:text-gray-100 rounded-lg transition"
class="px-2.5 bg-gray-100 hover:bg-gray-200 text-gray-800 rounded-lg transition"
on:click={() => {
deletePipelineHandler();
}}
@ -502,7 +502,7 @@
<div class=" flex-1">
{#if valves_spec.properties[property]?.enum ?? null}
<select
class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 dark:text-gray-300 dark:bg-gray-850 outline-hidden"
class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 outline-hidden"
bind:value={valves[property]}
>
{#each valves_spec.properties[property].enum as option}
@ -523,7 +523,7 @@
</div>
{:else}
<input
class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 dark:text-gray-300 dark:bg-gray-850 outline-hidden"
class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 outline-hidden"
type="text"
placeholder={valves_spec.properties[property].title}
bind:value={valves[property]}
@ -569,7 +569,7 @@
{#if PIPELINES_LIST !== null && PIPELINES_LIST.length > 0}
<div class="flex justify-end pt-3 text-sm font-medium">
<button
class="px-3.5 py-1.5 text-sm font-medium bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black dark:hover:bg-gray-100 transition rounded-full"
class="px-3.5 py-1.5 text-sm font-medium bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black transition rounded-full"
type="submit"
>
{$i18n.t('Save')}

24
src/lib/components/admin/Settings/WebSearch.svelte

@ -141,7 +141,7 @@
<div class="flex w-full">
<div class="flex-1">
<input
class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 dark:text-gray-300 dark:bg-gray-850 outline-hidden"
class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 outline-hidden"
type="text"
placeholder={$i18n.t('Enter Searxng Query URL')}
bind:value={webConfig.search.searxng_query_url}
@ -169,7 +169,7 @@
<div class="flex w-full">
<div class="flex-1">
<input
class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 dark:text-gray-300 dark:bg-gray-850 outline-hidden"
class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 outline-hidden"
type="text"
placeholder={$i18n.t('Enter Google PSE Engine Id')}
bind:value={webConfig.search.google_pse_engine_id}
@ -274,7 +274,7 @@
<div class="flex w-full">
<div class="flex-1">
<input
class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 dark:text-gray-300 dark:bg-gray-850 outline-hidden"
class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 outline-hidden"
type="text"
placeholder={$i18n.t('Enter SearchApi Engine')}
bind:value={webConfig.search.searchapi_engine}
@ -302,7 +302,7 @@
<div class="flex w-full">
<div class="flex-1">
<input
class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 dark:text-gray-300 dark:bg-gray-850 outline-hidden"
class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 outline-hidden"
type="text"
placeholder={$i18n.t('Enter SerpApi Engine')}
bind:value={webConfig.search.serpapi_engine}
@ -353,7 +353,7 @@
<div class="flex w-full">
<div class="flex-1">
<input
class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 dark:text-gray-300 dark:bg-gray-850 outline-hidden"
class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 outline-hidden"
type="text"
placeholder={$i18n.t('Enter Bing Search V7 Endpoint')}
bind:value={webConfig.search.bing_search_v7_endpoint}
@ -385,7 +385,7 @@
</div>
<input
class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 dark:text-gray-300 dark:bg-gray-850 outline-hidden"
class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 outline-hidden"
placeholder={$i18n.t('Search Result Count')}
bind:value={webConfig.search.result_count}
required
@ -398,7 +398,7 @@
</div>
<input
class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 dark:text-gray-300 dark:bg-gray-850 outline-hidden"
class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 outline-hidden"
placeholder={$i18n.t('Concurrent Requests')}
bind:value={webConfig.search.concurrent_requests}
required
@ -412,7 +412,7 @@
</div>
<input
class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 dark:text-gray-300 dark:bg-gray-850 outline-hidden"
class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 outline-hidden"
placeholder={$i18n.t(
'Enter domains separated by commas (e.g., example.com,site.org)'
)}
@ -422,7 +422,7 @@
{/if}
</div>
<hr class="border-gray-100 dark:border-gray-850 my-2" />
<hr class="border-gray-100 my-2" />
<div>
<div class=" mb-1 text-sm font-medium">
@ -462,7 +462,7 @@
<div class=" w-20 text-xs font-medium self-center">{$i18n.t('Language')}</div>
<div class=" flex-1 self-center">
<input
class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 dark:text-gray-300 dark:bg-gray-850 outline-hidden"
class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 outline-hidden"
type="text"
placeholder={$i18n.t('Enter language codes')}
bind:value={youtubeLanguage}
@ -477,7 +477,7 @@
<div class=" w-20 text-xs font-medium self-center">{$i18n.t('Proxy URL')}</div>
<div class=" flex-1 self-center">
<input
class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 dark:text-gray-300 dark:bg-gray-850 outline-hidden"
class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 outline-hidden"
type="text"
placeholder={$i18n.t('Enter proxy URL (e.g. https://user:password@host:port)')}
bind:value={youtubeProxyUrl}
@ -491,7 +491,7 @@
</div>
<div class="flex justify-end pt-3 text-sm font-medium">
<button
class="px-3.5 py-1.5 text-sm font-medium bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black dark:hover:bg-gray-100 transition rounded-full"
class="px-3.5 py-1.5 text-sm font-medium bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black transition rounded-full"
type="submit"
>
{$i18n.t('Save')}

2
src/lib/components/admin/Users.svelte

@ -49,7 +49,7 @@
<div class="flex flex-col lg:flex-row w-full h-full pb-2 lg:space-x-4">
<div
id="users-tabs-container"
class=" flex flex-row overflow-x-auto gap-2.5 max-w-full lg:gap-1 lg:flex-col lg:flex-none lg:w-40 dark:text-gray-200 text-sm font-medium text-left scrollbar-none"
class=" flex flex-row overflow-x-auto gap-2.5 max-w-full lg:gap-1 lg:flex-col lg:flex-none lg:w-40 text-sm font-medium text-left scrollbar-none"
>
<button
class="px-0.5 py-1 min-w-fit rounded-lg lg:flex-none flex text-right transition {selectedTab ===

14
src/lib/components/admin/Users/Groups.svelte

@ -117,9 +117,9 @@
<div class="mt-0.5 mb-2 gap-1 flex flex-col md:flex-row justify-between">
<div class="flex md:self-center text-lg font-medium px-0.5">
{$i18n.t('Groups')}
<div class="flex self-center w-[1px] h-6 mx-2.5 bg-gray-50 dark:bg-gray-850" />
<div class="flex self-center w-[1px] h-6 mx-2.5 bg-gray-50 " />
<span class="text-lg font-medium text-gray-500 dark:text-gray-300">{groups.length}</span>
<span class="text-lg font-medium text-gray-500 ">{groups.length}</span>
</div>
<div class="flex gap-1">
@ -149,7 +149,7 @@
<div>
<Tooltip content={$i18n.t('Create Group')}>
<button
class=" p-2 rounded-xl hover:bg-gray-100 dark:hover:bg-gray-850 transition font-medium text-sm flex items-center space-x-1"
class=" p-2 rounded-xl hover:bg-gray-100 transition font-medium text-sm flex items-center space-x-1"
on:click={() => {
showCreateGroupModal = !showCreateGroupModal;
}}
@ -169,13 +169,13 @@
{$i18n.t('Organize your users')}
</div>
<div class="mt-1 text-sm dark:text-gray-300">
<div class="mt-1 text-sm ">
{$i18n.t('Use groups to group your users and assign permissions.')}
</div>
<div class="mt-3">
<button
class=" px-4 py-1.5 text-sm rounded-full bg-black hover:bg-gray-800 text-white dark:bg-white dark:text-black dark:hover:bg-gray-100 transition font-medium flex items-center space-x-1"
class=" px-4 py-1.5 text-sm rounded-full bg-black hover:bg-gray-800 text-white dark:bg-white dark:text-black transition font-medium flex items-center space-x-1"
aria-label={$i18n.t('Create Group')}
on:click={() => {
showCreateGroupModal = true;
@ -195,7 +195,7 @@
<div class="w-full"></div>
</div>
<hr class="mt-1.5 border-gray-100 dark:border-gray-850" />
<hr class="mt-1.5 border-gray-100 " />
{#each filteredGroups as group}
<div class="my-2">
@ -205,7 +205,7 @@
</div>
{/if}
<hr class="mb-2 border-gray-100 dark:border-gray-850" />
<hr class="mb-2 border-gray-100 " />
<GroupModal
bind:show={showDefaultPermissionsModal}

10
src/lib/components/admin/Users/Groups/AddGroupModal.svelte

@ -39,7 +39,7 @@
<Modal size="sm" bind:show>
<div>
<div class=" flex justify-between dark:text-gray-100 px-5 pt-4 mb-1.5">
<div class=" flex justify-between px-5 pt-4 mb-1.5">
<div class=" text-lg font-medium self-center font-primary">
{$i18n.t('Add User Group')}
</div>
@ -62,7 +62,7 @@
</button>
</div>
<div class="flex flex-col md:flex-row w-full px-4 pb-4 md:space-x-4 dark:text-gray-200">
<div class="flex flex-col md:flex-row w-full px-4 pb-4 md:space-x-4 ">
<div class=" flex flex-col w-full sm:flex-row sm:justify-center sm:space-x-6">
<form
class="flex flex-col w-full"
@ -78,7 +78,7 @@
<div class="flex-1">
<input
class="w-full text-sm bg-transparent placeholder:text-gray-300 dark:placeholder:text-gray-700 outline-hidden"
class="w-full text-sm bg-transparent placeholder:text-gray-300 outline-hidden"
type="text"
bind:value={name}
placeholder={$i18n.t('Group Name')}
@ -94,7 +94,7 @@
<div class="flex-1">
<Textarea
className="w-full text-sm bg-transparent placeholder:text-gray-300 dark:placeholder:text-gray-700 outline-hidden resize-none"
className="w-full text-sm bg-transparent placeholder:text-gray-300 outline-hidden resize-none"
rows={2}
bind:value={description}
placeholder={$i18n.t('Group Description')}
@ -105,7 +105,7 @@
<div class="flex justify-end pt-3 text-sm font-medium gap-1.5">
<button
class="px-3.5 py-1.5 text-sm font-medium bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black dark:hover:bg-gray-100 transition rounded-full flex flex-row space-x-1 items-center {loading
class="px-3.5 py-1.5 text-sm font-medium bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black transition rounded-full flex flex-row space-x-1 items-center {loading
? ' cursor-not-allowed'
: ''}"
type="submit"

6
src/lib/components/admin/Users/Groups/Display.svelte

@ -16,7 +16,7 @@
<div class="flex-1">
<input
class="w-full text-sm bg-transparent placeholder:text-gray-300 dark:placeholder:text-gray-700 outline-hidden"
class="w-full text-sm bg-transparent placeholder:text-gray-300 outline-hidden"
type="text"
bind:value={name}
placeholder={$i18n.t('Group Name')}
@ -36,7 +36,7 @@
<div class="text-gray-500">#</div>
<input
class="w-full text-sm bg-transparent placeholder:text-gray-300 dark:placeholder:text-gray-700 outline-hidden"
class="w-full text-sm bg-transparent placeholder:text-gray-300 outline-hidden"
type="text"
bind:value={color}
placeholder={$i18n.t('Hex Color')}
@ -52,7 +52,7 @@
<div class="flex-1">
<Textarea
className="w-full text-sm bg-transparent placeholder:text-gray-300 dark:placeholder:text-gray-700 outline-hidden resize-none"
className="w-full text-sm bg-transparent placeholder:text-gray-300 outline-hidden resize-none"
rows={4}
bind:value={description}
placeholder={$i18n.t('Group Description')}

10
src/lib/components/admin/Users/Groups/EditGroupModal.svelte

@ -90,7 +90,7 @@
<Modal size="md" bind:show>
<div>
<div class=" flex justify-between dark:text-gray-100 px-5 pt-4 mb-1.5">
<div class=" flex justify-between px-5 pt-4 mb-1.5">
<div class=" text-lg font-medium self-center font-primary">
{#if custom}
{#if edit}
@ -121,7 +121,7 @@
</button>
</div>
<div class="flex flex-col md:flex-row w-full px-4 pb-4 md:space-x-4 dark:text-gray-200">
<div class="flex flex-col md:flex-row w-full px-4 pb-4 md:space-x-4 ">
<div class=" flex flex-col w-full sm:flex-row sm:justify-center sm:space-x-6">
<form
class="flex flex-col w-full"
@ -133,7 +133,7 @@
<div class="flex flex-col lg:flex-row w-full h-full pb-2 lg:space-x-4">
<div
id="admin-settings-tabs-container"
class="tabs flex flex-row overflow-x-auto gap-2.5 max-w-full lg:gap-1 lg:flex-col lg:flex-none lg:w-40 dark:text-gray-200 text-sm font-medium text-left scrollbar-none"
class="tabs flex flex-row overflow-x-auto gap-2.5 max-w-full lg:gap-1 lg:flex-col lg:flex-none lg:w-40 text-sm font-medium text-left scrollbar-none"
>
{#if tabs.includes('general')}
<button
@ -266,7 +266,7 @@
<div class="flex justify-end pt-3 text-sm font-medium gap-1.5">
{#if edit}
<button
class="px-3.5 py-1.5 text-sm font-medium dark:bg-black dark:hover:bg-gray-900 dark:text-white bg-white text-black hover:bg-gray-100 transition rounded-full flex flex-row space-x-1 items-center"
class="px-3.5 py-1.5 text-sm font-medium bg-white text-black hover:bg-gray-100 transition rounded-full flex flex-row space-x-1 items-center"
type="button"
on:click={() => {
onDelete();
@ -278,7 +278,7 @@
{/if}
<button
class="px-3.5 py-1.5 text-sm font-medium bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black dark:hover:bg-gray-100 transition rounded-full flex flex-row space-x-1 items-center {loading
class="px-3.5 py-1.5 text-sm font-medium bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black transition rounded-full flex flex-row space-x-1 items-center {loading
? ' cursor-not-allowed'
: ''}"
type="submit"

2
src/lib/components/admin/Users/Groups/GroupItem.svelte

@ -77,7 +77,7 @@
</div>
<div class="w-full flex justify-end">
<div class=" rounded-lg p-1 hover:bg-gray-100 dark:hover:bg-gray-850 transition">
<div class=" rounded-lg p-1 hover:bg-gray-100 transition">
<Pencil className="size-3.5" />
</div>
</div>

10
src/lib/components/admin/Users/Groups/Permissions.svelte

@ -96,13 +96,13 @@
{/if}
</div>
</div>
<hr class=" border-gray-100 dark:border-gray-700/10 mt-2.5 mb-1 w-full" />
<hr class=" border-gray-100 mt-2.5 mb-1 w-full" />
<div class="flex items-center">
<select
class="w-full py-1 text-sm rounded-lg bg-transparent {selectedModelId
? ''
: 'text-gray-500'} placeholder:text-gray-300 dark:placeholder:text-gray-700 outline-hidden"
: 'text-gray-500'} placeholder:text-gray-300 outline-hidden"
bind:value={selectedModelId}
>
<option value="">{$i18n.t('Select a model')}</option>
@ -150,7 +150,7 @@
</div>
</div>
<hr class=" border-gray-100 dark:border-gray-850 my-2" /> -->
<hr class=" border-gray-100 my-2" /> -->
<div>
<div class=" mb-2 text-sm font-medium">{$i18n.t('Workspace Permissions')}</div>
@ -192,7 +192,7 @@
</div>
</div>
<hr class=" border-gray-100 dark:border-gray-850 my-2" />
<hr class=" border-gray-100 my-2" />
<div>
<div class=" mb-2 text-sm font-medium">{$i18n.t('Chat Permissions')}</div>
@ -238,7 +238,7 @@
</div>
</div>
<hr class=" border-gray-100 dark:border-gray-850 my-2" />
<hr class=" border-gray-100 my-2" />
<div>
<div class=" mb-2 text-sm font-medium">{$i18n.t('Features Permissions')}</div>

14
src/lib/components/admin/Users/UserList.svelte

@ -127,9 +127,9 @@
<div class="mt-0.5 mb-2 gap-1 flex flex-col md:flex-row justify-between">
<div class="flex md:self-center text-lg font-medium px-0.5">
{$i18n.t('Users')}
<div class="flex self-center w-[1px] h-6 mx-2.5 bg-gray-50 dark:bg-gray-850" />
<div class="flex self-center w-[1px] h-6 mx-2.5 bg-gray-50 " />
<span class="text-lg font-medium text-gray-500 dark:text-gray-300">{users.length}</span>
<span class="text-lg font-medium text-gray-500 ">{users.length}</span>
</div>
<div class="flex gap-1">
@ -159,7 +159,7 @@
<div>
<Tooltip content={$i18n.t('Add User')}>
<button
class=" p-2 rounded-xl hover:bg-gray-100 dark:hover:bg-gray-850 transition font-medium text-sm flex items-center space-x-1"
class=" p-2 rounded-xl hover:bg-gray-100 transition font-medium text-sm flex items-center space-x-1"
on:click={() => {
showAddUserModal = !showAddUserModal;
}}
@ -176,10 +176,10 @@
class="scrollbar-hidden relative whitespace-nowrap overflow-x-auto max-w-full rounded-sm pt-0.5"
>
<table
class="w-full text-sm text-left text-gray-500 dark:text-gray-400 table-auto max-w-full rounded-sm"
class="w-full text-sm text-left text-gray-500 table-auto max-w-full rounded-sm"
>
<thead
class="text-xs text-gray-700 uppercase bg-gray-50 dark:bg-gray-850 dark:text-gray-400 -translate-y-0.5"
class="text-xs text-gray-700 uppercase bg-gray-50 -translate-y-0.5"
>
<tr class="">
<th
@ -327,7 +327,7 @@
</thead>
<tbody class="">
{#each filteredUsers as user, userIdx}
<tr class="bg-white dark:border-gray-850 text-xs">
<tr class="bg-white text-xs">
<td class="px-3 py-1 min-w-[7rem] w-28">
<button
class=" translate-y-0.5"
@ -347,7 +347,7 @@
/>
</button>
</td>
<td class="px-3 py-1 font-medium text-gray-900 dark:text-white w-max">
<td class="px-3 py-1 font-medium text-gray-900 w-max">
<div class="flex flex-row w-max">
<img
class=" rounded-full w-6 h-6 object-cover mr-2.5"

14
src/lib/components/admin/Users/UserList/AddUserModal.svelte

@ -121,7 +121,7 @@
<Modal size="sm" bind:show>
<div>
<div class=" flex justify-between dark:text-gray-300 px-5 pt-4 pb-2">
<div class=" flex justify-between px-5 pt-4 pb-2">
<div class=" text-lg font-medium self-center">{$i18n.t('Add User')}</div>
<button
class="self-center"
@ -142,7 +142,7 @@
</button>
</div>
<div class="flex flex-col md:flex-row w-full px-4 pb-3 md:space-x-4 dark:text-gray-200">
<div class="flex flex-col md:flex-row w-full px-4 pb-3 md:space-x-4 ">
<div class=" flex flex-col w-full sm:flex-row sm:justify-center sm:space-x-6">
<form
class="flex flex-col w-full"
@ -151,7 +151,7 @@
}}
>
<div
class="flex -mt-2 mb-1.5 gap-1 scrollbar-none overflow-x-auto w-fit text-center text-sm font-medium rounded-full bg-transparent dark:text-gray-200"
class="flex -mt-2 mb-1.5 gap-1 scrollbar-none overflow-x-auto w-fit text-center text-sm font-medium rounded-full bg-transparent "
>
<button
class="min-w-fit rounded-full p-1.5 {tab === ''
@ -208,7 +208,7 @@
</div>
</div>
<hr class=" border-gray-100 dark:border-gray-850 my-2.5 w-full" />
<hr class=" border-gray-100 my-2.5 w-full" />
<div class="flex flex-col w-full">
<div class=" mb-1 text-xs text-gray-500">{$i18n.t('Email')}</div>
@ -249,7 +249,7 @@
/>
<button
class="w-full text-sm font-medium py-3 bg-transparent hover:bg-gray-100 border border-dashed dark:border-gray-850 dark:hover:bg-gray-850 text-center rounded-xl"
class="w-full text-sm font-medium py-3 bg-transparent hover:bg-gray-100 border border-dashed text-center rounded-xl"
type="button"
on:click={() => {
document.getElementById('upload-user-csv-input')?.click();
@ -268,7 +268,7 @@
'Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.'
)}
<a
class="underline dark:text-gray-200"
class="underline "
href="{WEBUI_BASE_URL}/static/user-import.csv"
>
{$i18n.t('Click here to download user import template file.')}
@ -280,7 +280,7 @@
<div class="flex justify-end pt-3 text-sm font-medium">
<button
class="px-3.5 py-1.5 text-sm font-medium bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black dark:hover:bg-gray-100 transition rounded-full flex flex-row space-x-1 items-center {loading
class="px-3.5 py-1.5 text-sm font-medium bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black transition rounded-full flex flex-row space-x-1 items-center {loading
? ' cursor-not-allowed'
: ''}"
type="submit"

14
src/lib/components/admin/Users/UserList/EditUserModal.svelte

@ -45,7 +45,7 @@
<Modal size="sm" bind:show>
<div>
<div class=" flex justify-between dark:text-gray-300 px-5 py-4">
<div class=" flex justify-between px-5 py-4">
<div class=" text-lg font-medium self-center">{$i18n.t('Edit User')}</div>
<button
class="self-center"
@ -65,9 +65,9 @@
</svg>
</button>
</div>
<hr class="border-gray-100 dark:border-gray-850" />
<hr class="border-gray-100 " />
<div class="flex flex-col md:flex-row w-full p-5 md:space-x-4 dark:text-gray-200">
<div class="flex flex-col md:flex-row w-full p-5 md:space-x-4 ">
<div class=" flex flex-col w-full sm:flex-row sm:justify-center sm:space-x-6">
<form
class="flex flex-col w-full"
@ -94,7 +94,7 @@
</div>
</div>
<hr class="border-gray-100 dark:border-gray-850 my-3 w-full" />
<hr class="border-gray-100 my-3 w-full" />
<div class=" flex flex-col space-y-1.5">
<div class="flex flex-col w-full">
@ -102,7 +102,7 @@
<div class="flex-1">
<input
class="w-full rounded-sm py-2 px-4 text-sm dark:text-gray-300 dark:bg-gray-800 disabled:text-gray-500 dark:disabled:text-gray-500 outline-hidden"
class="w-full rounded-sm py-2 px-4 text-sm dark:bg-gray-800 disabled:text-gray-500 dark:disabled:text-gray-500 outline-hidden"
type="email"
bind:value={_user.email}
autocomplete="off"
@ -117,7 +117,7 @@
<div class="flex-1">
<input
class="w-full rounded-sm py-2 px-4 text-sm dark:text-gray-300 dark:bg-gray-800 outline-hidden"
class="w-full rounded-sm py-2 px-4 text-sm dark:bg-gray-800 outline-hidden"
type="text"
bind:value={_user.name}
autocomplete="off"
@ -131,7 +131,7 @@
<div class="flex-1">
<input
class="w-full rounded-sm py-2 px-4 text-sm dark:text-gray-300 dark:bg-gray-800 outline-hidden"
class="w-full rounded-sm py-2 px-4 text-sm dark:bg-gray-800 outline-hidden"
type="password"
bind:value={_user.password}
autocomplete="new-password"

10
src/lib/components/admin/Users/UserList/UserChatsModal.svelte

@ -51,7 +51,7 @@
</script>
<Modal size="lg" bind:show>
<div class=" flex justify-between dark:text-gray-300 px-5 pt-4">
<div class=" flex justify-between px-5 pt-4">
<div class=" text-lg font-medium self-center capitalize">
{$i18n.t("{{user}}'s Chats", { user: user.name })}
</div>
@ -74,15 +74,15 @@
</button>
</div>
<div class="flex flex-col md:flex-row w-full px-5 pt-2 pb-4 md:space-x-4 dark:text-gray-200">
<div class="flex flex-col md:flex-row w-full px-5 pt-2 pb-4 md:space-x-4 ">
<div class=" flex flex-col w-full sm:flex-row sm:justify-center sm:space-x-6">
{#if chats}
{#if chats.length > 0}
<div class="text-left text-sm w-full mb-4 max-h-[22rem] overflow-y-scroll">
<div class="relative overflow-x-auto">
<table class="w-full text-sm text-left text-gray-600 dark:text-gray-400 table-auto">
<table class="w-full text-sm text-left text-gray-600 table-auto">
<thead
class="text-xs text-gray-700 uppercase bg-transparent dark:text-gray-200 border-b-2 dark:border-gray-850"
class="text-xs text-gray-700 uppercase bg-transparent border-b-2 "
>
<tr>
<th
@ -120,7 +120,7 @@
}) as chat, idx}
<tr
class="bg-transparent {idx !== chats.length - 1 &&
'border-b'} dark:border-gray-850 text-xs"
'border-b'} text-xs"
>
<td class="px-3 py-1">
<a href="/s/{chat.id}" target="_blank">

2
src/lib/components/app/AppSidebar.svelte

@ -5,7 +5,7 @@
let selected = '';
</script>
<div class="min-w-[4.5rem] bg-gray-50 dark:bg-gray-950 flex gap-2.5 flex-col pt-8">
<div class="min-w-[4.5rem] bg-gray-50 flex gap-2.5 flex-col pt-8">
<div class="flex justify-center relative">
{#if selected === 'home'}
<div class="absolute top-0 left-0 flex h-full">

2
src/lib/components/channel/Channel.svelte

@ -277,7 +277,7 @@
{/if}
{:else if threadId !== null}
<PaneResizer
class="relative flex w-[3px] items-center justify-center bg-background group bg-gray-50 dark:bg-gray-850"
class="relative flex w-[3px] items-center justify-center bg-background group bg-gray-50 "
>
<div class="z-10 flex h-7 w-5 items-center justify-center rounded-xs">
<EllipsisVertical className="size-4 invisible group-hover:visible" />

12
src/lib/components/channel/MessageInput.svelte

@ -358,7 +358,7 @@
<div class=" -mt-5">
{#if typingUsers.length > 0}
<div class=" text-xs px-4 mb-1">
<span class=" font-normal text-black dark:text-white">
<span class=" font-normal text-black ">
{typingUsers.map((user) => user.name).join(', ')}
</span>
{$i18n.t('is typing...')}
@ -396,7 +396,7 @@
}}
>
<div
class="flex-1 flex flex-col relative w-full rounded-3xl px-1 bg-gray-600/5 dark:bg-gray-400/5 dark:text-gray-100"
class="flex-1 flex flex-col relative w-full rounded-3xl px-1 bg-gray-600/5 dark:bg-gray-400/5 "
dir={$settings?.chatDirection ?? 'LTR'}
>
{#if files.length > 0}
@ -457,7 +457,7 @@
<div class="px-2.5">
<div
class="scrollbar-hidden font-primary text-left bg-transparent dark:text-gray-100 outline-hidden w-full pt-3 px-1 rounded-xl resize-none h-fit max-h-80 overflow-auto"
class="scrollbar-hidden font-primary text-left bg-transparent outline-hidden w-full pt-3 px-1 rounded-xl resize-none h-fit max-h-80 overflow-auto"
>
<RichTextInput
bind:value={content}
@ -515,7 +515,7 @@
}}
>
<button
class="bg-transparent hover:bg-white/80 text-gray-800 dark:text-white dark:hover:bg-gray-800 transition rounded-full p-1.5 outline-hidden focus:outline-hidden"
class="bg-transparent hover:bg-white/80 text-gray-800 transition rounded-full p-1.5 outline-hidden focus:outline-hidden"
type="button"
aria-label="More"
>
@ -538,7 +538,7 @@
<Tooltip content={$i18n.t('Record voice')}>
<button
id="voice-input-button"
class=" text-gray-600 dark:text-gray-300 hover:text-gray-700 dark:hover:text-gray-200 transition rounded-full p-1.5 mr-0.5 self-center"
class=" text-gray-600 hover:text-gray-700 dark:hover:text-gray-200 transition rounded-full p-1.5 mr-0.5 self-center"
type="button"
on:click={async () => {
try {
@ -586,7 +586,7 @@
<button
id="send-message-button"
class="{content !== '' || files.length !== 0
? 'bg-black text-white hover:bg-gray-900 dark:bg-white dark:text-black dark:hover:bg-gray-100 '
? 'bg-black text-white hover:bg-gray-900 dark:bg-white dark:text-black '
: 'text-white bg-gray-200 dark:text-gray-900 dark:bg-gray-700 disabled'} transition rounded-full p-1.5 self-center"
type="submit"
disabled={content === '' && files.length === 0}

6
src/lib/components/channel/MessageInput/InputMenu.svelte

@ -44,7 +44,7 @@
<div slot="content">
<DropdownMenu.Content
class="w-full max-w-[200px] rounded-xl px-1 py-1 border-gray-300/30 dark:border-gray-700/50 z-50 bg-white dark:bg-gray-850 dark:text-white shadow-sm"
class="w-full max-w-[200px] rounded-xl px-1 py-1 border-gray-300/30 dark:border-gray-700/50 z-50 bg-white shadow-sm"
sideOffset={15}
alignOffset={-8}
side="top"
@ -53,7 +53,7 @@
>
{#if !$mobile}
<DropdownMenu.Item
class="flex gap-2 items-center px-3 py-2 text-sm font-medium cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-800 rounded-xl"
class="flex gap-2 items-center px-3 py-2 text-sm font-medium cursor-pointer hover:bg-gray-50 rounded-xl"
on:click={() => {
screenCaptureHandler();
}}
@ -64,7 +64,7 @@
{/if}
<DropdownMenu.Item
class="flex gap-2 items-center px-3 py-2 text-sm font-medium cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-800 rounded-xl"
class="flex gap-2 items-center px-3 py-2 text-sm font-medium cursor-pointer hover:bg-gray-50 rounded-xl"
on:click={() => {
uploadFilesHandler();
}}

22
src/lib/components/channel/Messages/Message.svelte

@ -65,14 +65,14 @@
? 'pt-1.5 pb-0.5'
: ''} w-full {($settings?.widescreenMode ?? null)
? 'max-w-full'
: 'max-w-5xl'} mx-auto group hover:bg-gray-300/5 dark:hover:bg-gray-700/5 transition relative"
: 'max-w-5xl'} mx-auto group hover:bg-gray-300/5 transition relative"
>
{#if !edit}
<div
class=" absolute {showButtons ? '' : 'invisible group-hover:visible'} right-1 -top-2 z-10"
>
<div
class="flex gap-1 rounded-lg bg-white dark:bg-gray-850 shadow-md p-0.5 border border-gray-100 dark:border-gray-850"
class="flex gap-1 rounded-lg bg-white shadow-md p-0.5 border border-gray-100 "
>
<ReactionPicker
onClose={() => (showButtons = false)}
@ -83,7 +83,7 @@
>
<Tooltip content={$i18n.t('Add Reaction')}>
<button
class="hover:bg-gray-100 dark:hover:bg-gray-800 transition rounded-lg p-1"
class="hover:bg-gray-100 transition rounded-lg p-1"
on:click={() => {
showButtons = true;
}}
@ -96,7 +96,7 @@
{#if !thread}
<Tooltip content={$i18n.t('Reply in Thread')}>
<button
class="hover:bg-gray-100 dark:hover:bg-gray-800 transition rounded-lg p-1"
class="hover:bg-gray-100 transition rounded-lg p-1"
on:click={() => {
onThread(message.id);
}}
@ -109,7 +109,7 @@
{#if message.user_id === $user.id || $user.role === 'admin'}
<Tooltip content={$i18n.t('Edit')}>
<button
class="hover:bg-gray-100 dark:hover:bg-gray-800 transition rounded-lg p-1"
class="hover:bg-gray-100 transition rounded-lg p-1"
on:click={() => {
edit = true;
editedContent = message.content;
@ -121,7 +121,7 @@
<Tooltip content={$i18n.t('Delete')}>
<button
class="hover:bg-gray-100 dark:hover:bg-gray-800 transition rounded-lg p-1"
class="hover:bg-gray-100 transition rounded-lg p-1"
on:click={() => (showDeleteConfirmDialog = true)}
>
<GarbageBin />
@ -195,7 +195,7 @@
name={file.name}
type={file.type}
size={file?.size}
colorClassName="bg-white dark:bg-gray-850 "
colorClassName="bg-white "
/>
{/if}
</div>
@ -225,7 +225,7 @@
<div class="flex space-x-1.5">
<button
id="close-edit-message-button"
class="px-4 py-2 bg-white hover:bg-gray-100 text-gray-800 dark:text-gray-100 transition rounded-3xl"
class="px-4 py-2 bg-white hover:bg-gray-100 text-gray-800 transition rounded-3xl"
on:click={() => {
edit = false;
editedContent = null;
@ -289,7 +289,7 @@
{/if}
{#if reaction.user_ids.length > 0}
<div class="text-xs font-medium text-gray-500 dark:text-gray-400">
<div class="text-xs font-medium text-gray-500 ">
{reaction.user_ids?.length}
</div>
{/if}
@ -304,7 +304,7 @@
>
<Tooltip content={$i18n.t('Add Reaction')}>
<div
class="flex items-center gap-1.5 bg-gray-500/10 hover:outline hover:outline-gray-700/30 dark:hover:outline-gray-300/30 hover:outline-1 transition rounded-xl px-1 py-1 cursor-pointer text-gray-500 dark:text-gray-400"
class="flex items-center gap-1.5 bg-gray-500/10 hover:outline hover:outline-gray-700/30 dark:hover:outline-gray-300/30 hover:outline-1 transition rounded-xl px-1 py-1 cursor-pointer text-gray-500 "
>
<FaceSmile />
</div>
@ -317,7 +317,7 @@
{#if !thread && message.reply_count > 0}
<div class="flex items-center gap-1.5 -mt-0.5 mb-1.5">
<button
class="flex items-center text-xs py-1 text-gray-500 dark:text-gray-400 hover:text-gray-700 dark:hover:text-gray-300 transition"
class="flex items-center text-xs py-1 text-gray-500 hover:text-gray-700 transition"
on:click={() => {
onThread(message.id);
}}

2
src/lib/components/channel/Messages/Message/ProfilePreview.svelte

@ -29,7 +29,7 @@
<slot name="content">
<DropdownMenu.Content
class="max-w-full w-[240px] rounded-lg z-9999 bg-white dark:bg-black dark:text-white shadow-lg"
class="max-w-full w-[240px] rounded-lg z-9999 bg-white shadow-lg"
sideOffset={8}
{side}
{align}

8
src/lib/components/channel/Messages/Message/ReactionPicker.svelte

@ -107,7 +107,7 @@
<slot />
</DropdownMenu.Trigger>
<DropdownMenu.Content
class="max-w-full w-80 bg-gray-50 dark:bg-gray-850 rounded-lg z-9999 shadow-lg dark:text-white"
class="max-w-full w-80 bg-gray-50 rounded-lg z-9999 shadow-lg "
sideOffset={8}
{side}
{align}
@ -124,14 +124,14 @@
<!-- Virtualized Emoji List -->
<div class="w-full flex justify-start h-96 overflow-y-auto px-3 pb-3 text-sm">
{#if emojiRows.length === 0}
<div class="text-center text-xs text-gray-500 dark:text-gray-400">No results</div>
<div class="text-center text-xs text-gray-500 ">No results</div>
{:else}
<div class="w-full flex ml-0.5">
<VirtualList rowHeight={ROW_HEIGHT} items={emojiRows} height={384} let:item>
<div class="w-full">
{#if item.length === 1 && item[0].type === 'group'}
<!-- Render group header -->
<div class="text-xs font-medium mb-2 text-gray-500 dark:text-gray-400">
<div class="text-xs font-medium mb-2 text-gray-500 ">
{item[0].label}
</div>
{:else}
@ -143,7 +143,7 @@
placement="top"
>
<button
class="p-1.5 rounded-lg cursor-pointer hover:bg-gray-200 dark:hover:bg-gray-700 transition"
class="p-1.5 rounded-lg cursor-pointer hover:bg-gray-200 transition"
on:click={() => selectEmoji(emojiItem)}
>
<img

17
src/lib/components/channel/Navbar.svelte

@ -15,10 +15,9 @@
export let channel;
</script>
<!--
<nav class="sticky top-0 z-30 w-full px-1.5 py-1.5 -mb-8 flex items-center drag-region">
<div
class=" bg-linear-to-b via-50% from-white via-white to-transparent dark:from-gray-900 dark:via-gray-900 dark:to-transparent pointer-events-none absolute inset-0 -bottom-7 z-[-1]"
class=" bg-linear-to-b via-50% from-white via-white to-transparent dark:to-transparent pointer-events-none absolute inset-0 -bottom-7 z-[-1]"
></div>
<div class=" flex max-w-full w-full mx-auto px-1 pt-0.5 bg-transparent">
@ -26,11 +25,11 @@
<div
class="{$showSidebar
? 'md:hidden'
: ''} mr-1 self-start flex flex-none items-center text-gray-600 dark:text-gray-400"
: ''} mr-1 self-start flex flex-none items-center text-gray-600 "
>
<button
id="sidebar-toggle-button"
class="cursor-pointer px-2 py-2 flex rounded-xl hover:bg-gray-50 dark:hover:bg-gray-850 transition"
class="cursor-pointer px-2 py-2 flex rounded-xl hover:bg-gray-50 transition"
on:click={() => {
showSidebar.set(!$showSidebar);
}}
@ -42,7 +41,7 @@
</button>
</div>
<div
<!-- <div
class="flex-1 overflow-hidden max-w-full py-0.5
{$showSidebar ? 'ml-1' : ''}
"
@ -54,7 +53,7 @@
{/if}
</div>
<div class="self-start flex flex-none items-center text-gray-600 dark:text-gray-400">
<div class="self-start flex flex-none items-center text-gray-600 ">
{#if $user !== undefined}
<UserMenu
className="max-w-[200px]"
@ -66,7 +65,7 @@
}}
>
<button
class="select-none flex rounded-xl p-1.5 w-full hover:bg-gray-50 dark:hover:bg-gray-850 transition"
class="select-none flex rounded-xl p-1.5 w-full hover:bg-gray-50 transition"
aria-label="User Menu"
>
<div class=" self-center">
@ -80,7 +79,7 @@
</button>
</UserMenu>
{/if}
</div>
</div> -->
</div>
</div>
</nav> -->
</nav>

4
src/lib/components/channel/Thread.svelte

@ -156,13 +156,13 @@
</script>
{#if channel}
<div class="flex flex-col w-full h-full bg-gray-50 dark:bg-gray-850">
<div class="flex flex-col w-full h-full bg-gray-50 ">
<div class="flex items-center justify-between px-3.5 pt-3">
<div class=" font-medium text-lg">Thread</div>
<div>
<button
class="text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300 p-2"
class="text-gray-500 hover:text-gray-700 p-2"
on:click={() => {
onClose();
}}

20
src/lib/components/chat/Artifacts.svelte

@ -183,7 +183,7 @@
onMount(() => {});
</script>
<div class=" w-full h-full relative flex flex-col bg-gray-50 dark:bg-gray-850">
<div class=" w-full h-full relative flex flex-col bg-gray-50 ">
<div class="w-full h-full flex-1 relative">
{#if overlay}
<div class=" absolute top-0 left-0 right-0 bottom-0 z-10"></div>
@ -191,25 +191,25 @@
<div class="absolute pointer-events-none z-50 w-full flex items-center justify-start p-4">
<button
class="self-center pointer-events-auto p-1 rounded-full bg-white dark:bg-gray-850"
class="self-center pointer-events-auto p-1 rounded-full bg-white "
on:click={() => {
showArtifacts.set(false);
}}
>
<ArrowLeft className="size-3.5 text-gray-900 dark:text-white" />
<ArrowLeft className="size-3.5 text-gray-900 " />
</button>
</div>
<div class=" absolute pointer-events-none z-50 w-full flex items-center justify-end p-4">
<button
class="self-center pointer-events-auto p-1 rounded-full bg-white dark:bg-gray-850"
class="self-center pointer-events-auto p-1 rounded-full bg-white "
on:click={() => {
dispatch('close');
showControls.set(false);
showArtifacts.set(false);
}}
>
<XMark className="size-3.5 text-gray-900 dark:text-white" />
<XMark className="size-3.5 text-gray-900 " />
</button>
</div>
@ -234,7 +234,7 @@
{/if}
</div>
{:else}
<div class="m-auto font-medium text-xs text-gray-900 dark:text-white">
<div class="m-auto font-medium text-xs text-gray-900 ">
{$i18n.t('No HTML, CSS, or JavaScript content found.')}
</div>
{/if}
@ -243,7 +243,7 @@
</div>
{#if contents.length > 0}
<div class="flex justify-between items-center p-2.5 font-primar text-gray-900 dark:text-white">
<div class="flex justify-between items-center p-2.5 font-primar text-gray-900 ">
<div class="flex items-center space-x-2">
<div class="flex items-center gap-0.5 self-center min-w-fit" dir="ltr">
<button
@ -267,7 +267,7 @@
</svg>
</button>
<div class="text-xs self-center dark:text-gray-100 min-w-fit">
<div class="text-xs self-center min-w-fit">
{$i18n.t('Version {{selectedVersion}} of {{totalVersions}}', {
selectedVersion: selectedContentIdx + 1,
totalVersions: contents.length
@ -295,7 +295,7 @@
<div class="flex items-center gap-1">
<button
class="copy-code-button bg-none border-none text-xs bg-gray-50 hover:bg-gray-100 dark:bg-gray-850 dark:hover:bg-gray-800 transition rounded-md px-1.5 py-0.5"
class="copy-code-button bg-none border-none text-xs bg-gray-50 hover:bg-gray-100 transition rounded-md px-1.5 py-0.5"
on:click={() => {
copyToClipboard(contents[selectedContentIdx].content);
copied = true;
@ -309,7 +309,7 @@
{#if contents[selectedContentIdx].type === 'iframe'}
<Tooltip content={$i18n.t('Open in full screen')}>
<button
class=" bg-none border-none text-xs bg-gray-50 hover:bg-gray-100 dark:bg-gray-850 dark:hover:bg-gray-800 transition rounded-md p-0.5"
class=" bg-none border-none text-xs bg-gray-50 hover:bg-gray-100 transition rounded-md p-0.5"
on:click={showFullScreen}
>
<ArrowsPointingOut className="size-3.5" />

4
src/lib/components/chat/ChatControls.svelte

@ -151,7 +151,7 @@
>
{#if $showCallOverlay}
<div
class=" h-full max-h-[100dvh] bg-white text-gray-700 dark:bg-black dark:text-gray-300 flex justify-center"
class=" h-full max-h-[100dvh] bg-white text-gray-700 flex justify-center"
>
<CallOverlay
bind:files
@ -230,7 +230,7 @@
<div
class="w-full {($showOverview || $showArtifacts) && !$showCallOverlay
? ' '
: 'px-4 py-4 bg-white dark:shadow-lg dark:bg-gray-850 border border-gray-100 dark:border-gray-850'} rounded-xl z-40 pointer-events-auto overflow-y-auto scrollbar-hidden"
: 'px-4 py-4 bg-white dark:shadow-lg border border-gray-100 '} rounded-xl z-40 pointer-events-auto overflow-y-auto scrollbar-hidden"
>
{#if $showCallOverlay}
<div class="w-full h-full flex justify-center">

4
src/lib/components/chat/ChatPlaceholder.svelte

@ -78,7 +78,7 @@
{/if}
<div
class=" mt-2 mb-4 text-3xl text-gray-800 dark:text-gray-100 font-medium text-left flex items-center gap-4 font-primary"
class=" mt-2 mb-4 text-3xl text-gray-800 font-medium text-left flex items-center gap-4 font-primary"
>
<div>
<div class=" capitalize line-clamp-1" in:fade={{ duration: 200 }}>
@ -92,7 +92,7 @@
<div in:fade={{ duration: 200, delay: 200 }}>
{#if models[selectedModelIdx]?.info?.meta?.description ?? null}
<div
class="mt-0.5 text-base font-normal text-gray-500 dark:text-gray-400 line-clamp-3 markdown"
class="mt-0.5 text-base font-normal text-gray-500 line-clamp-3 markdown"
>
{@html marked.parse(
sanitizeResponseContent(models[selectedModelIdx]?.info?.meta?.description)

18
src/lib/components/chat/ContentRenderer/FloatingButtons.svelte

@ -227,10 +227,10 @@
{#if responseContent === null}
{#if !floatingInput}
<div
class="flex flex-row gap-0.5 shrink-0 p-1 bg-white dark:bg-gray-850 dark:text-gray-100 text-medium rounded-lg shadow-xl"
class="flex flex-row gap-0.5 shrink-0 p-1 bg-white text-medium rounded-lg shadow-xl"
>
<button
class="px-1 hover:bg-gray-50 dark:hover:bg-gray-800 rounded-sm flex items-center gap-1 min-w-fit"
class="px-1 hover:bg-gray-50 rounded-sm flex items-center gap-1 min-w-fit"
on:click={async () => {
selectedText = window.getSelection().toString();
floatingInput = true;
@ -249,7 +249,7 @@
<div class="shrink-0">Ask</div>
</button>
<button
class="px-1 hover:bg-gray-50 dark:hover:bg-gray-800 rounded-sm flex items-center gap-1 min-w-fit"
class="px-1 hover:bg-gray-50 rounded-sm flex items-center gap-1 min-w-fit"
on:click={() => {
selectedText = window.getSelection().toString();
explainHandler();
@ -262,7 +262,7 @@
</div>
{:else}
<div
class="py-1 flex dark:text-gray-100 bg-gray-50 dark:bg-gray-800 border dark:border-gray-850 w-72 rounded-full shadow-xl"
class="py-1 flex bg-gray-50 dark:bg-gray-800 border w-72 rounded-full shadow-xl"
>
<input
type="text"
@ -280,7 +280,7 @@
<div class="ml-1 mr-2">
<button
class="{floatingInputValue !== ''
? 'bg-black text-white hover:bg-gray-900 dark:bg-white dark:text-black dark:hover:bg-gray-100 '
? 'bg-black text-white hover:bg-gray-900 dark:bg-white dark:text-black '
: 'text-white bg-gray-200 dark:text-gray-900 dark:bg-gray-700 disabled'} transition rounded-full p-1.5 m-0.5 self-center"
on:click={() => {
askHandler();
@ -303,9 +303,9 @@
</div>
{/if}
{:else}
<div class="bg-white dark:bg-gray-850 dark:text-gray-100 rounded-xl shadow-xl w-80 max-w-full">
<div class="bg-white rounded-xl shadow-xl w-80 max-w-full">
<div
class="bg-gray-50/50 dark:bg-gray-800 dark:text-gray-100 text-medium rounded-xl px-3.5 py-3 w-full"
class="bg-gray-50/50 dark:bg-gray-800 text-medium rounded-xl px-3.5 py-3 w-full"
>
<div class="font-medium">
<Markdown id={`${id}-float-prompt`} content={prompt} />
@ -313,7 +313,7 @@
</div>
<div
class="bg-white dark:bg-gray-850 dark:text-gray-100 text-medium rounded-xl px-3.5 py-3 w-full"
class="bg-white text-medium rounded-xl px-3.5 py-3 w-full"
>
<div class=" max-h-80 overflow-y-auto w-full markdown-prose-xs" id="response-container">
{#if responseContent.trim() === ''}
@ -325,7 +325,7 @@
{#if responseDone}
<div class="flex justify-end pt-3 text-sm font-medium">
<button
class="px-3.5 py-1.5 text-sm font-medium bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black dark:hover:bg-gray-100 transition rounded-full"
class="px-3.5 py-1.5 text-sm font-medium bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black transition rounded-full"
on:click={addHandler}
>
{$i18n.t('Add')}

14
src/lib/components/chat/Controls/Controls.svelte

@ -17,8 +17,8 @@
let showValves = false;
</script>
<div class=" dark:text-white">
<div class=" flex items-center justify-between dark:text-gray-100 mb-2">
<div class=" ">
<div class=" flex items-center justify-between mb-2">
<div class=" text-lg font-medium self-center font-primary">{$i18n.t('Chat Controls')}</div>
<button
class="self-center"
@ -31,7 +31,7 @@
</div>
{#if $user.role === 'admin' || $user?.permissions.chat?.controls}
<div class=" dark:text-gray-200 text-sm font-primary py-0.5 px-0.5">
<div class=" text-sm font-primary py-0.5 px-0.5">
{#if chatFiles.length > 0}
<Collapsible title={$i18n.t('Files')} open={true} buttonClassName="w-full">
<div class="flex flex-col gap-1 mt-1.5" slot="content">
@ -59,7 +59,7 @@
</div>
</Collapsible>
<hr class="my-2 border-gray-50 dark:border-gray-700/10" />
<hr class="my-2 border-gray-50 " />
{/if}
<Collapsible bind:open={showValves} title={$i18n.t('Valves')} buttonClassName="w-full">
@ -68,7 +68,7 @@
</div>
</Collapsible>
<hr class="my-2 border-gray-50 dark:border-gray-700/10" />
<hr class="my-2 border-gray-50 " />
<Collapsible title={$i18n.t('System Prompt')} open={true} buttonClassName="w-full">
<div class="" slot="content">
@ -81,7 +81,7 @@
</div>
</Collapsible>
<hr class="my-2 border-gray-50 dark:border-gray-700/10" />
<hr class="my-2 border-gray-50 " />
<Collapsible title={$i18n.t('Advanced Params')} open={true} buttonClassName="w-full">
<div class="text-sm mt-1.5" slot="content">
@ -92,7 +92,7 @@
</Collapsible>
</div>
{:else}
<div class="text-sm dark:text-gray-300 text-center py-2 px-10">
<div class="text-sm text-center py-2 px-10">
{$i18n.t('You do not have permission to access this feature.')}
</div>
{/if}

24
src/lib/components/chat/MessageInput.svelte

@ -590,7 +590,7 @@
}}
>
<div
class="flex-1 flex flex-col relative w-full rounded-3xl px-1 bg-gray-600/5 dark:bg-gray-400/5 dark:text-gray-100"
class="flex-1 flex flex-col relative w-full rounded-3xl px-1 bg-gray-600/5 dark:bg-gray-400/5 "
dir={$settings?.chatDirection ?? 'LTR'}
>
{#if files.length > 0}
@ -685,7 +685,7 @@
<div class="px-2.5">
{#if $settings?.richTextInput ?? true}
<div
class="scrollbar-hidden text-left bg-transparent dark:text-gray-100 outline-hidden w-full pt-3 px-1 resize-none h-fit max-h-80 overflow-auto"
class="scrollbar-hidden text-left bg-transparent outline-hidden w-full pt-3 px-1 resize-none h-fit max-h-80 overflow-auto"
>
<RichTextInput
bind:this={chatInputElement}
@ -890,7 +890,7 @@
<textarea
id="chat-input"
bind:this={chatInputElement}
class="scrollbar-hidden bg-transparent dark:text-gray-100 outline-hidden w-full pt-3 px-1 resize-none"
class="scrollbar-hidden bg-transparent outline-hidden w-full pt-3 px-1 resize-none"
placeholder={placeholder ? placeholder : $i18n.t('Send a Message')}
bind:value={prompt}
on:keypress={(e) => {
@ -1118,7 +1118,7 @@
}}
>
<button
class="bg-transparent hover:bg-gray-100 text-gray-800 dark:text-white dark:hover:bg-gray-800 transition rounded-full p-1.5 outline-hidden focus:outline-hidden"
class="bg-transparent hover:bg-gray-100 text-gray-800 transition rounded-full p-1.5 outline-hidden focus:outline-hidden"
type="button"
aria-label="More"
>
@ -1145,7 +1145,7 @@
class="px-1.5 @sm:px-2.5 py-1.5 flex gap-1.5 items-center text-sm rounded-full font-medium transition-colors duration-300 focus:outline-hidden max-w-full overflow-hidden {webSearchEnabled ||
($settings?.webSearch ?? false) === 'always'
? 'bg-blue-100 dark:bg-blue-500/20 text-blue-500 dark:text-blue-400'
: 'bg-transparent text-gray-600 dark:text-gray-300 border-gray-200 hover:bg-gray-100 dark:hover:bg-gray-800'}"
: 'bg-transparent text-gray-600 border-gray-200 hover:bg-gray-100 '}"
>
<GlobeAlt className="size-5" strokeWidth="1.75" />
<span
@ -1163,8 +1163,8 @@
(imageGenerationEnabled = !imageGenerationEnabled)}
type="button"
class="px-1.5 @sm:px-2.5 py-1.5 flex gap-1.5 items-center text-sm rounded-full font-medium transition-colors duration-300 focus:outline-hidden max-w-full overflow-hidden {imageGenerationEnabled
? 'bg-gray-100 dark:bg-gray-500/20 text-gray-600 dark:text-gray-400'
: 'bg-transparent text-gray-600 dark:text-gray-300 border-gray-200 hover:bg-gray-100 dark:hover:bg-gray-800 '}"
? 'bg-gray-100 dark:bg-gray-500/20 text-gray-600 '
: 'bg-transparent text-gray-600 border-gray-200 hover:bg-gray-100 '}"
>
<Photo className="size-5" strokeWidth="1.75" />
<span
@ -1182,8 +1182,8 @@
(codeInterpreterEnabled = !codeInterpreterEnabled)}
type="button"
class="px-1.5 @sm:px-2.5 py-1.5 flex gap-1.5 items-center text-sm rounded-full font-medium transition-colors duration-300 focus:outline-hidden max-w-full overflow-hidden {codeInterpreterEnabled
? 'bg-gray-100 dark:bg-gray-500/20 text-gray-600 dark:text-gray-400'
: 'bg-transparent text-gray-600 dark:text-gray-300 border-gray-200 hover:bg-gray-100 dark:hover:bg-gray-800 '}"
? 'bg-gray-100 dark:bg-gray-500/20 text-gray-600 '
: 'bg-transparent text-gray-600 border-gray-200 hover:bg-gray-100 '}"
>
<CommandLine className="size-5" strokeWidth="1.75" />
<span
@ -1202,7 +1202,7 @@
<Tooltip content={$i18n.t('Record voice')}>
<button
id="voice-input-button"
class=" text-gray-600 dark:text-gray-300 hover:text-gray-700 dark:hover:text-gray-200 transition rounded-full p-1.5 mr-0.5 self-center"
class=" text-gray-600 hover:text-gray-700 dark:hover:text-gray-200 transition rounded-full p-1.5 mr-0.5 self-center"
type="button"
on:click={async () => {
try {
@ -1320,7 +1320,7 @@
class="{!(prompt === '' && files.length === 0)
? webSearchEnabled || ($settings?.webSearch ?? false) === 'always'
? 'bg-blue-500 text-white hover:bg-blue-400 '
: 'bg-black text-white hover:bg-gray-900 dark:bg-white dark:text-black dark:hover:bg-gray-100 '
: 'bg-black text-white hover:bg-gray-900 dark:bg-white dark:text-black '
: 'text-white bg-gray-200 dark:text-gray-900 dark:bg-gray-700 disabled'} transition rounded-full p-1.5 self-center"
type="submit"
disabled={prompt === '' && files.length === 0}
@ -1345,7 +1345,7 @@
<div class=" flex items-center">
<Tooltip content={$i18n.t('Stop')}>
<button
class="bg-white hover:bg-gray-100 text-gray-800 dark:bg-gray-700 dark:text-white dark:hover:bg-gray-800 transition rounded-full p-1.5"
class="bg-white hover:bg-gray-100 text-gray-800 dark:bg-gray-700 transition rounded-full p-1.5"
on:click={() => {
stopResponse();
}}

4
src/lib/components/chat/MessageInput/CallOverlay.svelte

@ -710,7 +710,7 @@
</div>
{:else if loading || assistantSpeaking}
<svg
class="size-12 text-gray-900 dark:text-gray-400"
class="size-12 text-gray-900 "
viewBox="0 0 24 24"
fill="currentColor"
xmlns="http://www.w3.org/2000/svg"
@ -792,7 +792,7 @@
</div>
{:else if loading || assistantSpeaking}
<svg
class="size-44 text-gray-900 dark:text-gray-400"
class="size-44 text-gray-900 "
viewBox="0 0 24 24"
fill="currentColor"
xmlns="http://www.w3.org/2000/svg"

4
src/lib/components/chat/MessageInput/CallOverlay/VideoInputMenu.svelte

@ -26,7 +26,7 @@
<div slot="content">
<DropdownMenu.Content
class="w-full max-w-[180px] rounded-lg px-1 py-1.5 border border-gray-300/30 dark:border-gray-700/50 z-9999 bg-white dark:text-white shadow-xs"
class="w-full max-w-[180px] rounded-lg px-1 py-1.5 border border-gray-300/30 dark:border-gray-700/50 z-9999 bg-white shadow-xs"
sideOffset={6}
side="top"
align="start"
@ -34,7 +34,7 @@
>
{#each devices as device}
<DropdownMenu.Item
class="flex gap-2 items-center px-3 py-2 text-sm cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-800 rounded-md"
class="flex gap-2 items-center px-3 py-2 text-sm cursor-pointer hover:bg-gray-50 rounded-md"
on:click={() => {
dispatch('change', device.deviceId);
}}

4
src/lib/components/chat/MessageInput/Commands.svelte

@ -112,9 +112,9 @@
id="commands-container"
class="px-2 mb-2 text-left w-full absolute bottom-0 left-0 right-0 z-10"
>
<div class="flex w-full rounded-xl border border-gray-100 dark:border-gray-850">
<div class="flex w-full rounded-xl border border-gray-100 ">
<div
class="max-h-60 flex flex-col w-full rounded-xl bg-white dark:text-gray-100"
class="max-h-60 flex flex-col w-full rounded-xl bg-white "
>
<Spinner />
</div>

32
src/lib/components/chat/MessageInput/Commands/Knowledge.svelte

@ -161,16 +161,16 @@
id="commands-container"
class="px-2 mb-2 text-left w-full absolute bottom-0 left-0 right-0 z-10"
>
<div class="flex w-full rounded-xl border border-gray-100 dark:border-gray-850">
<div class="flex w-full rounded-xl border border-gray-100 ">
<div
class="max-h-60 flex flex-col w-full rounded-xl bg-white dark:text-gray-100"
class="max-h-60 flex flex-col w-full rounded-xl bg-white "
>
<div class="m-1 overflow-y-auto p-1 rounded-r-xl space-y-0.5 scrollbar-hidden">
{#each filteredItems as item, idx}
<button
class=" px-3 py-1.5 rounded-xl w-full text-left flex justify-between items-center {idx ===
selectedIdx
? ' bg-gray-50 dark:bg-gray-850 dark:text-gray-100 selected-command-option-button'
? ' bg-gray-50 selected-command-option-button'
: ''}"
type="button"
on:click={() => {
@ -182,22 +182,22 @@
}}
>
<div>
<div class=" font-medium text-black dark:text-gray-100 flex items-center gap-1">
<div class=" font-medium text-black flex items-center gap-1">
{#if item.legacy}
<div
class="bg-gray-500/20 text-gray-700 dark:text-gray-200 rounded-sm uppercase text-xs font-bold px-1 shrink-0"
class="bg-gray-500/20 text-gray-700 rounded-sm uppercase text-xs font-bold px-1 shrink-0"
>
Legacy
</div>
{:else if item?.meta?.document}
<div
class="bg-gray-500/20 text-gray-700 dark:text-gray-200 rounded-sm uppercase text-xs font-bold px-1 shrink-0"
class="bg-gray-500/20 text-gray-700 rounded-sm uppercase text-xs font-bold px-1 shrink-0"
>
Document
</div>
{:else if item?.type === 'file'}
<div
class="bg-gray-500/20 text-gray-700 dark:text-gray-200 rounded-sm uppercase text-xs font-bold px-1 shrink-0"
class="bg-gray-500/20 text-gray-700 rounded-sm uppercase text-xs font-bold px-1 shrink-0"
>
File
</div>
@ -214,7 +214,7 @@
</div>
</div>
<div class=" text-xs text-gray-600 dark:text-gray-100 line-clamp-1">
<div class=" text-xs text-gray-600 line-clamp-1">
{item?.description}
</div>
</div>
@ -224,7 +224,7 @@
{#if !item.legacy && (item?.files ?? []).length > 0}
{#each item?.files ?? [] as file, fileIdx}
<button
class=" px-3 py-1.5 rounded-xl w-full text-left flex justify-between items-center hover:bg-gray-50 dark:hover:bg-gray-850 dark:hover:text-gray-100 selected-command-option-button"
class=" px-3 py-1.5 rounded-xl w-full text-left flex justify-between items-center hover:bg-gray-50 dark:hover:text-gray-100 selected-command-option-button"
type="button"
on:click={() => {
console.log(file);
@ -235,10 +235,10 @@
>
<div>
<div
class=" font-medium text-black dark:text-gray-100 flex items-center gap-1"
class=" font-medium text-black flex items-center gap-1"
>
<div
class="bg-gray-500/20 text-gray-700 dark:text-gray-200 rounded-sm uppercase text-xs font-bold px-1 shrink-0"
class="bg-gray-500/20 text-gray-700 rounded-sm uppercase text-xs font-bold px-1 shrink-0"
>
File
</div>
@ -248,7 +248,7 @@
</div>
</div>
<div class=" text-xs text-gray-600 dark:text-gray-100 line-clamp-1">
<div class=" text-xs text-gray-600 line-clamp-1">
{$i18n.t('Updated')}
{dayjs(file.updated_at * 1000).fromNow()}
</div>
@ -269,7 +269,7 @@
.substring(1)
.startsWith('https://youtu.be'))}
<button
class="px-3 py-1.5 rounded-xl w-full text-left bg-gray-50 dark:bg-gray-850 dark:text-gray-100 selected-command-option-button"
class="px-3 py-1.5 rounded-xl w-full text-left bg-gray-50 selected-command-option-button"
type="button"
on:click={() => {
const url = prompt.split(' ')?.at(0)?.substring(1);
@ -284,7 +284,7 @@
}
}}
>
<div class=" font-medium text-black dark:text-gray-100 line-clamp-1">
<div class=" font-medium text-black line-clamp-1">
{prompt.split(' ')?.at(0)?.substring(1)}
</div>
@ -292,7 +292,7 @@
</button>
{:else if prompt.split(' ')?.at(0)?.substring(1).startsWith('http')}
<button
class="px-3 py-1.5 rounded-xl w-full text-left bg-gray-50 dark:bg-gray-850 dark:text-gray-100 selected-command-option-button"
class="px-3 py-1.5 rounded-xl w-full text-left bg-gray-50 selected-command-option-button"
type="button"
on:click={() => {
const url = prompt.split(' ')?.at(0)?.substring(1);
@ -307,7 +307,7 @@
}
}}
>
<div class=" font-medium text-black dark:text-gray-100 line-clamp-1">
<div class=" font-medium text-black line-clamp-1">
{prompt.split(' ')?.at(0)?.substring(1)}
</div>

8
src/lib/components/chat/MessageInput/Commands/Models.svelte

@ -70,15 +70,15 @@
id="commands-container"
class="px-2 mb-2 text-left w-full absolute bottom-0 left-0 right-0 z-10"
>
<div class="flex w-full rounded-xl border border-gray-100 dark:border-gray-850">
<div class="flex w-full rounded-xl border border-gray-100 ">
<div
class="max-h-60 flex flex-col w-full rounded-xl bg-white dark:text-gray-100"
class="max-h-60 flex flex-col w-full rounded-xl bg-white "
>
<div class="m-1 overflow-y-auto p-1 rounded-r-lg space-y-0.5 scrollbar-hidden">
{#each filteredItems as model, modelIdx}
<button
class="px-3 py-1.5 rounded-xl w-full text-left {modelIdx === selectedIdx
? 'bg-gray-50 dark:bg-gray-850 selected-command-option-button'
? 'bg-gray-50 selected-command-option-button'
: ''}"
type="button"
on:click={() => {
@ -89,7 +89,7 @@
}}
on:focus={() => {}}
>
<div class="flex font-medium text-black dark:text-gray-100 line-clamp-1">
<div class="flex font-medium text-black line-clamp-1">
<img
src={model?.info?.meta?.profile_image_url ?? '/static/favicon.png'}
alt={model?.name ?? model.id}

12
src/lib/components/chat/MessageInput/Commands/Prompts.svelte

@ -139,15 +139,15 @@
id="commands-container"
class="px-2 mb-2 text-left w-full absolute bottom-0 left-0 right-0 z-10"
>
<div class="flex w-full rounded-xl border border-gray-100 dark:border-gray-850">
<div class="flex w-full rounded-xl border border-gray-100 ">
<div
class="max-h-60 flex flex-col w-full rounded-xl bg-white dark:text-gray-100"
class="max-h-60 flex flex-col w-full rounded-xl bg-white "
>
<div class="m-1 overflow-y-auto p-1 space-y-0.5 scrollbar-hidden">
{#each filteredPrompts as prompt, promptIdx}
<button
class=" px-3 py-1.5 rounded-xl w-full text-left {promptIdx === selectedPromptIdx
? ' bg-gray-50 dark:bg-gray-850 selected-command-option-button'
? ' bg-gray-50 selected-command-option-button'
: ''}"
type="button"
on:click={() => {
@ -158,11 +158,11 @@
}}
on:focus={() => {}}
>
<div class=" font-medium text-black dark:text-gray-100">
<div class=" font-medium text-black ">
{prompt.command}
</div>
<div class=" text-xs text-gray-600 dark:text-gray-100">
<div class=" text-xs text-gray-600 ">
{prompt.title}
</div>
</button>
@ -170,7 +170,7 @@
</div>
<div
class=" px-2 pt-0.5 pb-1 text-xs text-gray-600 dark:text-gray-100 bg-white rounded-b-xl flex items-center space-x-1"
class=" px-2 pt-0.5 pb-1 text-xs text-gray-600 bg-white rounded-b-xl flex items-center space-x-1"
>
<div>
<svg

8
src/lib/components/chat/MessageInput/InputMenu.svelte

@ -92,7 +92,7 @@
<div slot="content">
<DropdownMenu.Content
class="w-full max-w-[220px] rounded-xl px-1 py-1 border-gray-300/30 dark:border-gray-700/50 z-50 bg-white dark:bg-gray-850 dark:text-white shadow-sm"
class="w-full max-w-[220px] rounded-xl px-1 py-1 border-gray-300/30 dark:border-gray-700/50 z-50 bg-white shadow-sm"
sideOffset={15}
alignOffset={-8}
side="top"
@ -148,7 +148,7 @@
className="w-full"
>
<DropdownMenu.Item
class="flex gap-2 items-center px-3 py-2 text-sm font-medium cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-800 rounded-xl {!fileUploadEnabled
class="flex gap-2 items-center px-3 py-2 text-sm font-medium cursor-pointer hover:bg-gray-50 rounded-xl {!fileUploadEnabled
? 'opacity-50'
: ''}"
on:click={() => {
@ -175,7 +175,7 @@
className="w-full"
>
<DropdownMenu.Item
class="flex gap-2 items-center px-3 py-2 text-sm font-medium cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-800 rounded-xl {!fileUploadEnabled
class="flex gap-2 items-center px-3 py-2 text-sm font-medium cursor-pointer hover:bg-gray-50 rounded-xl {!fileUploadEnabled
? 'opacity-50'
: ''}"
on:click={() => {
@ -191,7 +191,7 @@
{#if $config?.features?.enable_google_drive_integration}
<DropdownMenu.Item
class="flex gap-2 items-center px-3 py-2 text-sm font-medium cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-800 rounded-xl"
class="flex gap-2 items-center px-3 py-2 text-sm font-medium cursor-pointer hover:bg-gray-50 rounded-xl"
on:click={() => {
uploadGoogleDriveHandler();
}}

4
src/lib/components/chat/MessageInput/VoiceRecording.svelte

@ -320,7 +320,7 @@
<div
bind:clientWidth={containerWidth}
class="{loading
? ' bg-gray-100/50 dark:bg-gray-850/50'
? ' bg-gray-100/50 /50'
: 'bg-indigo-300/10 dark:bg-indigo-500/10 '} rounded-full flex justify-between {className}"
>
<div class="flex items-center mr-1">
@ -382,7 +382,7 @@
class="text-sm
{loading ? ' text-gray-500 dark:text-gray-400 ' : ' text-indigo-400 '}
{loading ? ' text-gray-500 ' : ' text-indigo-400 '}
font-medium flex-1 mx-auto text-center"
>
{formatSeconds(durationSeconds)}

8
src/lib/components/chat/Messages/Citations.svelte

@ -102,7 +102,7 @@
{#each citations as citation, idx}
<button
id={`source-${id}-${idx}`}
class="no-toggle outline-hidden flex dark:text-gray-300 p-1 bg-white rounded-xl max-w-96"
class="no-toggle outline-hidden flex p-1 bg-white rounded-xl max-w-96"
on:click={() => {
showCitationModal = true;
selectedCitation = citation;
@ -114,7 +114,7 @@
</div>
{/if}
<div
class="flex-1 mx-1 truncate text-black/60 hover:text-black dark:text-white/60 dark:hover:text-white transition"
class="flex-1 mx-1 truncate text-black/60 hover:text-black /60 dark:hover:text-white transition"
>
{citation.source.name}
</div>
@ -141,7 +141,7 @@
<div class="flex text-xs font-medium items-center">
{#each citations.slice(0, 2) as citation, idx}
<button
class="no-toggle outline-hidden flex dark:text-gray-300 p-1 bg-gray-50 hover:bg-gray-100 dark:hover:bg-gray-850 transition rounded-xl max-w-96"
class="no-toggle outline-hidden flex p-1 bg-gray-50 hover:bg-gray-100 transition rounded-xl max-w-96"
on:click={() => {
showCitationModal = true;
selectedCitation = citation;
@ -181,7 +181,7 @@
{#each citations as citation, idx}
<button
id={`source-${id}-${idx}`}
class="no-toggle outline-hidden flex dark:text-gray-300 p-1 bg-gray-50 hover:bg-gray-100 dark:hover:bg-gray-850 transition rounded-xl max-w-96"
class="no-toggle outline-hidden flex p-1 bg-gray-50 hover:bg-gray-100 transition rounded-xl max-w-96"
on:click={() => {
showCitationModal = true;
selectedCitation = citation;

24
src/lib/components/chat/Messages/CitationsModal.svelte

@ -48,7 +48,7 @@
<Modal size="lg" bind:show>
<div>
<div class=" flex justify-between dark:text-gray-300 px-5 pt-4 pb-2">
<div class=" flex justify-between px-5 pt-4 pb-2">
<div class=" text-lg font-medium self-center capitalize">
{$i18n.t('Citation')}
</div>
@ -73,11 +73,11 @@
<div class="flex flex-col md:flex-row w-full px-6 pb-5 md:space-x-4">
<div
class="flex flex-col w-full dark:text-gray-200 overflow-y-scroll max-h-[22rem] scrollbar-hidden"
class="flex flex-col w-full overflow-y-scroll max-h-[22rem] scrollbar-hidden"
>
{#each mergedDocuments as document, documentIdx}
<div class="flex flex-col w-full">
<div class="text-sm font-medium dark:text-gray-300">
<div class="text-sm font-medium ">
{$i18n.t('Source')}
</div>
@ -88,7 +88,7 @@
placement="top-start"
tippyOptions={{ duration: [500, 0] }}
>
<div class="text-sm dark:text-gray-400 flex items-center gap-2 w-fit">
<div class="text-sm flex items-center gap-2 w-fit">
<a
class="hover:text-gray-500 dark:hover:text-gray-100 underline grow"
href={document?.metadata?.file_id
@ -101,7 +101,7 @@
{document?.metadata?.name ?? document.source.name}
</a>
{#if document?.metadata?.page}
<span class="text-xs text-gray-500 dark:text-gray-400">
<span class="text-xs text-gray-500 ">
({$i18n.t('page')}
{document.metadata.page + 1})
</span>
@ -109,7 +109,7 @@
</div>
</Tooltip>
{#if showRelevance}
<div class="text-sm font-medium dark:text-gray-300 mt-2">
<div class="text-sm font-medium mt-2">
{$i18n.t('Relevance')}
</div>
{#if document.distance !== undefined}
@ -119,7 +119,7 @@
placement="top-start"
tippyOptions={{ duration: [500, 0] }}
>
<div class="text-sm my-1 dark:text-gray-400 flex items-center gap-2 w-fit">
<div class="text-sm my-1 flex items-center gap-2 w-fit">
{#if showPercentage}
{@const percentage = calculatePercentage(document.distance)}
<span
@ -138,19 +138,19 @@
</div>
</Tooltip>
{:else}
<div class="text-sm dark:text-gray-400">
<div class="text-sm ">
{$i18n.t('No distance available')}
</div>
{/if}
{/if}
{:else}
<div class="text-sm dark:text-gray-400">
<div class="text-sm ">
{$i18n.t('No source available')}
</div>
{/if}
</div>
<div class="flex flex-col w-full">
<div class=" text-sm font-medium dark:text-gray-300 mt-2">
<div class=" text-sm font-medium mt-2">
{$i18n.t('Content')}
</div>
{#if document.metadata?.html}
@ -161,14 +161,14 @@
title={$i18n.t('Content')}
></iframe>
{:else}
<pre class="text-sm dark:text-gray-400 whitespace-pre-line">
<pre class="text-sm whitespace-pre-line">
{document.document}
</pre>
{/if}
</div>
{#if documentIdx !== mergedDocuments.length - 1}
<hr class="border-gray-100 dark:border-gray-850 my-3" />
<hr class="border-gray-100 my-3" />
{/if}
{/each}
</div>

18
src/lib/components/chat/Messages/CodeBlock.svelte

@ -409,7 +409,7 @@
{#if lang === 'mermaid'}
{#if mermaidHtml}
<SvgPanZoom
className=" border border-gray-100 dark:border-gray-850 rounded-lg max-h-fit overflow-hidden"
className=" border border-gray-100 rounded-lg max-h-fit overflow-hidden"
svg={mermaidHtml}
content={_token.text}
/>
@ -417,12 +417,12 @@
<pre class="mermaid">{code}</pre>
{/if}
{:else}
<div class="text-text-300 absolute pl-4 py-1.5 text-xs font-medium dark:text-white">
<div class="text-text-300 absolute pl-4 py-1.5 text-xs font-medium ">
{lang}
</div>
<div
class="sticky {stickyButtonsClassName} mb-1 py-1 pr-2.5 flex items-center justify-end z-10 text-xs text-black dark:text-white"
class="sticky {stickyButtonsClassName} mb-1 py-1 pr-2.5 flex items-center justify-end z-10 text-xs text-black "
>
<div class="flex items-center gap-0.5 translate-y-[1px]">
{#if lang.toLowerCase() === 'python' || lang.toLowerCase() === 'py' || (lang === '' && checkPythonCode(code))}
@ -430,7 +430,7 @@
<div class="run-code-button bg-none border-none p-1 cursor-not-allowed">Running</div>
{:else if run}
<button
class="run-code-button bg-none border-none bg-gray-50 hover:bg-gray-100 dark:bg-gray-850 dark:hover:bg-gray-800 transition rounded-md px-1.5 py-0.5"
class="run-code-button bg-none border-none bg-gray-50 hover:bg-gray-100 transition rounded-md px-1.5 py-0.5"
on:click={async () => {
code = _code;
await tick();
@ -442,7 +442,7 @@
{#if save}
<button
class="save-code-button bg-none border-none bg-gray-50 hover:bg-gray-100 dark:bg-gray-850 dark:hover:bg-gray-800 transition rounded-md px-1.5 py-0.5"
class="save-code-button bg-none border-none bg-gray-50 hover:bg-gray-100 transition rounded-md px-1.5 py-0.5"
on:click={saveCode}
>
{saved ? $i18n.t('Saved') : $i18n.t('Save')}
@ -450,7 +450,7 @@
{/if}
<button
class="copy-code-button bg-none border-none bg-gray-50 hover:bg-gray-100 dark:bg-gray-850 dark:hover:bg-gray-800 transition rounded-md px-1.5 py-0.5"
class="copy-code-button bg-none border-none bg-gray-50 hover:bg-gray-100 transition rounded-md px-1.5 py-0.5"
on:click={copyCode}>{copied ? $i18n.t('Copied') : $i18n.t('Copy')}</button
>
</div>
@ -463,7 +463,7 @@
? ''
: 'rounded-b-lg'} overflow-hidden"
>
<div class=" pt-7 bg-gray-50 dark:bg-gray-850"></div>
<div class=" pt-7 bg-gray-50 "></div>
<CodeEditor
value={code}
{id}
@ -479,12 +479,12 @@
<div
id="plt-canvas-{id}"
class="bg-gray-50 dark:bg-[#202123] dark:text-white max-w-full overflow-x-auto scrollbar-hidden"
class="bg-gray-50 dark:bg-[#202123] max-w-full overflow-x-auto scrollbar-hidden"
/>
{#if executing || stdout || stderr || result || files}
<div
class="bg-gray-50 dark:bg-[#202123] dark:text-white rounded-b-lg! py-4 px-4 flex flex-col gap-2"
class="bg-gray-50 dark:bg-[#202123] rounded-b-lg! py-4 px-4 flex flex-col gap-2"
>
{#if executing}
<div class=" ">

10
src/lib/components/chat/Messages/CodeExecutionModal.svelte

@ -12,7 +12,7 @@
<Modal size="lg" bind:show>
<div>
<div class="flex justify-between dark:text-gray-300 px-5 pt-4 pb-2">
<div class="flex justify-between px-5 pt-4 pb-2">
<div class="text-lg font-medium self-center flex flex-col gap-0.5 capitalize">
{#if codeExecution?.result}
<div>
@ -64,7 +64,7 @@
<div class="flex flex-col md:flex-row w-full px-4 pb-5">
<div
class="flex flex-col w-full dark:text-gray-200 overflow-y-scroll max-h-[22rem] scrollbar-hidden"
class="flex flex-col w-full overflow-y-scroll max-h-[22rem] scrollbar-hidden"
>
<div class="flex flex-col w-full">
<CodeBlock
@ -82,7 +82,7 @@
</div>
{#if codeExecution?.result && (codeExecution?.result?.error || codeExecution?.result?.output)}
<div class="dark:bg-[#202123] dark:text-white px-4 py-4 rounded-b-lg flex flex-col gap-3">
<div class="dark:bg-[#202123] px-4 py-4 rounded-b-lg flex flex-col gap-3">
{#if codeExecution?.result?.error}
<div>
<div class=" text-gray-500 text-xs mb-1">{$i18n.t('ERROR')}</div>
@ -99,8 +99,8 @@
{/if}
{#if codeExecution?.result?.files && codeExecution?.result?.files.length > 0}
<div class="flex flex-col w-full">
<hr class="border-gray-100 dark:border-gray-850 my-2" />
<div class=" text-sm font-medium dark:text-gray-300">
<hr class="border-gray-100 my-2" />
<div class=" text-sm font-medium ">
{$i18n.t('Files')}
</div>
<ul class="mt-1 list-disc pl-4 text-xs">

2
src/lib/components/chat/Messages/CodeExecutions.svelte

@ -30,7 +30,7 @@
{#each codeExecutions as execution (execution.id)}
<div class="flex gap-1 text-xs font-semibold">
<button
class="flex dark:text-gray-300 py-1 px-1 bg-gray-50 hover:bg-gray-100 dark:bg-gray-850 dark:hover:bg-gray-800 transition rounded-xl max-w-96"
class="flex py-1 px-1 bg-gray-50 hover:bg-gray-100 transition rounded-xl max-w-96"
on:click={() => {
selectedCodeExecution = execution;
showCodeExecutionModal = true;

12
src/lib/components/chat/Messages/Markdown/MarkdownTokens.svelte

@ -74,7 +74,7 @@
<!-- {JSON.stringify(tokens)} -->
{#each tokens as token, tokenIdx (tokenIdx)}
{#if token.type === 'hr'}
<hr class=" border-gray-100 dark:border-gray-850" />
<hr class=" border-gray-100 " />
{:else if token.type === 'heading'}
<svelte:element this={headerComponent(token.depth)} dir="auto">
<MarkdownInlineTokens id={`${id}-${tokenIdx}-h`} tokens={token.tokens} {onSourceClick} />
@ -106,16 +106,16 @@
<div class="relative w-full group">
<div class="scrollbar-hidden relative overflow-x-auto max-w-full rounded-lg">
<table
class=" w-full text-sm text-left text-gray-500 dark:text-gray-400 max-w-full rounded-xl"
class=" w-full text-sm text-left text-gray-500 max-w-full rounded-xl"
>
<thead
class="text-xs text-gray-700 uppercase bg-gray-50 dark:bg-gray-850 dark:text-gray-400 border-none"
class="text-xs text-gray-700 uppercase bg-gray-50 border-none"
>
<tr class="">
{#each token.header as header, headerIdx}
<th
scope="col"
class="px-3! py-1.5! cursor-pointer border border-gray-100 dark:border-gray-850"
class="px-3! py-1.5! cursor-pointer border border-gray-100 "
style={token.align[headerIdx] ? '' : `text-align: ${token.align[headerIdx]}`}
>
<div class="flex flex-col gap-1.5 text-left">
@ -133,10 +133,10 @@
</thead>
<tbody>
{#each token.rows as row, rowIdx}
<tr class="bg-white dark:border-gray-850 text-xs">
<tr class="bg-white text-xs">
{#each row ?? [] as cell, cellIdx}
<td
class="px-3! py-1.5! text-gray-900 dark:text-white w-max border border-gray-100 dark:border-gray-850"
class="px-3! py-1.5! text-gray-900 w-max border border-gray-100 "
style={token.align[cellIdx] ? '' : `text-align: ${token.align[cellIdx]}`}
>
<div class="flex flex-col break-normal">

2
src/lib/components/chat/Messages/Markdown/Source.svelte

@ -38,7 +38,7 @@
{#if attributes.title !== 'N/A'}
<button
class="text-xs font-medium w-fit translate-y-[2px] px-2 py-0.5 dark:bg-white/5 dark:text-white/60 dark:hover:text-white bg-gray-50 text-black/60 hover:text-black transition rounded-lg"
class="text-xs font-medium w-fit translate-y-[2px] px-2 py-0.5 dark:bg-white/5 /60 dark:hover:text-white bg-gray-50 text-black/60 hover:text-black transition rounded-lg"
on:click={() => {
onClick(id, attributes.data);
}}

6
src/lib/components/chat/Messages/MultiResponseMessages.svelte

@ -194,10 +194,10 @@
<div
class=" snap-center w-full max-w-full m-1 border {history.messages[messageId]
?.modelIdx == modelIdx
? `border-gray-100 dark:border-gray-850 border-[1.5px] ${
? `border-gray-100 border-[1.5px] ${
$mobile ? 'min-w-full' : 'min-w-80'
}`
: `border-gray-100 dark:border-gray-850 border-dashed ${
: `border-gray-100 border-dashed ${
$mobile ? 'min-w-full' : 'min-w-80'
}`} transition-all p-5 rounded-2xl"
on:click={async () => {
@ -293,7 +293,7 @@
id="merge-response-button"
class="{true
? 'visible'
: 'invisible group-hover:visible'} p-1 hover:bg-black/5 dark:hover:bg-white/5 rounded-lg dark:hover:text-white hover:text-black transition regenerate-response-button"
: 'invisible group-hover:visible'} p-1 hover:bg-black/5 hover:text-black transition regenerate-response-button"
on:click={() => {
mergeResponsesHandler();
}}

8
src/lib/components/chat/Messages/RateComment.svelte

@ -110,7 +110,7 @@
{/if}
<div
class=" my-2.5 rounded-xl px-4 py-3 border border-gray-100 dark:border-gray-850"
class=" my-2.5 rounded-xl px-4 py-3 border border-gray-100 "
id="message-feedback-{message.id}"
>
<div class="flex justify-between items-center">
@ -142,7 +142,7 @@
<!-- 1-10 scale -->
{#each Array.from({ length: 10 }).map((_, i) => i + 1) as rating}
<button
class="size-7 text-sm border border-gray-100 dark:border-gray-850 hover:bg-gray-50 dark:hover:bg-gray-850 {detailedRating ===
class="size-7 text-sm border border-gray-100 hover:bg-gray-50 {detailedRating ===
rating
? 'bg-gray-100 dark:bg-gray-800'
: ''} transition rounded-full disabled:cursor-not-allowed disabled:text-gray-500 disabled:bg-white dark:disabled:bg-gray-900"
@ -175,7 +175,7 @@
<div class="flex flex-wrap gap-1.5 text-sm mt-1.5">
{#each reasons as reason}
<button
class="px-3 py-0.5 border border-gray-100 dark:border-gray-850 hover:bg-gray-50 dark:hover:bg-gray-850 {selectedReason ===
class="px-3 py-0.5 border border-gray-100 hover:bg-gray-50 {selectedReason ===
reason
? 'bg-gray-100 dark:bg-gray-800'
: ''} transition rounded-xl"
@ -247,7 +247,7 @@
</div>
<button
class="px-3.5 py-1.5 text-sm font-medium bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black dark:hover:bg-gray-100 transition rounded-full"
class="px-3.5 py-1.5 text-sm font-medium bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black transition rounded-full"
on:click={() => {
saveHandler();
}}

26
src/lib/components/chat/Messages/ResponseMessage.svelte

@ -541,7 +541,7 @@
/>
</div>
<div class="flex-auto w-0 pl-1 message" style="background-color: #ebf4ff;">
<div class="flex-auto w-0 pl-1 message rounded-2xl" style="background-color:#a5d1fe;">
<div>
{#if message?.files && message.files?.filter((f) => f.type === 'image').length > 0}
@ -663,7 +663,7 @@
<div>
<button
id="save-new-message-button"
class=" px-4 py-2 bg-gray-50 hover:bg-gray-100 dark:bg-gray-800 dark:hover:bg-gray-700 border dark:border-gray-700 text-gray-700 dark:text-gray-200 transition rounded-3xl"
class=" px-4 py-2 bg-gray-50 hover:bg-gray-100 border dark:border-gray-700 text-gray-700 transition rounded-3xl"
on:click={() => {
saveAsCopyHandler();
}}
@ -675,7 +675,7 @@
<div class="flex space-x-1.5">
<button
id="close-edit-message-button"
class="px-4 py-2 bg-white hover:bg-gray-100 text-gray-800 dark:text-gray-100 transition rounded-3xl"
class="px-4 py-2 bg-white hover:bg-gray-100 text-gray-800 transition rounded-3xl"
on:click={() => {
cancelEditMessage();
}}
@ -812,7 +812,7 @@
</button>
<div
class="text-sm tracking-widest font-semibold self-center dark:text-gray-100 min-w-fit"
class="text-sm tracking-widest font-semibold self-center min-w-fit"
>
{siblings.indexOf(message.id) + 1}/{siblings.length}
</div>
@ -848,7 +848,7 @@
<button
class="{isLastMessage
? 'visible'
: 'invisible group-hover:visible'} p-1.5 hover:bg-black/5 dark:hover:bg-white/5 rounded-lg dark:hover:text-white hover:text-black transition"
: 'invisible group-hover:visible'} p-1.5 hover:bg-black/5 hover:text-black transition"
on:click={() => {
editMessageHandler();
}}
@ -876,7 +876,7 @@
<button
class="{isLastMessage
? 'visible'
: 'invisible group-hover:visible'} p-1.5 hover:bg-black/5 dark:hover:bg-white/5 rounded-lg dark:hover:text-white hover:text-black transition copy-response-button"
: 'invisible group-hover:visible'} p-1.5 hover:bg-black/5 hover:text-black transition copy-response-button"
on:click={() => {
copyToClipboard(message.content);
}}
@ -903,7 +903,7 @@
id="speak-button-{message.id}"
class="{isLastMessage
? 'visible'
: 'invisible group-hover:visible'} p-1.5 hover:bg-black/5 dark:hover:bg-white/5 rounded-lg dark:hover:text-white hover:text-black transition"
: 'invisible group-hover:visible'} p-1.5 hover:bg-black/5 hover:text-black transition"
on:click={() => {
if (!loadingSpeech) {
toggleSpeakMessage();
@ -981,7 +981,7 @@
<button
class="{isLastMessage
? 'visible'
: 'invisible group-hover:visible'} p-1.5 hover:bg-black/5 dark:hover:bg-white/5 rounded-lg dark:hover:text-white hover:text-black transition"
: 'invisible group-hover:visible'} p-1.5 hover:bg-black/5 hover:text-black transition"
on:click={() => {
if (!generatingImage) {
generateImage(message);
@ -1058,7 +1058,7 @@
<button
class=" {isLastMessage
? 'visible'
: 'invisible group-hover:visible'} p-1.5 hover:bg-black/5 dark:hover:bg-white/5 rounded-lg dark:hover:text-white hover:text-black transition whitespace-pre-wrap"
: 'invisible group-hover:visible'} p-1.5 hover:bg-black/5 hover:text-black transition whitespace-pre-wrap"
on:click={() => {
console.log(message);
}}
@ -1164,7 +1164,7 @@
id="continue-response-button"
class="{isLastMessage
? 'visible'
: 'invisible group-hover:visible'} p-1.5 hover:bg-black/5 dark:hover:bg-white/5 rounded-lg dark:hover:text-white hover:text-black transition regenerate-response-button"
: 'invisible group-hover:visible'} p-1.5 hover:bg-black/5 hover:text-black transition regenerate-response-button"
on:click={() => {
continueResponse();
}}
@ -1197,7 +1197,7 @@
type="button"
class="{isLastMessage
? 'visible'
: 'invisible group-hover:visible'} p-1.5 hover:bg-black/5 dark:hover:bg-white/5 rounded-lg dark:hover:text-white hover:text-black transition regenerate-response-button"
: 'invisible group-hover:visible'} p-1.5 hover:bg-black/5 hover:text-black transition regenerate-response-button"
on:click={() => {
showRateComment = false;
regenerateResponse(message);
@ -1239,7 +1239,7 @@
id="continue-response-button"
class="{isLastMessage
? 'visible'
: 'invisible group-hover:visible'} p-1.5 hover:bg-black/5 dark:hover:bg-white/5 rounded-lg dark:hover:text-white hover:text-black transition regenerate-response-button"
: 'invisible group-hover:visible'} p-1.5 hover:bg-black/5 hover:text-black transition regenerate-response-button"
on:click={() => {
showDeleteConfirm = true;
}}
@ -1269,7 +1269,7 @@
type="button"
class="{isLastMessage
? 'visible'
: 'invisible group-hover:visible'} p-1.5 hover:bg-black/5 dark:hover:bg-white/5 rounded-lg dark:hover:text-white hover:text-black transition"
: 'invisible group-hover:visible'} p-1.5 hover:bg-black/5 hover:text-black transition"
on:click={() => {
actionMessage(action.id, message);
}}

6
src/lib/components/chat/Messages/ResponseMessage/WebSearchResults.svelte

@ -10,7 +10,7 @@
<Collapsible bind:open={state} className="w-full space-y-1">
<div
class="flex items-center gap-2 text-gray-500 hover:text-gray-700 dark:hover:text-gray-300 transition"
class="flex items-center gap-2 text-gray-500 hover:text-gray-700 transition"
>
<slot />
@ -28,7 +28,7 @@
<a
href="https://www.google.com/search?q={status.query}"
target="_blank"
class="flex w-full items-center p-3 px-4 border-b border-gray-300/30 dark:border-gray-700/50 group/item justify-between font-normal text-gray-800 dark:text-gray-300 no-underline"
class="flex w-full items-center p-3 px-4 border-b border-gray-300/30 dark:border-gray-700/50 group/item justify-between font-normal text-gray-800 no-underline"
>
<div class="flex gap-2 items-center">
<MagnifyingGlass />
@ -64,7 +64,7 @@
target="_blank"
class="flex w-full items-center p-3 px-4 {urlIdx === status.urls.length - 1
? ''
: 'border-b border-gray-300/30 dark:border-gray-700/50'} group/item justify-between font-normal text-gray-800 dark:text-gray-300"
: 'border-b border-gray-300/30 dark:border-gray-700/50'} group/item justify-between font-normal text-gray-800 "
>
<div class=" line-clamp-1">
{url}

18
src/lib/components/chat/Messages/UserMessage.svelte

@ -109,7 +109,7 @@
/>
</div>
{/if}
<div class="flex-auto w-0 max-w-full pl-1" style="background-color:#ffffff;">
<div class="flex-auto w-0 max-w-full pl-1" >
{#if !($settings?.chatBubble ?? true)}
<div>
<Name>
@ -149,7 +149,7 @@
name={file.name}
type={file.type}
size={file?.size}
colorClassName="bg-white dark:bg-gray-850 "
colorClassName="bg-white "
/>
{/if}
</div>
@ -189,7 +189,7 @@
<div>
<button
id="save-edit-message-button"
class=" px-4 py-2 bg-gray-50 hover:bg-gray-100 dark:bg-gray-800 dark:hover:bg-gray-700 border dark:border-gray-700 text-gray-700 dark:text-gray-200 transition rounded-3xl"
class=" px-4 py-2 bg-gray-50 hover:bg-gray-100 border dark:border-gray-700 text-gray-700 transition rounded-3xl"
on:click={() => {
editMessageConfirmHandler(false);
}}
@ -201,7 +201,7 @@
<div class="flex space-x-1.5">
<button
id="close-edit-message-button"
class="px-4 py-2 bg-white hover:bg-gray-100 text-gray-800 dark:text-gray-100 transition rounded-3xl"
class="px-4 py-2 bg-white hover:bg-gray-100 text-gray-800 transition rounded-3xl"
on:click={() => {
cancelEditMessage();
}}
@ -226,7 +226,7 @@
<div class="flex {($settings?.chatBubble ?? true) ? 'justify-end pb-1' : 'w-full'}">
<div style="background-color: #ffffff;border:solid #ebecef 1px"
class="rounded-3xl {($settings?.chatBubble ?? true)
? `max-w-[90%] px-5 py-2 bg-gray-50 dark:bg-gray-850 ${
? `max-w-[90%] px-5 py-2 bg-gray-50 ${
message.files ? 'rounded-tr-lg' : ''
}`
: ' w-full'}"
@ -268,7 +268,7 @@
</button>
<div
class="text-sm tracking-widest font-semibold self-center dark:text-gray-100"
class="text-sm tracking-widest font-semibold self-center "
>
{siblings.indexOf(message.id) + 1}/{siblings.length}
</div>
@ -300,7 +300,7 @@
{#if !readOnly}
<Tooltip content={$i18n.t('Edit')} placement="bottom">
<button
class="invisible group-hover:visible p-1.5 hover:bg-black/5 dark:hover:bg-white/5 rounded-lg dark:hover:text-white hover:text-black transition edit-user-message-button"
class="invisible group-hover:visible p-1.5 hover:bg-black/5 hover:text-black transition edit-user-message-button"
on:click={() => {
editMessageHandler();
}}
@ -325,7 +325,7 @@
<Tooltip content={$i18n.t('Copy')} placement="bottom">
<button
class="invisible group-hover:visible p-1.5 hover:bg-black/5 dark:hover:bg-white/5 rounded-lg dark:hover:text-white hover:text-black transition"
class="invisible group-hover:visible p-1.5 hover:bg-black/5 hover:text-black transition"
on:click={() => {
copyToClipboard(message.content);
}}
@ -399,7 +399,7 @@
</button>
<div
class="text-sm tracking-widest font-semibold self-center dark:text-gray-100"
class="text-sm tracking-widest font-semibold self-center "
>
{siblings.indexOf(message.id) + 1}/{siblings.length}
</div>

26
src/lib/components/chat/ModelSelector/Selector.svelte

@ -262,7 +262,7 @@
<DropdownMenu.Content
class=" z-40 {$mobile
? `w-full`
: `${className}`} max-w-[calc(100vw-1rem)] justify-start rounded-xl bg-white dark:bg-gray-850 dark:text-white shadow-lg outline-hidden"
: `${className}`} max-w-[calc(100vw-1rem)] justify-start rounded-xl bg-white shadow-lg outline-hidden"
transition={flyAndScale}
side={$mobile ? 'bottom' : 'bottom-start'}
sideOffset={3}
@ -298,14 +298,14 @@
/>
</div>
<hr class="border-gray-100 dark:border-gray-850" />
<hr class="border-gray-100 " />
{/if}
<div class="px-3 my-2 max-h-64 overflow-y-auto scrollbar-hidden group">
{#each filteredItems as item, index}
<button
aria-label="model-item"
class="flex w-full text-left font-medium line-clamp-1 select-none items-center rounded-button py-2 pl-3 pr-1.5 text-sm text-gray-700 dark:text-gray-100 outline-hidden transition-all duration-75 hover:bg-gray-100 dark:hover:bg-gray-800 rounded-lg cursor-pointer data-highlighted:bg-muted {index ===
class="flex w-full text-left font-medium line-clamp-1 select-none items-center rounded-button py-2 pl-3 pr-1.5 text-sm text-gray-700 outline-hidden transition-all duration-75 hover:bg-gray-100 rounded-lg cursor-pointer data-highlighted:bg-muted {index ===
selectedModelIdx
? 'bg-gray-100 dark:bg-gray-800 group-hover:bg-transparent'
: ''}"
@ -322,7 +322,7 @@
<div class="flex gap-0.5 self-start h-full mb-1.5 -translate-x-1">
{#each item.model?.info?.meta.tags as tag}
<div
class=" text-xs font-bold px-1 rounded-sm uppercase line-clamp-1 bg-gray-500/20 text-gray-700 dark:text-gray-200"
class=" text-xs font-bold px-1 rounded-sm uppercase line-clamp-1 bg-gray-500/20 text-gray-700 "
>
{tag.name}
</div>
@ -361,7 +361,7 @@
className="self-end"
>
<span
class=" text-xs font-medium text-gray-600 dark:text-gray-400 line-clamp-1"
class=" text-xs font-medium text-gray-600 line-clamp-1"
>{item.model.ollama?.details?.parameter_size ?? ''}</span
>
</Tooltip>
@ -445,7 +445,7 @@
{#each item.model?.info?.meta.tags as tag}
<Tooltip content={tag.name}>
<div
class=" text-xs font-bold px-1 rounded-sm uppercase line-clamp-1 bg-gray-500/20 text-gray-700 dark:text-gray-200"
class=" text-xs font-bold px-1 rounded-sm uppercase line-clamp-1 bg-gray-500/20 text-gray-700 "
>
{tag.name}
</div>
@ -464,7 +464,7 @@
</button>
{:else}
<div>
<div class="block px-3 py-2 text-sm text-gray-700 dark:text-gray-100">
<div class="block px-3 py-2 text-sm text-gray-700 ">
{$i18n.t('No results found')}
</div>
</div>
@ -478,7 +478,7 @@
placement="top-start"
>
<button
class="flex w-full font-medium line-clamp-1 select-none items-center rounded-button py-2 pl-3 pr-1.5 text-sm text-gray-700 dark:text-gray-100 outline-hidden transition-all duration-75 hover:bg-gray-100 dark:hover:bg-gray-800 rounded-lg cursor-pointer data-highlighted:bg-muted"
class="flex w-full font-medium line-clamp-1 select-none items-center rounded-button py-2 pl-3 pr-1.5 text-sm text-gray-700 outline-hidden transition-all duration-75 hover:bg-gray-100 rounded-lg cursor-pointer data-highlighted:bg-muted"
on:click={() => {
pullModelHandler();
}}
@ -492,7 +492,7 @@
{#each Object.keys($MODEL_DOWNLOAD_POOL) as model}
<div
class="flex w-full justify-between font-medium select-none rounded-button py-2 pl-3 pr-1.5 text-sm text-gray-700 dark:text-gray-100 outline-hidden transition-all duration-75 rounded-lg cursor-pointer data-highlighted:bg-muted"
class="flex w-full justify-between font-medium select-none rounded-button py-2 pl-3 pr-1.5 text-sm text-gray-700 outline-hidden transition-all duration-75 rounded-lg cursor-pointer data-highlighted:bg-muted"
>
<div class="flex">
<div class="-ml-2 mr-2.5 translate-y-0.5">
@ -545,13 +545,13 @@
<div class="mr-2 ml-1 translate-y-0.5">
<Tooltip content={$i18n.t('Cancel')}>
<button
class="text-gray-800 dark:text-gray-100"
class="text-gray-800 "
on:click={() => {
cancelModelPullHandler(model);
}}
>
<svg
class="w-4 h-4 text-gray-800 dark:text-white"
class="w-4 h-4 text-gray-800 "
aria-hidden="true"
xmlns="http://www.w3.org/2000/svg"
width="24"
@ -575,11 +575,11 @@
</div>
{#if showTemporaryChatControl}
<hr class="border-gray-100 dark:border-gray-850" />
<hr class="border-gray-100 " />
<div class="flex items-center mx-2 my-2">
<button
class="flex justify-between w-full font-medium line-clamp-1 select-none items-center rounded-button py-2 px-3 text-sm text-gray-700 dark:text-gray-100 outline-hidden transition-all duration-75 hover:bg-gray-100 dark:hover:bg-gray-800 rounded-lg cursor-pointer data-highlighted:bg-muted"
class="flex justify-between w-full font-medium line-clamp-1 select-none items-center rounded-button py-2 px-3 text-sm text-gray-700 outline-hidden transition-all duration-75 hover:bg-gray-100 rounded-lg cursor-pointer data-highlighted:bg-muted"
on:click={async () => {
temporaryChatEnabled.set(!$temporaryChatEnabled);
await goto('/');

28
src/lib/components/chat/Navbar.svelte

@ -43,9 +43,9 @@
<ShareChatModal bind:show={showShareChatModal} chatId={$chatId} />
<!-- <nav class="sticky top-0 z-30 w-full px-1.5 py-1.5 -mb-8 flex items-center drag-region">
<nav class="sticky top-0 z-30 w-full px-1.5 py-1.5 -mb-8 flex items-center drag-region">
<div
class=" bg-linear-to-b via-50% from-white via-white to-transparent dark:from-gray-900 dark:via-gray-900 dark:to-transparent pointer-events-none absolute inset-0 -bottom-7 z-[-1]"
class=" bg-linear-to-b via-50% from-white via-white to-transparent dark:to-transparent pointer-events-none absolute inset-0 -bottom-7 z-[-1]"
></div>
<div class=" flex max-w-full w-full mx-auto px-1 pt-0.5 bg-transparent">
@ -53,11 +53,11 @@
<div
class="{$showSidebar
? 'md:hidden'
: ''} mr-1 self-start flex flex-none items-center text-gray-600 dark:text-gray-400"
: ''} mr-1 self-start flex flex-none items-center text-gray-600 "
>
<button
id="sidebar-toggle-button"
class="cursor-pointer px-2 py-2 flex rounded-xl hover:bg-gray-50 dark:hover:bg-gray-850 transition"
class="cursor-pointer px-2 py-2 flex rounded-xl hover:bg-gray-50 transition"
on:click={() => {
showSidebar.set(!$showSidebar);
}}
@ -69,7 +69,7 @@
</button>
</div>
<div
<!-- <div
class="flex-1 overflow-hidden max-w-full py-0.5
{$showSidebar ? 'ml-1' : ''}
"
@ -77,9 +77,9 @@
{#if showModelSelector}
<ModelSelector bind:selectedModels showSetDefault={!shareEnabled} />
{/if}
</div>
</div> -->
<div class="self-start flex flex-none items-center text-gray-600 dark:text-gray-400">
<!-- <div class="self-start flex flex-none items-center text-gray-600 ">
{#if shareEnabled && chat && (chat.id || $temporaryChatEnabled)}
<Menu
{chat}
@ -92,7 +92,7 @@
}}
>
<button
class="flex cursor-pointer px-2 py-2 rounded-xl hover:bg-gray-50 dark:hover:bg-gray-850 transition"
class="flex cursor-pointer px-2 py-2 rounded-xl hover:bg-gray-50 transition"
id="chat-context-menu-button"
>
<div class=" m-auto self-center">
@ -116,7 +116,7 @@
{:else if $mobile && ($user.role === 'admin' || $user?.permissions?.chat?.controls)}
<Tooltip content={$i18n.t('Controls')}>
<button
class=" flex cursor-pointer px-2 py-2 rounded-xl hover:bg-gray-50 dark:hover:bg-gray-850 transition"
class=" flex cursor-pointer px-2 py-2 rounded-xl hover:bg-gray-50 transition"
on:click={async () => {
await showControls.set(!$showControls);
}}
@ -132,7 +132,7 @@
{#if !$mobile && ($user.role === 'admin' || $user?.permissions?.chat?.controls)}
<Tooltip content={$i18n.t('Controls')}>
<button
class=" flex cursor-pointer px-2 py-2 rounded-xl hover:bg-gray-50 dark:hover:bg-gray-850 transition"
class=" flex cursor-pointer px-2 py-2 rounded-xl hover:bg-gray-50 transition"
on:click={async () => {
await showControls.set(!$showControls);
}}
@ -150,7 +150,7 @@
id="new-chat-button"
class=" flex {$showSidebar
? 'md:hidden'
: ''} cursor-pointer px-2 py-2 rounded-xl text-gray-600 dark:text-gray-400 hover:bg-gray-50 dark:hover:bg-gray-850 transition"
: ''} cursor-pointer px-2 py-2 rounded-xl text-gray-600 hover:bg-gray-50 transition"
on:click={() => {
initNewChat();
}}
@ -173,7 +173,7 @@
}}
>
<button
class="select-none flex rounded-xl p-1.5 w-full hover:bg-gray-50 dark:hover:bg-gray-850 transition"
class="select-none flex rounded-xl p-1.5 w-full hover:bg-gray-50 transition"
aria-label="User Menu"
>
<div class=" self-center">
@ -187,7 +187,7 @@
</button>
</UserMenu>
{/if}
</div>
</div> -->
</div>
</div>
</nav> -->
</nav>

2
src/lib/components/chat/Overview.svelte

@ -160,7 +160,7 @@
</script>
<div class="w-full h-full relative">
<div class=" absolute z-50 w-full flex justify-between dark:text-gray-100 px-4 py-3.5">
<div class=" absolute z-50 w-full flex justify-between px-4 py-3.5">
<div class="flex items-center gap-2.5">
<button
class="self-center p-0.5"

6
src/lib/components/chat/Overview/Node.svelte

@ -11,7 +11,7 @@
</script>
<div
class="px-4 py-3 shadow-md rounded-xl dark:bg-black bg-white border dark:border-gray-900 w-60 h-20 group"
class="px-4 py-3 shadow-md rounded-xl bg-white border dark:border-gray-900 w-60 h-20 group"
>
<Tooltip
content={data?.message?.error ? data.message.error.content : data.message.content}
@ -26,7 +26,7 @@
/>
<div class="ml-2">
<div class=" flex justify-between items-center">
<div class="text-xs text-black dark:text-white font-medium line-clamp-1">
<div class="text-xs text-black font-medium line-clamp-1">
{data?.user?.name ?? 'User'}
</div>
</div>
@ -47,7 +47,7 @@
<div class="ml-2">
<div class=" flex justify-between items-center">
<div class="text-xs text-black dark:text-white font-medium line-clamp-1">
<div class="text-xs text-black font-medium line-clamp-1">
{data?.model?.name ?? data?.message?.model ?? 'Assistant'}
</div>

4
src/lib/components/chat/Placeholder.svelte

@ -102,7 +102,7 @@
{/if}
<div
class="w-full text-3xl text-gray-800 dark:text-gray-100 font-medium text-center flex items-center gap-4 font-primary"
class="w-full text-3xl text-gray-800 font-medium text-center flex items-center gap-4 font-primary"
>
<div class="w-full flex flex-col justify-center items-center">
<div class="flex flex-row justify-center gap-3 @sm:gap-3.5 w-fit px-5">
@ -124,7 +124,7 @@
placement="top"
>
<div
class="mt-0.5 px-2 text-sm font-normal text-gray-500 dark:text-gray-400 line-clamp-2 max-w-xl markdown"
class="mt-0.5 px-2 text-sm font-normal text-gray-500 line-clamp-2 max-w-xl markdown"
>
{@html marked.parse(
sanitizeResponseContent(models[selectedModelIdx]?.info?.meta?.description)

14
src/lib/components/chat/Settings/About.svelte

@ -52,7 +52,7 @@
</div>
</div>
<div class="flex w-full justify-between items-center">
<div class="flex flex-col text-xs text-gray-700 dark:text-gray-200">
<div class="flex flex-col text-xs text-gray-700 ">
<div class="flex gap-1">
<Tooltip content={WEBUI_BUILD_HASH}>
v{WEBUI_VERSION}
@ -81,7 +81,7 @@
</div>
<button
class=" text-xs px-3 py-1.5 bg-gray-100 hover:bg-gray-200 dark:bg-gray-850 dark:hover:bg-gray-800 transition rounded-lg font-medium"
class=" text-xs px-3 py-1.5 bg-gray-100 hover:bg-gray-200 transition rounded-lg font-medium"
on:click={() => {
checkForVersionUpdates();
}}
@ -92,19 +92,19 @@
</div>
{#if ollamaVersion}
<hr class=" border-gray-100 dark:border-gray-850" />
<hr class=" border-gray-100 " />
<div>
<div class=" mb-2.5 text-sm font-medium">{$i18n.t('Ollama Version')}</div>
<div class="flex w-full">
<div class="flex-1 text-xs text-gray-700 dark:text-gray-200">
<div class="flex-1 text-xs text-gray-700 ">
{ollamaVersion ?? 'N/A'}
</div>
</div>
</div>
{/if}
<hr class=" border-gray-100 dark:border-gray-850" />
<hr class=" border-gray-100 " />
<div class="mt-2 text-xs text-gray-400 dark:text-gray-500">
Emoji graphics provided by
@ -173,11 +173,11 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
<div class="mt-2 text-xs text-gray-400 dark:text-gray-500">
{#if !$WEBUI_NAME.includes('Open WebUI')}
<span class=" text-gray-500 dark:text-gray-300 font-medium">{$WEBUI_NAME}</span> -
<span class=" text-gray-500 font-medium">{$WEBUI_NAME}</span> -
{/if}
{$i18n.t('Created by')}
<a
class=" text-gray-500 dark:text-gray-300 font-medium"
class=" text-gray-500 font-medium"
href="https://github.com/tjbck"
target="_blank">Timothy J. Baek</a
>

22
src/lib/components/chat/Settings/Account.svelte

@ -194,7 +194,7 @@
<div>
<button
class=" text-xs text-center text-gray-800 dark:text-gray-400 rounded-full px-4 py-0.5 bg-gray-100 dark:bg-gray-850"
class=" text-xs text-center text-gray-800 rounded-full px-4 py-0.5 bg-gray-100 "
on:click={async () => {
if (canvasPixelTest()) {
profileImageUrl = generateInitialsImage(name);
@ -212,7 +212,7 @@
>
<button
class=" text-xs text-center text-gray-800 dark:text-gray-400 rounded-full px-4 py-0.5 bg-gray-100 dark:bg-gray-850"
class=" text-xs text-center text-gray-800 rounded-full px-4 py-0.5 bg-gray-100 "
on:click={async () => {
const url = await getGravatarUrl(localStorage.token, $user.email);
@ -221,7 +221,7 @@
>
<button
class=" text-xs text-center text-gray-800 dark:text-gray-400 rounded-lg px-2 py-1"
class=" text-xs text-center text-gray-800 rounded-lg px-2 py-1"
on:click={async () => {
profileImageUrl = '/user.png';
}}>{$i18n.t('Remove')}</button
@ -236,7 +236,7 @@
<div class="flex-1">
<input
class="w-full rounded-lg py-2 px-4 text-sm dark:text-gray-300 dark:bg-gray-850 outline-hidden"
class="w-full rounded-lg py-2 px-4 text-sm outline-hidden"
type="text"
bind:value={name}
required
@ -251,7 +251,7 @@
<div class="flex-1">
<input
class="w-full rounded-lg py-2 px-4 text-sm dark:text-gray-300 dark:bg-gray-850 outline-hidden"
class="w-full rounded-lg py-2 px-4 text-sm outline-hidden"
type="url"
placeholder={$i18n.t('Enter your webhook URL')}
bind:value={webhookUrl}
@ -266,7 +266,7 @@
<UpdatePassword />
</div>
<hr class="border-gray-100 dark:border-gray-850 my-4" />
<hr class="border-gray-100 my-4" />
<div class="flex justify-between items-center text-sm">
<div class=" font-medium">{$i18n.t('API keys')}</div>
@ -290,7 +290,7 @@
<SensitiveInput value={localStorage.token} readOnly={true} />
<button
class="ml-1.5 px-1.5 py-1 dark:hover:bg-gray-850 transition rounded-lg"
class="ml-1.5 px-1.5 py-1 transition rounded-lg"
on:click={() => {
copyToClipboard(localStorage.token);
JWTTokenCopied = true;
@ -344,7 +344,7 @@
<SensitiveInput value={APIKey} readOnly={true} />
<button
class="ml-1.5 px-1.5 py-1 dark:hover:bg-gray-850 transition rounded-lg"
class="ml-1.5 px-1.5 py-1 transition rounded-lg"
on:click={() => {
copyToClipboard(APIKey);
APIKeyCopied = true;
@ -389,7 +389,7 @@
<Tooltip content={$i18n.t('Create new key')}>
<button
class=" px-1.5 py-1 dark:hover:bg-gray-850transition rounded-lg"
class=" px-1.5 py-1 transition rounded-lg"
on:click={() => {
createAPIKeyHandler();
}}
@ -412,7 +412,7 @@
</Tooltip>
{:else}
<button
class="flex gap-1.5 items-center font-medium px-3.5 py-1.5 rounded-lg bg-gray-100/70 hover:bg-gray-100 dark:bg-gray-850 dark:hover:bg-gray-850 transition"
class="flex gap-1.5 items-center font-medium px-3.5 py-1.5 rounded-lg bg-gray-100/70 hover:bg-gray-100 transition"
on:click={() => {
createAPIKeyHandler();
}}
@ -431,7 +431,7 @@
<div class="flex justify-end pt-3 text-sm font-medium">
<button
class="px-3.5 py-1.5 text-sm font-medium bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black dark:hover:bg-gray-100 transition rounded-full"
class="px-3.5 py-1.5 text-sm font-medium bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black transition rounded-full"
on:click={async () => {
const res = await submitHandler();

8
src/lib/components/chat/Settings/Account/UpdatePassword.svelte

@ -60,7 +60,7 @@
<div class="flex-1">
<input
class="w-full bg-transparent dark:text-gray-300 outline-hidden placeholder:opacity-30"
class="w-full bg-transparent outline-hidden placeholder:opacity-30"
type="password"
bind:value={currentPassword}
placeholder={$i18n.t('Enter your current password')}
@ -75,7 +75,7 @@
<div class="flex-1">
<input
class="w-full bg-transparent text-sm dark:text-gray-300 outline-hidden placeholder:opacity-30"
class="w-full bg-transparent text-sm outline-hidden placeholder:opacity-30"
type="password"
bind:value={newPassword}
placeholder={$i18n.t('Enter your new password')}
@ -90,7 +90,7 @@
<div class="flex-1">
<input
class="w-full bg-transparent text-sm dark:text-gray-300 outline-hidden placeholder:opacity-30"
class="w-full bg-transparent text-sm outline-hidden placeholder:opacity-30"
type="password"
bind:value={newPasswordConfirm}
placeholder={$i18n.t('Confirm your new password')}
@ -103,7 +103,7 @@
<div class="mt-3 flex justify-end">
<button
class="px-3.5 py-1.5 text-sm font-medium bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black dark:hover:bg-gray-100 transition rounded-full"
class="px-3.5 py-1.5 text-sm font-medium bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black transition rounded-full"
>
{$i18n.t('Update password')}
</button>

6
src/lib/components/chat/Settings/Advanced/AdvancedParams.svelte

@ -144,7 +144,7 @@
<div class="flex mt-0.5 space-x-2">
<div class=" flex-1">
<input
class="w-full rounded-lg py-2 px-4 text-sm dark:text-gray-300 dark:bg-gray-850 outline-hidden"
class="w-full rounded-lg py-2 px-4 text-sm outline-hidden"
type="number"
placeholder={$i18n.t('Enter Seed')}
bind:value={params.seed}
@ -189,7 +189,7 @@
<div class="flex mt-0.5 space-x-2">
<div class=" flex-1">
<input
class="w-full rounded-lg py-2 px-1 text-sm dark:text-gray-300 dark:bg-gray-850 outline-hidden"
class="w-full rounded-lg py-2 px-1 text-sm outline-hidden"
type="text"
placeholder={$i18n.t('Enter stop sequence')}
bind:value={params.stop}
@ -287,7 +287,7 @@
<div class="flex mt-0.5 space-x-2">
<div class=" flex-1">
<input
class="w-full rounded-lg py-2 px-1 text-sm dark:text-gray-300 dark:bg-gray-850 outline-hidden"
class="w-full rounded-lg py-2 px-1 text-sm outline-hidden"
type="text"
placeholder={$i18n.t('Enter reasoning effort')}
bind:value={params.reasoning_effort}

10
src/lib/components/chat/Settings/Audio.svelte

@ -283,7 +283,7 @@
</div>
</div>
<hr class=" border-gray-100 dark:border-gray-850" />
<hr class=" border-gray-100 " />
{#if TTSEngine === 'browser-kokoro'}
{#if TTSModel}
@ -293,7 +293,7 @@
<div class="flex-1">
<input
list="voice-list"
class="w-full rounded-lg py-2 px-4 text-sm bg-white dark:text-gray-300 dark:bg-gray-850 outline-hidden"
class="w-full rounded-lg py-2 px-4 text-sm bg-white outline-hidden"
bind:value={voice}
placeholder="Select a voice"
/>
@ -330,7 +330,7 @@
<div class="flex w-full">
<div class="flex-1">
<select
class="w-full rounded-lg py-2 px-4 text-sm bg-white dark:text-gray-300 dark:bg-gray-850 outline-hidden"
class="w-full rounded-lg py-2 px-4 text-sm bg-white outline-hidden"
bind:value={voice}
>
<option value="" selected={voice !== ''}>{$i18n.t('Default')}</option>
@ -361,7 +361,7 @@
<div class="flex-1">
<input
list="voice-list"
class="w-full rounded-lg py-2 px-4 text-sm bg-white dark:text-gray-300 dark:bg-gray-850 outline-hidden"
class="w-full rounded-lg py-2 px-4 text-sm bg-white outline-hidden"
bind:value={voice}
placeholder="Select a voice"
/>
@ -379,7 +379,7 @@
<div class="flex justify-end text-sm font-medium">
<button
class="px-3.5 py-1.5 text-sm font-medium bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black dark:hover:bg-gray-100 transition rounded-full"
class="px-3.5 py-1.5 text-sm font-medium bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black transition rounded-full"
type="submit"
>
{$i18n.t('Save')}

10
src/lib/components/chat/Settings/Chats.svelte

@ -109,7 +109,7 @@
hidden
/>
<button
class=" flex rounded-md py-2 px-3.5 w-full hover:bg-gray-200 dark:hover:bg-gray-800 transition"
class=" flex rounded-md py-2 px-3.5 w-full hover:bg-gray-200 transition"
on:click={() => {
chatImportInputElement.click();
}}
@ -131,7 +131,7 @@
<div class=" self-center text-sm font-medium">{$i18n.t('Import Chats')}</div>
</button>
<button
class=" flex rounded-md py-2 px-3.5 w-full hover:bg-gray-200 dark:hover:bg-gray-800 transition"
class=" flex rounded-md py-2 px-3.5 w-full hover:bg-gray-200 transition"
on:click={() => {
exportChats();
}}
@ -154,7 +154,7 @@
</button>
</div>
<hr class=" border-gray-100 dark:border-gray-850" />
<hr class=" border-gray-100 " />
<div class="flex flex-col">
{#if showArchiveConfirm}
@ -218,7 +218,7 @@
</div>
{:else}
<button
class=" flex rounded-md py-2 px-3.5 w-full hover:bg-gray-200 dark:hover:bg-gray-800 transition"
class=" flex rounded-md py-2 px-3.5 w-full hover:bg-gray-200 transition"
on:click={() => {
showArchiveConfirm = true;
}}
@ -305,7 +305,7 @@
</div>
{:else}
<button
class=" flex rounded-md py-2 px-3.5 w-full hover:bg-gray-200 dark:hover:bg-gray-800 transition"
class=" flex rounded-md py-2 px-3.5 w-full hover:bg-gray-200 transition"
on:click={() => {
showDeleteConfirm = true;
}}

2
src/lib/components/chat/Settings/Connections.svelte

@ -147,7 +147,7 @@
<div class="flex justify-end pt-3 text-sm font-medium">
<button
class="px-3.5 py-1.5 text-sm font-medium bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black dark:hover:bg-gray-100 transition rounded-full"
class="px-3.5 py-1.5 text-sm font-medium bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black transition rounded-full"
type="submit"
>
{$i18n.t('Save')}

2
src/lib/components/chat/Settings/Connections/Connection.svelte

@ -71,7 +71,7 @@
<div class="flex gap-1">
<Tooltip content={$i18n.t('Configure')} className="self-start">
<button
class="self-center p-1 bg-transparent hover:bg-gray-100 dark:hover:bg-gray-850 rounded-lg transition"
class="self-center p-1 bg-transparent hover:bg-gray-100 rounded-lg transition"
on:click={() => {
showConfigModal = true;
}}

10
src/lib/components/chat/Settings/General.svelte

@ -239,13 +239,13 @@
</div>
{#if $user.role === 'admin' || $user?.permissions.chat?.controls}
<hr class="border-gray-100 dark:border-gray-850 my-3" />
<hr class="border-gray-100 my-3" />
<div>
<div class=" my-2.5 text-sm font-medium">{$i18n.t('System Prompt')}</div>
<textarea
bind:value={system}
class="w-full rounded-lg p-4 text-sm bg-white dark:text-gray-300 dark:bg-gray-850 outline-hidden resize-none"
class="w-full rounded-lg p-4 text-sm bg-white outline-hidden resize-none"
rows="4"
/>
</div>
@ -264,7 +264,7 @@
{#if showAdvanced}
<AdvancedParams admin={$user?.role === 'admin'} bind:params />
<hr class=" border-gray-100 dark:border-gray-850" />
<hr class=" border-gray-100 " />
<div class=" py-1 w-full justify-between">
<div class="flex w-full justify-between">
@ -288,7 +288,7 @@
{#if keepAlive !== null}
<div class="flex mt-1 space-x-2">
<input
class="w-full rounded-lg py-2 px-4 text-sm dark:text-gray-300 dark:bg-gray-850 outline-hidden"
class="w-full rounded-lg py-2 px-4 text-sm outline-hidden"
type="text"
placeholder={$i18n.t("e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.")}
bind:value={keepAlive}
@ -332,7 +332,7 @@
<div class="flex justify-end pt-3 text-sm font-medium">
<button
class="px-3.5 py-1.5 text-sm font-medium bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black dark:hover:bg-gray-100 transition rounded-full"
class="px-3.5 py-1.5 text-sm font-medium bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black transition rounded-full"
on:click={() => {
saveSettings({
system: system !== '' ? system : undefined,

2
src/lib/components/chat/Settings/Interface.svelte

@ -787,7 +787,7 @@
<div class="flex justify-end text-sm font-medium">
<button
class="px-3.5 py-1.5 text-sm font-medium bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black dark:hover:bg-gray-100 transition rounded-full"
class="px-3.5 py-1.5 text-sm font-medium bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black transition rounded-full"
type="submit"
>
{$i18n.t('Save')}

4
src/lib/components/chat/Settings/Personalization.svelte

@ -57,7 +57,7 @@
</div>
</div>
<div class="text-xs text-gray-600 dark:text-gray-400">
<div class="text-xs text-gray-600 ">
<div>
{$i18n.t(
"You can personalize your interactions with LLMs by adding memories through the 'Manage' button below, making them more helpful and tailored to you."
@ -89,7 +89,7 @@
<div class="flex justify-end text-sm font-medium">
<button
class="px-3.5 py-1.5 text-sm font-medium bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black dark:hover:bg-gray-100 transition rounded-full"
class="px-3.5 py-1.5 text-sm font-medium bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black transition rounded-full"
type="submit"
>
{$i18n.t('Save')}

4
src/lib/components/chat/Settings/Personalization/AddMemoryModal.svelte

@ -36,7 +36,7 @@
<Modal bind:show size="sm">
<div>
<div class=" flex justify-between dark:text-gray-300 px-5 pt-4 pb-2">
<div class=" flex justify-between px-5 pt-4 pb-2">
<div class=" text-lg font-medium self-center">
{$i18n.t('Add Memory')}
</div>
@ -59,7 +59,7 @@
</button>
</div>
<div class="flex flex-col md:flex-row w-full px-5 pb-4 md:space-x-4 dark:text-gray-200">
<div class="flex flex-col md:flex-row w-full px-5 pb-4 md:space-x-4 ">
<div class=" flex flex-col w-full sm:flex-row sm:justify-center sm:space-x-6">
<form
class="flex flex-col w-full"

4
src/lib/components/chat/Settings/Personalization/EditMemoryModal.svelte

@ -46,7 +46,7 @@
<Modal bind:show size="sm">
<div>
<div class=" flex justify-between dark:text-gray-300 px-5 pt-4 pb-2">
<div class=" flex justify-between px-5 pt-4 pb-2">
<div class=" text-lg font-medium self-center">
{$i18n.t('Edit Memory')}
</div>
@ -69,7 +69,7 @@
</button>
</div>
<div class="flex flex-col md:flex-row w-full px-5 pb-4 md:space-x-4 dark:text-gray-200">
<div class="flex flex-col md:flex-row w-full px-5 pb-4 md:space-x-4 ">
<div class=" flex flex-col w-full sm:flex-row sm:justify-center sm:space-x-6">
<form
class="flex flex-col w-full"

10
src/lib/components/chat/Settings/Personalization/ManageModal.svelte

@ -36,7 +36,7 @@
<Modal size="xl" bind:show>
<div>
<div class=" flex justify-between dark:text-gray-300 px-5 pt-4 pb-1">
<div class=" flex justify-between px-5 pt-4 pb-1">
<div class=" text-lg font-medium self-center">{$i18n.t('Memory')}</div>
<button
class="self-center"
@ -57,16 +57,16 @@
</button>
</div>
<div class="flex flex-col w-full px-5 pb-5 dark:text-gray-200">
<div class="flex flex-col w-full px-5 pb-5 ">
<div
class=" flex flex-col w-full sm:flex-row sm:justify-center sm:space-x-6 h-[28rem] max-h-screen outline outline-1 rounded-xl outline-gray-100 dark:outline-gray-800 mb-4 mt-1"
>
{#if memories.length > 0}
<div class="text-left text-sm w-full mb-4 overflow-y-scroll">
<div class="relative overflow-x-auto">
<table class="w-full text-sm text-left text-gray-600 dark:text-gray-400 table-auto">
<table class="w-full text-sm text-left text-gray-600 table-auto">
<thead
class="text-xs text-gray-700 uppercase bg-transparent dark:text-gray-200 border-b-2 dark:border-gray-850"
class="text-xs text-gray-700 uppercase bg-transparent border-b-2 "
>
<tr>
<th scope="col" class="px-3 py-2"> {$i18n.t('Name')} </th>
@ -78,7 +78,7 @@
</thead>
<tbody>
{#each memories as memory}
<tr class="border-b dark:border-gray-850 items-center">
<tr class="border-b items-center">
<td class="px-3 py-1">
<div class="line-clamp-1">
{memory.content}

8
src/lib/components/chat/SettingsModal.svelte

@ -363,8 +363,8 @@
</script>
<Modal size="xl" bind:show>
<div class="text-gray-700 dark:text-gray-100">
<div class=" flex justify-between dark:text-gray-300 px-5 pt-4 pb-1">
<div class="text-gray-700 ">
<div class=" flex justify-between px-5 pt-4 pb-1">
<div class=" text-lg font-medium self-center">{$i18n.t('Settings')}</div>
<button
class="self-center"
@ -388,14 +388,14 @@
<div class="flex flex-col md:flex-row w-full px-4 pt-1 pb-4 md:space-x-4">
<div
id="settings-tabs-container"
class="tabs flex flex-row overflow-x-auto gap-2.5 md:gap-1 md:flex-col flex-1 md:flex-none md:w-40 dark:text-gray-200 text-sm font-medium text-left mb-1 md:mb-0 -translate-y-1"
class="tabs flex flex-row overflow-x-auto gap-2.5 md:gap-1 md:flex-col flex-1 md:flex-none md:w-40 text-sm font-medium text-left mb-1 md:mb-0 -translate-y-1"
>
<div class="hidden md:flex w-full rounded-xl -mb-1 px-0.5 gap-2" id="settings-search">
<div class="self-center rounded-l-xl bg-transparent">
<Search className="size-3.5" />
</div>
<input
class="w-full py-1.5 text-sm bg-transparent dark:text-gray-300 outline-hidden"
class="w-full py-1.5 text-sm bg-transparent outline-hidden"
bind:value={search}
on:input={searchDebounceHandler}
placeholder={$i18n.t('Search')}

8
src/lib/components/chat/ShareChatModal.svelte

@ -82,7 +82,7 @@
<Modal bind:show size="md">
<div>
<div class=" flex justify-between dark:text-gray-300 px-5 pt-4 pb-0.5">
<div class=" flex justify-between px-5 pt-4 pb-0.5">
<div class=" text-lg font-medium self-center">{$i18n.t('Share Chat')}</div>
<button
class="self-center"
@ -105,7 +105,7 @@
{#if chat}
<div class="px-5 pt-4 pb-5 w-full flex flex-col justify-center">
<div class=" text-sm dark:text-gray-300 mb-1">
<div class=" text-sm mb-1">
{#if chat.share_id}
<a href="/s/{chat.share_id}" target="_blank"
>{$i18n.t('You have shared this chat')}
@ -136,7 +136,7 @@
<div class="flex gap-1">
{#if $config?.features.enable_community_sharing}
<button
class="self-center flex items-center gap-1 px-3.5 py-2 text-sm font-medium bg-gray-100 hover:bg-gray-200 text-gray-800 dark:bg-gray-850 dark:text-white dark:hover:bg-gray-800 transition rounded-full"
class="self-center flex items-center gap-1 px-3.5 py-2 text-sm font-medium bg-gray-100 hover:bg-gray-200 text-gray-800 transition rounded-full"
type="button"
on:click={() => {
shareChat();
@ -148,7 +148,7 @@
{/if}
<button
class="self-center flex items-center gap-1 px-3.5 py-2 text-sm font-medium bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black dark:hover:bg-gray-100 transition rounded-full"
class="self-center flex items-center gap-1 px-3.5 py-2 text-sm font-medium bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black transition rounded-full"
type="button"
id="copy-and-share-chat-button"
on:click={async () => {

Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save