chore: ui cleanup to remove unused components and functions (#10761)
This commit is contained in:
@@ -36,15 +36,3 @@ export function getCachedTools(
|
||||
cache.set(key, promise);
|
||||
return promise;
|
||||
}
|
||||
|
||||
export function clearToolsCache(sessionId?: string): void {
|
||||
if (!sessionId) {
|
||||
cache.clear();
|
||||
return;
|
||||
}
|
||||
for (const key of cache.keys()) {
|
||||
if (key.startsWith(`${sessionId}:`)) {
|
||||
cache.delete(key);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,7 +12,6 @@ import {
|
||||
ToolConfirmationData,
|
||||
} from '../types/message';
|
||||
import { cn, snakeToTitleCase } from '../utils';
|
||||
import { LoadingStatus } from './ui/Dot';
|
||||
import { ChevronRight, ExternalLink } from 'lucide-react';
|
||||
import { TooltipWrapper } from './settings/providers/subcomponents/buttons/TooltipWrapper';
|
||||
import type { CallToolResult } from '@modelcontextprotocol/sdk/types.js';
|
||||
@@ -22,6 +21,8 @@ import McpAppRenderer from './McpApps/McpAppRenderer';
|
||||
import ToolApprovalButtons from './ToolApprovalButtons';
|
||||
import { defineMessages, useIntl } from '../i18n';
|
||||
|
||||
type LoadingStatus = 'loading' | 'success' | 'error';
|
||||
|
||||
const i18n = defineMessages({
|
||||
viewSubagentSession: {
|
||||
id: 'toolCallWithResponse.viewSubagentSession',
|
||||
|
||||
@@ -1,18 +0,0 @@
|
||||
export default function Anthropic({ className = '' }) {
|
||||
return (
|
||||
<svg
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 1200 1200"
|
||||
fill="none"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
aria-hidden="true"
|
||||
className={className}
|
||||
>
|
||||
<path
|
||||
d="M 233.959793 800.214905 L 468.644287 668.536987 L 472.590637 657.100647 L 468.644287 650.738403 L 457.208069 650.738403 L 417.986633 648.322144 L 283.892639 644.69812 L 167.597321 639.865845 L 54.926208 633.825623 L 26.577238 627.785339 L 3.3e-05 592.751709 L 2.73832 575.27533 L 26.577238 559.248352 L 60.724873 562.228149 L 136.187973 567.382629 L 249.422867 575.194763 L 331.570496 580.026978 L 453.261841 592.671082 L 472.590637 592.671082 L 475.328857 584.859009 L 468.724915 580.026978 L 463.570557 575.194763 L 346.389313 495.785217 L 219.543671 411.865906 L 153.100723 363.543762 L 117.181267 339.060425 L 99.060455 316.107361 L 91.248367 266.01355 L 123.865784 230.093994 L 167.677887 233.073853 L 178.872513 236.053772 L 223.248367 270.201477 L 318.040283 343.570496 L 441.825592 434.738342 L 459.946411 449.798706 L 467.194672 444.64447 L 468.080597 441.020203 L 459.946411 427.409485 L 392.617493 305.718323 L 320.778564 181.932983 L 288.80542 130.630859 L 280.348999 99.865845 C 277.369171 87.221436 275.194641 76.590698 275.194641 63.624268 L 312.322174 13.20813 L 332.8591 6.604126 L 382.389313 13.20813 L 403.248352 31.328979 L 434.013519 101.71814 L 483.865753 212.537048 L 561.181274 363.221497 L 583.812134 407.919434 L 595.892639 449.315491 L 600.40271 461.959839 L 608.214783 461.959839 L 608.214783 454.711609 L 614.577271 369.825623 L 626.335632 265.61084 L 637.771851 131.516846 L 641.718201 93.745117 L 660.402832 48.483276 L 697.530334 24.000122 L 726.52356 37.852417 L 750.362549 72 L 747.060486 94.067139 L 732.886047 186.201416 L 705.100708 330.52356 L 686.979919 427.167847 L 697.530334 427.167847 L 709.61084 415.087341 L 758.496704 350.174561 L 840.644348 247.490051 L 876.885925 206.738342 L 919.167847 161.71814 L 946.308838 140.29541 L 997.61084 140.29541 L 1035.38269 196.429626 L 1018.469849 254.416199 L 965.637634 321.422852 L 921.825562 378.201538 L 859.006714 462.765259 L 819.785278 530.41626 L 823.409424 535.812073 L 832.75177 534.92627 L 974.657776 504.724915 L 1051.328979 490.872559 L 1142.818848 475.167786 L 1184.214844 494.496582 L 1188.724854 514.147644 L 1172.456421 554.335693 L 1074.604126 578.496765 L 959.838989 601.449829 L 788.939636 641.879272 L 786.845764 643.409485 L 789.261841 646.389343 L 866.255127 653.637634 L 899.194702 655.409424 L 979.812134 655.409424 L 1129.932861 666.604187 L 1169.154419 692.537109 L 1192.671265 724.268677 L 1188.724854 748.429688 L 1128.322144 779.194641 L 1046.818848 759.865845 L 856.590759 714.604126 L 791.355774 698.335754 L 782.335693 698.335754 L 782.335693 703.731567 L 836.69812 756.885986 L 936.322205 846.845581 L 1061.073975 962.81897 L 1067.436279 991.490112 L 1051.409424 1014.120911 L 1034.496704 1011.704712 L 924.885986 929.234924 L 882.604126 892.107544 L 786.845764 811.48999 L 780.483276 811.48999 L 780.483276 819.946289 L 802.550415 852.241699 L 919.087341 1027.409424 L 925.127625 1081.127686 L 916.671204 1098.604126 L 886.469849 1109.154419 L 853.288696 1103.114136 L 785.073914 1007.355835 L 714.684631 899.516785 L 657.906067 802.872498 L 650.979858 806.81897 L 617.476624 1167.704834 L 601.771851 1186.147705 L 565.530212 1200 L 535.328857 1177.046997 L 519.302124 1139.919556 L 535.328857 1066.550537 L 554.657776 970.792053 L 570.362488 894.68457 L 584.536926 800.134277 L 592.993347 768.724976 L 592.429626 766.630859 L 585.503479 767.516968 L 514.22821 865.369263 L 405.825531 1011.865906 L 320.053711 1103.677979 L 299.516815 1111.812256 L 263.919525 1093.369263 L 267.221497 1060.429688 L 287.114136 1031.114136 L 405.825531 880.107361 L 477.422913 786.52356 L 523.651062 732.483276 L 523.328918 724.671265 L 520.590698 724.671265 L 205.288605 929.395935 L 149.154434 936.644409 L 124.993355 914.01355 L 127.973183 876.885986 L 139.409409 864.80542 L 234.201385 799.570435 L 233.879227 799.8927 Z"
|
||||
fill="currentColor"
|
||||
/>
|
||||
</svg>
|
||||
);
|
||||
}
|
||||
@@ -1,23 +0,0 @@
|
||||
interface ArrowRightProps {
|
||||
className?: string;
|
||||
}
|
||||
|
||||
export function ArrowRight({ className = '' }: ArrowRightProps) {
|
||||
return (
|
||||
<svg
|
||||
width="16"
|
||||
height="16"
|
||||
viewBox="0 0 16 16"
|
||||
fill="none"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
className={className}
|
||||
>
|
||||
<path
|
||||
d="M3.33678 8.00138L12.6701 8.00555M12.6701 8.00555L8.00553 3.3368M12.6701 8.00555L8.00136 12.6701"
|
||||
stroke="currentColor"
|
||||
strokeLinecap="round"
|
||||
strokeLinejoin="round"
|
||||
/>
|
||||
</svg>
|
||||
);
|
||||
}
|
||||
@@ -1,20 +0,0 @@
|
||||
export default function Back({ className = '' }) {
|
||||
return (
|
||||
<svg
|
||||
width="1.5rem"
|
||||
height="1.5rem"
|
||||
fill="none"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
viewBox="0 0 24 24"
|
||||
aria-hidden="true"
|
||||
className={className}
|
||||
>
|
||||
<path
|
||||
fillRule="evenodd"
|
||||
clipRule="evenodd"
|
||||
d="M.5 12c0-.413.17-.807.47-1.09l9-8.5a1.5 1.5 0 1 1 2.06 2.18L5.773 10.5H21.5a1.5 1.5 0 1 1 0 3H5.773l6.257 5.91a1.5 1.5 0 1 1-2.06 2.18l-9-8.5A1.5 1.5 0 0 1 .5 12Z"
|
||||
fill="currentColor"
|
||||
></path>
|
||||
</svg>
|
||||
);
|
||||
}
|
||||
@@ -1,17 +0,0 @@
|
||||
export default function ChatGPT({ className = '' }) {
|
||||
return (
|
||||
<svg
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
className={className}
|
||||
>
|
||||
<path
|
||||
d="M22.2819 9.8211a5.9847 5.9847 0 0 0-.5157-4.9108 6.0462 6.0462 0 0 0-6.5098-2.9A6.0651 6.0651 0 0 0 4.9807 4.1818a5.9847 5.9847 0 0 0-3.9977 2.9 6.0462 6.0462 0 0 0 .7427 7.0966 5.98 5.98 0 0 0 .511 4.9107 6.051 6.051 0 0 0 6.5146 2.9001A5.9847 5.9847 0 0 0 13.2599 24a6.0557 6.0557 0 0 0 5.7718-4.2058 5.9894 5.9894 0 0 0 3.9977-2.9001 6.0557 6.0557 0 0 0-.7475-7.0729zm-9.022 12.6081a4.4755 4.4755 0 0 1-2.8764-1.0408l.1419-.0804 4.7783-2.7582a.7948.7948 0 0 0 .3927-.6813v-6.7369l2.02 1.1686a.071.071 0 0 1 .038.052v5.5826a4.504 4.504 0 0 1-4.4945 4.4944zm-9.6607-4.1254a4.4708 4.4708 0 0 1-.5346-3.0137l.142.0852 4.783 2.7582a.7712.7712 0 0 0 .7806 0l5.8428-3.3685v2.3324a.0804.0804 0 0 1-.0332.0615L9.74 19.9502a4.4992 4.4992 0 0 1-6.1408-1.6464zM2.3408 7.8956a4.485 4.485 0 0 1 2.3655-1.9728V11.6a.7664.7664 0 0 0 .3879.6765l5.8144 3.3543-2.0201 1.1685a.0757.0757 0 0 1-.071 0l-4.8303-2.7865A4.504 4.504 0 0 1 2.3408 7.872zm16.5963 3.8558L13.1038 8.364 15.1192 7.2a.0757.0757 0 0 1 .071 0l4.8303 2.7913a4.4944 4.4944 0 0 1-.6765 8.1042v-5.6772a.79.79 0 0 0-.407-.667zm2.0107-3.0231l-.142-.0852-4.7735-2.7818a.7759.7759 0 0 0-.7854 0L9.409 9.2297V6.8974a.0662.0662 0 0 1 .0284-.0615l4.8303-2.7866a4.4992 4.4992 0 0 1 6.6802 4.66zM8.3065 12.863l-2.02-1.1638a.0804.0804 0 0 1-.038-.0567V6.0742a4.4992 4.4992 0 0 1 7.3757-3.4537l-.142.0805L8.704 5.459a.7948.7948 0 0 0-.3927.6813zm1.0976-2.3654l2.602-1.4998 2.6069 1.4998v2.9994l-2.5974 1.4997-2.6067-1.4997Z"
|
||||
fill="currentColor"
|
||||
/>
|
||||
</svg>
|
||||
);
|
||||
}
|
||||
@@ -1,18 +0,0 @@
|
||||
export default function ChatSmart({ className = '' }) {
|
||||
return (
|
||||
<svg
|
||||
fill="none"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
viewBox="0 0 24 24"
|
||||
aria-hidden="true"
|
||||
className={className}
|
||||
>
|
||||
<path
|
||||
fillRule="evenodd"
|
||||
clipRule="evenodd"
|
||||
d="M18.2625 2.72219C18.3379 2.49299 18.6621 2.49299 18.7375 2.72219L19.5742 5.26646C19.5991 5.34188 19.6582 5.40103 19.7336 5.42584L22.2779 6.2626C22.5071 6.33798 22.5071 6.66219 22.2779 6.73757L19.7336 7.57433C19.6582 7.59914 19.5991 7.65829 19.5742 7.73372L18.7375 10.278C18.6621 10.5072 18.3379 10.5072 18.2625 10.278L17.4258 7.73372C17.4009 7.65829 17.3418 7.59914 17.2664 7.57433L14.7221 6.73757C14.4929 6.66219 14.4929 6.33798 14.7221 6.2626L17.2664 5.42584C17.3418 5.40103 17.4009 5.34188 17.4258 5.26646L18.2625 2.72219ZM1.5 6.00016C1.5 4.89559 2.39543 4.00016 3.5 4.00016H12C12.5523 4.00016 13 4.44788 13 5.00016C13 5.55245 12.5523 6.00016 12 6.00016L3.5 6.00016V16.5002L9.68478 16.5002C10.0951 16.5002 10.4955 16.6264 10.8317 16.8617L14 19.0795V17.5002C14 17.2349 14.1054 16.9806 14.2929 16.7931C14.4804 16.6055 14.7348 16.5002 15 16.5002L20.5 16.5002V11.0002C20.5 10.4479 20.9477 10.0002 21.5 10.0002C22.0523 10.0002 22.5 10.4479 22.5 11.0002V16.5002C22.5 17.6047 21.6046 18.5002 20.5 18.5002L16 18.5002V21.0002C16 21.373 15.7925 21.7149 15.4618 21.8871C15.1311 22.0593 14.732 22.0332 14.4265 21.8194L9.68478 18.5002L3.5 18.5002C2.39543 18.5002 1.5 17.6047 1.5 16.5002V6.00016ZM14.2375 8.72234C14.1621 8.49315 13.8379 8.49315 13.7625 8.72234L13.297 10.1378C13.2722 10.2133 13.213 10.2724 13.1376 10.2972L11.7221 10.7628C11.4929 10.8381 11.4929 11.1623 11.7221 11.2377L13.1376 11.7033C13.213 11.7281 13.2722 11.7872 13.297 11.8626L13.7625 13.2781C13.8379 13.5073 14.1621 13.5073 14.2375 13.2781L14.703 11.8626C14.7278 11.7872 14.787 11.7281 14.8624 11.7033L16.2779 11.2377C16.5071 11.1623 16.5071 10.8381 16.2779 10.7628L14.8624 10.2972C14.787 10.2724 14.7278 10.2133 14.703 10.1378L14.2375 8.72234Z"
|
||||
fill="currentColor"
|
||||
/>
|
||||
</svg>
|
||||
);
|
||||
}
|
||||
@@ -1,20 +0,0 @@
|
||||
export default function ChevronDown({ className }: { className?: string }) {
|
||||
return (
|
||||
<svg
|
||||
width="1.5rem"
|
||||
height="1.5rem"
|
||||
fill="none"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
viewBox="0 0 24 24"
|
||||
aria-hidden="true"
|
||||
className={className}
|
||||
>
|
||||
<path
|
||||
fillRule="evenodd"
|
||||
clipRule="evenodd"
|
||||
d="M12.293 10.293a1 1 0 0 1 1.414 0L18 14.586l4.293-4.293a1 1 0 1 1 1.414 1.414l-5 5a1 1 0 0 1-1.414 0l-5-5a1 1 0 0 1 0-1.414Z"
|
||||
fill="currentColor"
|
||||
></path>
|
||||
</svg>
|
||||
);
|
||||
}
|
||||
@@ -1,27 +0,0 @@
|
||||
import React from 'react';
|
||||
|
||||
interface Props extends React.ComponentPropsWithoutRef<'svg'> {
|
||||
className?: string;
|
||||
}
|
||||
|
||||
export function ChevronRight({ className = '', ...props }: Props) {
|
||||
return (
|
||||
<svg
|
||||
className={className}
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
{...props}
|
||||
>
|
||||
<path
|
||||
d="M9 18L15 12L9 6"
|
||||
stroke="currentColor"
|
||||
strokeWidth="2"
|
||||
strokeLinecap="round"
|
||||
strokeLinejoin="round"
|
||||
/>
|
||||
</svg>
|
||||
);
|
||||
}
|
||||
@@ -1,20 +0,0 @@
|
||||
export default function ChevronUp({ className = '' }) {
|
||||
return (
|
||||
<svg
|
||||
width="1.5rem"
|
||||
height="1.5rem"
|
||||
fill="none"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
viewBox="0 0 24 24"
|
||||
aria-hidden="true"
|
||||
className={className}
|
||||
>
|
||||
<path
|
||||
fillRule="evenodd"
|
||||
clipRule="evenodd"
|
||||
d="M17.293 9.293a1 1 0 0 1 1.414 0l5 5a1 1 0 0 1-1.414 1.414L18 11.414l-4.293 4.293a1 1 0 0 1-1.414-1.414l5-5Z"
|
||||
fill="currentColor"
|
||||
></path>
|
||||
</svg>
|
||||
);
|
||||
}
|
||||
@@ -1,18 +0,0 @@
|
||||
export default function Discord({ className = '' }) {
|
||||
return (
|
||||
<svg
|
||||
width="1.5rem"
|
||||
height="1.5rem"
|
||||
fill="none"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
viewBox="0 0 640 512"
|
||||
aria-hidden="true"
|
||||
className={className}
|
||||
>
|
||||
<path
|
||||
d="M524.5 69.8a1.5 1.5 0 0 0 -.8-.7A485.1 485.1 0 0 0 404.1 32a1.8 1.8 0 0 0 -1.9 .9 337.5 337.5 0 0 0 -14.9 30.6 447.8 447.8 0 0 0 -134.4 0 309.5 309.5 0 0 0 -15.1-30.6 1.9 1.9 0 0 0 -1.9-.9A483.7 483.7 0 0 0 116.1 69.1a1.7 1.7 0 0 0 -.8 .7C39.1 183.7 18.2 294.7 28.4 404.4a2 2 0 0 0 .8 1.4A487.7 487.7 0 0 0 176 479.9a1.9 1.9 0 0 0 2.1-.7A348.2 348.2 0 0 0 208.1 430.4a1.9 1.9 0 0 0 -1-2.6 321.2 321.2 0 0 1 -45.9-21.9 1.9 1.9 0 0 1 -.2-3.1c3.1-2.3 6.2-4.7 9.1-7.1a1.8 1.8 0 0 1 1.9-.3c96.2 43.9 200.4 43.9 295.5 0a1.8 1.8 0 0 1 1.9 .2c2.9 2.4 6 4.9 9.1 7.2a1.9 1.9 0 0 1 -.2 3.1 301.4 301.4 0 0 1 -45.9 21.8 1.9 1.9 0 0 0 -1 2.6 391.1 391.1 0 0 0 30 48.8 1.9 1.9 0 0 0 2.1 .7A486 486 0 0 0 610.7 405.7a1.9 1.9 0 0 0 .8-1.4C623.7 277.6 590.9 167.5 524.5 69.8zM222.5 337.6c-29 0-52.8-26.6-52.8-59.2S193.1 219.1 222.5 219.1c29.7 0 53.3 26.8 52.8 59.2C275.3 311 251.9 337.6 222.5 337.6zm195.4 0c-29 0-52.8-26.6-52.8-59.2S388.4 219.1 417.9 219.1c29.7 0 53.3 26.8 52.8 59.2C470.7 311 447.5 337.6 417.9 337.6z"
|
||||
fill="currentColor"
|
||||
/>
|
||||
</svg>
|
||||
);
|
||||
}
|
||||
@@ -1,20 +0,0 @@
|
||||
export default function Document({ className = '' }) {
|
||||
return (
|
||||
<svg
|
||||
width="1.5rem"
|
||||
height="1.5rem"
|
||||
fill="none"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
viewBox="0 0 24 24"
|
||||
aria-hidden="true"
|
||||
className={className}
|
||||
>
|
||||
<path
|
||||
fillRule="evenodd"
|
||||
clipRule="evenodd"
|
||||
d="M14.546 4.503a6.26 6.26 0 0 0-.264-.003H6.6c-.297 0-.459 0-.575.01l-.014.001v.014C6 4.64 6 4.804 6 5.1v13.8c0 .297 0 .459.01.575l.001.014h.014c.116.01.278.011.575.011h10.8c.297 0 .459 0 .575-.01l.014-.001v-.014c.01-.116.011-.278.011-.575V8.608c0-.12 0-.18-.002-.224v-.003l-.002-.002a6.215 6.215 0 0 0-.147-.17l-3.12-3.508a6.24 6.24 0 0 0-.177-.195l-.002-.003h-.004Zm-.21-2.003c.206 0 .464-.001.716.064a2 2 0 0 1 .613.275c.216.145.387.339.523.492l.037.042 3.118 3.508.032.035c.116.13.263.295.372.49.094.17.164.352.206.542.048.218.047.438.047.613v10.371c0 .252 0 .498-.017.706a2.022 2.022 0 0 1-.201.77 2 2 0 0 1-.874.874 2.022 2.022 0 0 1-.77.201 9.144 9.144 0 0 1-.706.017H6.568c-.252 0-.498 0-.706-.017a2.022 2.022 0 0 1-.77-.2 2 2 0 0 1-.874-.875 2.021 2.021 0 0 1-.201-.77C4 19.43 4 19.184 4 18.932V5.068c0-.252 0-.498.017-.706.019-.229.063-.499.201-.77a2 2 0 0 1 .874-.874c.271-.138.541-.182.77-.201.208-.017.454-.017.706-.017h7.769ZM8 14a1 1 0 0 1 1-1h6a1 1 0 1 1 0 2H9a1 1 0 0 1-1-1Zm1-6a1 1 0 0 0 0 2h4a1 1 0 1 0 0-2H9Z"
|
||||
fill="currentColor"
|
||||
></path>
|
||||
</svg>
|
||||
);
|
||||
}
|
||||
@@ -1,20 +0,0 @@
|
||||
export default function Idea({ className = '' }) {
|
||||
return (
|
||||
<svg
|
||||
width="1.5rem"
|
||||
height="1.5rem"
|
||||
fill="none"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
viewBox="0 0 24 24"
|
||||
aria-hidden="true"
|
||||
className={className}
|
||||
>
|
||||
<path
|
||||
fillRule="evenodd"
|
||||
clipRule="evenodd"
|
||||
d="M12 3C7.67283 3 4.98694 7.96755 7.41702 11.7635L8.84879 14L15.1514 14L16.5831 11.7633C19.013 7.96731 16.3271 3 12 3ZM5.73261 12.8418C2.49843 7.78981 6.00376 1 12 1C17.9961 1 21.5015 7.78948 18.2676 12.8415L16.7382 15.2309C16.4351 15.7043 15.9116 16 15.339 16L8.66122 16C8.0886 16 7.56511 15.7043 7.26208 15.2309L5.73261 12.8418ZM8.00002 18C8.00002 17.4477 8.44774 17 9.00002 17H12H15C15.5523 17 16 17.4477 16 18C16 18.5523 15.5523 19 15 19H12H9.00002C8.44774 19 8.00002 18.5523 8.00002 18ZM10 20C9.44774 20 9.00003 20.4477 9.00003 21C9.00003 21.5523 9.44774 22 10 22H12H14C14.5523 22 15 21.5523 15 21C15 20.4477 14.5523 20 14 20H12H10Z"
|
||||
fill="currentColor"
|
||||
/>
|
||||
</svg>
|
||||
);
|
||||
}
|
||||
@@ -1,35 +0,0 @@
|
||||
interface KeyProps {
|
||||
className?: string;
|
||||
}
|
||||
|
||||
export function Key({ className = '' }: KeyProps) {
|
||||
return (
|
||||
<svg
|
||||
width="16"
|
||||
height="17"
|
||||
viewBox="0 0 16 17"
|
||||
fill="none"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
className={className}
|
||||
>
|
||||
<g clipPath="url(#clip0_986_19974)">
|
||||
<path
|
||||
d="M10.3382 5.68265L11.8709 7.21667C11.9954 7.33888 12.1629 7.40737 12.3374 7.40745C12.5119 7.40753 12.6795 7.33918 12.8042 7.21709L14.2048 5.81771C14.327 5.69315 14.3955 5.52563 14.3956 5.35113C14.3957 5.17663 14.3273 5.00905 14.2052 4.88438L12.6726 3.35036M14.0064 2.01762L7.60358 8.41476M8.66915 11.0152C8.66825 13.0403 7.02589 14.6812 5.00085 14.6803C2.9758 14.6794 1.33492 13.037 1.33582 11.012C1.33673 8.98692 2.97908 7.34603 5.00413 7.34693C7.02917 7.34784 8.67006 8.9902 8.66915 11.0152Z"
|
||||
stroke="currentColor"
|
||||
strokeLinecap="round"
|
||||
strokeLinejoin="round"
|
||||
/>
|
||||
</g>
|
||||
<defs>
|
||||
<clipPath id="clip0_986_19974">
|
||||
<rect
|
||||
width="16"
|
||||
height="16"
|
||||
fill="white"
|
||||
transform="translate(0.00708008 0.677979) rotate(0.0256089)"
|
||||
/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
||||
);
|
||||
}
|
||||
@@ -1,18 +0,0 @@
|
||||
export default function LinkedIn({ className = '' }) {
|
||||
return (
|
||||
<svg
|
||||
width="1.5rem"
|
||||
height="1.5rem"
|
||||
fill="none"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
viewBox="0 0 448 512"
|
||||
aria-hidden="true"
|
||||
className={className}
|
||||
>
|
||||
<path
|
||||
d="M416 32H31.9C14.3 32 0 46.5 0 64.3v383.4C0 465.5 14.3 480 31.9 480H416c17.6 0 32-14.5 32-32.3V64.3c0-17.8-14.4-32.3-32-32.3zM135.4 416H69V202.2h66.5V416zm-33.2-243c-21.3 0-38.5-17.3-38.5-38.5S80.9 96 102.2 96c21.2 0 38.5 17.3 38.5 38.5 0 21.3-17.2 38.5-38.5 38.5zm282.1 243h-66.4V312c0-24.8-.5-56.7-34.5-56.7-34.6 0-39.9 27-39.9 54.9V416h-66.4V202.2h63.7v29.2h.9c8.9-16.8 30.6-34.5 62.9-34.5 67.2 0 79.7 44.3 79.7 101.9V416z"
|
||||
fill="currentColor"
|
||||
/>
|
||||
</svg>
|
||||
);
|
||||
}
|
||||
@@ -1,18 +0,0 @@
|
||||
export default function More({ className = '' }) {
|
||||
return (
|
||||
<svg
|
||||
fill="none"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
viewBox="0 0 24 24"
|
||||
aria-hidden="true"
|
||||
className={className}
|
||||
>
|
||||
<path
|
||||
fillRule="evenodd"
|
||||
clipRule="evenodd"
|
||||
d="M5 14a2 2 0 1 1 .001-4.001A2 2 0 0 1 5 14Zm7 0a2 2 0 1 1 .001-4.001A2 2 0 0 1 12 14Zm5-2a2 2 0 1 0 4.001-.001A2 2 0 0 0 17 12Z"
|
||||
fill="currentColor"
|
||||
></path>
|
||||
</svg>
|
||||
);
|
||||
}
|
||||
@@ -1,45 +0,0 @@
|
||||
export default function Ollama({ className = '' }) {
|
||||
return (
|
||||
<svg
|
||||
width="69"
|
||||
height="88"
|
||||
viewBox="0 0 69 88"
|
||||
fill="none"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
aria-hidden="true"
|
||||
className={className}
|
||||
>
|
||||
<path
|
||||
d="M65 85L62.0637 70.8077C62.0222 70.6074 62.0432 70.3992 62.1238 70.2112L64.3359 65.0497C65.7194 61.8214 65.7378 58.1708 64.387 54.9287L62.4897 50.3753C61.8577 48.8586 61.8754 47.149 62.5386 45.6457L64.1296 42.0397C66.8761 35.8141 64.3334 28.5656 58.0958 25.8464C55.8537 24.869 53.319 23.8076 50.5427 22.7131C50.1848 22.572 49.843 22.3777 49.5389 22.1421C46.6697 19.9189 44.1695 18.0613 42.1059 16.5691C38.1157 13.6838 32.8534 13.645 28.9759 16.68C27.1886 18.0789 25.0635 19.8198 22.638 21.9398C22.2177 22.3071 21.7135 22.5905 21.1813 22.7586C18.6462 23.5593 16.4068 24.2677 14.4298 24.8938C6.83415 27.2996 3.28234 35.8919 6.92194 42.9796L8.28723 45.6383C9.05963 47.1424 9.16151 48.9027 8.5678 50.4859L6.65444 55.5882C5.5855 58.4387 5.55086 61.5739 6.55656 64.4473L8.42485 69.7853C8.47432 69.9266 8.49142 70.0773 8.47488 70.2261L7 83.5"
|
||||
stroke="currentColor"
|
||||
strokeWidth="5"
|
||||
strokeLinecap="round"
|
||||
/>
|
||||
<circle cx="18.5" cy="40.5" r="3" fill="currentColor" />
|
||||
<circle cx="52.5" cy="40.5" r="3" fill="currentColor" />
|
||||
<path
|
||||
d="M35.5 38C42.1664 38 47 42.3128 47 47C47 51.6872 42.1664 56 35.5 56C28.8336 56 24 51.6872 24 47C24 42.3128 28.8336 38 35.5 38Z"
|
||||
stroke="currentColor"
|
||||
strokeWidth="3"
|
||||
/>
|
||||
<path
|
||||
d="M33.5 45L35.5 47M35.5 47L37.5 45M35.5 47V50"
|
||||
stroke="currentColor"
|
||||
strokeWidth="2"
|
||||
strokeLinecap="round"
|
||||
/>
|
||||
<path
|
||||
d="M25 20L23.8142 14.0708C23.2738 11.369 22.3756 8.75127 21.1434 6.28682L19.6522 3.30442C18.9533 1.90667 16.9727 1.86785 16.2196 3.23714V3.23714C13.7795 7.67371 12.5 12.6549 12.5 17.7183V26"
|
||||
stroke="currentColor"
|
||||
strokeWidth="4"
|
||||
strokeLinecap="round"
|
||||
/>
|
||||
<path
|
||||
d="M46.5 20.5L47.7083 14.6911C48.2867 11.9102 49.2445 9.22205 50.5549 6.70202L52.1438 3.64663C52.8504 2.28778 54.7805 2.24912 55.5409 3.57858V3.57858C58.1353 8.11412 59.5 13.2486 59.5 18.4737V26.5"
|
||||
stroke="currentColor"
|
||||
strokeWidth="4"
|
||||
strokeLinecap="round"
|
||||
/>
|
||||
</svg>
|
||||
);
|
||||
}
|
||||
@@ -1,17 +0,0 @@
|
||||
export default function OpenAI({ className = '' }) {
|
||||
return (
|
||||
<svg
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
className={className}
|
||||
>
|
||||
<path
|
||||
d="M22.2819 9.8211a5.9847 5.9847 0 0 0-.5157-4.9108 6.0462 6.0462 0 0 0-6.5098-2.9A6.0651 6.0651 0 0 0 4.9807 4.1818a5.9847 5.9847 0 0 0-3.9977 2.9 6.0462 6.0462 0 0 0 .7427 7.0966 5.98 5.98 0 0 0 .511 4.9107 6.051 6.051 0 0 0 6.5146 2.9001A5.9847 5.9847 0 0 0 13.2599 24a6.0557 6.0557 0 0 0 5.7718-4.2058 5.9894 5.9894 0 0 0 3.9977-2.9001 6.0557 6.0557 0 0 0-.7475-7.0729zm-9.022 12.6081a4.4755 4.4755 0 0 1-2.8764-1.0408l.1419-.0804 4.7783-2.7582a.7948.7948 0 0 0 .3927-.6813v-6.7369l2.02 1.1686a.071.071 0 0 1 .038.052v5.5826a4.504 4.504 0 0 1-4.4945 4.4944zm-9.6607-4.1254a4.4708 4.4708 0 0 1-.5346-3.0137l.142.0852 4.783 2.7582a.7712.7712 0 0 0 .7806 0l5.8428-3.3685v2.3324a.0804.0804 0 0 1-.0332.0615L9.74 19.9502a4.4992 4.4992 0 0 1-6.1408-1.6464zM2.3408 7.8956a4.485 4.485 0 0 1 2.3655-1.9728V11.6a.7664.7664 0 0 0 .3879.6765l5.8144 3.3543-2.0201 1.1685a.0757.0757 0 0 1-.071 0l-4.8303-2.7865A4.504 4.504 0 0 1 2.3408 7.872zm16.5963 3.8558L13.1038 8.364 15.1192 7.2a.0757.0757 0 0 1 .071 0l4.8303 2.7913a4.4944 4.4944 0 0 1-.6765 8.1042v-5.6772a.79.79 0 0 0-.407-.667zm2.0107-3.0231l-.142-.0852-4.7735-2.7818a.7759.7759 0 0 0-.7854 0L9.409 9.2297V6.8974a.0662.0662 0 0 1 .0284-.0615l4.8303-2.7866a4.4992 4.4992 0 0 1 6.6802 4.66zM8.3065 12.863l-2.02-1.1638a.0804.0804 0 0 1-.038-.0567V6.0742a4.4992 4.4992 0 0 1 7.3757-3.4537l-.142.0805L8.704 5.459a.7948.7948 0 0 0-.3927.6813zm1.0976-2.3654l2.602-1.4998 2.6069 1.4998v2.9994l-2.5974 1.4997-2.6067-1.4997Z"
|
||||
fill="currentColor"
|
||||
/>
|
||||
</svg>
|
||||
);
|
||||
}
|
||||
@@ -1,44 +0,0 @@
|
||||
export default function OpenRouter({ className = '' }) {
|
||||
return (
|
||||
<svg
|
||||
width="202"
|
||||
height="171"
|
||||
viewBox="0 0 202 171"
|
||||
fill="none"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
aria-hidden="true"
|
||||
className={className}
|
||||
>
|
||||
<path
|
||||
d="M2.20001 85.5004C8.10001 85.5004 30.8 80.4004 42.5 73.7004C54.3 67.1004 54.3 67.1004 78.6 49.8004C109.4 28.0004 131.1 35.3004 166.8 35.3004"
|
||||
fill="currentColor"
|
||||
/>
|
||||
<path
|
||||
d="M2.20001 85.5004C8.10001 85.5004 30.8 80.4004 42.5 73.7004C54.3 67.1004 54.3 67.1004 78.6 49.8004C109.4 28.0004 131.1 35.3004 166.8 35.3004"
|
||||
stroke="currentColor"
|
||||
strokeWidth="35.3"
|
||||
/>
|
||||
<path
|
||||
d="M201.3 35.5002L141 70.3002V0.700195L201.3 35.5002Z"
|
||||
fill="currentColor"
|
||||
stroke="currentColor"
|
||||
strokeWidth="0.4"
|
||||
/>
|
||||
<path
|
||||
d="M1 85.5C6.9 85.5 29.6 90.5 41.4 97.2C53.1 103.9 53.1 103.9 77.4 121.2C108.2 143 129.9 135.7 165.6 135.7"
|
||||
fill="currentColor"
|
||||
/>
|
||||
<path
|
||||
d="M1 85.5C6.9 85.5 29.6 90.5 41.4 97.2C53.1 103.9 53.1 103.9 77.4 121.2C108.2 143 129.9 135.7 165.6 135.7"
|
||||
stroke="currentColor"
|
||||
strokeWidth="35.3"
|
||||
/>
|
||||
<path
|
||||
d="M200.1 135.4L139.8 100.7V170.2L200.1 135.4Z"
|
||||
fill="currentColor"
|
||||
stroke="currentColor"
|
||||
strokeWidth="0.4"
|
||||
/>
|
||||
</svg>
|
||||
);
|
||||
}
|
||||
@@ -1,18 +0,0 @@
|
||||
export default function Refresh({ className = '' }) {
|
||||
return (
|
||||
<svg
|
||||
fill="none"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
viewBox="0 0 24 24"
|
||||
aria-hidden="true"
|
||||
className={className}
|
||||
>
|
||||
<path
|
||||
fillRule="evenodd"
|
||||
clipRule="evenodd"
|
||||
d="M14.1508 1.74076C13.7315 1.38134 13.1002 1.4299 12.7407 1.84923C12.3813 2.26855 12.4299 2.89985 12.8492 3.25927L14.2968 4.50004H11.5001C6.8057 4.50004 3.00012 8.30564 3.00012 13.0001C3.00012 17.6945 6.80568 21.5 11.5001 21.5C16.1945 21.5 20.0001 17.6944 20.0001 13C20.0001 12.4477 19.5523 12 19.0001 12C18.4478 12 18.0001 12.4477 18.0001 13C18.0001 16.5899 15.0899 19.5 11.5001 19.5C7.91026 19.5 5.00012 16.5899 5.00012 13.0001C5.00012 9.4102 7.91027 6.50004 11.5001 6.50004H14.2967L12.8492 7.74076C12.4299 8.10018 12.3813 8.73148 12.7407 9.15081C13.1002 9.57014 13.7315 9.6187 14.1508 9.25927L17.6417 6.26706C17.8608 6.08362 18.0001 5.8081 18.0001 5.50004C18.0001 5.19294 17.8616 4.91817 17.6438 4.73474L14.1508 1.74076Z"
|
||||
fill="currentColor"
|
||||
/>
|
||||
</svg>
|
||||
);
|
||||
}
|
||||
@@ -1,18 +0,0 @@
|
||||
export default function Send({ className = '' }) {
|
||||
return (
|
||||
<svg
|
||||
fill="none"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
viewBox="0 0 24 24"
|
||||
aria-hidden="true"
|
||||
className={className}
|
||||
>
|
||||
<path
|
||||
fillRule="evenodd"
|
||||
clipRule="evenodd"
|
||||
d="M20.707 3.293a1 1 0 0 1 .25.994l-5.4 18a1 1 0 0 1-1.886.084l-3.44-8.602-8.602-3.44a1 1 0 0 1 .084-1.887l18-5.4a1 1 0 0 1 .994.25Zm-8.534 9.948 2.292 5.729L18.509 5.49 5.03 9.535l5.73 2.292 1.333-1.334a1 1 0 0 1 1.414 1.414l-1.334 1.334Z"
|
||||
fill="currentColor"
|
||||
></path>
|
||||
</svg>
|
||||
);
|
||||
}
|
||||
@@ -1,20 +0,0 @@
|
||||
export default function SensitiveHidden({ className = '' }) {
|
||||
return (
|
||||
<svg
|
||||
width="1.5rem"
|
||||
height="1.5rem"
|
||||
fill="none"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
viewBox="0 0 24 24"
|
||||
aria-hidden="true"
|
||||
className={className}
|
||||
>
|
||||
<path
|
||||
fillRule="evenodd"
|
||||
clipRule="evenodd"
|
||||
d="M19.731 5.182a1 1 0 1 0-1.462-1.364l-2.71 2.903C14.471 6.287 13.271 6 12 6 9.608 6 7.469 7.018 5.849 8.114a18.644 18.644 0 0 0-3.333 2.916 1.45 1.45 0 0 0 0 1.94 18.644 18.644 0 0 0 3.333 2.916c.231.157.473.312.725.462l-2.305 2.47a1 1 0 0 0 1.462 1.364l2.71-2.903C9.529 17.713 10.729 18 12 18c2.392 0 4.531-1.018 6.151-2.114a18.644 18.644 0 0 0 3.333-2.916 1.45 1.45 0 0 0 0-1.94 18.644 18.644 0 0 0-3.333-2.916 15.453 15.453 0 0 0-.725-.462l2.305-2.47ZM14.07 8.317A7.21 7.21 0 0 0 12 8c-1.833 0-3.58.789-5.03 1.77A16.633 16.633 0 0 0 4.343 12c.55.575 1.467 1.445 2.627 2.23.32.217.657.425 1.005.617l6.094-6.53Zm-4.138 7.366 6.094-6.53c.348.192.684.4 1.006.617A16.631 16.631 0 0 1 19.657 12a16.633 16.633 0 0 1-2.627 2.23C15.58 15.21 13.834 16 12 16c-.707 0-1.4-.117-2.07-.317Z"
|
||||
fill="currentColor"
|
||||
></path>
|
||||
</svg>
|
||||
);
|
||||
}
|
||||
@@ -1,20 +0,0 @@
|
||||
export default function SensitiveVisible({ className = '' }) {
|
||||
return (
|
||||
<svg
|
||||
width="1.5rem"
|
||||
height="1.5rem"
|
||||
fill="none"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
viewBox="0 0 24 24"
|
||||
aria-hidden="true"
|
||||
className={className}
|
||||
>
|
||||
<path
|
||||
fillRule="evenodd"
|
||||
clipRule="evenodd"
|
||||
d="M6.97 14.23A16.635 16.635 0 0 1 4.343 12 16.633 16.633 0 0 1 6.97 9.77C8.42 8.79 10.167 8 12 8c1.833 0 3.58.789 5.03 1.77A16.631 16.631 0 0 1 19.657 12a16.633 16.633 0 0 1-2.627 2.23C15.58 15.21 13.834 16 12 16c-1.833 0-3.58-.789-5.03-1.77ZM12 6C9.608 6 7.469 7.018 5.849 8.114a18.644 18.644 0 0 0-3.333 2.916 1.45 1.45 0 0 0 0 1.94 18.644 18.644 0 0 0 3.333 2.916C7.469 16.982 9.609 18 12 18c2.392 0 4.531-1.018 6.151-2.114a18.644 18.644 0 0 0 3.333-2.916 1.45 1.45 0 0 0 0-1.94 18.644 18.644 0 0 0-3.333-2.916C16.531 7.018 14.392 6 12 6Zm0 8a2 2 0 1 0 0-4 2 2 0 0 0 0 4Z"
|
||||
fill="currentColor"
|
||||
></path>
|
||||
</svg>
|
||||
);
|
||||
}
|
||||
@@ -1,18 +0,0 @@
|
||||
export default function Settings({ className = '' }) {
|
||||
return (
|
||||
<svg
|
||||
fill="none"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
viewBox="0 0 24 24"
|
||||
aria-hidden="true"
|
||||
className={className}
|
||||
>
|
||||
<path
|
||||
fillRule="evenodd"
|
||||
clipRule="evenodd"
|
||||
d="M10.6326 3.5C10.3981 3.5 10.1862 3.69609 10.1862 3.96499C10.1862 4.98498 9.56936 5.81161 8.80634 6.2491C8.77137 6.26915 8.73659 6.28953 8.702 6.31022C7.94634 6.76246 6.91891 6.89623 6.03237 6.3778C5.82611 6.25719 5.55643 6.3235 5.4295 6.54618L4.06296 8.94353C3.93162 9.17396 4.0146 9.46279 4.22888 9.5881C5.11053 10.1037 5.50474 11.0605 5.49681 11.938L5.49653 12L5.49681 12.062C5.50475 12.9395 5.11053 13.8963 4.22888 14.4119C4.0146 14.5372 3.93162 14.8261 4.06296 15.0565L5.42949 17.4538C5.55643 17.6765 5.82612 17.7428 6.03237 17.6222L6.53717 18.4854L6.03237 17.6222C6.91892 17.1038 7.94635 17.2375 8.70202 17.6898L8.70203 17.6898C8.73658 17.7105 8.77135 17.7308 8.80635 17.7509C9.56936 18.1884 10.1862 19.015 10.1862 20.035C10.1862 20.3039 10.3981 20.5 10.6326 20.5H13.3674C13.6019 20.5 13.8138 20.3039 13.8138 20.035C13.8138 19.015 14.4306 18.1884 15.1937 17.7509L15.6911 18.6184L15.1936 17.7509C15.1937 17.7509 15.1937 17.7509 15.1937 17.7509C15.2287 17.7308 15.2634 17.7105 15.298 17.6898L15.8115 18.5479L15.298 17.6898C16.0536 17.2375 17.0811 17.1038 17.9676 17.6222C18.1739 17.7428 18.4436 17.6765 18.5705 17.4538L19.937 15.0565C20.0684 14.8261 19.9854 14.5372 19.7711 14.4119C18.8895 13.8963 18.4953 12.9395 18.5032 12.062V12.062L18.5034 12.0265L19.497 12.0302L18.5034 12.0264L18.5035 12L18.5032 11.938V11.938C18.4953 11.0605 18.8895 10.1037 19.7711 9.5881C19.9854 9.46279 20.0684 9.17396 19.937 8.94354L18.5705 6.54618C18.4436 6.3235 18.1739 6.25719 17.9676 6.3778C17.0811 6.89623 16.0537 6.76246 15.298 6.31022L15.8115 5.45215L15.298 6.31022C15.2634 6.28953 15.2286 6.26915 15.1937 6.2491C14.4306 5.81161 13.8138 4.98498 13.8138 3.96499C13.8138 3.69609 13.6019 3.5 13.3674 3.5H10.6326ZM8.1862 3.96499C8.1862 2.6157 9.26947 1.5 10.6326 1.5H13.3674C14.7305 1.5 15.8138 2.6157 15.8138 3.96499C15.8138 4.13868 15.9259 4.36351 16.1885 4.51406C16.2343 4.54032 16.2798 4.56699 16.325 4.59407C16.5852 4.74977 16.8228 4.73044 16.958 4.65133C18.1358 3.96259 19.6359 4.37659 20.308 5.55575L21.6746 7.95311C22.3428 9.12533 21.9513 10.6301 20.7807 11.3146C20.6417 11.3959 20.5002 11.6037 20.5031 11.9199C20.5033 11.9466 20.5035 11.9733 20.5035 12L20.5034 12.0339V12.034L20.5031 12.0801C20.5002 12.3963 20.6417 12.6042 20.7807 12.6854C21.9513 13.37 22.3428 14.8747 21.6746 16.0469L20.308 18.4443C19.6359 19.6234 18.1358 20.0374 16.958 19.3487C16.8227 19.2696 16.5852 19.2502 16.325 19.4059C16.2798 19.433 16.2342 19.4597 16.1885 19.4859L15.7151 18.6603L16.1885 19.4859C15.9259 19.6365 15.8138 19.8613 15.8138 20.035C15.8138 21.3843 14.7305 22.5 13.3674 22.5H10.6326C9.26947 22.5 8.1862 21.3843 8.1862 20.035C8.1862 19.8613 8.0741 19.6365 7.81152 19.4859C7.76575 19.4597 7.72023 19.433 7.67497 19.4059C7.41481 19.2502 7.17725 19.2696 7.04197 19.3487C5.86418 20.0374 4.36409 19.6234 3.69195 18.4443L2.32542 16.0469C1.65723 14.8747 2.04873 13.37 3.21928 12.6854C3.35829 12.6042 3.49975 12.3963 3.49689 12.0801L4.49685 12.0711L3.49689 12.0801C3.49665 12.0534 3.49653 12.0267 3.49653 12C3.49653 11.9733 3.49665 11.9466 3.49689 11.9199C3.49975 11.6037 3.35829 11.3959 3.21928 11.3146C2.04873 10.6301 1.65724 9.12533 2.32542 7.95311L3.69195 5.55575C4.3641 4.37659 5.86418 3.96259 7.04197 4.65133C7.17724 4.73044 7.4148 4.74977 7.67495 4.59407L8.18848 5.45215L7.67495 4.59407C7.7202 4.56699 7.76573 4.54032 7.81152 4.51406C8.0741 4.36351 8.1862 4.13868 8.1862 3.96499ZM12 9.2C10.4923 9.2 9.24826 10.4415 9.24826 12C9.24826 13.5585 10.4923 14.8 12 14.8C13.5077 14.8 14.7517 13.5585 14.7517 12C14.7517 10.4415 13.5077 9.2 12 9.2ZM7.24826 12C7.24826 9.36112 9.36367 7.2 12 7.2C14.6363 7.2 16.7517 9.36112 16.7517 12C16.7517 14.6389 14.6363 16.8 12 16.8C9.36367 16.8 7.24826 14.6389 7.24826 12Z"
|
||||
fill="currentColor"
|
||||
/>
|
||||
</svg>
|
||||
);
|
||||
}
|
||||
@@ -1,22 +0,0 @@
|
||||
export default function Tetrate({ className = '' }) {
|
||||
return (
|
||||
<svg
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 694 701"
|
||||
fill="none"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
aria-hidden="true"
|
||||
className={className}
|
||||
>
|
||||
<path
|
||||
d="M343.5 226C390.72 226 429 264.28 429 311.5C429 321.676 427.222 331.436 423.961 340.487C409.127 381.654 375 419.742 375 463.499C375 507.257 409.127 545.346 423.961 586.512C427.222 595.564 429 605.324 429 615.5C429 662.72 390.72 701 343.5 701C296.28 701 258 662.72 258 615.5C258 606.44 259.409 597.709 262.021 589.514C275.211 548.119 308 509.828 308 466.382V460.616C308 417.171 275.211 378.88 262.021 337.485C259.409 329.291 258 320.56 258 311.5C258 264.28 296.28 226 343.5 226Z"
|
||||
fill="currentColor"
|
||||
/>
|
||||
<path
|
||||
d="M272.622 39.9541C297.034 1.458 347.7 -11.255 387.546 11.75C395.392 16.2801 402.249 21.8668 408.04 28.2256C437.293 60.3466 454.06 107.888 491.685 129.61L496.678 132.493C534.303 154.216 583.859 144.966 626.303 154.239C634.705 156.075 642.971 159.22 650.817 163.75C691.711 187.36 705.722 239.652 682.112 280.546C658.502 321.44 606.211 335.451 565.317 311.841C556.505 306.753 548.941 300.333 542.733 292.982C514.499 259.553 498.577 210.955 460.682 189.076C436.139 174.906 406.497 174.321 376.956 173.566C358.811 173.102 340.613 173.735 322.491 174.754C290.52 176.551 257.865 176.779 231.635 192.853C194.326 215.717 179.682 264.716 152.333 298.874C146.319 306.385 138.926 313 130.25 318.317C89.9879 342.99 37.3483 330.353 12.6754 290.091C-11.9974 249.829 0.639271 197.189 40.901 172.517C48.6259 167.783 56.8065 164.422 65.1578 162.367C107.345 151.985 157.126 159.934 194.17 137.233L199.086 134.221C232.774 113.576 248.658 72.037 272.622 39.9541Z"
|
||||
fill="currentColor"
|
||||
/>
|
||||
</svg>
|
||||
);
|
||||
}
|
||||
@@ -1,18 +0,0 @@
|
||||
export default function Time({ className = '' }) {
|
||||
return (
|
||||
<svg
|
||||
fill="none"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
viewBox="0 0 24 24"
|
||||
aria-hidden="true"
|
||||
className={className}
|
||||
>
|
||||
<path
|
||||
fillRule="evenodd"
|
||||
clipRule="evenodd"
|
||||
d="M6.34315 6.34314C9.46734 3.21895 14.5327 3.21895 17.6569 6.34315C20.781 9.46734 20.781 14.5327 17.6569 17.6569C14.5327 20.781 9.46734 20.781 6.34315 17.6569C3.21895 14.5327 3.21895 9.46734 6.34315 6.34314ZM19.0711 4.92893C15.1658 1.02369 8.83417 1.02369 4.92893 4.92893C1.02369 8.83417 1.02369 15.1658 4.92893 19.0711C8.83418 22.9763 15.1658 22.9763 19.0711 19.0711C22.9763 15.1658 22.9763 8.83418 19.0711 4.92893ZM13 8.5C13 7.94772 12.5523 7.5 12 7.5C11.4477 7.5 11 7.94772 11 8.5V13C11 13.5523 11.4477 14 12 14H15.5C16.0523 14 16.5 13.5523 16.5 13C16.5 12.4477 16.0523 12 15.5 12H13V8.5Z"
|
||||
fill="currentColor"
|
||||
/>
|
||||
</svg>
|
||||
);
|
||||
}
|
||||
@@ -1,18 +0,0 @@
|
||||
export default function Youtube({ className = '' }) {
|
||||
return (
|
||||
<svg
|
||||
width="1.5rem"
|
||||
height="1.5rem"
|
||||
fill="none"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
viewBox="0 0 576 512"
|
||||
aria-hidden="true"
|
||||
className={className}
|
||||
>
|
||||
<path
|
||||
d="M549.7 124.1c-6.3-23.7-24.8-42.3-48.3-48.6C458.8 64 288 64 288 64S117.2 64 74.6 75.5c-23.5 6.3-42 24.9-48.3 48.6-11.4 42.9-11.4 132.3-11.4 132.3s0 89.4 11.4 132.3c6.3 23.7 24.8 41.5 48.3 47.8C117.2 448 288 448 288 448s170.8 0 213.4-11.5c23.5-6.3 42-24.2 48.3-47.8 11.4-42.9 11.4-132.3 11.4-132.3s0-89.4-11.4-132.3zm-317.5 213.5V175.2l142.7 81.2-142.7 81.2z"
|
||||
fill="currentColor"
|
||||
/>
|
||||
</svg>
|
||||
);
|
||||
}
|
||||
@@ -1,51 +1,25 @@
|
||||
import ArrowDown from './ArrowDown';
|
||||
import ArrowUp from './ArrowUp';
|
||||
import Attach from './Attach';
|
||||
import Back from './Back';
|
||||
import ChatGPT from './ChatGPT';
|
||||
import { Bird1 } from './Bird1';
|
||||
import { Bird2 } from './Bird2';
|
||||
import { Bird3 } from './Bird3';
|
||||
import { Bird4 } from './Bird4';
|
||||
import { Bird5 } from './Bird5';
|
||||
import { Bird6 } from './Bird6';
|
||||
import ChatSmart from './ChatSmart';
|
||||
import Check from './Check';
|
||||
import ChevronDown from './ChevronDown';
|
||||
import ChevronUp from './ChevronUp';
|
||||
import { ChevronRight } from './ChevronRight';
|
||||
import Close from './Close';
|
||||
import { CodeXml } from './CodeXml';
|
||||
import { Cog } from './Cog';
|
||||
import CoinIcon from './CoinIcon';
|
||||
import Copy from './Copy';
|
||||
import Discord from './Discord';
|
||||
import Document from './Document';
|
||||
import Edit from './Edit';
|
||||
import { Fuel } from './Fuel';
|
||||
import { GalleryHorizontalEnd } from './GalleryHorizontalEnd';
|
||||
import { Gavel } from './Gavel';
|
||||
import { GlassWater } from './GlassWater';
|
||||
import { Grape } from './Grape';
|
||||
import Idea from './Idea';
|
||||
import LinkedIn from './LinkedIn';
|
||||
import More from './More';
|
||||
import OpenRouter from './OpenRouter';
|
||||
import Ollama from './Ollama';
|
||||
import Refresh from './Refresh';
|
||||
import SensitiveHidden from './SensitiveHidden';
|
||||
import SensitiveVisible from './SensitiveVisible';
|
||||
import Send from './Send';
|
||||
import Settings from './Settings';
|
||||
import Time from './Time';
|
||||
import { Gear } from './Gear';
|
||||
import Youtube from './Youtube';
|
||||
import { Goose } from './Goose';
|
||||
import Anthropic from './Anthropic';
|
||||
import { ArrowRight } from './ArrowRight';
|
||||
import { Key } from './Key';
|
||||
import OpenAI from './OpenAI';
|
||||
import Tetrate from './Tetrate';
|
||||
import { Microphone } from './Microphone';
|
||||
import { Watch0 } from './Watch0';
|
||||
import { Watch1 } from './Watch1';
|
||||
@@ -59,45 +33,25 @@ export {
|
||||
ArrowDown,
|
||||
ArrowUp,
|
||||
Attach,
|
||||
Back,
|
||||
ChatGPT,
|
||||
Bird1,
|
||||
Bird2,
|
||||
Bird3,
|
||||
Bird4,
|
||||
Bird5,
|
||||
Bird6,
|
||||
ChatSmart,
|
||||
Check,
|
||||
ChevronDown,
|
||||
ChevronRight,
|
||||
ChevronUp,
|
||||
Close,
|
||||
CodeXml,
|
||||
Cog,
|
||||
CoinIcon,
|
||||
Copy,
|
||||
Discord,
|
||||
Document,
|
||||
Edit,
|
||||
Fuel,
|
||||
GalleryHorizontalEnd,
|
||||
Gavel,
|
||||
Gear,
|
||||
GlassWater,
|
||||
Grape,
|
||||
Idea,
|
||||
LinkedIn,
|
||||
Microphone,
|
||||
More,
|
||||
OpenRouter,
|
||||
Ollama,
|
||||
Refresh,
|
||||
SensitiveHidden,
|
||||
SensitiveVisible,
|
||||
Send,
|
||||
Settings,
|
||||
Time,
|
||||
Watch0,
|
||||
Watch1,
|
||||
Watch2,
|
||||
@@ -105,11 +59,5 @@ export {
|
||||
Watch4,
|
||||
Watch5,
|
||||
Watch6,
|
||||
Youtube,
|
||||
Goose,
|
||||
Anthropic,
|
||||
ArrowRight,
|
||||
Key,
|
||||
OpenAI,
|
||||
Tetrate,
|
||||
};
|
||||
|
||||
@@ -1,16 +0,0 @@
|
||||
export const Harddrive = ({ className }: { className?: string }) => (
|
||||
<svg
|
||||
width="11"
|
||||
height="11"
|
||||
viewBox="0 0 11 11"
|
||||
fill="none"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
className={className}
|
||||
>
|
||||
<rect width="11" height="11" rx="2" fill="#1E1E20" />
|
||||
<path
|
||||
d="M5 3.5C5 4.32843 4.32843 5 3.5 5C2.67157 5 2 4.32843 2 3.5C2 2.67157 2.67157 2 3.5 2C4.32843 2 5 2.67157 5 3.5Z"
|
||||
fill="white"
|
||||
/>
|
||||
</svg>
|
||||
);
|
||||
@@ -8,7 +8,6 @@ export { FileEdit } from './FileEdit';
|
||||
export { FilePlus } from './FilePlus';
|
||||
export { FileText } from './FileText';
|
||||
export { Globe } from './Globe';
|
||||
export { Harddrive } from './Harddrive';
|
||||
export { Monitor } from './Monitor';
|
||||
export { Numbers } from './Numbers';
|
||||
export { Save } from './Save';
|
||||
|
||||
@@ -1,81 +0,0 @@
|
||||
import { recipeNameSchema, RECIPE_NAME_PLACEHOLDER } from './recipeNameUtils';
|
||||
import { defineMessages, useIntl } from '../../../i18n';
|
||||
|
||||
const i18n = defineMessages({
|
||||
defaultLabel: {
|
||||
id: 'recipeNameField.defaultLabel',
|
||||
defaultMessage: 'Recipe Name',
|
||||
},
|
||||
formatHint: {
|
||||
id: 'recipeNameField.formatHint',
|
||||
defaultMessage: 'Will be automatically formatted (lowercase, dashes for spaces)',
|
||||
},
|
||||
});
|
||||
|
||||
interface RecipeNameFieldProps {
|
||||
id: string;
|
||||
value: string;
|
||||
onChange: (value: string) => void;
|
||||
onBlur: () => void;
|
||||
errors: string[];
|
||||
label?: string;
|
||||
required?: boolean;
|
||||
disabled?: boolean;
|
||||
}
|
||||
|
||||
export function RecipeNameField({
|
||||
id,
|
||||
value,
|
||||
onChange,
|
||||
onBlur,
|
||||
errors,
|
||||
label,
|
||||
required = true,
|
||||
disabled = false,
|
||||
}: RecipeNameFieldProps) {
|
||||
const intl = useIntl();
|
||||
const displayLabel = label || intl.formatMessage(i18n.defaultLabel);
|
||||
return (
|
||||
<div>
|
||||
<label htmlFor={id} className="block text-sm font-medium text-text-primary mb-2">
|
||||
{displayLabel} {required && <span className="text-red-500">*</span>}
|
||||
</label>
|
||||
<input
|
||||
id={id}
|
||||
type="text"
|
||||
value={value}
|
||||
onChange={(e) => {
|
||||
// Allow typing normally, only filter out invalid characters but keep spaces
|
||||
const rawValue = e.target.value;
|
||||
const filtered = rawValue.replace(/[^a-zA-Z0-9\s-]/g, '');
|
||||
onChange(filtered);
|
||||
}}
|
||||
onBlur={(e) => {
|
||||
// Transform on blur: convert to lowercase and replace spaces with dashes
|
||||
const rawValue = e.target.value;
|
||||
const transformed = rawValue
|
||||
.toLowerCase()
|
||||
.replace(/\s+/g, '-')
|
||||
.replace(/[^a-z0-9-]/g, '')
|
||||
.replace(/-+/g, '-')
|
||||
.replace(/^-+|-+$/g, '');
|
||||
|
||||
onChange(transformed);
|
||||
onBlur();
|
||||
}}
|
||||
disabled={disabled}
|
||||
className={`w-full p-3 border rounded-lg bg-background-primary text-text-primary focus:outline-none focus:ring-2 focus:ring-blue-500 ${
|
||||
errors.length > 0 ? 'border-red-500' : 'border-border-primary'
|
||||
} ${disabled ? 'opacity-50 cursor-not-allowed' : ''}`}
|
||||
placeholder={RECIPE_NAME_PLACEHOLDER}
|
||||
data-testid="recipe-name-input"
|
||||
/>
|
||||
<p className="text-xs text-text-secondary mt-1">
|
||||
{intl.formatMessage(i18n.formatHint)}
|
||||
</p>
|
||||
{errors.length > 0 && <p className="text-red-500 text-sm mt-1">{errors[0]}</p>}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
export { recipeNameSchema };
|
||||
@@ -1,38 +0,0 @@
|
||||
import { z } from 'zod';
|
||||
|
||||
/**
|
||||
* Validation schema for recipe names
|
||||
*/
|
||||
export const recipeNameSchema = z.string().min(3, 'Recipe name must be at least 3 characters');
|
||||
|
||||
/**
|
||||
* Transform a string to a valid recipe name format:
|
||||
* - Convert to lowercase
|
||||
* - Replace spaces with dashes
|
||||
* - Remove invalid characters
|
||||
* - Trim whitespace and dashes
|
||||
*/
|
||||
export function transformToRecipeName(input: string): string {
|
||||
return input
|
||||
.toLowerCase()
|
||||
.replace(/[^a-zA-Z0-9\s-]/g, '') // Remove invalid characters
|
||||
.replace(/\s+/g, '-') // Replace spaces with dashes
|
||||
.replace(/--+/g, '-') // Replace multiple dashes with single dash
|
||||
.replace(/^-+|-+$/g, '') // Remove leading/trailing dashes
|
||||
.trim();
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate a recipe name from a title
|
||||
*/
|
||||
export function generateRecipeNameFromTitle(title: string): string {
|
||||
if (!title.trim()) {
|
||||
return '';
|
||||
}
|
||||
return transformToRecipeName(title);
|
||||
}
|
||||
|
||||
/**
|
||||
* Common placeholder text for recipe name inputs
|
||||
*/
|
||||
export const RECIPE_NAME_PLACEHOLDER = 'my-awesome-recipe';
|
||||
@@ -1,212 +0,0 @@
|
||||
import React from 'react';
|
||||
import { MessageSquare, AlertCircle } from 'lucide-react';
|
||||
import { defineMessages, useIntl } from '../../i18n';
|
||||
import { Card } from '../ui/card';
|
||||
import { Button } from '../ui/button';
|
||||
import { ScrollArea } from '../ui/scroll-area';
|
||||
import MarkdownContent from '../MarkdownContent';
|
||||
import ToolCallWithResponse from '../ToolCallWithResponse';
|
||||
import ImagePreview from '../ImagePreview';
|
||||
import {
|
||||
getTextAndImageContent,
|
||||
getThinkingContent,
|
||||
ToolRequestMessageContent,
|
||||
ToolResponseMessageContent,
|
||||
type Message,
|
||||
} from '../../types/message';
|
||||
import { formatMessageTimestamp } from '../../utils/timeUtils';
|
||||
|
||||
const i18n = defineMessages({
|
||||
errorLoadingDetails: {
|
||||
id: 'sessionViewComponents.error.loading',
|
||||
defaultMessage: 'Error Loading Session Details',
|
||||
},
|
||||
tryAgain: {
|
||||
id: 'sessionViewComponents.error.tryAgain',
|
||||
defaultMessage: 'Try Again',
|
||||
},
|
||||
noMessages: {
|
||||
id: 'sessionViewComponents.empty.title',
|
||||
defaultMessage: 'No messages found',
|
||||
},
|
||||
noMessagesDesc: {
|
||||
id: 'sessionViewComponents.empty.description',
|
||||
defaultMessage: "This session doesn't contain any messages",
|
||||
},
|
||||
you: {
|
||||
id: 'sessionViewComponents.role.user',
|
||||
defaultMessage: 'You',
|
||||
},
|
||||
goose: {
|
||||
id: 'sessionViewComponents.role.assistant',
|
||||
defaultMessage: 'Goose',
|
||||
},
|
||||
});
|
||||
|
||||
/**
|
||||
* Get tool responses map from messages
|
||||
*/
|
||||
export const getToolResponsesMap = (
|
||||
messages: Message[],
|
||||
messageIndex: number,
|
||||
toolRequests: ToolRequestMessageContent[]
|
||||
) => {
|
||||
const responseMap = new Map();
|
||||
|
||||
if (messageIndex >= 0) {
|
||||
for (let i = messageIndex + 1; i < messages.length; i++) {
|
||||
const responses = messages[i].content
|
||||
.filter((c) => c.type === 'toolResponse')
|
||||
.map((c) => c as ToolResponseMessageContent);
|
||||
|
||||
for (const response of responses) {
|
||||
const matchingRequest = toolRequests.find((req) => req.id === response.id);
|
||||
if (matchingRequest) {
|
||||
responseMap.set(response.id, response);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return responseMap;
|
||||
};
|
||||
|
||||
interface SessionMessagesProps {
|
||||
messages: Message[];
|
||||
isLoading: boolean;
|
||||
error: string | null;
|
||||
onRetry: () => void;
|
||||
}
|
||||
|
||||
/**
|
||||
* Common component for displaying session messages
|
||||
*/
|
||||
export const SessionMessages: React.FC<SessionMessagesProps> = ({
|
||||
messages,
|
||||
isLoading,
|
||||
error,
|
||||
onRetry,
|
||||
}) => {
|
||||
const intl = useIntl();
|
||||
return (
|
||||
<ScrollArea className="h-full w-full">
|
||||
<div className="p-4">
|
||||
<div className="flex flex-col space-y-4">
|
||||
<div className="space-y-4 mb-6">
|
||||
{isLoading ? (
|
||||
<div className="flex justify-center items-center py-12">
|
||||
<div className="animate-spin rounded-full h-8 w-8 border-t-2 border-b-2"></div>
|
||||
</div>
|
||||
) : error ? (
|
||||
<div className="flex flex-col items-center justify-center py-8 text-text-secondary">
|
||||
<div className="text-red-500 mb-4">
|
||||
<AlertCircle size={32} />
|
||||
</div>
|
||||
<p className="text-md mb-2">{intl.formatMessage(i18n.errorLoadingDetails)}</p>
|
||||
<p className="text-sm text-center mb-4">{error}</p>
|
||||
<Button onClick={onRetry} variant="default">
|
||||
{intl.formatMessage(i18n.tryAgain)}
|
||||
</Button>
|
||||
</div>
|
||||
) : messages?.length > 0 ? (
|
||||
messages
|
||||
.map((message, index) => {
|
||||
const { textContent, imagePaths } = getTextAndImageContent(message);
|
||||
const thinkingContent = getThinkingContent(message);
|
||||
|
||||
// Get tool requests from the message
|
||||
const toolRequests = message.content
|
||||
.filter((c) => c.type === 'toolRequest')
|
||||
.map((c) => c as ToolRequestMessageContent);
|
||||
|
||||
// Get tool responses map using the helper function
|
||||
const toolResponsesMap = getToolResponsesMap(messages, index, toolRequests);
|
||||
|
||||
// Skip pure tool response messages for cleaner display
|
||||
const isOnlyToolResponse =
|
||||
message.content.length > 0 &&
|
||||
message.content.every((c) => c.type === 'toolResponse');
|
||||
|
||||
if (message.role === 'user' && isOnlyToolResponse) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return (
|
||||
<Card
|
||||
key={index}
|
||||
className={`p-4 ${
|
||||
message.role === 'user'
|
||||
? 'bg-bgSecondary border border-border-primary'
|
||||
: 'bg-background-secondary'
|
||||
}`}
|
||||
>
|
||||
<div className="flex justify-between items-center mb-2">
|
||||
<span className="font-medium text-text-primary">
|
||||
{message.role === 'user' ? intl.formatMessage(i18n.you) : intl.formatMessage(i18n.goose)}
|
||||
</span>
|
||||
<span className="text-xs text-text-secondary">
|
||||
{formatMessageTimestamp(message.created)}
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<div className="flex flex-col w-full">
|
||||
{/* Thinking content */}
|
||||
{thinkingContent && (
|
||||
<div className="mb-2 text-sm text-gray-400 italic">
|
||||
<MarkdownContent content={thinkingContent} />
|
||||
</div>
|
||||
)}
|
||||
|
||||
{/* Text content */}
|
||||
{textContent && (
|
||||
<div
|
||||
className={`${toolRequests.length > 0 || imagePaths.length > 0 ? 'mb-4' : ''}`}
|
||||
>
|
||||
<MarkdownContent content={textContent} />
|
||||
</div>
|
||||
)}
|
||||
|
||||
{imagePaths.length > 0 && (
|
||||
<div className="flex flex-wrap gap-2 mt-2 mb-2">
|
||||
{imagePaths.map((imagePath, imageIndex) => (
|
||||
<ImagePreview key={imageIndex} src={imagePath} />
|
||||
))}
|
||||
</div>
|
||||
)}
|
||||
|
||||
{/* Tool requests and responses */}
|
||||
{toolRequests.length > 0 && (
|
||||
<div className="goose-message-tool bg-background-primary border border-border-primary dark:border-gray-700 rounded-b-2xl px-4 pt-4 pb-2 mt-1">
|
||||
{toolRequests.map((toolRequest) => (
|
||||
<ToolCallWithResponse
|
||||
// In the session history page, if no tool response found for given request, it means the tool call
|
||||
// is broken or cancelled.
|
||||
isCancelledMessage={
|
||||
toolResponsesMap.get(toolRequest.id) == undefined
|
||||
}
|
||||
isPendingApproval={false}
|
||||
key={toolRequest.id}
|
||||
toolRequest={toolRequest}
|
||||
toolResponse={toolResponsesMap.get(toolRequest.id)}
|
||||
/>
|
||||
))}
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
</Card>
|
||||
);
|
||||
})
|
||||
.filter(Boolean) // Filter out null entries
|
||||
) : (
|
||||
<div className="flex flex-col items-center justify-center py-8 text-text-secondary">
|
||||
<MessageSquare className="w-12 h-12 mb-4" />
|
||||
<p className="text-lg mb-2">{intl.formatMessage(i18n.noMessages)}</p>
|
||||
<p className="text-sm">{intl.formatMessage(i18n.noMessagesDesc)}</p>
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</ScrollArea>
|
||||
);
|
||||
};
|
||||
@@ -82,7 +82,3 @@ export async function removeFromAgent(
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
export function sanitizeName(name: string) {
|
||||
return name.toLowerCase().replace(/-/g, '').replace(/_/g, '').replace(/\s/g, '');
|
||||
}
|
||||
|
||||
@@ -15,25 +15,6 @@ export default interface Model {
|
||||
request_params?: Record<string, unknown> & { thinking_effort?: ThinkingEffort }; // provider-specific request parameters
|
||||
}
|
||||
|
||||
export function createModelStruct(
|
||||
modelName: string,
|
||||
provider: string,
|
||||
id?: number, // Make `id` optional to allow user-defined models
|
||||
lastUsed?: string,
|
||||
alias?: string, // optional model display name
|
||||
subtext?: string
|
||||
): Model {
|
||||
// use the metadata to create a Model
|
||||
return {
|
||||
name: modelName,
|
||||
provider: provider,
|
||||
alias: alias,
|
||||
id: id,
|
||||
lastUsed: lastUsed,
|
||||
subtext: subtext,
|
||||
};
|
||||
}
|
||||
|
||||
export async function getProviderMetadata(providerName: string) {
|
||||
const providers = await acpListProviderDetails();
|
||||
const matches = providers.find((providerMatch) => providerMatch.name === providerName);
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
export default interface ParameterSchema {
|
||||
name: string;
|
||||
is_secret: boolean;
|
||||
required?: boolean;
|
||||
default?: string; // optional default values
|
||||
}
|
||||
@@ -1,13 +0,0 @@
|
||||
import React from 'react';
|
||||
import ParameterSchema from '../interfaces/ParameterSchema';
|
||||
import ProviderSetupFormProps from '../modal/interfaces/ProviderSetupFormProps';
|
||||
|
||||
export default interface ProviderDetails {
|
||||
id: string;
|
||||
name: string;
|
||||
description: string;
|
||||
parameters: ParameterSchema[];
|
||||
getTags?: (name: string) => string[];
|
||||
customForm?: React.ComponentType<ProviderSetupFormProps>;
|
||||
customSubmit?: (e: React.SyntheticEvent) => void;
|
||||
}
|
||||
@@ -1,11 +0,0 @@
|
||||
interface ProviderMetadata {
|
||||
[key: string]: string | number | boolean | null;
|
||||
}
|
||||
|
||||
// runtime data per instance
|
||||
export default interface ProviderState {
|
||||
id: string;
|
||||
name: string;
|
||||
isConfigured: boolean;
|
||||
metadata: ProviderMetadata;
|
||||
}
|
||||
-9
@@ -1,9 +0,0 @@
|
||||
import React from 'react';
|
||||
import ProviderState from '../../interfaces/ProviderState';
|
||||
|
||||
export default interface ProviderSetupFormProps {
|
||||
configValues: { [key: string]: string };
|
||||
setConfigValues: React.Dispatch<React.SetStateAction<{ [key: string]: string }>>;
|
||||
onSubmit: (e: React.FormEvent) => void;
|
||||
provider: ProviderState;
|
||||
}
|
||||
@@ -1,44 +1,13 @@
|
||||
import { defineMessages, useIntl } from '../../../../../i18n';
|
||||
import { defineMessages } from '../../../../../i18n';
|
||||
import type { IntlShape } from 'react-intl';
|
||||
|
||||
const i18n = defineMessages({
|
||||
ollamaNotConfiguredPrefix: {
|
||||
id: 'stringUtils.ollamaNotConfiguredPrefix',
|
||||
defaultMessage: 'To use, either the',
|
||||
},
|
||||
ollamaApp: {
|
||||
id: 'stringUtils.ollamaApp',
|
||||
defaultMessage: 'Ollama app',
|
||||
},
|
||||
ollamaNotConfiguredSuffix: {
|
||||
id: 'stringUtils.ollamaNotConfiguredSuffix',
|
||||
defaultMessage: 'must be installed on your machine and open, or you must enter a value for OLLAMA_HOST.',
|
||||
},
|
||||
configuredProvider: {
|
||||
id: 'stringUtils.configuredProvider',
|
||||
defaultMessage: '{name} provider is configured',
|
||||
},
|
||||
});
|
||||
|
||||
// Functions for string / string-based element creation (e.g. tooltips for each provider, descriptions, etc)
|
||||
export function OllamaNotConfiguredTooltipMessage() {
|
||||
const intl = useIntl();
|
||||
return (
|
||||
<p>
|
||||
{intl.formatMessage(i18n.ollamaNotConfiguredPrefix)}{' '}
|
||||
<a
|
||||
href="https://ollama.com/download"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
className="text-blue-600 underline hover:text-blue-800"
|
||||
>
|
||||
{intl.formatMessage(i18n.ollamaApp)}
|
||||
</a>{' '}
|
||||
{intl.formatMessage(i18n.ollamaNotConfiguredSuffix)}
|
||||
</p>
|
||||
);
|
||||
}
|
||||
|
||||
export function ConfiguredProviderTooltipMessage(intl: IntlShape, name: string) {
|
||||
return intl.formatMessage(i18n.configuredProvider, { name });
|
||||
}
|
||||
|
||||
@@ -1,26 +0,0 @@
|
||||
export type LoadingStatus = 'loading' | 'success' | 'error';
|
||||
export default function Dot({
|
||||
size,
|
||||
loadingStatus,
|
||||
}: {
|
||||
size: number;
|
||||
loadingStatus: LoadingStatus;
|
||||
}) {
|
||||
const backgroundColorClasses = {
|
||||
loading: 'bg-blue-500',
|
||||
success: 'bg-green-600',
|
||||
error: 'bg-red-600',
|
||||
};
|
||||
|
||||
return (
|
||||
<div className={`${loadingStatus === 'loading' ? '' : ''} flex items-center justify-center`}>
|
||||
<div
|
||||
className={`rounded-full ${backgroundColorClasses[loadingStatus] || 'bg-icon-extra-subtle'}`}
|
||||
style={{
|
||||
width: `${size * 2}px`,
|
||||
height: `${size * 2}px`,
|
||||
}}
|
||||
/>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
@@ -1,114 +0,0 @@
|
||||
import React from 'react';
|
||||
import { cn } from '../../utils';
|
||||
|
||||
interface PillProps {
|
||||
children: React.ReactNode;
|
||||
className?: string;
|
||||
variant?: 'default' | 'glass' | 'solid' | 'gradient' | 'glow';
|
||||
size?: 'xs' | 'sm' | 'md' | 'lg';
|
||||
color?: 'blue' | 'green' | 'amber' | 'red' | 'purple' | 'slate';
|
||||
onClick?: () => void;
|
||||
disabled?: boolean;
|
||||
animated?: boolean;
|
||||
}
|
||||
|
||||
export function Pill({
|
||||
children,
|
||||
className,
|
||||
variant = 'glass',
|
||||
size = 'md',
|
||||
color = 'blue',
|
||||
onClick,
|
||||
disabled = false,
|
||||
animated = false,
|
||||
}: PillProps) {
|
||||
const baseStyles =
|
||||
'inline-flex items-center justify-center rounded-full transition-all duration-300 ease-out font-medium';
|
||||
|
||||
const variants = {
|
||||
default: 'bg-background border border-border hover:bg-muted/50',
|
||||
glass:
|
||||
'bg-white/10 dark:bg-black/10 backdrop-blur-xl border border-white/20 dark:border-white/10 shadow-lg shadow-black/5 dark:shadow-black/20 hover:bg-white/15 dark:hover:bg-black/15 hover:shadow-xl',
|
||||
solid: 'bg-background border border-border shadow-md hover:shadow-lg hover:scale-105',
|
||||
gradient: 'bg-gradient-to-r shadow-lg hover:shadow-xl hover:scale-105 border-0',
|
||||
glow: 'shadow-lg hover:shadow-xl hover:scale-105 border-0',
|
||||
};
|
||||
|
||||
const colors = {
|
||||
blue: {
|
||||
gradient: 'from-blue-500 to-blue-600 hover:from-blue-600 hover:to-blue-700 text-white',
|
||||
glow: 'bg-blue-500 hover:bg-blue-600 text-white shadow-blue-500/25 hover:shadow-blue-500/40',
|
||||
glass: 'text-blue-700 dark:text-blue-300 hover:text-blue-800 dark:hover:text-blue-200',
|
||||
},
|
||||
green: {
|
||||
gradient: 'from-green-500 to-green-600 hover:from-green-600 hover:to-green-700 text-white',
|
||||
glow: 'bg-green-500 hover:bg-green-600 text-white shadow-green-500/25 hover:shadow-green-500/40',
|
||||
glass: 'text-green-700 dark:text-green-300 hover:text-green-800 dark:hover:text-green-200',
|
||||
},
|
||||
amber: {
|
||||
gradient: 'from-amber-500 to-amber-600 hover:from-amber-600 hover:to-amber-700 text-white',
|
||||
glow: 'bg-amber-500 hover:bg-amber-600 text-white shadow-amber-500/25 hover:shadow-amber-500/40',
|
||||
glass: 'text-amber-700 dark:text-amber-300 hover:text-amber-800 dark:hover:text-amber-200',
|
||||
},
|
||||
red: {
|
||||
gradient: 'from-red-500 to-red-600 hover:from-red-600 hover:to-red-700 text-white',
|
||||
glow: 'bg-red-500 hover:bg-red-600 text-white shadow-red-500/25 hover:shadow-red-500/40',
|
||||
glass: 'text-red-700 dark:text-red-300 hover:text-red-800 dark:hover:text-red-200',
|
||||
},
|
||||
purple: {
|
||||
gradient:
|
||||
'from-purple-500 to-purple-600 hover:from-purple-600 hover:to-purple-700 text-white',
|
||||
glow: 'bg-purple-500 hover:bg-purple-600 text-white shadow-purple-500/25 hover:shadow-purple-500/40',
|
||||
glass:
|
||||
'text-purple-700 dark:text-purple-300 hover:text-purple-800 dark:hover:text-purple-200',
|
||||
},
|
||||
slate: {
|
||||
gradient: 'from-slate-500 to-slate-600 hover:from-slate-600 hover:to-slate-700 text-white',
|
||||
glow: 'bg-slate-500 hover:bg-slate-600 text-white shadow-slate-500/25 hover:shadow-slate-500/40',
|
||||
glass: 'text-slate-700 dark:text-slate-300 hover:text-slate-800 dark:hover:text-slate-200',
|
||||
},
|
||||
};
|
||||
|
||||
const sizes = {
|
||||
xs: 'px-2 py-1 text-xs gap-1',
|
||||
sm: 'px-3 py-1.5 text-sm gap-1.5',
|
||||
md: 'px-4 py-2 text-sm gap-2',
|
||||
lg: 'px-6 py-3 text-base gap-3',
|
||||
};
|
||||
|
||||
const animatedStyles = animated ? 'animate-pulse' : '';
|
||||
|
||||
const disabledStyles = disabled
|
||||
? 'opacity-50 cursor-not-allowed pointer-events-none'
|
||||
: onClick
|
||||
? 'cursor-pointer hover:scale-105 active:scale-95'
|
||||
: '';
|
||||
|
||||
const colorStyles =
|
||||
variant === 'gradient'
|
||||
? colors[color].gradient
|
||||
: variant === 'glow'
|
||||
? colors[color].glow
|
||||
: variant === 'glass'
|
||||
? colors[color].glass
|
||||
: '';
|
||||
|
||||
return (
|
||||
<div
|
||||
className={cn(
|
||||
baseStyles,
|
||||
variants[variant],
|
||||
sizes[size],
|
||||
colorStyles,
|
||||
disabledStyles,
|
||||
animatedStyles,
|
||||
className
|
||||
)}
|
||||
onClick={onClick && !disabled ? onClick : undefined}
|
||||
>
|
||||
{children}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
export default Pill;
|
||||
@@ -56,14 +56,4 @@ function CardContent({ className, ...props }: React.ComponentProps<'div'>) {
|
||||
return <div data-slot="card-content" className={cn('px-6', className)} {...props} />;
|
||||
}
|
||||
|
||||
function CardFooter({ className, ...props }: React.ComponentProps<'div'>) {
|
||||
return (
|
||||
<div
|
||||
data-slot="card-footer"
|
||||
className={cn('flex items-center px-6 [.border-t]:pt-6', className)}
|
||||
{...props}
|
||||
/>
|
||||
);
|
||||
}
|
||||
|
||||
export { Card, CardHeader, CardFooter, CardTitle, CardAction, CardDescription, CardContent };
|
||||
export { Card, CardHeader, CardTitle, CardAction, CardDescription, CardContent };
|
||||
|
||||
@@ -26,10 +26,6 @@ function DialogPortal({ ...props }: React.ComponentProps<typeof DialogPrimitive.
|
||||
return <DialogPrimitive.Portal data-slot="dialog-portal" {...props} />;
|
||||
}
|
||||
|
||||
function DialogClose({ ...props }: React.ComponentProps<typeof DialogPrimitive.Close>) {
|
||||
return <DialogPrimitive.Close data-slot="dialog-close" {...props} />;
|
||||
}
|
||||
|
||||
const DialogOverlay = React.forwardRef<
|
||||
React.ElementRef<typeof DialogPrimitive.Overlay>,
|
||||
React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>
|
||||
@@ -118,7 +114,6 @@ function DialogDescription({
|
||||
|
||||
export {
|
||||
Dialog,
|
||||
DialogClose,
|
||||
DialogContent,
|
||||
DialogDescription,
|
||||
DialogFooter,
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
import * as React from 'react';
|
||||
import * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';
|
||||
import { CheckIcon, ChevronRightIcon, CircleIcon } from 'lucide-react';
|
||||
import { CircleIcon } from 'lucide-react';
|
||||
|
||||
import { cn } from '../../utils';
|
||||
|
||||
@@ -10,12 +10,6 @@ function DropdownMenu({ ...props }: React.ComponentProps<typeof DropdownMenuPrim
|
||||
return <DropdownMenuPrimitive.Root data-slot="dropdown-menu" {...props} />;
|
||||
}
|
||||
|
||||
function DropdownMenuPortal({
|
||||
...props
|
||||
}: React.ComponentProps<typeof DropdownMenuPrimitive.Portal>) {
|
||||
return <DropdownMenuPrimitive.Portal data-slot="dropdown-menu-portal" {...props} />;
|
||||
}
|
||||
|
||||
function DropdownMenuTrigger({
|
||||
...props
|
||||
}: React.ComponentProps<typeof DropdownMenuPrimitive.Trigger>) {
|
||||
@@ -42,10 +36,6 @@ function DropdownMenuContent({
|
||||
);
|
||||
}
|
||||
|
||||
function DropdownMenuGroup({ ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Group>) {
|
||||
return <DropdownMenuPrimitive.Group data-slot="dropdown-menu-group" {...props} />;
|
||||
}
|
||||
|
||||
function DropdownMenuItem({
|
||||
className,
|
||||
inset,
|
||||
@@ -69,32 +59,6 @@ function DropdownMenuItem({
|
||||
);
|
||||
}
|
||||
|
||||
function DropdownMenuCheckboxItem({
|
||||
className,
|
||||
children,
|
||||
checked,
|
||||
...props
|
||||
}: React.ComponentProps<typeof DropdownMenuPrimitive.CheckboxItem>) {
|
||||
return (
|
||||
<DropdownMenuPrimitive.CheckboxItem
|
||||
data-slot="dropdown-menu-checkbox-item"
|
||||
className={cn(
|
||||
"focus:bg-background-secondary focus:text-text-secondary relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
|
||||
className
|
||||
)}
|
||||
checked={checked}
|
||||
{...props}
|
||||
>
|
||||
<span className="pointer-events-none absolute left-2 flex size-3.5 items-center justify-center">
|
||||
<DropdownMenuPrimitive.ItemIndicator>
|
||||
<CheckIcon className="size-4" />
|
||||
</DropdownMenuPrimitive.ItemIndicator>
|
||||
</span>
|
||||
{children}
|
||||
</DropdownMenuPrimitive.CheckboxItem>
|
||||
);
|
||||
}
|
||||
|
||||
function DropdownMenuRadioGroup({
|
||||
...props
|
||||
}: React.ComponentProps<typeof DropdownMenuPrimitive.RadioGroup>) {
|
||||
@@ -155,74 +119,13 @@ function DropdownMenuSeparator({
|
||||
);
|
||||
}
|
||||
|
||||
function DropdownMenuShortcut({ className, ...props }: React.ComponentProps<'span'>) {
|
||||
return (
|
||||
<span
|
||||
data-slot="dropdown-menu-shortcut"
|
||||
className={cn('text-text-secondary ml-auto text-xs tracking-widest', className)}
|
||||
{...props}
|
||||
/>
|
||||
);
|
||||
}
|
||||
|
||||
function DropdownMenuSub({ ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Sub>) {
|
||||
return <DropdownMenuPrimitive.Sub data-slot="dropdown-menu-sub" {...props} />;
|
||||
}
|
||||
|
||||
function DropdownMenuSubTrigger({
|
||||
className,
|
||||
inset,
|
||||
children,
|
||||
...props
|
||||
}: React.ComponentProps<typeof DropdownMenuPrimitive.SubTrigger> & {
|
||||
inset?: boolean;
|
||||
}) {
|
||||
return (
|
||||
<DropdownMenuPrimitive.SubTrigger
|
||||
data-slot="dropdown-menu-sub-trigger"
|
||||
data-inset={inset}
|
||||
className={cn(
|
||||
'focus:bg-background-secondary focus:text-text-secondary data-[state=open]:bg-background-secondary data-[state=open]:text-text-secondary flex cursor-default items-center rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[inset]:pl-8',
|
||||
className
|
||||
)}
|
||||
{...props}
|
||||
>
|
||||
{children}
|
||||
<ChevronRightIcon className="ml-auto size-4" />
|
||||
</DropdownMenuPrimitive.SubTrigger>
|
||||
);
|
||||
}
|
||||
|
||||
function DropdownMenuSubContent({
|
||||
className,
|
||||
...props
|
||||
}: React.ComponentProps<typeof DropdownMenuPrimitive.SubContent>) {
|
||||
return (
|
||||
<DropdownMenuPrimitive.SubContent
|
||||
data-slot="dropdown-menu-sub-content"
|
||||
className={cn(
|
||||
'bg-background-primary text-text-primary data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-hidden rounded-md border p-1 shadow-md',
|
||||
className
|
||||
)}
|
||||
{...props}
|
||||
/>
|
||||
);
|
||||
}
|
||||
|
||||
export {
|
||||
DropdownMenu,
|
||||
DropdownMenuPortal,
|
||||
DropdownMenuTrigger,
|
||||
DropdownMenuContent,
|
||||
DropdownMenuGroup,
|
||||
DropdownMenuLabel,
|
||||
DropdownMenuItem,
|
||||
DropdownMenuCheckboxItem,
|
||||
DropdownMenuRadioGroup,
|
||||
DropdownMenuRadioItem,
|
||||
DropdownMenuSeparator,
|
||||
DropdownMenuShortcut,
|
||||
DropdownMenuSub,
|
||||
DropdownMenuSubTrigger,
|
||||
DropdownMenuSubContent,
|
||||
};
|
||||
|
||||
@@ -1,158 +1,3 @@
|
||||
export const BotIcon = () => {
|
||||
return (
|
||||
<svg
|
||||
height="16"
|
||||
strokeLinejoin="round"
|
||||
viewBox="0 0 16 16"
|
||||
width="16"
|
||||
style={{ color: 'currentcolor' }}
|
||||
>
|
||||
<path
|
||||
fillRule="evenodd"
|
||||
clipRule="evenodd"
|
||||
d="M8.75 2.79933C9.19835 2.53997 9.5 2.05521 9.5 1.5C9.5 0.671573 8.82843 0 8 0C7.17157 0 6.5 0.671573 6.5 1.5C6.5 2.05521 6.80165 2.53997 7.25 2.79933V5H7C4.027 5 1.55904 7.16229 1.08296 10H0V13H1V14.5V16H2.5H13.5H15V14.5V13H16V10H14.917C14.441 7.16229 11.973 5 9 5H8.75V2.79933ZM7 6.5C4.51472 6.5 2.5 8.51472 2.5 11V14.5H13.5V11C13.5 8.51472 11.4853 6.5 9 6.5H7ZM7.25 11.25C7.25 12.2165 6.4665 13 5.5 13C4.5335 13 3.75 12.2165 3.75 11.25C3.75 10.2835 4.5335 9.5 5.5 9.5C6.4665 9.5 7.25 10.2835 7.25 11.25ZM10.5 13C11.4665 13 12.25 12.2165 12.25 11.25C12.25 10.2835 11.4665 9.5 10.5 9.5C9.5335 9.5 8.75 10.2835 8.75 11.25C8.75 12.2165 9.5335 13 10.5 13Z"
|
||||
fill="currentColor"
|
||||
></path>
|
||||
</svg>
|
||||
);
|
||||
};
|
||||
|
||||
export const UserIcon = () => {
|
||||
return (
|
||||
<svg
|
||||
data-testid="geist-icon"
|
||||
height="16"
|
||||
strokeLinejoin="round"
|
||||
viewBox="0 0 16 16"
|
||||
width="16"
|
||||
style={{ color: 'currentcolor' }}
|
||||
>
|
||||
<path
|
||||
fillRule="evenodd"
|
||||
clipRule="evenodd"
|
||||
d="M7.75 0C5.95507 0 4.5 1.45507 4.5 3.25V3.75C4.5 5.54493 5.95507 7 7.75 7H8.25C10.0449 7 11.5 5.54493 11.5 3.75V3.25C11.5 1.45507 10.0449 0 8.25 0H7.75ZM6 3.25C6 2.2835 6.7835 1.5 7.75 1.5H8.25C9.2165 1.5 10 2.2835 10 3.25V3.75C10 4.7165 9.2165 5.5 8.25 5.5H7.75C6.7835 5.5 6 4.7165 6 3.75V3.25ZM2.5 14.5V13.1709C3.31958 11.5377 4.99308 10.5 6.82945 10.5H9.17055C11.0069 10.5 12.6804 11.5377 13.5 13.1709V14.5H2.5ZM6.82945 9C4.35483 9 2.10604 10.4388 1.06903 12.6857L1 12.8353V13V15.25V16H1.75H14.25H15V15.25V13V12.8353L14.931 12.6857C13.894 10.4388 11.6452 9 9.17055 9H6.82945Z"
|
||||
fill="currentColor"
|
||||
></path>
|
||||
</svg>
|
||||
);
|
||||
};
|
||||
|
||||
export const AttachmentIcon = () => {
|
||||
return (
|
||||
<svg
|
||||
height="16"
|
||||
strokeLinejoin="round"
|
||||
viewBox="0 0 16 16"
|
||||
width="16"
|
||||
style={{ color: 'currentcolor' }}
|
||||
>
|
||||
<path
|
||||
fillRule="evenodd"
|
||||
clipRule="evenodd"
|
||||
d="M14.5 6.5V13.5C14.5 14.8807 13.3807 16 12 16H4C2.61929 16 1.5 14.8807 1.5 13.5V1.5V0H3H8H9.08579C9.351 0 9.60536 0.105357 9.79289 0.292893L14.2071 4.70711C14.3946 4.89464 14.5 5.149 14.5 5.41421V6.5ZM13 6.5V13.5C13 14.0523 12.5523 14.5 12 14.5H4C3.44772 14.5 3 14.0523 3 13.5V1.5H8V5V6.5H9.5H13ZM9.5 2.12132V5H12.3787L9.5 2.12132Z"
|
||||
fill="currentColor"
|
||||
></path>
|
||||
</svg>
|
||||
);
|
||||
};
|
||||
|
||||
export const VercelIcon = ({ size = 17 }) => {
|
||||
return (
|
||||
<svg
|
||||
height={size}
|
||||
strokeLinejoin="round"
|
||||
viewBox="0 0 16 16"
|
||||
width={size}
|
||||
style={{ color: 'currentcolor' }}
|
||||
>
|
||||
<path fillRule="evenodd" clipRule="evenodd" d="M8 1L16 15H0L8 1Z" fill="currentColor"></path>
|
||||
</svg>
|
||||
);
|
||||
};
|
||||
|
||||
export const MasonryIcon = () => {
|
||||
return (
|
||||
<svg
|
||||
height="16"
|
||||
strokeLinejoin="round"
|
||||
viewBox="0 0 16 16"
|
||||
width="16"
|
||||
style={{ color: 'currentcolor' }}
|
||||
>
|
||||
<path
|
||||
fillRule="evenodd"
|
||||
clipRule="evenodd"
|
||||
d="M2.5 6.5V2.5H5.5V6.5H2.5ZM1 2C1 1.44772 1.44772 1 2 1H6C6.55228 1 7 1.44772 7 2V7C7 7.55228 6.55228 8 6 8H2C1.44772 8 1 7.55228 1 7V2ZM2.5 13.5V11.5H5.5V13.5H2.5ZM1 11C1 10.4477 1.44772 10 2 10H6C6.55228 10 7 10.4477 7 11V14C7 14.5523 6.55228 15 6 15H2C1.44772 15 1 14.5523 1 14V11ZM10.5 2.5V4.5H13.5V2.5H10.5ZM10 1C9.44772 1 9 1.44772 9 2V5C9 5.55228 9.44772 6 10 6H14C14.5523 6 15 5.55228 15 5V2C15 1.44772 14.5523 1 14 1H10ZM13.5 13.5H10.5V9.5H13.5V13.5ZM9 9C9 8.44772 9.44772 8 10 8H14C14.5523 8 15 8.44772 15 9V14C15 14.5523 14.5523 15 14 15H10C9.44772 15 9 14.5523 9 14V9Z"
|
||||
fill="currentColor"
|
||||
></path>
|
||||
</svg>
|
||||
);
|
||||
};
|
||||
|
||||
export const GitIcon = () => {
|
||||
return (
|
||||
<svg
|
||||
height="16"
|
||||
strokeLinejoin="round"
|
||||
viewBox="0 0 16 16"
|
||||
width="16"
|
||||
style={{ color: 'currentcolor' }}
|
||||
>
|
||||
<g clipPath="url(#clip0_872_3147)">
|
||||
<path
|
||||
fillRule="evenodd"
|
||||
clipRule="evenodd"
|
||||
d="M8 0C3.58 0 0 3.57879 0 7.99729C0 11.5361 2.29 14.5251 5.47 15.5847C5.87 15.6547 6.02 15.4148 6.02 15.2049C6.02 15.0149 6.01 14.3851 6.01 13.7154C4 14.0852 3.48 13.2255 3.32 12.7757C3.23 12.5458 2.84 11.836 2.5 11.6461C2.22 11.4961 1.82 11.1262 2.49 11.1162C3.12 11.1062 3.57 11.696 3.72 11.936C4.44 13.1455 5.59 12.8057 6.05 12.5957C6.12 12.0759 6.33 11.726 6.56 11.5261C4.78 11.3262 2.92 10.6364 2.92 7.57743C2.92 6.70773 3.23 5.98797 3.74 5.42816C3.66 5.22823 3.38 4.40851 3.82 3.30888C3.82 3.30888 4.49 3.09895 6.02 4.1286C6.66 3.94866 7.34 3.85869 8.02 3.85869C8.7 3.85869 9.38 3.94866 10.02 4.1286C11.55 3.08895 12.22 3.30888 12.22 3.30888C12.66 4.40851 12.38 5.22823 12.3 5.42816C12.81 5.98797 13.12 6.69773 13.12 7.57743C13.12 10.6464 11.25 11.3262 9.47 11.5261C9.76 11.776 10.01 12.2558 10.01 13.0056C10.01 14.0752 10 14.9349 10 15.2049C10 15.4148 10.15 15.6647 10.55 15.5847C12.1381 15.0488 13.5182 14.0284 14.4958 12.6673C15.4735 11.3062 15.9996 9.67293 16 7.99729C16 3.57879 12.42 0 8 0Z"
|
||||
fill="currentColor"
|
||||
></path>
|
||||
</g>
|
||||
<defs>
|
||||
<clipPath id="clip0_872_3147">
|
||||
<rect width="16" height="16" fill="white"></rect>
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
||||
);
|
||||
};
|
||||
|
||||
export const BoxIcon = ({ size = 16 }: { size: number }) => {
|
||||
return (
|
||||
<svg
|
||||
height={size}
|
||||
strokeLinejoin="round"
|
||||
viewBox="0 0 16 16"
|
||||
width={size}
|
||||
style={{ color: 'currentcolor' }}
|
||||
>
|
||||
<path
|
||||
fillRule="evenodd"
|
||||
clipRule="evenodd"
|
||||
d="M8 0.154663L8.34601 0.334591L14.596 3.58459L15 3.79466V4.25V11.75V12.2053L14.596 12.4154L8.34601 15.6654L8 15.8453L7.65399 15.6654L1.40399 12.4154L1 12.2053V11.75V4.25V3.79466L1.40399 3.58459L7.65399 0.334591L8 0.154663ZM2.5 11.2947V5.44058L7.25 7.81559V13.7647L2.5 11.2947ZM8.75 13.7647L13.5 11.2947V5.44056L8.75 7.81556V13.7647ZM8 1.84534L12.5766 4.22519L7.99998 6.51352L3.42335 4.2252L8 1.84534Z"
|
||||
fill="currentColor"
|
||||
></path>
|
||||
</svg>
|
||||
);
|
||||
};
|
||||
|
||||
export const HomeIcon = ({ size = 16 }: { size: number }) => {
|
||||
return (
|
||||
<svg
|
||||
height={size}
|
||||
strokeLinejoin="round"
|
||||
viewBox="0 0 16 16"
|
||||
width={size}
|
||||
style={{ color: 'currentcolor' }}
|
||||
>
|
||||
<path
|
||||
fillRule="evenodd"
|
||||
clipRule="evenodd"
|
||||
d="M12.5 6.56062L8.00001 2.06062L3.50001 6.56062V13.5L6.00001 13.5V11C6.00001 9.89539 6.89544 8.99996 8.00001 8.99996C9.10458 8.99996 10 9.89539 10 11V13.5L12.5 13.5V6.56062ZM13.78 5.71933L8.70711 0.646409C8.31659 0.255886 7.68342 0.255883 7.2929 0.646409L2.21987 5.71944C2.21974 5.71957 2.21961 5.7197 2.21949 5.71982L0.469676 7.46963L-0.0606537 7.99996L1.00001 9.06062L1.53034 8.53029L2.00001 8.06062V14.25V15H2.75001L6.00001 15H7.50001H8.50001H10L13.25 15H14V14.25V8.06062L14.4697 8.53029L15 9.06062L16.0607 7.99996L15.5303 7.46963L13.7806 5.71993C13.7804 5.71973 13.7802 5.71953 13.78 5.71933ZM8.50001 11V13.5H7.50001V11C7.50001 10.7238 7.72386 10.5 8.00001 10.5C8.27615 10.5 8.50001 10.7238 8.50001 11Z"
|
||||
fill="currentColor"
|
||||
></path>
|
||||
</svg>
|
||||
);
|
||||
};
|
||||
|
||||
export const GPSIcon = ({ size = 16 }: { size: number }) => {
|
||||
return (
|
||||
<svg
|
||||
@@ -173,45 +18,3 @@ export const GPSIcon = ({ size = 16 }: { size: number }) => {
|
||||
</svg>
|
||||
);
|
||||
};
|
||||
|
||||
export const InvoiceIcon = ({ size = 16 }: { size: number }) => {
|
||||
return (
|
||||
<svg
|
||||
height={size}
|
||||
strokeLinejoin="round"
|
||||
viewBox="0 0 16 16"
|
||||
width={size}
|
||||
style={{ color: 'currentcolor' }}
|
||||
>
|
||||
<path
|
||||
fillRule="evenodd"
|
||||
clipRule="evenodd"
|
||||
d="M13 15.1L12 14.5L10.1524 15.8857C10.0621 15.9534 9.93791 15.9534 9.8476 15.8857L8 14.5L6.14377 15.8922C6.05761 15.9568 5.94008 15.9601 5.85047 15.9003L3.75 14.5L3 15L2.83257 15.1116L1.83633 15.7758L1.68656 15.8756C1.60682 15.9288 1.5 15.8716 1.5 15.7758V15.5958V14.3985V14.1972V1.5V0H3H8H9.08579C9.351 0 9.60536 0.105357 9.79289 0.292893L14.2071 4.70711C14.3946 4.89464 14.5 5.149 14.5 5.41421V6.5V14.2507V14.411V15.5881V15.7881C14.5 15.8813 14.3982 15.9389 14.3183 15.891L14.1468 15.7881L13.1375 15.1825L13 15.1ZM12.3787 5L9.5 2.12132V5H12.3787ZM8 1.5V5V6.5H9.5H13V13.3507L12.7717 13.2138L11.9069 12.6948L11.1 13.3L10 14.125L8.9 13.3L8 12.625L7.1 13.3L5.94902 14.1632L4.58205 13.2519L3.75 12.6972L3 13.1972V1.5H8Z"
|
||||
fill="currentColor"
|
||||
></path>
|
||||
</svg>
|
||||
);
|
||||
};
|
||||
|
||||
export const Bird = () => (
|
||||
<svg width="45" height="39" viewBox="0 0 45 39" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path
|
||||
fillRule="evenodd"
|
||||
clipRule="evenodd"
|
||||
d="M26.4047 17.9373C27.3193 17.5522 28.3302 17.3596 29.293 17.6003C29.7791 17.7218 30.4615 18.1747 31.111 18.6057C31.748 19.0283 32.3532 19.43 32.7107 19.4777C33.0285 19.52 33.4581 19.4971 33.8805 19.4746C34.4182 19.446 34.9443 19.418 35.2139 19.5258C35.4268 19.611 35.6304 19.9223 35.8537 20.2638C36.1351 20.6942 36.4479 21.1727 36.8506 21.3069C37.0202 21.3634 37.2005 21.412 37.3721 21.4583C37.9307 21.6088 38.3967 21.7343 38.1021 22.0289C37.717 22.414 35.3583 22.6547 35.1176 22.5585C34.9949 22.5094 35.0098 22.3852 35.0284 22.2306C35.0463 22.082 35.0676 21.9053 34.9732 21.7401C34.8829 21.5821 34.708 21.3289 34.5426 21.0896C34.3554 20.8185 34.1804 20.5652 34.1549 20.4885C33.9623 20.3441 33.144 20.1997 33.144 20.3923C33.144 20.5848 33.3847 21.9808 33.5772 22.1734C33.6063 22.2024 33.6354 22.2304 33.6628 22.2568C33.8169 22.4051 33.9187 22.503 33.6735 22.4622C33.3847 22.414 31.748 21.7401 31.2185 21.2106C30.689 20.6811 29.9188 19.959 29.2448 19.959C28.871 19.959 27.9491 21.1144 27.0625 22.2255C26.3509 23.1174 25.662 23.9808 25.2976 24.1951C24.4792 24.6765 21.7835 25.7837 20.2431 25.8799C18.7027 25.9762 16.8254 25.9762 16.7772 25.4948C16.7291 25.0135 16.9217 24.5802 17.6437 24.6765C18.3658 24.7728 24.2867 23.6656 25.9234 21.9808C26.3025 21.5905 26.612 21.2802 26.8612 21.0304C27.6877 20.2016 27.8524 20.0365 27.7044 19.8146C27.6538 19.7386 27.5032 19.5927 27.3183 19.4135C26.8006 18.9119 26.0145 18.1501 26.4047 17.9373ZM34.8264 20.5249C34.8275 20.5419 34.8288 20.5615 34.8288 20.5848C34.8288 20.7292 34.8769 20.8255 35.0213 20.8736C35.1657 20.9218 35.262 20.7292 35.2139 20.5848C35.1657 20.4404 35.1176 20.296 35.0213 20.296C34.8195 20.4171 34.8207 20.4366 34.8264 20.5249Z"
|
||||
fill="#7F7F7F"
|
||||
/>
|
||||
<path
|
||||
d="M25.8272 13.4604C26.5492 14.1343 25.8272 17.167 25.779 17.3595C25.5615 18.2298 24.0352 17.619 23.565 16.8551C23.3126 16.4449 23.1018 15.9636 23.0833 15.4822C23.0352 14.2306 22.3131 13.0272 22.1206 12.4495C21.928 11.8719 19.5212 10.9573 18.414 10.6684C17.3068 10.3796 17.1143 8.3097 17.2587 8.02087C17.4031 7.73205 21.4948 10.524 23.0833 11.2461C24.6719 11.9681 25.1051 12.7865 25.8272 13.4604Z"
|
||||
fill="#7F7F7F"
|
||||
/>
|
||||
<path
|
||||
d="M16.5848 24.0024C16.2478 24.0024 16.0553 24.195 15.6702 24.8208C15.253 25.3824 14.3704 26.5441 14.1779 26.6981C13.9372 26.8907 13.7447 26.5056 13.0707 26.4575C12.3968 26.4093 11.771 27.5646 11.4822 27.9016C11.1934 28.2385 12.7819 28.3348 14.3704 27.5646C15.959 26.7944 16.8255 24.7245 16.9699 24.3875C17.1143 24.0506 16.9217 24.0024 16.5848 24.0024Z"
|
||||
fill="#7F7F7F"
|
||||
/>
|
||||
<path
|
||||
d="M20.2432 12.3532C21.4948 12.8827 21.8317 13.6529 21.8799 14.8563C21.9912 17.6399 22.2769 20.3073 19.7272 21.4296C17.9018 22.2331 16.1005 22.9204 15.7664 23.0397C15.0925 23.2804 14.6593 23.5211 14.3704 23.9062C14.0816 24.2913 14.5149 24.3876 14.7555 24.7727C14.9962 25.1578 14.0816 25.6391 13.2151 25.591C12.3487 25.5429 11.1934 24.8208 11.1452 24.195C11.0971 23.5692 13.4558 22.9434 14.3704 22.7027C15.2851 22.4621 16.5848 21.1623 17.4031 20.8254C18.2214 20.4884 17.3068 20.681 17.0661 20.4403C16.8255 20.1996 16.6329 19.0924 16.5848 18.5629C16.5366 18.0334 15.959 17.1669 15.7664 16.9262C15.5739 16.6856 18.1733 16.83 18.2696 16.6374C18.3659 16.4449 16.5848 16.493 15.4295 16.3005C14.2742 16.1079 13.7928 15.3377 13.6484 15.097C13.504 14.8563 17.7401 15.5784 17.9808 15.3377C18.2214 15.097 16.1997 15.097 15.2369 14.9045C14.2742 14.7119 13.3114 14.5194 12.83 14.1824C12.3487 13.8455 11.9154 13.0271 12.3005 13.2197C12.6856 13.4122 17.4031 14.2787 17.7401 14.0861C18.077 13.8936 12.9263 12.7383 12.1561 12.4495C11.3859 12.1606 10.712 10.8128 10.6157 10.524C10.5194 10.2351 11.7229 11.1016 12.3005 11.2942L12.3005 11.2942C12.8782 11.4867 16.9217 12.8346 17.4031 12.7383C17.8845 12.642 13.3596 11.0535 12.0598 10.524C10.7601 9.99446 10.375 8.5022 10.2788 8.1171C10.1825 7.732 11.3859 8.55034 12.0598 8.98357C12.7338 9.41681 18.9916 11.8237 20.2432 12.3532Z"
|
||||
fill="#7F7F7F"
|
||||
/>
|
||||
</svg>
|
||||
);
|
||||
|
||||
@@ -1,28 +0,0 @@
|
||||
'use client';
|
||||
|
||||
import * as React from 'react';
|
||||
import * as SeparatorPrimitive from '@radix-ui/react-separator';
|
||||
|
||||
import { cn } from '../../utils';
|
||||
|
||||
function Separator({
|
||||
className,
|
||||
orientation = 'horizontal',
|
||||
decorative = true,
|
||||
...props
|
||||
}: React.ComponentProps<typeof SeparatorPrimitive.Root>) {
|
||||
return (
|
||||
<SeparatorPrimitive.Root
|
||||
data-slot="separator-root"
|
||||
decorative={decorative}
|
||||
orientation={orientation}
|
||||
className={cn(
|
||||
'bg-border-primary shrink-0 data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px',
|
||||
className
|
||||
)}
|
||||
{...props}
|
||||
/>
|
||||
);
|
||||
}
|
||||
|
||||
export { Separator };
|
||||
@@ -1,139 +0,0 @@
|
||||
'use client';
|
||||
|
||||
import * as React from 'react';
|
||||
import * as SheetPrimitive from '@radix-ui/react-dialog';
|
||||
import { XIcon } from 'lucide-react';
|
||||
|
||||
import { cn } from '../../utils';
|
||||
import { defineMessages, useIntl } from '../../i18n';
|
||||
|
||||
const i18n = defineMessages({
|
||||
close: {
|
||||
id: 'sheet.close',
|
||||
defaultMessage: 'Close',
|
||||
},
|
||||
});
|
||||
|
||||
function Sheet({ ...props }: React.ComponentProps<typeof SheetPrimitive.Root>) {
|
||||
return <SheetPrimitive.Root data-slot="sheet" {...props} />;
|
||||
}
|
||||
|
||||
function SheetTrigger({ ...props }: React.ComponentProps<typeof SheetPrimitive.Trigger>) {
|
||||
return <SheetPrimitive.Trigger data-slot="sheet-trigger" {...props} />;
|
||||
}
|
||||
|
||||
function SheetClose({ ...props }: React.ComponentProps<typeof SheetPrimitive.Close>) {
|
||||
return <SheetPrimitive.Close data-slot="sheet-close" {...props} />;
|
||||
}
|
||||
|
||||
function SheetPortal({ ...props }: React.ComponentProps<typeof SheetPrimitive.Portal>) {
|
||||
return <SheetPrimitive.Portal data-slot="sheet-portal" {...props} />;
|
||||
}
|
||||
|
||||
const SheetOverlay = React.forwardRef<
|
||||
React.ElementRef<typeof SheetPrimitive.Overlay>,
|
||||
React.ComponentPropsWithoutRef<typeof SheetPrimitive.Overlay>
|
||||
>(({ className, ...props }, ref) => (
|
||||
<SheetPrimitive.Overlay
|
||||
ref={ref}
|
||||
data-slot="sheet-overlay"
|
||||
className={cn(
|
||||
'data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50',
|
||||
className
|
||||
)}
|
||||
{...props}
|
||||
/>
|
||||
));
|
||||
SheetOverlay.displayName = SheetPrimitive.Overlay.displayName;
|
||||
|
||||
function SheetContent({
|
||||
className,
|
||||
children,
|
||||
side = 'right',
|
||||
...props
|
||||
}: React.ComponentProps<typeof SheetPrimitive.Content> & {
|
||||
side?: 'top' | 'right' | 'bottom' | 'left';
|
||||
}) {
|
||||
const intl = useIntl();
|
||||
return (
|
||||
<SheetPortal>
|
||||
<SheetOverlay />
|
||||
<SheetPrimitive.Content
|
||||
data-slot="sheet-content"
|
||||
className={cn(
|
||||
'bg-background-primary data-[state=open]:animate-in data-[state=closed]:animate-out fixed z-50 flex flex-col gap-4 transition ease-in-out data-[state=closed]:duration-300 data-[state=open]:duration-500 shadow-lg',
|
||||
side === 'right' &&
|
||||
'data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right inset-y-0 right-0 h-full w-3/4 border-l sm:max-w-sm',
|
||||
side === 'left' &&
|
||||
'data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left inset-y-0 left-0 h-full w-3/4 border-r sm:max-w-sm',
|
||||
side === 'top' &&
|
||||
'data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top inset-x-0 top-0 h-auto border-b',
|
||||
side === 'bottom' &&
|
||||
'data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom inset-x-0 bottom-0 h-auto border-t',
|
||||
className
|
||||
)}
|
||||
{...props}
|
||||
>
|
||||
{children}
|
||||
<SheetPrimitive.Close className="ring-offset-background focus:ring-ring data-[state=open]:bg-background-secondary absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none">
|
||||
<XIcon className="size-4" />
|
||||
<span className="sr-only">{intl.formatMessage(i18n.close)}</span>
|
||||
</SheetPrimitive.Close>
|
||||
</SheetPrimitive.Content>
|
||||
</SheetPortal>
|
||||
);
|
||||
}
|
||||
|
||||
function SheetHeader({ className, ...props }: React.ComponentProps<'div'>) {
|
||||
return (
|
||||
<div
|
||||
data-slot="sheet-header"
|
||||
className={cn('flex flex-col gap-1.5 p-4', className)}
|
||||
{...props}
|
||||
/>
|
||||
);
|
||||
}
|
||||
|
||||
function SheetFooter({ className, ...props }: React.ComponentProps<'div'>) {
|
||||
return (
|
||||
<div
|
||||
data-slot="sheet-footer"
|
||||
className={cn('mt-auto flex flex-col gap-2 p-4', className)}
|
||||
{...props}
|
||||
/>
|
||||
);
|
||||
}
|
||||
|
||||
function SheetTitle({ className, ...props }: React.ComponentProps<typeof SheetPrimitive.Title>) {
|
||||
return (
|
||||
<SheetPrimitive.Title
|
||||
data-slot="sheet-title"
|
||||
className={cn('text-text-primary font-medium', className)}
|
||||
{...props}
|
||||
/>
|
||||
);
|
||||
}
|
||||
|
||||
function SheetDescription({
|
||||
className,
|
||||
...props
|
||||
}: React.ComponentProps<typeof SheetPrimitive.Description>) {
|
||||
return (
|
||||
<SheetPrimitive.Description
|
||||
data-slot="sheet-description"
|
||||
className={cn('text-text-secondary text-sm', className)}
|
||||
{...props}
|
||||
/>
|
||||
);
|
||||
}
|
||||
|
||||
export {
|
||||
Sheet,
|
||||
SheetTrigger,
|
||||
SheetClose,
|
||||
SheetContent,
|
||||
SheetHeader,
|
||||
SheetFooter,
|
||||
SheetTitle,
|
||||
SheetDescription,
|
||||
};
|
||||
@@ -7,11 +7,9 @@ export enum AppEvents {
|
||||
SESSION_DELETED = 'session-deleted',
|
||||
SESSION_RENAMED = 'session-renamed',
|
||||
SESSION_FORKED = 'session-forked',
|
||||
SESSION_NEEDS_NAME_UPDATE = 'session-needs-name-update',
|
||||
SESSION_STATUS_UPDATE = 'session-status-update',
|
||||
ADD_ACTIVE_SESSION = 'add-active-session',
|
||||
CLEAR_INITIAL_MESSAGE = 'clear-initial-message',
|
||||
MESSAGE_STREAM_FINISHED = 'message-stream-finished',
|
||||
SCROLL_CHAT_TO_BOTTOM = 'scroll-chat-to-bottom',
|
||||
HIDE_ALERT_POPOVER = 'hide-alert-popover',
|
||||
RESPONSE_STYLE_CHANGED = 'responseStyleChanged',
|
||||
|
||||
@@ -3026,12 +3026,6 @@
|
||||
"recipeModelSelector.useDefaultProvider": {
|
||||
"defaultMessage": "Standardanbieter verwenden"
|
||||
},
|
||||
"recipeNameField.defaultLabel": {
|
||||
"defaultMessage": "Rezeptname"
|
||||
},
|
||||
"recipeNameField.formatHint": {
|
||||
"defaultMessage": "Wird automatisch formatiert (Kleinbuchstaben, Bindestriche für Leerzeichen)"
|
||||
},
|
||||
"recipeWarningModal.cancel": {
|
||||
"defaultMessage": "Abbrechen"
|
||||
},
|
||||
@@ -3737,24 +3731,6 @@
|
||||
"sessionIndicators.streaming": {
|
||||
"defaultMessage": "Streaming"
|
||||
},
|
||||
"sessionViewComponents.empty.description": {
|
||||
"defaultMessage": "Diese Sitzung enthält keine Nachrichten"
|
||||
},
|
||||
"sessionViewComponents.empty.title": {
|
||||
"defaultMessage": "Keine Nachrichten gefunden"
|
||||
},
|
||||
"sessionViewComponents.error.loading": {
|
||||
"defaultMessage": "Fehler beim Laden der Sitzungsdetails"
|
||||
},
|
||||
"sessionViewComponents.error.tryAgain": {
|
||||
"defaultMessage": "Erneut versuchen"
|
||||
},
|
||||
"sessionViewComponents.role.assistant": {
|
||||
"defaultMessage": "Goose"
|
||||
},
|
||||
"sessionViewComponents.role.user": {
|
||||
"defaultMessage": "Sie"
|
||||
},
|
||||
"sessions.action.delete": {
|
||||
"defaultMessage": "Sitzung löschen"
|
||||
},
|
||||
@@ -4082,9 +4058,6 @@
|
||||
"settingsView.title": {
|
||||
"defaultMessage": "Einstellungen"
|
||||
},
|
||||
"sheet.close": {
|
||||
"defaultMessage": "Schließen"
|
||||
},
|
||||
"shortcutRecorder.cancel": {
|
||||
"defaultMessage": "Abbrechen"
|
||||
},
|
||||
@@ -4151,15 +4124,6 @@
|
||||
"stringUtils.configuredProvider": {
|
||||
"defaultMessage": "Anbieter {name} ist konfiguriert"
|
||||
},
|
||||
"stringUtils.ollamaApp": {
|
||||
"defaultMessage": "Ollama-App"
|
||||
},
|
||||
"stringUtils.ollamaNotConfiguredPrefix": {
|
||||
"defaultMessage": "Um dies zu nutzen, muss entweder die"
|
||||
},
|
||||
"stringUtils.ollamaNotConfiguredSuffix": {
|
||||
"defaultMessage": "auf Ihrem Computer installiert und geöffnet sein, oder Sie müssen einen Wert für OLLAMA_HOST eingeben."
|
||||
},
|
||||
"subRecipeEditor.addExisting": {
|
||||
"defaultMessage": "Vorhandenes hinzufügen"
|
||||
},
|
||||
|
||||
@@ -3026,12 +3026,6 @@
|
||||
"recipeModelSelector.useDefaultProvider": {
|
||||
"defaultMessage": "Use default provider"
|
||||
},
|
||||
"recipeNameField.defaultLabel": {
|
||||
"defaultMessage": "Recipe Name"
|
||||
},
|
||||
"recipeNameField.formatHint": {
|
||||
"defaultMessage": "Will be automatically formatted (lowercase, dashes for spaces)"
|
||||
},
|
||||
"recipeWarningModal.cancel": {
|
||||
"defaultMessage": "Cancel"
|
||||
},
|
||||
@@ -3737,24 +3731,6 @@
|
||||
"sessionIndicators.streaming": {
|
||||
"defaultMessage": "Streaming"
|
||||
},
|
||||
"sessionViewComponents.empty.description": {
|
||||
"defaultMessage": "This session doesn't contain any messages"
|
||||
},
|
||||
"sessionViewComponents.empty.title": {
|
||||
"defaultMessage": "No messages found"
|
||||
},
|
||||
"sessionViewComponents.error.loading": {
|
||||
"defaultMessage": "Error Loading Session Details"
|
||||
},
|
||||
"sessionViewComponents.error.tryAgain": {
|
||||
"defaultMessage": "Try Again"
|
||||
},
|
||||
"sessionViewComponents.role.assistant": {
|
||||
"defaultMessage": "Goose"
|
||||
},
|
||||
"sessionViewComponents.role.user": {
|
||||
"defaultMessage": "You"
|
||||
},
|
||||
"sessions.action.delete": {
|
||||
"defaultMessage": "Delete session"
|
||||
},
|
||||
@@ -4082,9 +4058,6 @@
|
||||
"settingsView.title": {
|
||||
"defaultMessage": "Settings"
|
||||
},
|
||||
"sheet.close": {
|
||||
"defaultMessage": "Close"
|
||||
},
|
||||
"shortcutRecorder.cancel": {
|
||||
"defaultMessage": "Cancel"
|
||||
},
|
||||
@@ -4151,15 +4124,6 @@
|
||||
"stringUtils.configuredProvider": {
|
||||
"defaultMessage": "{name} provider is configured"
|
||||
},
|
||||
"stringUtils.ollamaApp": {
|
||||
"defaultMessage": "Ollama app"
|
||||
},
|
||||
"stringUtils.ollamaNotConfiguredPrefix": {
|
||||
"defaultMessage": "To use, either the"
|
||||
},
|
||||
"stringUtils.ollamaNotConfiguredSuffix": {
|
||||
"defaultMessage": "must be installed on your machine and open, or you must enter a value for OLLAMA_HOST."
|
||||
},
|
||||
"subRecipeEditor.addExisting": {
|
||||
"defaultMessage": "Add Existing"
|
||||
},
|
||||
|
||||
@@ -3026,12 +3026,6 @@
|
||||
"recipeModelSelector.useDefaultProvider": {
|
||||
"defaultMessage": "Usar el proveedor por defecto"
|
||||
},
|
||||
"recipeNameField.defaultLabel": {
|
||||
"defaultMessage": "Nombre de la receta"
|
||||
},
|
||||
"recipeNameField.formatHint": {
|
||||
"defaultMessage": "Se formateará automáticamente (minúsculas, guiones en lugar de espacios)"
|
||||
},
|
||||
"recipeWarningModal.cancel": {
|
||||
"defaultMessage": "Cancelar"
|
||||
},
|
||||
@@ -3737,24 +3731,6 @@
|
||||
"sessionIndicators.streaming": {
|
||||
"defaultMessage": "Streaming"
|
||||
},
|
||||
"sessionViewComponents.empty.description": {
|
||||
"defaultMessage": "Esta sesión no contiene ningún mensaje"
|
||||
},
|
||||
"sessionViewComponents.empty.title": {
|
||||
"defaultMessage": "No se encontraron mensajes"
|
||||
},
|
||||
"sessionViewComponents.error.loading": {
|
||||
"defaultMessage": "Error al cargar los detalles de la sesión"
|
||||
},
|
||||
"sessionViewComponents.error.tryAgain": {
|
||||
"defaultMessage": "Reintentar"
|
||||
},
|
||||
"sessionViewComponents.role.assistant": {
|
||||
"defaultMessage": "Goose"
|
||||
},
|
||||
"sessionViewComponents.role.user": {
|
||||
"defaultMessage": "Tú"
|
||||
},
|
||||
"sessions.action.delete": {
|
||||
"defaultMessage": "Eliminar sesión"
|
||||
},
|
||||
@@ -4082,9 +4058,6 @@
|
||||
"settingsView.title": {
|
||||
"defaultMessage": "Ajustes"
|
||||
},
|
||||
"sheet.close": {
|
||||
"defaultMessage": "Cerrar"
|
||||
},
|
||||
"shortcutRecorder.cancel": {
|
||||
"defaultMessage": "Cancelar"
|
||||
},
|
||||
@@ -4151,15 +4124,6 @@
|
||||
"stringUtils.configuredProvider": {
|
||||
"defaultMessage": "El proveedor {name} está configurado"
|
||||
},
|
||||
"stringUtils.ollamaApp": {
|
||||
"defaultMessage": "App de Ollama"
|
||||
},
|
||||
"stringUtils.ollamaNotConfiguredPrefix": {
|
||||
"defaultMessage": "Para usarlo, o bien la"
|
||||
},
|
||||
"stringUtils.ollamaNotConfiguredSuffix": {
|
||||
"defaultMessage": "debe estar instalada en tu máquina y abierta, o debes ingresar un valor para OLLAMA_HOST."
|
||||
},
|
||||
"subRecipeEditor.addExisting": {
|
||||
"defaultMessage": "Agregar existente"
|
||||
},
|
||||
|
||||
@@ -3026,12 +3026,6 @@
|
||||
"recipeModelSelector.useDefaultProvider": {
|
||||
"defaultMessage": "Utiliser le fournisseur par défaut"
|
||||
},
|
||||
"recipeNameField.defaultLabel": {
|
||||
"defaultMessage": "Nom de la recette"
|
||||
},
|
||||
"recipeNameField.formatHint": {
|
||||
"defaultMessage": "Sera automatiquement mis en forme (minuscules, tirets à la place des espaces)"
|
||||
},
|
||||
"recipeWarningModal.cancel": {
|
||||
"defaultMessage": "Annuler"
|
||||
},
|
||||
@@ -3737,24 +3731,6 @@
|
||||
"sessionIndicators.streaming": {
|
||||
"defaultMessage": "Diffusion en cours"
|
||||
},
|
||||
"sessionViewComponents.empty.description": {
|
||||
"defaultMessage": "Cette session ne contient aucun message"
|
||||
},
|
||||
"sessionViewComponents.empty.title": {
|
||||
"defaultMessage": "Aucun message trouvé"
|
||||
},
|
||||
"sessionViewComponents.error.loading": {
|
||||
"defaultMessage": "Erreur lors du chargement des détails de la session"
|
||||
},
|
||||
"sessionViewComponents.error.tryAgain": {
|
||||
"defaultMessage": "Réessayer"
|
||||
},
|
||||
"sessionViewComponents.role.assistant": {
|
||||
"defaultMessage": "Goose"
|
||||
},
|
||||
"sessionViewComponents.role.user": {
|
||||
"defaultMessage": "Vous"
|
||||
},
|
||||
"sessions.action.delete": {
|
||||
"defaultMessage": "Supprimer la session"
|
||||
},
|
||||
@@ -4082,9 +4058,6 @@
|
||||
"settingsView.title": {
|
||||
"defaultMessage": "Paramètres"
|
||||
},
|
||||
"sheet.close": {
|
||||
"defaultMessage": "Fermer"
|
||||
},
|
||||
"shortcutRecorder.cancel": {
|
||||
"defaultMessage": "Annuler"
|
||||
},
|
||||
@@ -4151,15 +4124,6 @@
|
||||
"stringUtils.configuredProvider": {
|
||||
"defaultMessage": "Le fournisseur {name} est configuré"
|
||||
},
|
||||
"stringUtils.ollamaApp": {
|
||||
"defaultMessage": "Application Ollama"
|
||||
},
|
||||
"stringUtils.ollamaNotConfiguredPrefix": {
|
||||
"defaultMessage": "Pour l'utiliser, soit le"
|
||||
},
|
||||
"stringUtils.ollamaNotConfiguredSuffix": {
|
||||
"defaultMessage": "doit être installé sur votre machine et ouvert, soit vous devez saisir une valeur pour OLLAMA_HOST."
|
||||
},
|
||||
"subRecipeEditor.addExisting": {
|
||||
"defaultMessage": "Ajouter une existante"
|
||||
},
|
||||
|
||||
@@ -3026,12 +3026,6 @@
|
||||
"recipeModelSelector.useDefaultProvider": {
|
||||
"defaultMessage": "डिफ़ॉल्ट प्रदाता का उपयोग करें"
|
||||
},
|
||||
"recipeNameField.defaultLabel": {
|
||||
"defaultMessage": "रेसिपी का नाम"
|
||||
},
|
||||
"recipeNameField.formatHint": {
|
||||
"defaultMessage": "स्वचालित रूप से स्वरूपित किया जाएगा (लोअरकेस, रिक्त स्थान के लिए डैश)"
|
||||
},
|
||||
"recipeWarningModal.cancel": {
|
||||
"defaultMessage": "रद्द करें"
|
||||
},
|
||||
@@ -3737,24 +3731,6 @@
|
||||
"sessionIndicators.streaming": {
|
||||
"defaultMessage": "स्ट्रीमिंग"
|
||||
},
|
||||
"sessionViewComponents.empty.description": {
|
||||
"defaultMessage": "इस सत्र में कोई संदेश नहीं है"
|
||||
},
|
||||
"sessionViewComponents.empty.title": {
|
||||
"defaultMessage": "कोई संदेश नहीं मिला"
|
||||
},
|
||||
"sessionViewComponents.error.loading": {
|
||||
"defaultMessage": "सत्र विवरण लोड करने में त्रुटि"
|
||||
},
|
||||
"sessionViewComponents.error.tryAgain": {
|
||||
"defaultMessage": "पुनः प्रयास करें"
|
||||
},
|
||||
"sessionViewComponents.role.assistant": {
|
||||
"defaultMessage": "Goose"
|
||||
},
|
||||
"sessionViewComponents.role.user": {
|
||||
"defaultMessage": "आप"
|
||||
},
|
||||
"sessions.action.delete": {
|
||||
"defaultMessage": "सत्र हटाएँ"
|
||||
},
|
||||
@@ -4082,9 +4058,6 @@
|
||||
"settingsView.title": {
|
||||
"defaultMessage": "Settings"
|
||||
},
|
||||
"sheet.close": {
|
||||
"defaultMessage": "बंद करें"
|
||||
},
|
||||
"shortcutRecorder.cancel": {
|
||||
"defaultMessage": "रद्द करें"
|
||||
},
|
||||
@@ -4151,15 +4124,6 @@
|
||||
"stringUtils.configuredProvider": {
|
||||
"defaultMessage": "{name} प्रदाता कॉन्फ़िगर किया गया है"
|
||||
},
|
||||
"stringUtils.ollamaApp": {
|
||||
"defaultMessage": "Ollama ऐप"
|
||||
},
|
||||
"stringUtils.ollamaNotConfiguredPrefix": {
|
||||
"defaultMessage": "उपयोग करने के लिए, या तो"
|
||||
},
|
||||
"stringUtils.ollamaNotConfiguredSuffix": {
|
||||
"defaultMessage": "आपकी मशीन पर स्थापित और खुला होना चाहिए, या आपको OLLAMA_HOST के लिए एक मान दर्ज करना होगा।"
|
||||
},
|
||||
"subRecipeEditor.addExisting": {
|
||||
"defaultMessage": "मौजूदा जोड़ें"
|
||||
},
|
||||
|
||||
@@ -3026,12 +3026,6 @@
|
||||
"recipeModelSelector.useDefaultProvider": {
|
||||
"defaultMessage": "Gunakan penyedia default"
|
||||
},
|
||||
"recipeNameField.defaultLabel": {
|
||||
"defaultMessage": "Nama Resep"
|
||||
},
|
||||
"recipeNameField.formatHint": {
|
||||
"defaultMessage": "Akan diformat secara otomatis (huruf kecil, tanda hubung untuk spasi)"
|
||||
},
|
||||
"recipeWarningModal.cancel": {
|
||||
"defaultMessage": "Batal"
|
||||
},
|
||||
@@ -3737,24 +3731,6 @@
|
||||
"sessionIndicators.streaming": {
|
||||
"defaultMessage": "Streaming"
|
||||
},
|
||||
"sessionViewComponents.empty.description": {
|
||||
"defaultMessage": "Sesi ini tidak berisi pesan apa pun"
|
||||
},
|
||||
"sessionViewComponents.empty.title": {
|
||||
"defaultMessage": "Tidak ada pesan ditemukan"
|
||||
},
|
||||
"sessionViewComponents.error.loading": {
|
||||
"defaultMessage": "Kesalahan Memuat Detail Sesi"
|
||||
},
|
||||
"sessionViewComponents.error.tryAgain": {
|
||||
"defaultMessage": "Coba Lagi"
|
||||
},
|
||||
"sessionViewComponents.role.assistant": {
|
||||
"defaultMessage": "Goose"
|
||||
},
|
||||
"sessionViewComponents.role.user": {
|
||||
"defaultMessage": "Anda"
|
||||
},
|
||||
"sessions.action.delete": {
|
||||
"defaultMessage": "Hapus sesi"
|
||||
},
|
||||
@@ -4082,9 +4058,6 @@
|
||||
"settingsView.title": {
|
||||
"defaultMessage": "Pengaturan"
|
||||
},
|
||||
"sheet.close": {
|
||||
"defaultMessage": "Tutup"
|
||||
},
|
||||
"shortcutRecorder.cancel": {
|
||||
"defaultMessage": "Batal"
|
||||
},
|
||||
@@ -4151,15 +4124,6 @@
|
||||
"stringUtils.configuredProvider": {
|
||||
"defaultMessage": "Penyedia {name} telah dikonfigurasi"
|
||||
},
|
||||
"stringUtils.ollamaApp": {
|
||||
"defaultMessage": "Aplikasi Ollama"
|
||||
},
|
||||
"stringUtils.ollamaNotConfiguredPrefix": {
|
||||
"defaultMessage": "Untuk menggunakan, salah satu"
|
||||
},
|
||||
"stringUtils.ollamaNotConfiguredSuffix": {
|
||||
"defaultMessage": "harus terpasang di mesin Anda dan terbuka, atau Anda harus memasukkan nilai untuk OLLAMA_HOST."
|
||||
},
|
||||
"subRecipeEditor.addExisting": {
|
||||
"defaultMessage": "Tambahkan yang Sudah Ada"
|
||||
},
|
||||
|
||||
@@ -3026,12 +3026,6 @@
|
||||
"recipeModelSelector.useDefaultProvider": {
|
||||
"defaultMessage": "Usa provider predefinito"
|
||||
},
|
||||
"recipeNameField.defaultLabel": {
|
||||
"defaultMessage": "Nome ricetta"
|
||||
},
|
||||
"recipeNameField.formatHint": {
|
||||
"defaultMessage": "Verrà formattato automaticamente (minuscolo, trattini al posto degli spazi)"
|
||||
},
|
||||
"recipeWarningModal.cancel": {
|
||||
"defaultMessage": "Annulla"
|
||||
},
|
||||
@@ -3737,24 +3731,6 @@
|
||||
"sessionIndicators.streaming": {
|
||||
"defaultMessage": "Streaming"
|
||||
},
|
||||
"sessionViewComponents.empty.description": {
|
||||
"defaultMessage": "Questa sessione non contiene messaggi"
|
||||
},
|
||||
"sessionViewComponents.empty.title": {
|
||||
"defaultMessage": "Nessun messaggio trovato"
|
||||
},
|
||||
"sessionViewComponents.error.loading": {
|
||||
"defaultMessage": "Errore durante il caricamento dei dettagli della sessione"
|
||||
},
|
||||
"sessionViewComponents.error.tryAgain": {
|
||||
"defaultMessage": "Riprova"
|
||||
},
|
||||
"sessionViewComponents.role.assistant": {
|
||||
"defaultMessage": "Goose"
|
||||
},
|
||||
"sessionViewComponents.role.user": {
|
||||
"defaultMessage": "Tu"
|
||||
},
|
||||
"sessions.action.delete": {
|
||||
"defaultMessage": "Elimina sessione"
|
||||
},
|
||||
@@ -4082,9 +4058,6 @@
|
||||
"settingsView.title": {
|
||||
"defaultMessage": "Impostazioni"
|
||||
},
|
||||
"sheet.close": {
|
||||
"defaultMessage": "Chiudi"
|
||||
},
|
||||
"shortcutRecorder.cancel": {
|
||||
"defaultMessage": "Annulla"
|
||||
},
|
||||
@@ -4151,15 +4124,6 @@
|
||||
"stringUtils.configuredProvider": {
|
||||
"defaultMessage": "Il provider {name} è configurato"
|
||||
},
|
||||
"stringUtils.ollamaApp": {
|
||||
"defaultMessage": "App Ollama"
|
||||
},
|
||||
"stringUtils.ollamaNotConfiguredPrefix": {
|
||||
"defaultMessage": "Per usarlo, l'"
|
||||
},
|
||||
"stringUtils.ollamaNotConfiguredSuffix": {
|
||||
"defaultMessage": "deve essere installata sul tuo computer e aperta, oppure devi inserire un valore per OLLAMA_HOST."
|
||||
},
|
||||
"subRecipeEditor.addExisting": {
|
||||
"defaultMessage": "Aggiungi esistente"
|
||||
},
|
||||
|
||||
@@ -3026,12 +3026,6 @@
|
||||
"recipeModelSelector.useDefaultProvider": {
|
||||
"defaultMessage": "デフォルトプロバイダーを使用"
|
||||
},
|
||||
"recipeNameField.defaultLabel": {
|
||||
"defaultMessage": "レシピ名"
|
||||
},
|
||||
"recipeNameField.formatHint": {
|
||||
"defaultMessage": "自動的に整形されます(小文字、スペースはダッシュ)"
|
||||
},
|
||||
"recipeWarningModal.cancel": {
|
||||
"defaultMessage": "キャンセル"
|
||||
},
|
||||
@@ -3737,24 +3731,6 @@
|
||||
"sessionIndicators.streaming": {
|
||||
"defaultMessage": "ストリーミング中"
|
||||
},
|
||||
"sessionViewComponents.empty.description": {
|
||||
"defaultMessage": "このセッションにはメッセージがありません"
|
||||
},
|
||||
"sessionViewComponents.empty.title": {
|
||||
"defaultMessage": "メッセージが見つかりません"
|
||||
},
|
||||
"sessionViewComponents.error.loading": {
|
||||
"defaultMessage": "セッション詳細の読み込みエラー"
|
||||
},
|
||||
"sessionViewComponents.error.tryAgain": {
|
||||
"defaultMessage": "再試行"
|
||||
},
|
||||
"sessionViewComponents.role.assistant": {
|
||||
"defaultMessage": "Goose"
|
||||
},
|
||||
"sessionViewComponents.role.user": {
|
||||
"defaultMessage": "あなた"
|
||||
},
|
||||
"sessions.action.delete": {
|
||||
"defaultMessage": "セッションを削除"
|
||||
},
|
||||
@@ -4082,9 +4058,6 @@
|
||||
"settingsView.title": {
|
||||
"defaultMessage": "設定"
|
||||
},
|
||||
"sheet.close": {
|
||||
"defaultMessage": "閉じる"
|
||||
},
|
||||
"shortcutRecorder.cancel": {
|
||||
"defaultMessage": "キャンセル"
|
||||
},
|
||||
@@ -4151,15 +4124,6 @@
|
||||
"stringUtils.configuredProvider": {
|
||||
"defaultMessage": "{name}プロバイダーが設定されています"
|
||||
},
|
||||
"stringUtils.ollamaApp": {
|
||||
"defaultMessage": "Ollamaアプリ"
|
||||
},
|
||||
"stringUtils.ollamaNotConfiguredPrefix": {
|
||||
"defaultMessage": "使用するには、"
|
||||
},
|
||||
"stringUtils.ollamaNotConfiguredSuffix": {
|
||||
"defaultMessage": "をマシンにインストールして開いておくか、OLLAMA_HOSTの値を入力する必要があります。"
|
||||
},
|
||||
"subRecipeEditor.addExisting": {
|
||||
"defaultMessage": "既存を追加"
|
||||
},
|
||||
|
||||
@@ -3026,12 +3026,6 @@
|
||||
"recipeModelSelector.useDefaultProvider": {
|
||||
"defaultMessage": "기본 제공업체 사용"
|
||||
},
|
||||
"recipeNameField.defaultLabel": {
|
||||
"defaultMessage": "레시피 이름"
|
||||
},
|
||||
"recipeNameField.formatHint": {
|
||||
"defaultMessage": "자동으로 형식이 지정됩니다(소문자, 공백은 대시로 변환)."
|
||||
},
|
||||
"recipeWarningModal.cancel": {
|
||||
"defaultMessage": "취소"
|
||||
},
|
||||
@@ -3737,24 +3731,6 @@
|
||||
"sessionIndicators.streaming": {
|
||||
"defaultMessage": "스트리밍"
|
||||
},
|
||||
"sessionViewComponents.empty.description": {
|
||||
"defaultMessage": "이 세션에는 메시지가 없습니다."
|
||||
},
|
||||
"sessionViewComponents.empty.title": {
|
||||
"defaultMessage": "메시지를 찾을 수 없습니다."
|
||||
},
|
||||
"sessionViewComponents.error.loading": {
|
||||
"defaultMessage": "세션 세부정보를 로드하는 중 오류가 발생했습니다."
|
||||
},
|
||||
"sessionViewComponents.error.tryAgain": {
|
||||
"defaultMessage": "다시 시도"
|
||||
},
|
||||
"sessionViewComponents.role.assistant": {
|
||||
"defaultMessage": "Goose"
|
||||
},
|
||||
"sessionViewComponents.role.user": {
|
||||
"defaultMessage": "나"
|
||||
},
|
||||
"sessions.action.delete": {
|
||||
"defaultMessage": "세션 삭제"
|
||||
},
|
||||
@@ -4082,9 +4058,6 @@
|
||||
"settingsView.title": {
|
||||
"defaultMessage": "설정"
|
||||
},
|
||||
"sheet.close": {
|
||||
"defaultMessage": "닫기"
|
||||
},
|
||||
"shortcutRecorder.cancel": {
|
||||
"defaultMessage": "취소"
|
||||
},
|
||||
@@ -4151,15 +4124,6 @@
|
||||
"stringUtils.configuredProvider": {
|
||||
"defaultMessage": "{name} 제공업체가 구성되었습니다."
|
||||
},
|
||||
"stringUtils.ollamaApp": {
|
||||
"defaultMessage": "Ollama 앱"
|
||||
},
|
||||
"stringUtils.ollamaNotConfiguredPrefix": {
|
||||
"defaultMessage": "사용하려면"
|
||||
},
|
||||
"stringUtils.ollamaNotConfiguredSuffix": {
|
||||
"defaultMessage": "을(를) 컴퓨터에 설치하고 열어야 합니다. 또는 OLLAMA_HOST 값을 입력해야 합니다."
|
||||
},
|
||||
"subRecipeEditor.addExisting": {
|
||||
"defaultMessage": "기존 서브레시피 추가"
|
||||
},
|
||||
|
||||
@@ -3026,12 +3026,6 @@
|
||||
"recipeModelSelector.useDefaultProvider": {
|
||||
"defaultMessage": "Gunakan penyedia lalai"
|
||||
},
|
||||
"recipeNameField.defaultLabel": {
|
||||
"defaultMessage": "Nama Resipi"
|
||||
},
|
||||
"recipeNameField.formatHint": {
|
||||
"defaultMessage": "Akan diformat secara automatik (huruf kecil, sengkang untuk ruang)"
|
||||
},
|
||||
"recipeWarningModal.cancel": {
|
||||
"defaultMessage": "Batal"
|
||||
},
|
||||
@@ -3737,24 +3731,6 @@
|
||||
"sessionIndicators.streaming": {
|
||||
"defaultMessage": "Penstriman"
|
||||
},
|
||||
"sessionViewComponents.empty.description": {
|
||||
"defaultMessage": "Sesi ini tidak mengandungi sebarang mesej"
|
||||
},
|
||||
"sessionViewComponents.empty.title": {
|
||||
"defaultMessage": "Tiada mesej ditemui"
|
||||
},
|
||||
"sessionViewComponents.error.loading": {
|
||||
"defaultMessage": "Ralat Memuatkan Butiran Sesi"
|
||||
},
|
||||
"sessionViewComponents.error.tryAgain": {
|
||||
"defaultMessage": "Cuba Lagi"
|
||||
},
|
||||
"sessionViewComponents.role.assistant": {
|
||||
"defaultMessage": "Goose"
|
||||
},
|
||||
"sessionViewComponents.role.user": {
|
||||
"defaultMessage": "Anda"
|
||||
},
|
||||
"sessions.action.delete": {
|
||||
"defaultMessage": "Padam sesi"
|
||||
},
|
||||
@@ -4082,9 +4058,6 @@
|
||||
"settingsView.title": {
|
||||
"defaultMessage": "Tetapan"
|
||||
},
|
||||
"sheet.close": {
|
||||
"defaultMessage": "Tutup"
|
||||
},
|
||||
"shortcutRecorder.cancel": {
|
||||
"defaultMessage": "Batal"
|
||||
},
|
||||
@@ -4151,15 +4124,6 @@
|
||||
"stringUtils.configuredProvider": {
|
||||
"defaultMessage": "Penyedia {name} telah dikonfigurasikan"
|
||||
},
|
||||
"stringUtils.ollamaApp": {
|
||||
"defaultMessage": "Aplikasi Ollama"
|
||||
},
|
||||
"stringUtils.ollamaNotConfiguredPrefix": {
|
||||
"defaultMessage": "Untuk menggunakannya, sama ada"
|
||||
},
|
||||
"stringUtils.ollamaNotConfiguredSuffix": {
|
||||
"defaultMessage": "mesti dipasang pada mesin anda dan dibuka, atau anda mesti memasukkan nilai untuk OLLAMA_HOST."
|
||||
},
|
||||
"subRecipeEditor.addExisting": {
|
||||
"defaultMessage": "Tambah Sedia Ada"
|
||||
},
|
||||
|
||||
@@ -3026,12 +3026,6 @@
|
||||
"recipeModelSelector.useDefaultProvider": {
|
||||
"defaultMessage": "Usar fornecedor predefinido"
|
||||
},
|
||||
"recipeNameField.defaultLabel": {
|
||||
"defaultMessage": "Nome da receita"
|
||||
},
|
||||
"recipeNameField.formatHint": {
|
||||
"defaultMessage": "Será formatado automaticamente (minúsculas, traços nos espaços)"
|
||||
},
|
||||
"recipeWarningModal.cancel": {
|
||||
"defaultMessage": "Cancelar"
|
||||
},
|
||||
@@ -3737,24 +3731,6 @@
|
||||
"sessionIndicators.streaming": {
|
||||
"defaultMessage": "Em transmissão"
|
||||
},
|
||||
"sessionViewComponents.empty.description": {
|
||||
"defaultMessage": "Esta sessão não contém mensagens"
|
||||
},
|
||||
"sessionViewComponents.empty.title": {
|
||||
"defaultMessage": "Nenhuma mensagem encontrada"
|
||||
},
|
||||
"sessionViewComponents.error.loading": {
|
||||
"defaultMessage": "Erro ao carregar os detalhes da sessão"
|
||||
},
|
||||
"sessionViewComponents.error.tryAgain": {
|
||||
"defaultMessage": "Tentar novamente"
|
||||
},
|
||||
"sessionViewComponents.role.assistant": {
|
||||
"defaultMessage": "Goose"
|
||||
},
|
||||
"sessionViewComponents.role.user": {
|
||||
"defaultMessage": "Você"
|
||||
},
|
||||
"sessions.action.delete": {
|
||||
"defaultMessage": "Eliminar sessão"
|
||||
},
|
||||
@@ -4082,9 +4058,6 @@
|
||||
"settingsView.title": {
|
||||
"defaultMessage": "Definições"
|
||||
},
|
||||
"sheet.close": {
|
||||
"defaultMessage": "Fechar"
|
||||
},
|
||||
"shortcutRecorder.cancel": {
|
||||
"defaultMessage": "Cancelar"
|
||||
},
|
||||
@@ -4151,15 +4124,6 @@
|
||||
"stringUtils.configuredProvider": {
|
||||
"defaultMessage": "O fornecedor {name} está configurado"
|
||||
},
|
||||
"stringUtils.ollamaApp": {
|
||||
"defaultMessage": "Aplicação Ollama"
|
||||
},
|
||||
"stringUtils.ollamaNotConfiguredPrefix": {
|
||||
"defaultMessage": "Para utilizar, ou a"
|
||||
},
|
||||
"stringUtils.ollamaNotConfiguredSuffix": {
|
||||
"defaultMessage": "deve estar instalada e aberta na sua máquina, ou deve introduzir um valor para OLLAMA_HOST."
|
||||
},
|
||||
"subRecipeEditor.addExisting": {
|
||||
"defaultMessage": "Adicionar Existente"
|
||||
},
|
||||
|
||||
@@ -3026,12 +3026,6 @@
|
||||
"recipeModelSelector.useDefaultProvider": {
|
||||
"defaultMessage": "Использовать провайдера по умолчанию"
|
||||
},
|
||||
"recipeNameField.defaultLabel": {
|
||||
"defaultMessage": "Имя рецепта"
|
||||
},
|
||||
"recipeNameField.formatHint": {
|
||||
"defaultMessage": "Будет автоматически отформатировано (нижний регистр, дефисы вместо пробелов)"
|
||||
},
|
||||
"recipeWarningModal.cancel": {
|
||||
"defaultMessage": "Отмена"
|
||||
},
|
||||
@@ -3737,24 +3731,6 @@
|
||||
"sessionIndicators.streaming": {
|
||||
"defaultMessage": "Потоковая передача"
|
||||
},
|
||||
"sessionViewComponents.empty.description": {
|
||||
"defaultMessage": "Этот сеанс не содержит сообщений"
|
||||
},
|
||||
"sessionViewComponents.empty.title": {
|
||||
"defaultMessage": "Сообщения не найдены"
|
||||
},
|
||||
"sessionViewComponents.error.loading": {
|
||||
"defaultMessage": "Ошибка загрузки сведений о сеансе"
|
||||
},
|
||||
"sessionViewComponents.error.tryAgain": {
|
||||
"defaultMessage": "Повторить попытку"
|
||||
},
|
||||
"sessionViewComponents.role.assistant": {
|
||||
"defaultMessage": "Goose"
|
||||
},
|
||||
"sessionViewComponents.role.user": {
|
||||
"defaultMessage": "Вы"
|
||||
},
|
||||
"sessions.action.delete": {
|
||||
"defaultMessage": "Удалить сеанс"
|
||||
},
|
||||
@@ -4082,9 +4058,6 @@
|
||||
"settingsView.title": {
|
||||
"defaultMessage": "Настройки"
|
||||
},
|
||||
"sheet.close": {
|
||||
"defaultMessage": "Закрыть"
|
||||
},
|
||||
"shortcutRecorder.cancel": {
|
||||
"defaultMessage": "Отмена"
|
||||
},
|
||||
@@ -4151,15 +4124,6 @@
|
||||
"stringUtils.configuredProvider": {
|
||||
"defaultMessage": "Провайдер {name} настроен"
|
||||
},
|
||||
"stringUtils.ollamaApp": {
|
||||
"defaultMessage": "Приложение Ollama"
|
||||
},
|
||||
"stringUtils.ollamaNotConfiguredPrefix": {
|
||||
"defaultMessage": "Для использования либо"
|
||||
},
|
||||
"stringUtils.ollamaNotConfiguredSuffix": {
|
||||
"defaultMessage": "должно быть установлено на вашем компьютере и открыто, либо нужно ввести значение для OLLAMA_HOST."
|
||||
},
|
||||
"subRecipeEditor.addExisting": {
|
||||
"defaultMessage": "Добавить существующий"
|
||||
},
|
||||
|
||||
@@ -3026,12 +3026,6 @@
|
||||
"recipeModelSelector.useDefaultProvider": {
|
||||
"defaultMessage": "Varsayılan sağlayıcıyı kullan"
|
||||
},
|
||||
"recipeNameField.defaultLabel": {
|
||||
"defaultMessage": "Tarif Adı"
|
||||
},
|
||||
"recipeNameField.formatHint": {
|
||||
"defaultMessage": "Otomatik olarak biçimlendirilecektir (küçük harf, boşluklar için kısa çizgiler)"
|
||||
},
|
||||
"recipeWarningModal.cancel": {
|
||||
"defaultMessage": "İptal"
|
||||
},
|
||||
@@ -3737,24 +3731,6 @@
|
||||
"sessionIndicators.streaming": {
|
||||
"defaultMessage": "Akış"
|
||||
},
|
||||
"sessionViewComponents.empty.description": {
|
||||
"defaultMessage": "Bu oturum herhangi bir mesaj içermiyor"
|
||||
},
|
||||
"sessionViewComponents.empty.title": {
|
||||
"defaultMessage": "Mesaj bulunamadı"
|
||||
},
|
||||
"sessionViewComponents.error.loading": {
|
||||
"defaultMessage": "Oturum Ayrıntıları Yüklenirken Hata Oluştu"
|
||||
},
|
||||
"sessionViewComponents.error.tryAgain": {
|
||||
"defaultMessage": "Tekrar Deneyin"
|
||||
},
|
||||
"sessionViewComponents.role.assistant": {
|
||||
"defaultMessage": "Goose"
|
||||
},
|
||||
"sessionViewComponents.role.user": {
|
||||
"defaultMessage": "sen"
|
||||
},
|
||||
"sessions.action.delete": {
|
||||
"defaultMessage": "Oturumu sil"
|
||||
},
|
||||
@@ -4082,9 +4058,6 @@
|
||||
"settingsView.title": {
|
||||
"defaultMessage": "Ayarlar"
|
||||
},
|
||||
"sheet.close": {
|
||||
"defaultMessage": "Kapat"
|
||||
},
|
||||
"shortcutRecorder.cancel": {
|
||||
"defaultMessage": "İptal"
|
||||
},
|
||||
@@ -4151,15 +4124,6 @@
|
||||
"stringUtils.configuredProvider": {
|
||||
"defaultMessage": "{name} sağlayıcısı yapılandırıldı"
|
||||
},
|
||||
"stringUtils.ollamaApp": {
|
||||
"defaultMessage": "Ollama uygulaması"
|
||||
},
|
||||
"stringUtils.ollamaNotConfiguredPrefix": {
|
||||
"defaultMessage": "Kullanmak için ya"
|
||||
},
|
||||
"stringUtils.ollamaNotConfiguredSuffix": {
|
||||
"defaultMessage": "makinenizde kurulu ve açık olmalı veya OLLAMA_HOST için bir değer girmelisiniz."
|
||||
},
|
||||
"subRecipeEditor.addExisting": {
|
||||
"defaultMessage": "Mevcut Ekle"
|
||||
},
|
||||
|
||||
@@ -3026,12 +3026,6 @@
|
||||
"recipeModelSelector.useDefaultProvider": {
|
||||
"defaultMessage": "Sử dụng nhà cung cấp mặc định"
|
||||
},
|
||||
"recipeNameField.defaultLabel": {
|
||||
"defaultMessage": "Tên công thức"
|
||||
},
|
||||
"recipeNameField.formatHint": {
|
||||
"defaultMessage": "Sẽ được định dạng tự động (chữ thường, dấu gạch ngang thay cho khoảng trắng)"
|
||||
},
|
||||
"recipeWarningModal.cancel": {
|
||||
"defaultMessage": "Hủy"
|
||||
},
|
||||
@@ -3737,24 +3731,6 @@
|
||||
"sessionIndicators.streaming": {
|
||||
"defaultMessage": "Đang truyền phát"
|
||||
},
|
||||
"sessionViewComponents.empty.description": {
|
||||
"defaultMessage": "Phiên này không chứa tin nhắn nào"
|
||||
},
|
||||
"sessionViewComponents.empty.title": {
|
||||
"defaultMessage": "Không tìm thấy tin nhắn nào"
|
||||
},
|
||||
"sessionViewComponents.error.loading": {
|
||||
"defaultMessage": "Lỗi khi tải chi tiết phiên"
|
||||
},
|
||||
"sessionViewComponents.error.tryAgain": {
|
||||
"defaultMessage": "Thử lại"
|
||||
},
|
||||
"sessionViewComponents.role.assistant": {
|
||||
"defaultMessage": "Goose"
|
||||
},
|
||||
"sessionViewComponents.role.user": {
|
||||
"defaultMessage": "Bạn"
|
||||
},
|
||||
"sessions.action.delete": {
|
||||
"defaultMessage": "Xóa phiên"
|
||||
},
|
||||
@@ -4082,9 +4058,6 @@
|
||||
"settingsView.title": {
|
||||
"defaultMessage": "Cài đặt"
|
||||
},
|
||||
"sheet.close": {
|
||||
"defaultMessage": "Đóng"
|
||||
},
|
||||
"shortcutRecorder.cancel": {
|
||||
"defaultMessage": "Hủy"
|
||||
},
|
||||
@@ -4151,15 +4124,6 @@
|
||||
"stringUtils.configuredProvider": {
|
||||
"defaultMessage": "Nhà cung cấp {name} đã được định cấu hình"
|
||||
},
|
||||
"stringUtils.ollamaApp": {
|
||||
"defaultMessage": "Ứng dụng Ollama"
|
||||
},
|
||||
"stringUtils.ollamaNotConfiguredPrefix": {
|
||||
"defaultMessage": "Để sử dụng, hoặc là"
|
||||
},
|
||||
"stringUtils.ollamaNotConfiguredSuffix": {
|
||||
"defaultMessage": "phải được cài đặt trên máy của bạn và đang mở, hoặc bạn phải nhập một giá trị cho OLLAMA_HOST."
|
||||
},
|
||||
"subRecipeEditor.addExisting": {
|
||||
"defaultMessage": "Thêm hiện có"
|
||||
},
|
||||
|
||||
@@ -3026,12 +3026,6 @@
|
||||
"recipeModelSelector.useDefaultProvider": {
|
||||
"defaultMessage": "使用默认提供商"
|
||||
},
|
||||
"recipeNameField.defaultLabel": {
|
||||
"defaultMessage": "配方名称"
|
||||
},
|
||||
"recipeNameField.formatHint": {
|
||||
"defaultMessage": "将自动格式化(小写字母,空格转为短横线)"
|
||||
},
|
||||
"recipeWarningModal.cancel": {
|
||||
"defaultMessage": "取消"
|
||||
},
|
||||
@@ -3737,24 +3731,6 @@
|
||||
"sessionIndicators.streaming": {
|
||||
"defaultMessage": "流式传输中"
|
||||
},
|
||||
"sessionViewComponents.empty.description": {
|
||||
"defaultMessage": "此会话不包含任何消息"
|
||||
},
|
||||
"sessionViewComponents.empty.title": {
|
||||
"defaultMessage": "未找到消息"
|
||||
},
|
||||
"sessionViewComponents.error.loading": {
|
||||
"defaultMessage": "加载会话详情出错"
|
||||
},
|
||||
"sessionViewComponents.error.tryAgain": {
|
||||
"defaultMessage": "重试"
|
||||
},
|
||||
"sessionViewComponents.role.assistant": {
|
||||
"defaultMessage": "Goose"
|
||||
},
|
||||
"sessionViewComponents.role.user": {
|
||||
"defaultMessage": "你"
|
||||
},
|
||||
"sessions.action.delete": {
|
||||
"defaultMessage": "删除会话"
|
||||
},
|
||||
@@ -4082,9 +4058,6 @@
|
||||
"settingsView.title": {
|
||||
"defaultMessage": "设置"
|
||||
},
|
||||
"sheet.close": {
|
||||
"defaultMessage": "关闭"
|
||||
},
|
||||
"shortcutRecorder.cancel": {
|
||||
"defaultMessage": "取消"
|
||||
},
|
||||
@@ -4151,15 +4124,6 @@
|
||||
"stringUtils.configuredProvider": {
|
||||
"defaultMessage": "{name} 提供商已配置"
|
||||
},
|
||||
"stringUtils.ollamaApp": {
|
||||
"defaultMessage": "Ollama 应用"
|
||||
},
|
||||
"stringUtils.ollamaNotConfiguredPrefix": {
|
||||
"defaultMessage": "要使用,必须"
|
||||
},
|
||||
"stringUtils.ollamaNotConfiguredSuffix": {
|
||||
"defaultMessage": "在你的机器上已安装并打开,或者你必须为 OLLAMA_HOST 设置一个值。"
|
||||
},
|
||||
"subRecipeEditor.addExisting": {
|
||||
"defaultMessage": "添加已有"
|
||||
},
|
||||
|
||||
@@ -3026,12 +3026,6 @@
|
||||
"recipeModelSelector.useDefaultProvider": {
|
||||
"defaultMessage": "使用預設提供者"
|
||||
},
|
||||
"recipeNameField.defaultLabel": {
|
||||
"defaultMessage": "配方名稱"
|
||||
},
|
||||
"recipeNameField.formatHint": {
|
||||
"defaultMessage": "將自動格式化(小寫,空格以連字號取代)"
|
||||
},
|
||||
"recipeWarningModal.cancel": {
|
||||
"defaultMessage": "取消"
|
||||
},
|
||||
@@ -3737,24 +3731,6 @@
|
||||
"sessionIndicators.streaming": {
|
||||
"defaultMessage": "串流中"
|
||||
},
|
||||
"sessionViewComponents.empty.description": {
|
||||
"defaultMessage": "此工作階段不包含任何訊息"
|
||||
},
|
||||
"sessionViewComponents.empty.title": {
|
||||
"defaultMessage": "找不到訊息"
|
||||
},
|
||||
"sessionViewComponents.error.loading": {
|
||||
"defaultMessage": "載入工作階段詳細資料時發生錯誤"
|
||||
},
|
||||
"sessionViewComponents.error.tryAgain": {
|
||||
"defaultMessage": "再試一次"
|
||||
},
|
||||
"sessionViewComponents.role.assistant": {
|
||||
"defaultMessage": "Goose"
|
||||
},
|
||||
"sessionViewComponents.role.user": {
|
||||
"defaultMessage": "您"
|
||||
},
|
||||
"sessions.action.delete": {
|
||||
"defaultMessage": "刪除工作階段"
|
||||
},
|
||||
@@ -4082,9 +4058,6 @@
|
||||
"settingsView.title": {
|
||||
"defaultMessage": "設定"
|
||||
},
|
||||
"sheet.close": {
|
||||
"defaultMessage": "關閉"
|
||||
},
|
||||
"shortcutRecorder.cancel": {
|
||||
"defaultMessage": "取消"
|
||||
},
|
||||
@@ -4151,15 +4124,6 @@
|
||||
"stringUtils.configuredProvider": {
|
||||
"defaultMessage": "已設定 {name} 提供者"
|
||||
},
|
||||
"stringUtils.ollamaApp": {
|
||||
"defaultMessage": "Ollama 應用程式"
|
||||
},
|
||||
"stringUtils.ollamaNotConfiguredPrefix": {
|
||||
"defaultMessage": "若要使用,請選擇"
|
||||
},
|
||||
"stringUtils.ollamaNotConfiguredSuffix": {
|
||||
"defaultMessage": "必須安裝在您的電腦上並開啟,或者您必須輸入 OLLAMA_HOST 的值。"
|
||||
},
|
||||
"subRecipeEditor.addExisting": {
|
||||
"defaultMessage": "新增現有項目"
|
||||
},
|
||||
|
||||
@@ -16,24 +16,6 @@ export function getSessionDisplayName(session: Session): string {
|
||||
return session.name;
|
||||
}
|
||||
|
||||
export function resumeSession(session: Session, setView: setViewType) {
|
||||
const eventDetail = {
|
||||
sessionId: session.id,
|
||||
initialMessage: undefined,
|
||||
};
|
||||
|
||||
window.dispatchEvent(
|
||||
new CustomEvent(AppEvents.ADD_ACTIVE_SESSION, {
|
||||
detail: eventDetail,
|
||||
})
|
||||
);
|
||||
|
||||
setView('pair', {
|
||||
disableAnimation: true,
|
||||
resumeSessionId: session.id,
|
||||
});
|
||||
}
|
||||
|
||||
interface CreateSessionOptions {
|
||||
recipeDeeplink?: string;
|
||||
recipeId?: string;
|
||||
|
||||
@@ -1,13 +0,0 @@
|
||||
export interface ElectronEvent {
|
||||
preventDefault: () => void;
|
||||
sender: unknown;
|
||||
}
|
||||
|
||||
export interface IpcRendererEvent extends ElectronEvent {
|
||||
senderId: number;
|
||||
}
|
||||
|
||||
// Mouse event
|
||||
export interface MouseUpEvent extends ElectronEvent {
|
||||
button: number;
|
||||
}
|
||||
@@ -404,15 +404,6 @@ export function getAnyToolConfirmationData(message: Message): ToolConfirmationDa
|
||||
return undefined;
|
||||
}
|
||||
|
||||
export function getToolConfirmationId(
|
||||
content: ActionRequired & { type: 'actionRequired' }
|
||||
): string | undefined {
|
||||
if (content.data.actionType === 'toolConfirmation') {
|
||||
return content.data.id;
|
||||
}
|
||||
return undefined;
|
||||
}
|
||||
|
||||
export function getPendingToolConfirmationIds(messages: Message[]): Set<string> {
|
||||
const pendingIds = new Set<string>();
|
||||
const respondedIds = new Set<string>();
|
||||
@@ -442,8 +433,3 @@ export function getElicitationContent(
|
||||
content.type === 'actionRequired' && content.data.actionType === 'elicitation'
|
||||
);
|
||||
}
|
||||
|
||||
export function hasCompletedToolCalls(message: Message): boolean {
|
||||
const toolRequests = getToolRequests(message);
|
||||
return toolRequests.length > 0;
|
||||
}
|
||||
|
||||
@@ -447,27 +447,6 @@ export function trackScheduleRunNow(success: boolean, errorDetails?: string): vo
|
||||
// Recipe Tracking
|
||||
// ============================================================================
|
||||
|
||||
export function trackRecipeCreated(success: boolean, errorDetails?: string): void {
|
||||
trackEvent({
|
||||
name: 'recipe_created',
|
||||
properties: { success, error_details: errorDetails },
|
||||
});
|
||||
}
|
||||
|
||||
export function trackRecipeImported(success: boolean, errorDetails?: string): void {
|
||||
trackEvent({
|
||||
name: 'recipe_imported',
|
||||
properties: { success, error_details: errorDetails },
|
||||
});
|
||||
}
|
||||
|
||||
export function trackRecipeEdited(success: boolean, errorDetails?: string): void {
|
||||
trackEvent({
|
||||
name: 'recipe_edited',
|
||||
properties: { success, error_details: errorDetails },
|
||||
});
|
||||
}
|
||||
|
||||
export function trackRecipeDeleted(success: boolean, errorDetails?: string): void {
|
||||
trackEvent({
|
||||
name: 'recipe_deleted',
|
||||
@@ -556,13 +535,6 @@ export function trackVoiceDictation(
|
||||
});
|
||||
}
|
||||
|
||||
export function trackModeChanged(fromMode: string, toMode: string): void {
|
||||
trackEvent({
|
||||
name: 'input_mode_changed',
|
||||
properties: { from_mode: fromMode, to_mode: toMode },
|
||||
});
|
||||
}
|
||||
|
||||
export function trackDiagnosticsOpened(): void {
|
||||
trackEvent({
|
||||
name: 'input_diagnostics_opened',
|
||||
@@ -570,20 +542,6 @@ export function trackDiagnosticsOpened(): void {
|
||||
});
|
||||
}
|
||||
|
||||
export function trackCreateRecipeOpened(): void {
|
||||
trackEvent({
|
||||
name: 'input_create_recipe_opened',
|
||||
properties: {},
|
||||
});
|
||||
}
|
||||
|
||||
export function trackEditRecipeOpened(): void {
|
||||
trackEvent({
|
||||
name: 'input_edit_recipe_opened',
|
||||
properties: {},
|
||||
});
|
||||
}
|
||||
|
||||
// ============================================================================
|
||||
// Auto-Update Tracking
|
||||
// ============================================================================
|
||||
|
||||
@@ -1,36 +1,3 @@
|
||||
export const formatToLocalDateTime = (dateString?: string | null): string => {
|
||||
if (!dateString) {
|
||||
return 'N/A';
|
||||
}
|
||||
try {
|
||||
const date = new Date(dateString);
|
||||
// Check if the date is valid
|
||||
if (isNaN(date.getTime())) {
|
||||
return 'Invalid Date';
|
||||
}
|
||||
return date.toLocaleString(); // Uses user's locale and timezone
|
||||
} catch (e) {
|
||||
console.error('Error formatting date:', e);
|
||||
return 'Invalid Date';
|
||||
}
|
||||
};
|
||||
|
||||
export const formatDate = (dateString?: string | null): string => {
|
||||
if (!dateString) {
|
||||
return 'N/A';
|
||||
}
|
||||
try {
|
||||
const date = new Date(dateString);
|
||||
if (isNaN(date.getTime())) {
|
||||
return 'Invalid Date';
|
||||
}
|
||||
return date.toLocaleDateString(); // Uses user's locale
|
||||
} catch (e) {
|
||||
console.error('Error formatting date:', e);
|
||||
return 'Invalid Date';
|
||||
}
|
||||
};
|
||||
|
||||
export const formatToLocalDateWithTimezone = (dateString?: string | null): string => {
|
||||
if (!dateString) {
|
||||
return 'N/A';
|
||||
|
||||
Reference in New Issue
Block a user