Commit 6e3d6c42 authored by StyleZhang's avatar StyleZhang

features

parent c2eaa320
import {
createContext,
useRef,
} from 'react'
import type {
FeaturesState,
FeaturesStore,
} from './store'
import { createFeaturesStore } from './store'
export const FeaturesContext = createContext<FeaturesStore | null>(null)
type FeaturesProviderProps = {
children: React.ReactNode
} & Partial<FeaturesState>
export const FeaturesProvider = ({ children, ...props }: FeaturesProviderProps) => {
const storeRef = useRef<FeaturesStore>()
if (!storeRef.current)
storeRef.current = createFeaturesStore(props)
return (
<FeaturesContext.Provider value={storeRef.current}>
{children}
</FeaturesContext.Provider>
)
}
'use client'
import type { FC } from 'react'
import React from 'react'
import GroupName from '@/app/components/app/configuration/base/group-name'
export type IFeatureGroupProps = {
title: string
description?: string
children: React.ReactNode
}
const FeatureGroup: FC<IFeatureGroupProps> = ({
title,
description,
children,
}) => {
return (
<div className='mb-6'>
<div className='mb-2'>
<GroupName name={title} />
{description && (
<div className='text-xs font-normal text-gray-500'>{description}</div>
)}
</div>
<div className='space-y-2'>
{children}
</div>
</div>
)
}
export default React.memo(FeatureGroup)
'use client'
import type { FC } from 'react'
import React from 'react'
import cn from 'classnames'
import s from './style.module.css'
import Switch from '@/app/components/base/switch'
export type IFeatureItemProps = {
icon: React.ReactNode
previewImgClassName?: string
title: string
description: string
value: boolean
onChange: (value: boolean) => void
}
const FeatureItem: FC<IFeatureItemProps> = ({
icon,
previewImgClassName,
title,
description,
value,
onChange,
}) => {
return (
<div className={cn(s.wrap, 'relative flex justify-between p-3 rounded-xl border border-transparent bg-gray-50 hover:border-gray-200 cursor-pointer')}>
<div className='flex space-x-3 mr-2'>
{/* icon */}
<div
className='shrink-0 flex items-center justify-center w-8 h-8 rounded-lg border border-gray-200 bg-white'
style={{
boxShadow: '0px 1px 2px rgba(16, 24, 40, 0.05)',
}}
>
{icon}
</div>
<div>
<div className='text-sm font-semibold text-gray-800'>{title}</div>
<div className='text-xs font-normal text-gray-500'>{description}</div>
</div>
</div>
<Switch onChange={onChange} defaultValue={value} />
{
previewImgClassName && (
<div className={cn(s.preview, s[previewImgClassName])}>
</div>)
}
</div>
)
}
export default React.memo(FeatureItem)
This source diff could not be displayed because it is too large. You can view the blob instead.
<svg width="304" height="384" viewBox="0 0 304 384" fill="none" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g filter="url(#filter0_dd_3472_38727)">
<g clip-path="url(#clip0_3472_38727)">
<rect x="12" width="280" height="360" rx="12" fill="white"/>
<mask id="path-2-inside-1_3472_38727" fill="white">
<path d="M12 0H292V32H12V0Z"/>
</mask>
<path d="M12 0H292V32H12V0Z" fill="#F9FAFB"/>
<rect x="118" y="8" width="16" height="16" rx="4" fill="#FFE4E8"/>
<path d="M120.833 21.7467H131.5V11.08H120.833V21.7467Z" fill="url(#pattern0)"/>
<rect x="118.167" y="8.16667" width="15.6667" height="15.6667" rx="3.83333" stroke="black" stroke-opacity="0.05" stroke-width="0.333333"/>
<g opacity="0.12">
<rect x="142" y="14" width="44" height="4" rx="2" fill="#101828"/>
</g>
<path d="M292 31H12V33H292V31Z" fill="#F2F4F7" mask="url(#path-2-inside-1_3472_38727)"/>
<rect width="280" height="328" transform="translate(12 32)" fill="#F9FAFB"/>
<g filter="url(#filter1_d_3472_38727)">
<g clip-path="url(#clip1_3472_38727)">
<rect x="30" y="48" width="244" height="100" rx="9" fill="white"/>
<path d="M50.0625 64.375L48.9375 71.125M53.0625 64.375L51.9375 71.125M54.1875 66.25H47.8125M53.8125 69.25H47.4375" stroke="#98A2B3" stroke-width="0.75" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M59.2764 70.8496C58.8135 70.8496 58.4385 70.7285 58.1514 70.4863C57.8643 70.2422 57.6729 69.8887 57.5771 69.4258C57.4814 68.9629 57.4863 68.4053 57.5918 67.7529C57.6992 67.1025 57.8779 66.5469 58.1279 66.0859C58.3799 65.625 58.6895 65.2734 59.0566 65.0313C59.4258 64.7891 59.8398 64.668 60.2988 64.668C60.7559 64.668 61.1289 64.79 61.418 65.0342C61.707 65.2764 61.9014 65.627 62.001 66.0859C62.1025 66.5449 62.0986 67.1006 61.9893 67.7529C61.8799 68.4072 61.7002 68.9648 61.4502 69.4258C61.2002 69.8867 60.8906 70.2393 60.5215 70.4834C60.1523 70.7275 59.7373 70.8496 59.2764 70.8496ZM59.4053 70.0674C59.8135 70.0674 60.165 69.8691 60.46 69.4727C60.7549 69.0762 60.9648 68.5029 61.0898 67.7529C61.1719 67.2549 61.1885 66.834 61.1396 66.4902C61.0928 66.1445 60.9863 65.8828 60.8203 65.7051C60.6563 65.5254 60.4395 65.4355 60.1699 65.4355C59.7676 65.4355 59.418 65.6357 59.1211 66.0361C58.8262 66.4346 58.6172 67.0068 58.4941 67.7529C58.4102 68.2529 58.3916 68.6758 58.4385 69.0215C58.4854 69.3652 58.5908 69.626 58.7549 69.8037C58.9189 69.9795 59.1357 70.0674 59.4053 70.0674ZM65.8 64.75L64.804 70.75H63.8958L64.7395 65.6582H64.7043L63.1135 66.5957L63.26 65.7285L64.9182 64.75H65.8Z" fill="#667085"/>
<rect x="42.375" y="60.375" width="28.75" height="14.75" rx="4.125" stroke="#EAECF0" stroke-width="0.75"/>
<g opacity="0.1">
<rect x="42" y="81.5" width="220" height="4" rx="2" fill="#101828"/>
</g>
<g opacity="0.1">
<rect x="42" y="91.5" width="220" height="4" rx="2" fill="#101828"/>
</g>
<g opacity="0.1">
<rect x="42" y="101.5" width="92" height="4" rx="2" fill="#101828"/>
</g>
<rect x="42.375" y="115.125" width="20.25" height="20.25" rx="4.125" fill="white"/>
<g clip-path="url(#clip2_3472_38727)">
<path d="M54.5 121.25H55.5C55.7652 121.25 56.0196 121.355 56.2071 121.543C56.3946 121.73 56.5 121.985 56.5 122.25V129.25C56.5 129.515 56.3946 129.77 56.2071 129.957C56.0196 130.145 55.7652 130.25 55.5 130.25H49.5C49.2348 130.25 48.9804 130.145 48.7929 129.957C48.6054 129.77 48.5 129.515 48.5 129.25V122.25C48.5 121.985 48.6054 121.73 48.7929 121.543C48.9804 121.355 49.2348 121.25 49.5 121.25H50.5M51 120.25H54C54.2761 120.25 54.5 120.474 54.5 120.75V121.75C54.5 122.026 54.2761 122.25 54 122.25H51C50.7239 122.25 50.5 122.026 50.5 121.75V120.75C50.5 120.474 50.7239 120.25 51 120.25Z" stroke="#344054" stroke-width="0.94" stroke-linecap="round" stroke-linejoin="round"/>
</g>
<rect x="42.375" y="115.125" width="20.25" height="20.25" rx="4.125" stroke="#EAECF0" stroke-width="0.75"/>
<rect x="69.375" y="115.125" width="20.25" height="20.25" rx="4.125" fill="white"/>
<path d="M83 129.75L79.5 127.25L76 129.75V121.75C76 121.485 76.1054 121.23 76.2929 121.043C76.4804 120.855 76.7348 120.75 77 120.75H82C82.2652 120.75 82.5196 120.855 82.7071 121.043C82.8946 121.23 83 121.485 83 121.75V129.75Z" stroke="#344054" stroke-width="0.94" stroke-linecap="round" stroke-linejoin="round"/>
<rect x="69.375" y="115.125" width="20.25" height="20.25" rx="4.125" stroke="#EAECF0" stroke-width="0.75"/>
<rect x="96.375" y="114.875" width="89.5" height="20.75" rx="4.125" fill="white"/>
<g clip-path="url(#clip3_3472_38727)">
<path d="M106.969 129.625V127.438M106.969 123.062V120.875M105.875 121.969H108.062M105.875 128.531H108.062M110.688 121.312L109.929 123.285C109.805 123.606 109.744 123.766 109.648 123.901C109.563 124.021 109.458 124.125 109.339 124.21C109.204 124.306 109.043 124.368 108.723 124.491L106.75 125.25L108.723 126.009C109.043 126.132 109.204 126.194 109.339 126.29C109.458 126.375 109.563 126.479 109.648 126.599C109.744 126.734 109.805 126.894 109.929 127.215L110.688 129.188L111.446 127.215C111.57 126.894 111.631 126.734 111.727 126.599C111.812 126.479 111.917 126.375 112.036 126.29C112.171 126.194 112.332 126.132 112.652 126.009L114.625 125.25L112.652 124.491C112.332 124.368 112.171 124.306 112.036 124.21C111.917 124.125 111.812 124.021 111.727 123.901C111.631 123.766 111.57 123.606 111.446 123.285L110.688 121.312Z" stroke="#344054" stroke-width="0.9375" stroke-linecap="round" stroke-linejoin="round"/>
</g>
<path d="M119.969 121.705H121.168L123.251 126.793H123.328L125.412 121.705H126.61V128.25H125.671V123.513H125.61L123.68 128.24H122.9L120.969 123.51H120.909V128.25H119.969V121.705ZM130.037 128.349C129.577 128.349 129.176 128.244 128.832 128.033C128.489 127.822 128.223 127.527 128.033 127.147C127.844 126.768 127.749 126.325 127.749 125.818C127.749 125.309 127.844 124.863 128.033 124.482C128.223 124.1 128.489 123.804 128.832 123.593C129.176 123.382 129.577 123.277 130.037 123.277C130.498 123.277 130.899 123.382 131.242 123.593C131.585 123.804 131.852 124.1 132.041 124.482C132.231 124.863 132.326 125.309 132.326 125.818C132.326 126.325 132.231 126.768 132.041 127.147C131.852 127.527 131.585 127.822 131.242 128.033C130.899 128.244 130.498 128.349 130.037 128.349ZM130.041 127.547C130.339 127.547 130.586 127.468 130.782 127.31C130.978 127.153 131.123 126.943 131.217 126.681C131.313 126.419 131.361 126.13 131.361 125.815C131.361 125.501 131.313 125.214 131.217 124.952C131.123 124.687 130.978 124.475 130.782 124.316C130.586 124.156 130.339 124.076 130.041 124.076C129.74 124.076 129.491 124.156 129.293 124.316C129.097 124.475 128.951 124.687 128.855 124.952C128.761 125.214 128.714 125.501 128.714 125.815C128.714 126.13 128.761 126.419 128.855 126.681C128.951 126.943 129.097 127.153 129.293 127.31C129.491 127.468 129.74 127.547 130.041 127.547ZM133.392 128.25V123.341H134.316V124.121H134.367C134.457 123.857 134.614 123.649 134.84 123.498C135.068 123.344 135.326 123.267 135.614 123.267C135.673 123.267 135.744 123.27 135.825 123.274C135.908 123.278 135.973 123.283 136.02 123.29V124.204C135.981 124.193 135.913 124.181 135.815 124.169C135.717 124.154 135.619 124.146 135.521 124.146C135.295 124.146 135.094 124.194 134.917 124.29C134.742 124.384 134.604 124.515 134.501 124.683C134.399 124.849 134.348 125.039 134.348 125.252V128.25H133.392ZM138.786 128.349C138.303 128.349 137.886 128.246 137.537 128.039C137.19 127.83 136.921 127.537 136.731 127.16C136.544 126.781 136.45 126.337 136.45 125.827C136.45 125.325 136.544 124.881 136.731 124.498C136.921 124.114 137.185 123.815 137.524 123.6C137.865 123.385 138.263 123.277 138.719 123.277C138.996 123.277 139.265 123.323 139.525 123.414C139.785 123.506 140.018 123.65 140.225 123.846C140.431 124.042 140.594 124.297 140.714 124.61C140.833 124.921 140.893 125.299 140.893 125.744V126.083H136.99V125.367H139.956C139.956 125.116 139.905 124.893 139.803 124.699C139.701 124.503 139.557 124.349 139.371 124.236C139.188 124.123 138.973 124.066 138.726 124.066C138.457 124.066 138.223 124.132 138.023 124.265C137.824 124.395 137.671 124.565 137.562 124.776C137.456 124.985 137.403 125.212 137.403 125.457V126.016C137.403 126.344 137.46 126.623 137.575 126.853C137.692 127.083 137.855 127.259 138.064 127.381C138.273 127.5 138.517 127.56 138.796 127.56C138.977 127.56 139.142 127.534 139.291 127.483C139.441 127.43 139.57 127.351 139.678 127.246C139.787 127.142 139.87 127.013 139.927 126.86L140.832 127.023C140.759 127.289 140.63 127.522 140.442 127.723C140.257 127.921 140.023 128.075 139.742 128.186C139.463 128.295 139.144 128.349 138.786 128.349ZM145.29 121.705V128.25H144.335V121.705H145.29ZM146.576 128.25V123.341H147.532V128.25H146.576ZM147.059 122.583C146.892 122.583 146.75 122.528 146.63 122.417C146.513 122.304 146.455 122.17 146.455 122.015C146.455 121.857 146.513 121.723 146.63 121.612C146.75 121.499 146.892 121.442 147.059 121.442C147.225 121.442 147.366 121.499 147.484 121.612C147.603 121.723 147.663 121.857 147.663 122.015C147.663 122.17 147.603 122.304 147.484 122.417C147.366 122.528 147.225 122.583 147.059 122.583ZM149.696 126.585L149.69 125.418H149.856L151.812 123.341H152.956L150.725 125.706H150.575L149.696 126.585ZM148.817 128.25V121.705H149.773V128.25H148.817ZM151.917 128.25L150.16 125.917L150.818 125.249L153.09 128.25H151.917ZM155.741 128.349C155.257 128.349 154.84 128.246 154.491 128.039C154.144 127.83 153.875 127.537 153.686 127.16C153.498 126.781 153.404 126.337 153.404 125.827C153.404 125.325 153.498 124.881 153.686 124.498C153.875 124.114 154.139 123.815 154.478 123.6C154.819 123.385 155.218 123.277 155.673 123.277C155.95 123.277 156.219 123.323 156.479 123.414C156.739 123.506 156.972 123.65 157.179 123.846C157.385 124.042 157.548 124.297 157.668 124.61C157.787 124.921 157.847 125.299 157.847 125.744V126.083H153.944V125.367H156.91C156.91 125.116 156.859 124.893 156.757 124.699C156.655 124.503 156.511 124.349 156.325 124.236C156.142 124.123 155.927 124.066 155.68 124.066C155.411 124.066 155.177 124.132 154.977 124.265C154.779 124.395 154.625 124.565 154.517 124.776C154.41 124.985 154.357 125.212 154.357 125.457V126.016C154.357 126.344 154.414 126.623 154.529 126.853C154.646 127.083 154.809 127.259 155.018 127.381C155.227 127.5 155.471 127.56 155.75 127.56C155.931 127.56 156.096 127.534 156.246 127.483C156.395 127.43 156.524 127.351 156.632 127.246C156.741 127.142 156.824 127.013 156.882 126.86L157.786 127.023C157.714 127.289 157.584 127.522 157.396 127.723C157.211 127.921 156.977 128.075 156.696 128.186C156.417 128.295 156.099 128.349 155.741 128.349ZM163.58 123.341V124.108H160.899V123.341H163.58ZM161.618 122.165H162.574V126.809C162.574 126.994 162.601 127.134 162.657 127.227C162.712 127.319 162.784 127.382 162.871 127.416C162.96 127.448 163.057 127.464 163.162 127.464C163.238 127.464 163.306 127.458 163.363 127.448C163.421 127.437 163.465 127.429 163.497 127.422L163.67 128.212C163.615 128.233 163.536 128.254 163.433 128.276C163.331 128.299 163.203 128.312 163.05 128.314C162.798 128.318 162.564 128.273 162.347 128.18C162.129 128.086 161.954 127.941 161.819 127.745C161.685 127.549 161.618 127.303 161.618 127.007V122.165ZM165.699 125.335V128.25H164.743V121.705H165.686V124.14H165.747C165.862 123.876 166.037 123.666 166.274 123.51C166.51 123.355 166.819 123.277 167.201 123.277C167.537 123.277 167.831 123.346 168.083 123.485C168.336 123.623 168.532 123.83 168.671 124.105C168.812 124.377 168.882 124.718 168.882 125.127V128.25H167.926V125.243C167.926 124.882 167.834 124.603 167.648 124.405C167.463 124.205 167.205 124.105 166.875 124.105C166.649 124.105 166.446 124.153 166.267 124.249C166.091 124.344 165.951 124.485 165.849 124.67C165.749 124.854 165.699 125.075 165.699 125.335ZM170.157 128.25V123.341H171.113V128.25H170.157ZM170.64 122.583C170.473 122.583 170.331 122.528 170.211 122.417C170.094 122.304 170.036 122.17 170.036 122.015C170.036 121.857 170.094 121.723 170.211 121.612C170.331 121.499 170.473 121.442 170.64 121.442C170.806 121.442 170.948 121.499 171.065 121.612C171.184 121.723 171.244 121.857 171.244 122.015C171.244 122.17 171.184 122.304 171.065 122.417C170.948 122.528 170.806 122.583 170.64 122.583ZM176.077 124.539L175.211 124.693C175.175 124.582 175.117 124.477 175.038 124.376C174.961 124.276 174.857 124.194 174.725 124.13C174.593 124.066 174.428 124.034 174.23 124.034C173.959 124.034 173.733 124.095 173.552 124.217C173.371 124.336 173.28 124.49 173.28 124.68C173.28 124.844 173.341 124.976 173.463 125.076C173.584 125.176 173.78 125.259 174.051 125.322L174.83 125.501C175.282 125.606 175.619 125.767 175.84 125.984C176.062 126.201 176.173 126.484 176.173 126.831C176.173 127.125 176.088 127.387 175.917 127.617C175.749 127.845 175.513 128.024 175.211 128.154C174.91 128.284 174.562 128.349 174.166 128.349C173.616 128.349 173.167 128.232 172.82 127.998C172.473 127.761 172.26 127.425 172.181 126.991L173.105 126.85C173.162 127.091 173.28 127.273 173.459 127.397C173.638 127.518 173.872 127.579 174.159 127.579C174.472 127.579 174.723 127.514 174.91 127.384C175.098 127.252 175.192 127.091 175.192 126.901C175.192 126.748 175.134 126.619 175.019 126.515C174.906 126.41 174.732 126.331 174.498 126.278L173.667 126.096C173.209 125.991 172.87 125.825 172.651 125.597C172.433 125.369 172.325 125.081 172.325 124.731C172.325 124.441 172.406 124.188 172.568 123.971C172.73 123.753 172.953 123.584 173.239 123.462C173.524 123.339 173.851 123.277 174.22 123.277C174.751 123.277 175.168 123.392 175.473 123.622C175.778 123.85 175.979 124.156 176.077 124.539Z" fill="#344054"/>
<rect x="96.375" y="114.875" width="89.5" height="20.75" rx="4.125" stroke="#EAECF0" stroke-width="0.75"/>
</g>
<rect x="30.1875" y="48.1875" width="243.625" height="99.625" rx="8.8125" stroke="#EAECF0" stroke-width="0.375"/>
</g>
<g filter="url(#filter2_d_3472_38727)">
<g clip-path="url(#clip4_3472_38727)">
<rect x="30" y="154" width="244" height="90" rx="9" fill="white"/>
<path d="M50.0625 170.375L48.9375 177.125M53.0625 170.375L51.9375 177.125M54.1875 172.25H47.8125M53.8125 175.25H47.4375" stroke="#98A2B3" stroke-width="0.75" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M59.2764 176.85C58.8135 176.85 58.4385 176.729 58.1514 176.486C57.8643 176.242 57.6729 175.889 57.5771 175.426C57.4814 174.963 57.4863 174.405 57.5918 173.753C57.6992 173.103 57.8779 172.547 58.1279 172.086C58.3799 171.625 58.6895 171.273 59.0566 171.031C59.4258 170.789 59.8398 170.668 60.2988 170.668C60.7559 170.668 61.1289 170.79 61.418 171.034C61.707 171.276 61.9014 171.627 62.001 172.086C62.1025 172.545 62.0986 173.101 61.9893 173.753C61.8799 174.407 61.7002 174.965 61.4502 175.426C61.2002 175.887 60.8906 176.239 60.5215 176.483C60.1523 176.728 59.7373 176.85 59.2764 176.85ZM59.4053 176.067C59.8135 176.067 60.165 175.869 60.46 175.473C60.7549 175.076 60.9648 174.503 61.0898 173.753C61.1719 173.255 61.1885 172.834 61.1396 172.49C61.0928 172.145 60.9863 171.883 60.8203 171.705C60.6563 171.525 60.4395 171.436 60.1699 171.436C59.7676 171.436 59.418 171.636 59.1211 172.036C58.8262 172.435 58.6172 173.007 58.4941 173.753C58.4102 174.253 58.3916 174.676 58.4385 175.021C58.4854 175.365 58.5908 175.626 58.7549 175.804C58.9189 175.979 59.1357 176.067 59.4053 176.067ZM62.5276 176.75L62.6418 176.094L65.0149 173.99C65.2688 173.762 65.4807 173.562 65.6506 173.39C65.8225 173.216 65.9563 173.051 66.052 172.895C66.1497 172.738 66.2141 172.572 66.2454 172.396C66.2786 172.197 66.261 172.025 66.1926 171.881C66.1262 171.734 66.0198 171.622 65.8733 171.544C65.7268 171.464 65.551 171.424 65.3459 171.424C65.1311 171.424 64.9358 171.468 64.76 171.556C64.5842 171.644 64.4377 171.768 64.3206 171.928C64.2034 172.088 64.1262 172.275 64.0891 172.49H63.2278C63.2883 172.125 63.427 171.806 63.6438 171.532C63.8606 171.259 64.1292 171.047 64.4495 170.896C64.7698 170.744 65.1165 170.668 65.4895 170.668C65.8684 170.668 66.1877 170.743 66.4475 170.894C66.7092 171.042 66.8987 171.245 67.0159 171.503C67.1331 171.759 67.1643 172.048 67.1096 172.37C67.0706 172.595 66.9915 172.813 66.8723 173.026C66.7532 173.237 66.5696 173.474 66.3215 173.735C66.0735 173.995 65.7356 174.311 65.3079 174.682L63.9133 175.93L63.9045 175.974H66.6028L66.4768 176.75H62.5276Z" fill="#667085"/>
<rect x="42.375" y="166.375" width="29.75" height="14.75" rx="4.125" stroke="#EAECF0" stroke-width="0.75"/>
<g opacity="0.1">
<rect x="42" y="187.5" width="220" height="4" rx="2" fill="#101828"/>
</g>
<g opacity="0.1">
<rect x="42" y="197.5" width="92" height="4" rx="2" fill="#101828"/>
</g>
<rect x="42.375" y="211.125" width="20.25" height="20.25" rx="4.125" fill="white"/>
<g clip-path="url(#clip5_3472_38727)">
<path d="M54.5 217.25H55.5C55.7652 217.25 56.0196 217.355 56.2071 217.543C56.3946 217.73 56.5 217.985 56.5 218.25V225.25C56.5 225.515 56.3946 225.77 56.2071 225.957C56.0196 226.145 55.7652 226.25 55.5 226.25H49.5C49.2348 226.25 48.9804 226.145 48.7929 225.957C48.6054 225.77 48.5 225.515 48.5 225.25V218.25C48.5 217.985 48.6054 217.73 48.7929 217.543C48.9804 217.355 49.2348 217.25 49.5 217.25H50.5M51 216.25H54C54.2761 216.25 54.5 216.474 54.5 216.75V217.75C54.5 218.026 54.2761 218.25 54 218.25H51C50.7239 218.25 50.5 218.026 50.5 217.75V216.75C50.5 216.474 50.7239 216.25 51 216.25Z" stroke="#344054" stroke-width="0.94" stroke-linecap="round" stroke-linejoin="round"/>
</g>
<rect x="42.375" y="211.125" width="20.25" height="20.25" rx="4.125" stroke="#EAECF0" stroke-width="0.75"/>
<rect x="69.375" y="211.125" width="20.25" height="20.25" rx="4.125" fill="white"/>
<path d="M83 225.75L79.5 223.25L76 225.75V217.75C76 217.485 76.1054 217.23 76.2929 217.043C76.4804 216.855 76.7348 216.75 77 216.75H82C82.2652 216.75 82.5196 216.855 82.7071 217.043C82.8946 217.23 83 217.485 83 217.75V225.75Z" stroke="#344054" stroke-width="0.94" stroke-linecap="round" stroke-linejoin="round"/>
<rect x="69.375" y="211.125" width="20.25" height="20.25" rx="4.125" stroke="#EAECF0" stroke-width="0.75"/>
<rect x="96.375" y="210.875" width="89.5" height="20.75" rx="4.125" fill="white"/>
<g clip-path="url(#clip6_3472_38727)">
<path d="M106.969 225.625V223.438M106.969 219.062V216.875M105.875 217.969H108.062M105.875 224.531H108.062M110.688 217.312L109.929 219.285C109.805 219.606 109.744 219.766 109.648 219.901C109.563 220.021 109.458 220.125 109.339 220.21C109.204 220.306 109.043 220.368 108.723 220.491L106.75 221.25L108.723 222.009C109.043 222.132 109.204 222.194 109.339 222.29C109.458 222.375 109.563 222.479 109.648 222.599C109.744 222.734 109.805 222.894 109.929 223.215L110.688 225.188L111.446 223.215C111.57 222.894 111.631 222.734 111.727 222.599C111.812 222.479 111.917 222.375 112.036 222.29C112.171 222.194 112.332 222.132 112.652 222.009L114.625 221.25L112.652 220.491C112.332 220.368 112.171 220.306 112.036 220.21C111.917 220.125 111.812 220.021 111.727 219.901C111.631 219.766 111.57 219.606 111.446 219.285L110.688 217.312Z" stroke="#344054" stroke-width="0.9375" stroke-linecap="round" stroke-linejoin="round"/>
</g>
<path d="M119.969 217.705H121.168L123.251 222.793H123.328L125.412 217.705H126.61V224.25H125.671V219.513H125.61L123.68 224.24H122.9L120.969 219.51H120.909V224.25H119.969V217.705ZM130.037 224.349C129.577 224.349 129.176 224.244 128.832 224.033C128.489 223.822 128.223 223.527 128.033 223.147C127.844 222.768 127.749 222.325 127.749 221.818C127.749 221.309 127.844 220.863 128.033 220.482C128.223 220.1 128.489 219.804 128.832 219.593C129.176 219.382 129.577 219.277 130.037 219.277C130.498 219.277 130.899 219.382 131.242 219.593C131.585 219.804 131.852 220.1 132.041 220.482C132.231 220.863 132.326 221.309 132.326 221.818C132.326 222.325 132.231 222.768 132.041 223.147C131.852 223.527 131.585 223.822 131.242 224.033C130.899 224.244 130.498 224.349 130.037 224.349ZM130.041 223.547C130.339 223.547 130.586 223.468 130.782 223.31C130.978 223.153 131.123 222.943 131.217 222.681C131.313 222.419 131.361 222.13 131.361 221.815C131.361 221.501 131.313 221.214 131.217 220.952C131.123 220.687 130.978 220.475 130.782 220.316C130.586 220.156 130.339 220.076 130.041 220.076C129.74 220.076 129.491 220.156 129.293 220.316C129.097 220.475 128.951 220.687 128.855 220.952C128.761 221.214 128.714 221.501 128.714 221.815C128.714 222.13 128.761 222.419 128.855 222.681C128.951 222.943 129.097 223.153 129.293 223.31C129.491 223.468 129.74 223.547 130.041 223.547ZM133.392 224.25V219.341H134.316V220.121H134.367C134.457 219.857 134.614 219.649 134.84 219.498C135.068 219.344 135.326 219.267 135.614 219.267C135.673 219.267 135.744 219.27 135.825 219.274C135.908 219.278 135.973 219.283 136.02 219.29V220.204C135.981 220.193 135.913 220.181 135.815 220.169C135.717 220.154 135.619 220.146 135.521 220.146C135.295 220.146 135.094 220.194 134.917 220.29C134.742 220.384 134.604 220.515 134.501 220.683C134.399 220.849 134.348 221.039 134.348 221.252V224.25H133.392ZM138.786 224.349C138.303 224.349 137.886 224.246 137.537 224.039C137.19 223.83 136.921 223.537 136.731 223.16C136.544 222.781 136.45 222.337 136.45 221.827C136.45 221.325 136.544 220.881 136.731 220.498C136.921 220.114 137.185 219.815 137.524 219.6C137.865 219.385 138.263 219.277 138.719 219.277C138.996 219.277 139.265 219.323 139.525 219.414C139.785 219.506 140.018 219.65 140.225 219.846C140.431 220.042 140.594 220.297 140.714 220.61C140.833 220.921 140.893 221.299 140.893 221.744V222.083H136.99V221.367H139.956C139.956 221.116 139.905 220.893 139.803 220.699C139.701 220.503 139.557 220.349 139.371 220.236C139.188 220.123 138.973 220.066 138.726 220.066C138.457 220.066 138.223 220.132 138.023 220.265C137.824 220.395 137.671 220.565 137.562 220.776C137.456 220.985 137.403 221.212 137.403 221.457V222.016C137.403 222.344 137.46 222.623 137.575 222.853C137.692 223.083 137.855 223.259 138.064 223.381C138.273 223.5 138.517 223.56 138.796 223.56C138.977 223.56 139.142 223.534 139.291 223.483C139.441 223.43 139.57 223.351 139.678 223.246C139.787 223.142 139.87 223.013 139.927 222.86L140.832 223.023C140.759 223.289 140.63 223.522 140.442 223.723C140.257 223.921 140.023 224.075 139.742 224.186C139.463 224.295 139.144 224.349 138.786 224.349ZM145.29 217.705V224.25H144.335V217.705H145.29ZM146.576 224.25V219.341H147.532V224.25H146.576ZM147.059 218.583C146.892 218.583 146.75 218.528 146.63 218.417C146.513 218.304 146.455 218.17 146.455 218.015C146.455 217.857 146.513 217.723 146.63 217.612C146.75 217.499 146.892 217.442 147.059 217.442C147.225 217.442 147.366 217.499 147.484 217.612C147.603 217.723 147.663 217.857 147.663 218.015C147.663 218.17 147.603 218.304 147.484 218.417C147.366 218.528 147.225 218.583 147.059 218.583ZM149.696 222.585L149.69 221.418H149.856L151.812 219.341H152.956L150.725 221.706H150.575L149.696 222.585ZM148.817 224.25V217.705H149.773V224.25H148.817ZM151.917 224.25L150.16 221.917L150.818 221.249L153.09 224.25H151.917ZM155.741 224.349C155.257 224.349 154.84 224.246 154.491 224.039C154.144 223.83 153.875 223.537 153.686 223.16C153.498 222.781 153.404 222.337 153.404 221.827C153.404 221.325 153.498 220.881 153.686 220.498C153.875 220.114 154.139 219.815 154.478 219.6C154.819 219.385 155.218 219.277 155.673 219.277C155.95 219.277 156.219 219.323 156.479 219.414C156.739 219.506 156.972 219.65 157.179 219.846C157.385 220.042 157.548 220.297 157.668 220.61C157.787 220.921 157.847 221.299 157.847 221.744V222.083H153.944V221.367H156.91C156.91 221.116 156.859 220.893 156.757 220.699C156.655 220.503 156.511 220.349 156.325 220.236C156.142 220.123 155.927 220.066 155.68 220.066C155.411 220.066 155.177 220.132 154.977 220.265C154.779 220.395 154.625 220.565 154.517 220.776C154.41 220.985 154.357 221.212 154.357 221.457V222.016C154.357 222.344 154.414 222.623 154.529 222.853C154.646 223.083 154.809 223.259 155.018 223.381C155.227 223.5 155.471 223.56 155.75 223.56C155.931 223.56 156.096 223.534 156.246 223.483C156.395 223.43 156.524 223.351 156.632 223.246C156.741 223.142 156.824 223.013 156.882 222.86L157.786 223.023C157.714 223.289 157.584 223.522 157.396 223.723C157.211 223.921 156.977 224.075 156.696 224.186C156.417 224.295 156.099 224.349 155.741 224.349ZM163.58 219.341V220.108H160.899V219.341H163.58ZM161.618 218.165H162.574V222.809C162.574 222.994 162.601 223.134 162.657 223.227C162.712 223.319 162.784 223.382 162.871 223.416C162.96 223.448 163.057 223.464 163.162 223.464C163.238 223.464 163.306 223.458 163.363 223.448C163.421 223.437 163.465 223.429 163.497 223.422L163.67 224.212C163.615 224.233 163.536 224.254 163.433 224.276C163.331 224.299 163.203 224.312 163.05 224.314C162.798 224.318 162.564 224.273 162.347 224.18C162.129 224.086 161.954 223.941 161.819 223.745C161.685 223.549 161.618 223.303 161.618 223.007V218.165ZM165.699 221.335V224.25H164.743V217.705H165.686V220.14H165.747C165.862 219.876 166.037 219.666 166.274 219.51C166.51 219.355 166.819 219.277 167.201 219.277C167.537 219.277 167.831 219.346 168.083 219.485C168.336 219.623 168.532 219.83 168.671 220.105C168.812 220.377 168.882 220.718 168.882 221.127V224.25H167.926V221.243C167.926 220.882 167.834 220.603 167.648 220.405C167.463 220.205 167.205 220.105 166.875 220.105C166.649 220.105 166.446 220.153 166.267 220.249C166.091 220.344 165.951 220.485 165.849 220.67C165.749 220.854 165.699 221.075 165.699 221.335ZM170.157 224.25V219.341H171.113V224.25H170.157ZM170.64 218.583C170.473 218.583 170.331 218.528 170.211 218.417C170.094 218.304 170.036 218.17 170.036 218.015C170.036 217.857 170.094 217.723 170.211 217.612C170.331 217.499 170.473 217.442 170.64 217.442C170.806 217.442 170.948 217.499 171.065 217.612C171.184 217.723 171.244 217.857 171.244 218.015C171.244 218.17 171.184 218.304 171.065 218.417C170.948 218.528 170.806 218.583 170.64 218.583ZM176.077 220.539L175.211 220.693C175.175 220.582 175.117 220.477 175.038 220.376C174.961 220.276 174.857 220.194 174.725 220.13C174.593 220.066 174.428 220.034 174.23 220.034C173.959 220.034 173.733 220.095 173.552 220.217C173.371 220.336 173.28 220.49 173.28 220.68C173.28 220.844 173.341 220.976 173.463 221.076C173.584 221.176 173.78 221.259 174.051 221.322L174.83 221.501C175.282 221.606 175.619 221.767 175.84 221.984C176.062 222.201 176.173 222.484 176.173 222.831C176.173 223.125 176.088 223.387 175.917 223.617C175.749 223.845 175.513 224.024 175.211 224.154C174.91 224.284 174.562 224.349 174.166 224.349C173.616 224.349 173.167 224.232 172.82 223.998C172.473 223.761 172.26 223.425 172.181 222.991L173.105 222.85C173.162 223.091 173.28 223.273 173.459 223.397C173.638 223.518 173.872 223.579 174.159 223.579C174.472 223.579 174.723 223.514 174.91 223.384C175.098 223.252 175.192 223.091 175.192 222.901C175.192 222.748 175.134 222.619 175.019 222.515C174.906 222.41 174.732 222.331 174.498 222.278L173.667 222.096C173.209 221.991 172.87 221.825 172.651 221.597C172.433 221.369 172.325 221.081 172.325 220.731C172.325 220.441 172.406 220.188 172.568 219.971C172.73 219.753 172.953 219.584 173.239 219.462C173.524 219.339 173.851 219.277 174.22 219.277C174.751 219.277 175.168 219.392 175.473 219.622C175.778 219.85 175.979 220.156 176.077 220.539Z" fill="#344054"/>
<rect x="96.375" y="210.875" width="89.5" height="20.75" rx="4.125" stroke="#EAECF0" stroke-width="0.75"/>
</g>
<rect x="30.1875" y="154.188" width="243.625" height="89.625" rx="8.8125" stroke="#EAECF0" stroke-width="0.375"/>
</g>
<g filter="url(#filter3_d_3472_38727)">
<g clip-path="url(#clip7_3472_38727)">
<rect x="30" y="250" width="244" height="90" rx="9" fill="white"/>
<path d="M50.0625 266.375L48.9375 273.125M53.0625 266.375L51.9375 273.125M54.1875 268.25H47.8125M53.8125 271.25H47.4375" stroke="#98A2B3" stroke-width="0.75" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M59.2764 272.85C58.8135 272.85 58.4385 272.729 58.1514 272.486C57.8643 272.242 57.6729 271.889 57.5771 271.426C57.4814 270.963 57.4863 270.405 57.5918 269.753C57.6992 269.103 57.8779 268.547 58.1279 268.086C58.3799 267.625 58.6895 267.273 59.0566 267.031C59.4258 266.789 59.8398 266.668 60.2988 266.668C60.7559 266.668 61.1289 266.79 61.418 267.034C61.707 267.276 61.9014 267.627 62.001 268.086C62.1025 268.545 62.0986 269.101 61.9893 269.753C61.8799 270.407 61.7002 270.965 61.4502 271.426C61.2002 271.887 60.8906 272.239 60.5215 272.483C60.1523 272.728 59.7373 272.85 59.2764 272.85ZM59.4053 272.067C59.8135 272.067 60.165 271.869 60.46 271.473C60.7549 271.076 60.9648 270.503 61.0898 269.753C61.1719 269.255 61.1885 268.834 61.1396 268.49C61.0928 268.145 60.9863 267.883 60.8203 267.705C60.6563 267.525 60.4395 267.436 60.1699 267.436C59.7676 267.436 59.418 267.636 59.1211 268.036C58.8262 268.435 58.6172 269.007 58.4941 269.753C58.4102 270.253 58.3916 270.676 58.4385 271.021C58.4854 271.365 58.5908 271.626 58.7549 271.804C58.9189 271.979 59.1357 272.067 59.4053 272.067ZM64.6516 272.832C64.2415 272.832 63.887 272.764 63.5881 272.627C63.2893 272.488 63.0667 272.295 62.9202 272.047C62.7756 271.799 62.7258 271.512 62.7708 271.186H63.676C63.6565 271.361 63.6858 271.515 63.7639 271.646C63.844 271.776 63.9622 271.877 64.1184 271.947C64.2747 272.018 64.4612 272.053 64.678 272.053C64.9143 272.053 65.134 272.011 65.3372 271.927C65.5422 271.843 65.7131 271.724 65.8499 271.569C65.9885 271.413 66.0735 271.23 66.1047 271.021C66.134 270.828 66.1116 270.659 66.0374 270.515C65.9631 270.368 65.8372 270.254 65.6594 270.172C65.4817 270.09 65.2542 270.049 64.9768 270.049H64.4524L64.5754 269.311H65.0559C65.2805 269.311 65.4856 269.269 65.6711 269.185C65.8586 269.101 66.0149 268.982 66.1399 268.83C66.2649 268.678 66.343 268.5 66.3743 268.297C66.4055 268.121 66.3938 267.969 66.3391 267.84C66.2844 267.709 66.1907 267.607 66.0579 267.535C65.927 267.461 65.759 267.424 65.554 267.424C65.3567 267.424 65.1633 267.46 64.9739 267.532C64.7844 267.603 64.6233 267.704 64.4905 267.837C64.3577 267.968 64.2747 268.125 64.2415 268.309H63.3684C63.429 267.984 63.5676 267.699 63.7844 267.453C64.0012 267.207 64.2678 267.015 64.5842 266.876C64.9026 266.737 65.2415 266.668 65.6008 266.668C65.9934 266.668 66.3196 266.747 66.5793 266.905C66.8391 267.063 67.0256 267.271 67.1389 267.526C67.2542 267.782 67.2883 268.059 67.2415 268.355C67.1868 268.689 67.0461 268.967 66.8196 269.187C66.593 269.406 66.3147 269.557 65.9846 269.639V269.677C66.3655 269.739 66.6458 269.906 66.8254 270.178C67.0051 270.449 67.0637 270.775 67.0012 271.156C66.9465 271.494 66.8108 271.789 66.594 272.041C66.3772 272.291 66.1018 272.485 65.7678 272.624C65.4338 272.763 65.0618 272.832 64.6516 272.832Z" fill="#667085"/>
<rect x="42.375" y="262.375" width="29.75" height="14.75" rx="4.125" stroke="#EAECF0" stroke-width="0.75"/>
<g opacity="0.1">
<rect x="42" y="283.5" width="220" height="4" rx="2" fill="#101828"/>
</g>
<g opacity="0.1">
<rect x="42" y="293.5" width="180" height="4" rx="2" fill="#101828"/>
</g>
<rect x="42.375" y="307.125" width="20.25" height="20.25" rx="4.125" fill="white"/>
<g clip-path="url(#clip8_3472_38727)">
<path d="M54.5 313.25H55.5C55.7652 313.25 56.0196 313.355 56.2071 313.543C56.3946 313.73 56.5 313.985 56.5 314.25V321.25C56.5 321.515 56.3946 321.77 56.2071 321.957C56.0196 322.145 55.7652 322.25 55.5 322.25H49.5C49.2348 322.25 48.9804 322.145 48.7929 321.957C48.6054 321.77 48.5 321.515 48.5 321.25V314.25C48.5 313.985 48.6054 313.73 48.7929 313.543C48.9804 313.355 49.2348 313.25 49.5 313.25H50.5M51 312.25H54C54.2761 312.25 54.5 312.474 54.5 312.75V313.75C54.5 314.026 54.2761 314.25 54 314.25H51C50.7239 314.25 50.5 314.026 50.5 313.75V312.75C50.5 312.474 50.7239 312.25 51 312.25Z" stroke="#344054" stroke-width="0.94" stroke-linecap="round" stroke-linejoin="round"/>
</g>
<rect x="42.375" y="307.125" width="20.25" height="20.25" rx="4.125" stroke="#EAECF0" stroke-width="0.75"/>
<rect x="69.375" y="307.125" width="20.25" height="20.25" rx="4.125" fill="white"/>
<path d="M83 321.75L79.5 319.25L76 321.75V313.75C76 313.485 76.1054 313.23 76.2929 313.043C76.4804 312.855 76.7348 312.75 77 312.75H82C82.2652 312.75 82.5196 312.855 82.7071 313.043C82.8946 313.23 83 313.485 83 313.75V321.75Z" stroke="#344054" stroke-width="0.94" stroke-linecap="round" stroke-linejoin="round"/>
<rect x="69.375" y="307.125" width="20.25" height="20.25" rx="4.125" stroke="#EAECF0" stroke-width="0.75"/>
<rect x="96.375" y="306.875" width="89.5" height="20.75" rx="4.125" fill="white"/>
<g clip-path="url(#clip9_3472_38727)">
<path d="M106.969 321.625V319.438M106.969 315.062V312.875M105.875 313.969H108.062M105.875 320.531H108.062M110.688 313.312L109.929 315.285C109.805 315.606 109.744 315.766 109.648 315.901C109.563 316.021 109.458 316.125 109.339 316.21C109.204 316.306 109.043 316.368 108.723 316.491L106.75 317.25L108.723 318.009C109.043 318.132 109.204 318.194 109.339 318.29C109.458 318.375 109.563 318.479 109.648 318.599C109.744 318.734 109.805 318.894 109.929 319.215L110.688 321.188L111.446 319.215C111.57 318.894 111.631 318.734 111.727 318.599C111.812 318.479 111.917 318.375 112.036 318.29C112.171 318.194 112.332 318.132 112.652 318.009L114.625 317.25L112.652 316.491C112.332 316.368 112.171 316.306 112.036 316.21C111.917 316.125 111.812 316.021 111.727 315.901C111.631 315.766 111.57 315.606 111.446 315.285L110.688 313.312Z" stroke="#344054" stroke-width="0.9375" stroke-linecap="round" stroke-linejoin="round"/>
</g>
<path d="M119.969 313.705H121.168L123.251 318.793H123.328L125.412 313.705H126.61V320.25H125.671V315.513H125.61L123.68 320.24H122.9L120.969 315.51H120.909V320.25H119.969V313.705ZM130.037 320.349C129.577 320.349 129.176 320.244 128.832 320.033C128.489 319.822 128.223 319.527 128.033 319.147C127.844 318.768 127.749 318.325 127.749 317.818C127.749 317.309 127.844 316.863 128.033 316.482C128.223 316.1 128.489 315.804 128.832 315.593C129.176 315.382 129.577 315.277 130.037 315.277C130.498 315.277 130.899 315.382 131.242 315.593C131.585 315.804 131.852 316.1 132.041 316.482C132.231 316.863 132.326 317.309 132.326 317.818C132.326 318.325 132.231 318.768 132.041 319.147C131.852 319.527 131.585 319.822 131.242 320.033C130.899 320.244 130.498 320.349 130.037 320.349ZM130.041 319.547C130.339 319.547 130.586 319.468 130.782 319.31C130.978 319.153 131.123 318.943 131.217 318.681C131.313 318.419 131.361 318.13 131.361 317.815C131.361 317.501 131.313 317.214 131.217 316.952C131.123 316.687 130.978 316.475 130.782 316.316C130.586 316.156 130.339 316.076 130.041 316.076C129.74 316.076 129.491 316.156 129.293 316.316C129.097 316.475 128.951 316.687 128.855 316.952C128.761 317.214 128.714 317.501 128.714 317.815C128.714 318.13 128.761 318.419 128.855 318.681C128.951 318.943 129.097 319.153 129.293 319.31C129.491 319.468 129.74 319.547 130.041 319.547ZM133.392 320.25V315.341H134.316V316.121H134.367C134.457 315.857 134.614 315.649 134.84 315.498C135.068 315.344 135.326 315.267 135.614 315.267C135.673 315.267 135.744 315.27 135.825 315.274C135.908 315.278 135.973 315.283 136.02 315.29V316.204C135.981 316.193 135.913 316.181 135.815 316.169C135.717 316.154 135.619 316.146 135.521 316.146C135.295 316.146 135.094 316.194 134.917 316.29C134.742 316.384 134.604 316.515 134.501 316.683C134.399 316.849 134.348 317.039 134.348 317.252V320.25H133.392ZM138.786 320.349C138.303 320.349 137.886 320.246 137.537 320.039C137.19 319.83 136.921 319.537 136.731 319.16C136.544 318.781 136.45 318.337 136.45 317.827C136.45 317.325 136.544 316.881 136.731 316.498C136.921 316.114 137.185 315.815 137.524 315.6C137.865 315.385 138.263 315.277 138.719 315.277C138.996 315.277 139.265 315.323 139.525 315.414C139.785 315.506 140.018 315.65 140.225 315.846C140.431 316.042 140.594 316.297 140.714 316.61C140.833 316.921 140.893 317.299 140.893 317.744V318.083H136.99V317.367H139.956C139.956 317.116 139.905 316.893 139.803 316.699C139.701 316.503 139.557 316.349 139.371 316.236C139.188 316.123 138.973 316.066 138.726 316.066C138.457 316.066 138.223 316.132 138.023 316.265C137.824 316.395 137.671 316.565 137.562 316.776C137.456 316.985 137.403 317.212 137.403 317.457V318.016C137.403 318.344 137.46 318.623 137.575 318.853C137.692 319.083 137.855 319.259 138.064 319.381C138.273 319.5 138.517 319.56 138.796 319.56C138.977 319.56 139.142 319.534 139.291 319.483C139.441 319.43 139.57 319.351 139.678 319.246C139.787 319.142 139.87 319.013 139.927 318.86L140.832 319.023C140.759 319.289 140.63 319.522 140.442 319.723C140.257 319.921 140.023 320.075 139.742 320.186C139.463 320.295 139.144 320.349 138.786 320.349ZM145.29 313.705V320.25H144.335V313.705H145.29ZM146.576 320.25V315.341H147.532V320.25H146.576ZM147.059 314.583C146.892 314.583 146.75 314.528 146.63 314.417C146.513 314.304 146.455 314.17 146.455 314.015C146.455 313.857 146.513 313.723 146.63 313.612C146.75 313.499 146.892 313.442 147.059 313.442C147.225 313.442 147.366 313.499 147.484 313.612C147.603 313.723 147.663 313.857 147.663 314.015C147.663 314.17 147.603 314.304 147.484 314.417C147.366 314.528 147.225 314.583 147.059 314.583ZM149.696 318.585L149.69 317.418H149.856L151.812 315.341H152.956L150.725 317.706H150.575L149.696 318.585ZM148.817 320.25V313.705H149.773V320.25H148.817ZM151.917 320.25L150.16 317.917L150.818 317.249L153.09 320.25H151.917ZM155.741 320.349C155.257 320.349 154.84 320.246 154.491 320.039C154.144 319.83 153.875 319.537 153.686 319.16C153.498 318.781 153.404 318.337 153.404 317.827C153.404 317.325 153.498 316.881 153.686 316.498C153.875 316.114 154.139 315.815 154.478 315.6C154.819 315.385 155.218 315.277 155.673 315.277C155.95 315.277 156.219 315.323 156.479 315.414C156.739 315.506 156.972 315.65 157.179 315.846C157.385 316.042 157.548 316.297 157.668 316.61C157.787 316.921 157.847 317.299 157.847 317.744V318.083H153.944V317.367H156.91C156.91 317.116 156.859 316.893 156.757 316.699C156.655 316.503 156.511 316.349 156.325 316.236C156.142 316.123 155.927 316.066 155.68 316.066C155.411 316.066 155.177 316.132 154.977 316.265C154.779 316.395 154.625 316.565 154.517 316.776C154.41 316.985 154.357 317.212 154.357 317.457V318.016C154.357 318.344 154.414 318.623 154.529 318.853C154.646 319.083 154.809 319.259 155.018 319.381C155.227 319.5 155.471 319.56 155.75 319.56C155.931 319.56 156.096 319.534 156.246 319.483C156.395 319.43 156.524 319.351 156.632 319.246C156.741 319.142 156.824 319.013 156.882 318.86L157.786 319.023C157.714 319.289 157.584 319.522 157.396 319.723C157.211 319.921 156.977 320.075 156.696 320.186C156.417 320.295 156.099 320.349 155.741 320.349ZM163.58 315.341V316.108H160.899V315.341H163.58ZM161.618 314.165H162.574V318.809C162.574 318.994 162.601 319.134 162.657 319.227C162.712 319.319 162.784 319.382 162.871 319.416C162.96 319.448 163.057 319.464 163.162 319.464C163.238 319.464 163.306 319.458 163.363 319.448C163.421 319.437 163.465 319.429 163.497 319.422L163.67 320.212C163.615 320.233 163.536 320.254 163.433 320.276C163.331 320.299 163.203 320.312 163.05 320.314C162.798 320.318 162.564 320.273 162.347 320.18C162.129 320.086 161.954 319.941 161.819 319.745C161.685 319.549 161.618 319.303 161.618 319.007V314.165ZM165.699 317.335V320.25H164.743V313.705H165.686V316.14H165.747C165.862 315.876 166.037 315.666 166.274 315.51C166.51 315.355 166.819 315.277 167.201 315.277C167.537 315.277 167.831 315.346 168.083 315.485C168.336 315.623 168.532 315.83 168.671 316.105C168.812 316.377 168.882 316.718 168.882 317.127V320.25H167.926V317.243C167.926 316.882 167.834 316.603 167.648 316.405C167.463 316.205 167.205 316.105 166.875 316.105C166.649 316.105 166.446 316.153 166.267 316.249C166.091 316.344 165.951 316.485 165.849 316.67C165.749 316.854 165.699 317.075 165.699 317.335ZM170.157 320.25V315.341H171.113V320.25H170.157ZM170.64 314.583C170.473 314.583 170.331 314.528 170.211 314.417C170.094 314.304 170.036 314.17 170.036 314.015C170.036 313.857 170.094 313.723 170.211 313.612C170.331 313.499 170.473 313.442 170.64 313.442C170.806 313.442 170.948 313.499 171.065 313.612C171.184 313.723 171.244 313.857 171.244 314.015C171.244 314.17 171.184 314.304 171.065 314.417C170.948 314.528 170.806 314.583 170.64 314.583ZM176.077 316.539L175.211 316.693C175.175 316.582 175.117 316.477 175.038 316.376C174.961 316.276 174.857 316.194 174.725 316.13C174.593 316.066 174.428 316.034 174.23 316.034C173.959 316.034 173.733 316.095 173.552 316.217C173.371 316.336 173.28 316.49 173.28 316.68C173.28 316.844 173.341 316.976 173.463 317.076C173.584 317.176 173.78 317.259 174.051 317.322L174.83 317.501C175.282 317.606 175.619 317.767 175.84 317.984C176.062 318.201 176.173 318.484 176.173 318.831C176.173 319.125 176.088 319.387 175.917 319.617C175.749 319.845 175.513 320.024 175.211 320.154C174.91 320.284 174.562 320.349 174.166 320.349C173.616 320.349 173.167 320.232 172.82 319.998C172.473 319.761 172.26 319.425 172.181 318.991L173.105 318.85C173.162 319.091 173.28 319.273 173.459 319.397C173.638 319.518 173.872 319.579 174.159 319.579C174.472 319.579 174.723 319.514 174.91 319.384C175.098 319.252 175.192 319.091 175.192 318.901C175.192 318.748 175.134 318.619 175.019 318.515C174.906 318.41 174.732 318.331 174.498 318.278L173.667 318.096C173.209 317.991 172.87 317.825 172.651 317.597C172.433 317.369 172.325 317.081 172.325 316.731C172.325 316.441 172.406 316.188 172.568 315.971C172.73 315.753 172.953 315.584 173.239 315.462C173.524 315.339 173.851 315.277 174.22 315.277C174.751 315.277 175.168 315.392 175.473 315.622C175.778 315.85 175.979 316.156 176.077 316.539Z" fill="#344054"/>
<rect x="96.375" y="306.875" width="89.5" height="20.75" rx="4.125" stroke="#EAECF0" stroke-width="0.75"/>
</g>
<rect x="30.1875" y="250.188" width="243.625" height="89.625" rx="8.8125" stroke="#EAECF0" stroke-width="0.375"/>
</g>
</g>
</g>
<defs>
<filter id="filter0_dd_3472_38727" x="0" y="0" width="304" height="384" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
<feMorphology radius="2" operator="erode" in="SourceAlpha" result="effect1_dropShadow_3472_38727"/>
<feOffset dy="4"/>
<feGaussianBlur stdDeviation="3"/>
<feColorMatrix type="matrix" values="0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.03 0"/>
<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_3472_38727"/>
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
<feMorphology radius="4" operator="erode" in="SourceAlpha" result="effect2_dropShadow_3472_38727"/>
<feOffset dy="12"/>
<feGaussianBlur stdDeviation="8"/>
<feColorMatrix type="matrix" values="0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.08 0"/>
<feBlend mode="normal" in2="effect1_dropShadow_3472_38727" result="effect2_dropShadow_3472_38727"/>
<feBlend mode="normal" in="SourceGraphic" in2="effect2_dropShadow_3472_38727" result="shape"/>
</filter>
<pattern id="pattern0" patternContentUnits="objectBoundingBox" width="1" height="1">
<use xlink:href="#image0_3472_38727" transform="scale(0.015625)"/>
</pattern>
<filter id="filter1_d_3472_38727" x="28.5" y="47.25" width="247" height="103" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
<feOffset dy="0.75"/>
<feGaussianBlur stdDeviation="0.75"/>
<feColorMatrix type="matrix" values="0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.05 0"/>
<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_3472_38727"/>
<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_3472_38727" result="shape"/>
</filter>
<filter id="filter2_d_3472_38727" x="28.5" y="153.25" width="247" height="93" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
<feOffset dy="0.75"/>
<feGaussianBlur stdDeviation="0.75"/>
<feColorMatrix type="matrix" values="0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.05 0"/>
<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_3472_38727"/>
<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_3472_38727" result="shape"/>
</filter>
<filter id="filter3_d_3472_38727" x="28.5" y="249.25" width="247" height="93" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
<feOffset dy="0.75"/>
<feGaussianBlur stdDeviation="0.75"/>
<feColorMatrix type="matrix" values="0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.05 0"/>
<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_3472_38727"/>
<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_3472_38727" result="shape"/>
</filter>
<clipPath id="clip0_3472_38727">
<rect x="12" width="280" height="360" rx="12" fill="white"/>
</clipPath>
<clipPath id="clip1_3472_38727">
<rect x="30" y="48" width="244" height="100" rx="9" fill="white"/>
</clipPath>
<clipPath id="clip2_3472_38727">
<rect width="12" height="12" fill="white" transform="translate(46.5 119.25)"/>
</clipPath>
<clipPath id="clip3_3472_38727">
<rect width="10.5" height="10.5" fill="white" transform="translate(105 120)"/>
</clipPath>
<clipPath id="clip4_3472_38727">
<rect x="30" y="154" width="244" height="90" rx="9" fill="white"/>
</clipPath>
<clipPath id="clip5_3472_38727">
<rect width="12" height="12" fill="white" transform="translate(46.5 215.25)"/>
</clipPath>
<clipPath id="clip6_3472_38727">
<rect width="10.5" height="10.5" fill="white" transform="translate(105 216)"/>
</clipPath>
<clipPath id="clip7_3472_38727">
<rect x="30" y="250" width="244" height="90" rx="9" fill="white"/>
</clipPath>
<clipPath id="clip8_3472_38727">
<rect width="12" height="12" fill="white" transform="translate(46.5 311.25)"/>
</clipPath>
<clipPath id="clip9_3472_38727">
<rect width="10.5" height="10.5" fill="white" transform="translate(105 312)"/>
</clipPath>
<image id="image0_3472_38727" width="64" height="64" xlink:href="data:image/png;base64,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"/>
</defs>
</svg>
<svg width="304" height="384" viewBox="0 0 304 384" fill="none" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g filter="url(#filter0_dd_7128_54033)">
<g clip-path="url(#clip0_7128_54033)">
<rect x="12" width="280" height="360" rx="12" fill="white"/>
<mask id="path-2-inside-1_7128_54033" fill="white">
<path d="M12 0H292V32H12V0Z"/>
</mask>
<path d="M12 0H292V32H12V0Z" fill="#F9FAFB"/>
<rect x="118" y="8" width="16" height="16" rx="4" fill="#D5F5F6"/>
<path d="M120.833 21.7467H131.5V11.08H120.833V21.7467Z" fill="url(#pattern0)"/>
<rect x="118.167" y="8.16667" width="15.6667" height="15.6667" rx="3.83333" stroke="black" stroke-opacity="0.05" stroke-width="0.333333"/>
<g opacity="0.12">
<rect x="142" y="14" width="44" height="4" rx="2" fill="#101828"/>
</g>
<path d="M292 31H12V33H292V31Z" fill="#F2F4F7" mask="url(#path-2-inside-1_7128_54033)"/>
<rect x="30" y="50" width="30" height="30" rx="15" fill="#D5F5F6"/>
<path d="M37.5 72.8H52.5V57.8H37.5V72.8Z" fill="url(#pattern1)"/>
<rect x="30.1875" y="50.1875" width="29.625" height="29.625" rx="14.8125" stroke="black" stroke-opacity="0.05" stroke-width="0.375"/>
<path d="M72 50H224.8C231.521 50 234.881 50 237.448 51.3079C239.706 52.4584 241.542 54.2942 242.692 56.5521C244 59.1191 244 62.4794 244 69.2V90.8C244 97.5206 244 100.881 242.692 103.448C241.542 105.706 239.706 107.542 237.448 108.692C234.881 110 231.521 110 224.8 110H91.2C84.4794 110 81.1191 110 78.5521 108.692C76.2942 107.542 74.4584 105.706 73.3079 103.448C72 100.881 72 97.5206 72 90.8V50Z" fill="#F2F4F7"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M88.6879 62.25C86.7204 62.25 85.1254 63.845 85.1254 65.8125C85.1254 66.21 85.1907 66.593 85.3114 66.951C85.3326 67.014 85.3451 67.0512 85.3532 67.0787L85.3558 67.088L85.3544 67.0909C85.3448 67.1108 85.3305 67.1375 85.3037 67.1871L84.6842 68.3336C84.6458 68.4047 84.6058 68.4788 84.5782 68.5432C84.5508 68.6073 84.5065 68.7248 84.5283 68.8641C84.5539 69.0274 84.65 69.1712 84.7911 69.2572C84.9115 69.3307 85.037 69.3346 85.1067 69.3338C85.1768 69.333 85.2605 69.3243 85.3409 69.316L87.274 69.1161C87.3049 69.1129 87.3211 69.1113 87.333 69.1104L87.3345 69.1103L87.3391 69.1119C87.3537 69.1172 87.3735 69.1247 87.4076 69.1379C87.8054 69.2912 88.2373 69.375 88.6879 69.375C90.6555 69.375 92.2504 67.78 92.2504 65.8125C92.2504 63.845 90.6555 62.25 88.6879 62.25ZM87.364 64.7183C87.7868 64.3616 88.3494 64.4664 88.6868 64.856C89.0242 64.4664 89.5795 64.3654 90.0095 64.7183C90.4395 65.0713 90.4918 65.6715 90.1598 66.0934C89.9541 66.3548 89.4379 66.8322 89.0749 67.1576C88.9415 67.2771 88.8749 67.3369 88.7948 67.361C88.7262 67.3817 88.6473 67.3817 88.5787 67.361C88.4987 67.3369 88.432 67.2771 88.2987 67.1576C87.9356 66.8322 87.4194 66.3548 87.2138 66.0934C86.8818 65.6715 86.9413 65.0751 87.364 64.7183Z" fill="#667085"/>
<path d="M102.405 65.7273C102.405 66.4261 102.277 67.027 102.021 67.5298C101.766 68.0305 101.415 68.4162 100.97 68.6868C100.527 68.9553 100.023 69.0895 99.4581 69.0895C98.8913 69.0895 98.3853 68.9553 97.94 68.6868C97.4968 68.4162 97.1474 68.0295 96.8917 67.5266C96.636 67.0238 96.5082 66.424 96.5082 65.7273C96.5082 65.0284 96.636 64.4286 96.8917 63.9279C97.1474 63.4251 97.4968 63.0394 97.94 62.771C98.3853 62.5004 98.8913 62.3651 99.4581 62.3651C100.023 62.3651 100.527 62.5004 100.97 62.771C101.415 63.0394 101.766 63.4251 102.021 63.9279C102.277 64.4286 102.405 65.0284 102.405 65.7273ZM101.427 65.7273C101.427 65.1946 101.341 64.7461 101.168 64.3817C100.998 64.0153 100.763 63.7383 100.465 63.5508C100.169 63.3612 99.8331 63.2663 99.4581 63.2663C99.081 63.2663 98.7443 63.3612 98.4482 63.5508C98.152 63.7383 97.9176 64.0153 97.745 64.3817C97.5746 64.7461 97.4893 65.1946 97.4893 65.7273C97.4893 66.2599 97.5746 66.7095 97.745 67.076C97.9176 67.4403 98.152 67.7173 98.4482 67.907C98.7443 68.0945 99.081 68.1882 99.4581 68.1882C99.8331 68.1882 100.169 68.0945 100.465 67.907C100.763 67.7173 100.998 67.4403 101.168 67.076C101.341 66.7095 101.427 66.2599 101.427 65.7273ZM103.559 70.8409V64.0909H104.493V64.8867H104.573C104.628 64.7844 104.708 64.6662 104.812 64.532C104.917 64.3977 105.062 64.2805 105.247 64.1804C105.432 64.0781 105.677 64.027 105.982 64.027C106.378 64.027 106.732 64.1271 107.043 64.3274C107.354 64.5277 107.598 64.8164 107.775 65.1935C107.954 65.5707 108.043 66.0245 108.043 66.555C108.043 67.0856 107.955 67.5405 107.778 67.9197C107.601 68.2969 107.358 68.5877 107.049 68.7923C106.741 68.9947 106.388 69.0959 105.992 69.0959C105.693 69.0959 105.449 69.0458 105.26 68.9457C105.072 68.8455 104.925 68.7283 104.819 68.5941C104.712 68.4599 104.63 68.3406 104.573 68.2362H104.515V70.8409H103.559ZM104.496 66.5455C104.496 66.8906 104.546 67.1932 104.646 67.4531C104.746 67.7131 104.891 67.9165 105.081 68.0636C105.27 68.2085 105.503 68.2809 105.777 68.2809C106.063 68.2809 106.302 68.2053 106.493 68.054C106.685 67.9006 106.83 67.6928 106.928 67.4308C107.028 67.1687 107.078 66.8736 107.078 66.5455C107.078 66.2216 107.029 65.9308 106.931 65.6729C106.835 65.4151 106.69 65.2116 106.497 65.0625C106.305 64.9134 106.065 64.8388 105.777 64.8388C105.5 64.8388 105.266 64.9102 105.074 65.0529C104.885 65.1957 104.741 65.3949 104.643 65.6506C104.545 65.9062 104.496 66.2045 104.496 66.5455ZM111.23 69.0991C110.746 69.0991 110.33 68.9957 109.98 68.7891C109.633 68.5803 109.364 68.2873 109.175 67.9102C108.987 67.5309 108.894 67.0866 108.894 66.5774C108.894 66.0746 108.987 65.6314 109.175 65.2479C109.364 64.8643 109.629 64.565 109.967 64.3498C110.308 64.1346 110.707 64.027 111.163 64.027C111.44 64.027 111.708 64.0728 111.968 64.1644C112.228 64.256 112.461 64.3999 112.668 64.5959C112.875 64.7919 113.038 65.0465 113.157 65.3597C113.276 65.6708 113.336 66.049 113.336 66.4943V66.8331H109.434V66.1172H112.4C112.4 65.8658 112.348 65.6431 112.246 65.4492C112.144 65.2532 112 65.0987 111.815 64.9858C111.631 64.8729 111.416 64.8164 111.169 64.8164C110.901 64.8164 110.666 64.8825 110.466 65.0146C110.268 65.1445 110.114 65.315 110.006 65.5259C109.899 65.7347 109.846 65.9616 109.846 66.2067V66.766C109.846 67.0941 109.903 67.3732 110.019 67.6033C110.136 67.8335 110.299 68.0092 110.508 68.1307C110.716 68.25 110.96 68.3097 111.239 68.3097C111.421 68.3097 111.586 68.2841 111.735 68.233C111.884 68.1797 112.013 68.1009 112.122 67.9964C112.23 67.892 112.313 67.7631 112.371 67.6097L113.275 67.7727C113.203 68.0391 113.073 68.2724 112.885 68.4727C112.7 68.6708 112.467 68.8253 112.185 68.9361C111.906 69.0447 111.588 69.0991 111.23 69.0991ZM115.352 66.0852V69H114.396V64.0909H115.314V64.8899H115.374C115.487 64.63 115.664 64.4212 115.905 64.2635C116.148 64.1058 116.453 64.027 116.822 64.027C117.157 64.027 117.45 64.0973 117.701 64.2379C117.952 64.3764 118.147 64.5831 118.286 64.858C118.424 65.1328 118.494 65.4727 118.494 65.8775V69H117.538V65.9925C117.538 65.6367 117.445 65.3587 117.26 65.1584C117.075 64.956 116.82 64.8548 116.496 64.8548C116.275 64.8548 116.077 64.9027 115.905 64.9986C115.734 65.0945 115.599 65.2351 115.499 65.4205C115.401 65.6037 115.352 65.8253 115.352 66.0852ZM119.775 69V64.0909H120.731V69H119.775ZM120.258 63.3335C120.092 63.3335 119.949 63.2781 119.83 63.1673C119.712 63.0543 119.654 62.9201 119.654 62.7646C119.654 62.6069 119.712 62.4727 119.83 62.3619C119.949 62.2489 120.092 62.1925 120.258 62.1925C120.424 62.1925 120.566 62.2489 120.683 62.3619C120.802 62.4727 120.862 62.6069 120.862 62.7646C120.862 62.9201 120.802 63.0543 120.683 63.1673C120.566 63.2781 120.424 63.3335 120.258 63.3335ZM122.972 66.0852V69H122.016V64.0909H122.934V64.8899H122.994C123.107 64.63 123.284 64.4212 123.525 64.2635C123.768 64.1058 124.074 64.027 124.442 64.027C124.777 64.027 125.07 64.0973 125.321 64.2379C125.573 64.3764 125.767 64.5831 125.906 64.858C126.044 65.1328 126.114 65.4727 126.114 65.8775V69H125.158V65.9925C125.158 65.6367 125.065 65.3587 124.88 65.1584C124.695 64.956 124.44 64.8548 124.116 64.8548C123.895 64.8548 123.698 64.9027 123.525 64.9986C123.354 65.0945 123.219 65.2351 123.119 65.4205C123.021 65.6037 122.972 65.8253 122.972 66.0852ZM129.454 70.9432C129.064 70.9432 128.728 70.892 128.447 70.7898C128.168 70.6875 127.94 70.5522 127.763 70.3839C127.586 70.2156 127.454 70.0313 127.367 69.831L128.188 69.4922C128.245 69.5859 128.322 69.685 128.418 69.7894C128.516 69.896 128.648 69.9865 128.814 70.0611C128.983 70.1357 129.199 70.1729 129.463 70.1729C129.825 70.1729 130.125 70.0845 130.361 69.9077C130.598 69.733 130.716 69.4538 130.716 69.0703V68.1051H130.655C130.598 68.2095 130.515 68.3256 130.406 68.4535C130.299 68.5813 130.152 68.6921 129.965 68.7859C129.777 68.8796 129.533 68.9265 129.233 68.9265C128.845 68.9265 128.496 68.8359 128.185 68.6548C127.876 68.4716 127.631 68.2021 127.45 67.8462C127.271 67.4883 127.181 67.0483 127.181 66.5263C127.181 66.0043 127.27 65.5568 127.446 65.1839C127.625 64.8111 127.87 64.5256 128.182 64.3274C128.493 64.1271 128.845 64.027 129.239 64.027C129.544 64.027 129.79 64.0781 129.978 64.1804C130.165 64.2805 130.311 64.3977 130.416 64.532C130.522 64.6662 130.604 64.7844 130.662 64.8867H130.732V64.0909H131.668V69.1087C131.668 69.5305 131.57 69.8768 131.374 70.1474C131.178 70.418 130.913 70.6183 130.579 70.7482C130.246 70.8782 129.871 70.9432 129.454 70.9432ZM129.444 68.1339C129.719 68.1339 129.951 68.07 130.141 67.9421C130.332 67.8121 130.477 67.6268 130.575 67.386C130.676 67.1431 130.726 66.8523 130.726 66.5135C130.726 66.1832 130.677 65.8924 130.579 65.641C130.481 65.3896 130.337 65.1935 130.147 65.0529C129.957 64.9102 129.723 64.8388 129.444 64.8388C129.156 64.8388 128.917 64.9134 128.725 65.0625C128.533 65.2095 128.388 65.4098 128.29 65.6634C128.194 65.9169 128.146 66.2003 128.146 66.5135C128.146 66.8352 128.195 67.1175 128.293 67.3604C128.391 67.6033 128.536 67.793 128.728 67.9293C128.922 68.0657 129.161 68.1339 129.444 68.1339ZM139.01 65.2894L138.144 65.4428C138.108 65.332 138.051 65.2266 137.972 65.1264C137.895 65.0263 137.791 64.9442 137.659 64.8803C137.526 64.8164 137.361 64.7844 137.163 64.7844C136.893 64.7844 136.667 64.8452 136.486 64.9666C136.305 65.0859 136.214 65.2404 136.214 65.43C136.214 65.5941 136.275 65.7262 136.396 65.8263C136.518 65.9265 136.714 66.0085 136.984 66.0724L137.764 66.2514C138.216 66.3558 138.552 66.5167 138.774 66.734C138.996 66.9513 139.106 67.2337 139.106 67.581C139.106 67.875 139.021 68.1371 138.851 68.3672C138.682 68.5952 138.447 68.7741 138.144 68.9041C137.844 69.0341 137.496 69.0991 137.099 69.0991C136.55 69.0991 136.101 68.9819 135.754 68.7475C135.406 68.511 135.193 68.1754 135.115 67.7408L136.038 67.6001C136.096 67.8409 136.214 68.0231 136.393 68.1467C136.572 68.2681 136.805 68.3288 137.093 68.3288C137.406 68.3288 137.656 68.2638 137.844 68.1339C138.031 68.0018 138.125 67.8409 138.125 67.6513C138.125 67.4979 138.068 67.369 137.953 67.2646C137.84 67.1602 137.666 67.0813 137.432 67.0281L136.601 66.8459C136.143 66.7415 135.804 66.5753 135.584 66.3473C135.367 66.1193 135.258 65.8306 135.258 65.4812C135.258 65.1914 135.339 64.9379 135.501 64.7205C135.663 64.5032 135.887 64.3338 136.172 64.2124C136.458 64.0888 136.785 64.027 137.154 64.027C137.684 64.027 138.102 64.142 138.406 64.3722C138.711 64.6001 138.912 64.9059 139.01 65.2894ZM142.449 64.0909V64.858H139.767V64.0909H142.449ZM140.486 62.9148H141.442V67.5586C141.442 67.744 141.47 67.8835 141.525 67.9773C141.58 68.0689 141.652 68.1317 141.739 68.1658C141.829 68.1978 141.926 68.2138 142.03 68.2138C142.107 68.2138 142.174 68.2085 142.231 68.1978C142.289 68.1871 142.334 68.1786 142.366 68.1722L142.538 68.9616C142.483 68.983 142.404 69.0043 142.302 69.0256C142.199 69.049 142.071 69.0618 141.918 69.0639C141.667 69.0682 141.432 69.0234 141.215 68.9297C140.998 68.8359 140.822 68.6911 140.688 68.495C140.553 68.299 140.486 68.0529 140.486 67.7567V62.9148ZM144.934 69.1087C144.623 69.1087 144.342 69.0511 144.091 68.9361C143.839 68.8189 143.64 68.6495 143.493 68.4279C143.348 68.2063 143.276 67.9347 143.276 67.6129C143.276 67.3359 143.329 67.108 143.435 66.929C143.542 66.75 143.686 66.6083 143.867 66.5039C144.048 66.3995 144.25 66.3207 144.474 66.2674C144.698 66.2141 144.926 66.1737 145.158 66.146C145.452 66.1119 145.691 66.0842 145.874 66.0629C146.057 66.0394 146.19 66.0021 146.273 65.951C146.357 65.8999 146.398 65.8168 146.398 65.7017V65.6793C146.398 65.4002 146.319 65.1839 146.162 65.0305C146.006 64.8771 145.774 64.8004 145.465 64.8004C145.143 64.8004 144.89 64.8718 144.704 65.0146C144.521 65.1552 144.394 65.3118 144.324 65.4844L143.426 65.2798C143.532 64.9815 143.688 64.7408 143.892 64.5575C144.099 64.3722 144.337 64.2379 144.605 64.1548C144.874 64.0696 145.156 64.027 145.452 64.027C145.648 64.027 145.856 64.0504 146.075 64.0973C146.297 64.142 146.504 64.2251 146.695 64.3466C146.889 64.468 147.048 64.6417 147.172 64.8675C147.295 65.0913 147.357 65.3821 147.357 65.7401V69H146.424V68.3288H146.385C146.324 68.4524 146.231 68.5739 146.107 68.6932C145.984 68.8125 145.825 68.9116 145.631 68.9904C145.437 69.0692 145.205 69.1087 144.934 69.1087ZM145.142 68.3416C145.406 68.3416 145.632 68.2894 145.82 68.185C146.009 68.0806 146.153 67.9442 146.251 67.7759C146.351 67.6055 146.401 67.4233 146.401 67.2294V66.5966C146.367 66.6307 146.301 66.6626 146.203 66.6925C146.107 66.7202 145.998 66.7447 145.874 66.766C145.75 66.7852 145.63 66.8033 145.513 66.8203C145.396 66.8352 145.298 66.848 145.219 66.8587C145.033 66.8821 144.864 66.9215 144.711 66.9769C144.559 67.0323 144.438 67.1122 144.346 67.2166C144.257 67.3189 144.212 67.4553 144.212 67.6257C144.212 67.8622 144.299 68.0412 144.474 68.1626C144.649 68.282 144.871 68.3416 145.142 68.3416ZM150.921 64.0909V64.858H148.24V64.0909H150.921ZM148.959 62.9148H149.915V67.5586C149.915 67.744 149.942 67.8835 149.998 67.9773C150.053 68.0689 150.124 68.1317 150.212 68.1658C150.301 68.1978 150.398 68.2138 150.503 68.2138C150.579 68.2138 150.646 68.2085 150.704 68.1978C150.761 68.1871 150.806 68.1786 150.838 68.1722L151.011 68.9616C150.955 68.983 150.877 69.0043 150.774 69.0256C150.672 69.049 150.544 69.0618 150.391 69.0639C150.139 69.0682 149.905 69.0234 149.688 68.9297C149.47 68.8359 149.294 68.6911 149.16 68.495C149.026 68.299 148.959 68.0529 148.959 67.7567V62.9148ZM154.041 69.0991C153.558 69.0991 153.141 68.9957 152.792 68.7891C152.444 68.5803 152.176 68.2873 151.986 67.9102C151.799 67.5309 151.705 67.0866 151.705 66.5774C151.705 66.0746 151.799 65.6314 151.986 65.2479C152.176 64.8643 152.44 64.565 152.779 64.3498C153.12 64.1346 153.518 64.027 153.974 64.027C154.251 64.027 154.52 64.0728 154.78 64.1644C155.04 64.256 155.273 64.3999 155.48 64.5959C155.686 64.7919 155.849 65.0465 155.969 65.3597C156.088 65.6708 156.148 66.049 156.148 66.4943V66.8331H152.245V66.1172H155.211C155.211 65.8658 155.16 65.6431 155.058 65.4492C154.955 65.2532 154.812 65.0987 154.626 64.9858C154.443 64.8729 154.228 64.8164 153.981 64.8164C153.712 64.8164 153.478 64.8825 153.278 65.0146C153.079 65.1445 152.926 65.315 152.817 65.5259C152.711 65.7347 152.657 65.9616 152.657 66.2067V66.766C152.657 67.0941 152.715 67.3732 152.83 67.6033C152.947 67.8335 153.11 68.0092 153.319 68.1307C153.528 68.25 153.772 68.3097 154.051 68.3097C154.232 68.3097 154.397 68.2841 154.546 68.233C154.695 68.1797 154.824 68.1009 154.933 67.9964C155.042 67.892 155.125 67.7631 155.182 67.6097L156.087 67.7727C156.014 68.0391 155.884 68.2724 155.697 68.4727C155.512 68.6708 155.278 68.8253 154.997 68.9361C154.718 69.0447 154.399 69.0991 154.041 69.0991ZM157.208 69V64.0909H158.125V64.8899H158.186C158.288 64.6193 158.455 64.4084 158.688 64.2571C158.92 64.1037 159.198 64.027 159.522 64.027C159.85 64.027 160.125 64.1037 160.346 64.2571C160.57 64.4105 160.735 64.6214 160.842 64.8899H160.893C161.01 64.6278 161.196 64.419 161.452 64.2635C161.708 64.1058 162.013 64.027 162.366 64.027C162.812 64.027 163.175 64.1665 163.456 64.4457C163.739 64.7248 163.881 65.1456 163.881 65.7081V69H162.926V65.7976C162.926 65.4652 162.835 65.2244 162.654 65.0753C162.473 64.9261 162.256 64.8516 162.005 64.8516C161.694 64.8516 161.452 64.9474 161.28 65.1392C161.107 65.3288 161.021 65.5728 161.021 65.8711V69H160.068V65.7369C160.068 65.4705 159.985 65.2564 159.819 65.0945C159.653 64.9325 159.437 64.8516 159.17 64.8516C158.989 64.8516 158.822 64.8995 158.668 64.9954C158.517 65.0891 158.395 65.2202 158.301 65.3885C158.209 65.5568 158.163 65.7518 158.163 65.9734V69H157.208ZM167.278 69.0991C166.794 69.0991 166.377 68.9957 166.028 68.7891C165.681 68.5803 165.412 68.2873 165.223 67.9102C165.035 67.5309 164.941 67.0866 164.941 66.5774C164.941 66.0746 165.035 65.6314 165.223 65.2479C165.412 64.8643 165.676 64.565 166.015 64.3498C166.356 64.1346 166.755 64.027 167.211 64.027C167.488 64.027 167.756 64.0728 168.016 64.1644C168.276 64.256 168.509 64.3999 168.716 64.5959C168.923 64.7919 169.086 65.0465 169.205 65.3597C169.324 65.6708 169.384 66.049 169.384 66.4943V66.8331H165.482V66.1172H168.447C168.447 65.8658 168.396 65.6431 168.294 65.4492C168.192 65.2532 168.048 65.0987 167.863 64.9858C167.679 64.8729 167.464 64.8164 167.217 64.8164C166.949 64.8164 166.714 64.8825 166.514 65.0146C166.316 65.1445 166.162 65.315 166.054 65.5259C165.947 65.7347 165.894 65.9616 165.894 66.2067V66.766C165.894 67.0941 165.951 67.3732 166.066 67.6033C166.184 67.8335 166.347 68.0092 166.555 68.1307C166.764 68.25 167.008 68.3097 167.287 68.3097C167.468 68.3097 167.634 68.2841 167.783 68.233C167.932 68.1797 168.061 68.1009 168.169 67.9964C168.278 67.892 168.361 67.7631 168.419 67.6097L169.323 67.7727C169.251 68.0391 169.121 68.2724 168.933 68.4727C168.748 68.6708 168.515 68.8253 168.233 68.9361C167.954 69.0447 167.636 69.0991 167.278 69.0991ZM171.4 66.0852V69H170.444V64.0909H171.361V64.8899H171.422C171.535 64.63 171.712 64.4212 171.953 64.2635C172.196 64.1058 172.501 64.027 172.87 64.027C173.204 64.027 173.497 64.0973 173.749 64.2379C174 64.3764 174.195 64.5831 174.334 64.858C174.472 65.1328 174.541 65.4727 174.541 65.8775V69H173.586V65.9925C173.586 65.6367 173.493 65.3587 173.308 65.1584C173.122 64.956 172.868 64.8548 172.544 64.8548C172.322 64.8548 172.125 64.9027 171.953 64.9986C171.782 65.0945 171.647 65.2351 171.547 65.4205C171.449 65.6037 171.4 65.8253 171.4 66.0852ZM178.115 64.0909V64.858H175.433V64.0909H178.115ZM176.152 62.9148H177.108V67.5586C177.108 67.744 177.136 67.8835 177.191 67.9773C177.246 68.0689 177.318 68.1317 177.405 68.1658C177.495 68.1978 177.592 68.2138 177.696 68.2138C177.773 68.2138 177.84 68.2085 177.897 68.1978C177.955 68.1871 178 68.1786 178.032 68.1722L178.204 68.9616C178.149 68.983 178.07 69.0043 177.968 69.0256C177.865 69.049 177.737 69.0618 177.584 69.0639C177.333 69.0682 177.098 69.0234 176.881 68.9297C176.664 68.8359 176.488 68.6911 176.354 68.495C176.219 68.299 176.152 68.0529 176.152 67.7567V62.9148Z" fill="#667085"/>
<g opacity="0.1">
<rect x="84" y="77" width="148" height="4" rx="2" fill="#101828"/>
</g>
<g opacity="0.1">
<rect x="84" y="87" width="148" height="4" rx="2" fill="#101828"/>
</g>
<g opacity="0.1">
<rect x="84" y="97" width="92" height="4" rx="2" fill="#101828"/>
</g>
<path d="M66.7774 51.166C66.4451 50.6676 66.8024 50 67.4014 50H72V59L66.7774 51.166Z" fill="#F2F4F7"/>
<rect width="280" height="78" transform="translate(12 282)" fill="url(#paint0_linear_7128_54033)"/>
<g filter="url(#filter1_dd_7128_54033)">
<g clip-path="url(#clip1_7128_54033)">
<rect x="30" y="312" width="244" height="36" rx="9" fill="#F5F8FF"/>
<path d="M47.1009 327.773C47.0561 327.395 46.8746 327.102 46.5565 326.893C46.2383 326.684 45.848 326.58 45.3857 326.58C45.0476 326.58 44.7518 326.634 44.4982 326.744C44.2472 326.853 44.0508 327.003 43.9091 327.195C43.7699 327.386 43.7003 327.604 43.7003 327.847C43.7003 328.051 43.7488 328.226 43.8457 328.373C43.9451 328.517 44.0719 328.638 44.226 328.735C44.3801 328.829 44.5417 328.907 44.7108 328.97C44.8798 329.029 45.0352 329.078 45.1768 329.115L45.9524 329.324C46.1513 329.376 46.3725 329.448 46.6161 329.54C46.8622 329.632 47.0971 329.758 47.3208 329.917C47.5471 330.073 47.7335 330.275 47.8801 330.521C48.0268 330.767 48.1001 331.069 48.1001 331.427C48.1001 331.839 47.992 332.212 47.7757 332.545C47.562 332.879 47.2488 333.143 46.8361 333.34C46.426 333.536 45.9276 333.634 45.3409 333.634C44.794 333.634 44.3205 333.546 43.9203 333.369C43.5225 333.193 43.2093 332.947 42.9806 332.631C42.7544 332.316 42.6264 331.949 42.5966 331.531H43.5511C43.576 331.82 43.6729 332.058 43.842 332.247C44.0135 332.434 44.2298 332.573 44.4908 332.665C44.7543 332.754 45.0376 332.799 45.3409 332.799C45.6939 332.799 46.0108 332.742 46.2917 332.627C46.5726 332.511 46.7951 332.349 46.9592 332.143C47.1232 331.934 47.2053 331.69 47.2053 331.412C47.2053 331.158 47.1344 330.952 46.9927 330.793C46.851 330.634 46.6646 330.505 46.4334 330.405C46.2022 330.306 45.9524 330.219 45.6839 330.144L44.7443 329.876C44.1477 329.704 43.6754 329.459 43.3274 329.141C42.9794 328.823 42.8054 328.407 42.8054 327.892C42.8054 327.464 42.921 327.092 43.1522 326.773C43.3858 326.453 43.699 326.204 44.0918 326.028C44.487 325.849 44.9283 325.759 45.4155 325.759C45.9077 325.759 46.3452 325.847 46.728 326.024C47.1108 326.198 47.4141 326.437 47.6378 326.74C47.864 327.043 47.9833 327.387 47.9957 327.773H47.1009ZM49.5012 335.648V327.773H50.3513V328.683H50.4557C50.5204 328.583 50.6099 328.456 50.7242 328.302C50.841 328.146 51.0076 328.006 51.2239 327.885C51.4426 327.76 51.7384 327.698 52.1113 327.698C52.5935 327.698 53.0186 327.819 53.3865 328.06C53.7544 328.301 54.0415 328.643 54.2478 329.085C54.4541 329.528 54.5573 330.05 54.5573 330.651C54.5573 331.258 54.4541 331.784 54.2478 332.229C54.0415 332.671 53.7556 333.014 53.3902 333.258C53.0248 333.499 52.6035 333.619 52.1262 333.619C51.7583 333.619 51.4637 333.558 51.2425 333.437C51.0213 333.312 50.851 333.172 50.7317 333.015C50.6123 332.856 50.5204 332.724 50.4557 332.62H50.3812V335.648H49.5012ZM50.3663 330.636C50.3663 331.069 50.4296 331.45 50.5564 331.781C50.6832 332.109 50.8684 332.366 51.112 332.553C51.3556 332.737 51.6539 332.829 52.0069 332.829C52.3748 332.829 52.6818 332.732 52.9279 332.538C53.1764 332.342 53.3629 332.078 53.4872 331.748C53.6139 331.414 53.6773 331.044 53.6773 330.636C53.6773 330.234 53.6152 329.871 53.4909 329.548C53.3691 329.222 53.1839 328.965 52.9353 328.776C52.6892 328.584 52.3797 328.489 52.0069 328.489C51.6489 328.489 51.3481 328.579 51.1045 328.761C50.8609 328.94 50.677 329.191 50.5527 329.514C50.4284 329.835 50.3663 330.209 50.3663 330.636ZM58.3009 333.619C57.7491 333.619 57.273 333.498 56.8728 333.254C56.4751 333.008 56.1681 332.665 55.9518 332.225C55.7381 331.782 55.6312 331.268 55.6312 330.681C55.6312 330.094 55.7381 329.577 55.9518 329.13C56.1681 328.68 56.4689 328.33 56.8542 328.078C57.242 327.825 57.6944 327.698 58.2114 327.698C58.5097 327.698 58.8043 327.748 59.0951 327.847C59.386 327.947 59.6507 328.108 59.8893 328.332C60.128 328.553 60.3181 328.847 60.4598 329.212C60.6015 329.577 60.6724 330.027 60.6724 330.562V330.935H56.2576V330.174H59.7775C59.7775 329.851 59.7128 329.562 59.5836 329.309C59.4568 329.055 59.2753 328.855 59.0392 328.709C58.8055 328.562 58.5296 328.489 58.2114 328.489C57.8609 328.489 57.5577 328.576 57.3016 328.75C57.0481 328.921 56.8529 329.145 56.7162 329.421C56.5795 329.697 56.5111 329.993 56.5111 330.308V330.815C56.5111 331.248 56.5857 331.615 56.7349 331.915C56.8865 332.214 57.0965 332.441 57.365 332.598C57.6335 332.752 57.9454 332.829 58.3009 332.829C58.5321 332.829 58.7409 332.797 58.9273 332.732C59.1163 332.665 59.2791 332.565 59.4158 332.434C59.5525 332.299 59.6582 332.133 59.7327 331.934L60.5829 332.173C60.4934 332.461 60.343 332.714 60.1317 332.933C59.9204 333.15 59.6594 333.319 59.3487 333.44C59.038 333.56 58.6887 333.619 58.3009 333.619ZM63.6963 333.634C63.3334 333.634 63.004 333.566 62.7082 333.429C62.4124 333.29 62.1775 333.09 62.0035 332.829C61.8295 332.565 61.7425 332.247 61.7425 331.874C61.7425 331.546 61.8071 331.28 61.9364 331.076C62.0657 330.87 62.2384 330.708 62.4547 330.592C62.6709 330.475 62.9096 330.388 63.1706 330.331C63.4341 330.271 63.6988 330.224 63.9648 330.189C64.3128 330.144 64.5949 330.111 64.8112 330.088C65.03 330.063 65.1891 330.022 65.2885 329.965C65.3904 329.908 65.4414 329.809 65.4414 329.667V329.637C65.4414 329.269 65.3407 328.983 65.1393 328.779C64.9405 328.576 64.6385 328.474 64.2333 328.474C63.8132 328.474 63.4838 328.566 63.2452 328.75C63.0065 328.934 62.8387 329.13 62.7418 329.339L61.9066 329.04C62.0557 328.692 62.2546 328.422 62.5032 328.228C62.7542 328.031 63.0277 327.895 63.3235 327.817C63.6218 327.738 63.9151 327.698 64.2034 327.698C64.3874 327.698 64.5987 327.721 64.8373 327.765C65.0784 327.808 65.3109 327.896 65.5346 328.03C65.7608 328.164 65.9485 328.367 66.0976 328.638C66.2468 328.909 66.3213 329.272 66.3213 329.727V333.5H65.4414V332.724H65.3966C65.337 332.849 65.2375 332.982 65.0983 333.123C64.9591 333.265 64.7739 333.386 64.5427 333.485C64.3116 333.585 64.0294 333.634 63.6963 333.634ZM63.8306 332.844C64.1786 332.844 64.4719 332.775 64.7105 332.639C64.9517 332.502 65.1331 332.325 65.2549 332.109C65.3792 331.893 65.4414 331.665 65.4414 331.427V330.621C65.4041 330.666 65.322 330.707 65.1953 330.744C65.071 330.779 64.9268 330.81 64.7627 330.838C64.6012 330.863 64.4433 330.885 64.2892 330.905C64.1376 330.922 64.0145 330.937 63.9201 330.95C63.6914 330.979 63.4776 331.028 63.2787 331.095C63.0823 331.16 62.9233 331.258 62.8014 331.39C62.6821 331.519 62.6225 331.695 62.6225 331.919C62.6225 332.225 62.7356 332.456 62.9618 332.613C63.1905 332.767 63.4801 332.844 63.8306 332.844ZM68.7478 331.412L68.7329 330.323H68.9118L71.4175 327.773H72.5063L69.8366 330.472H69.762L68.7478 331.412ZM67.9275 333.5V325.864H68.8074V333.5H67.9275ZM71.5667 333.5L69.3295 330.666L69.9559 330.055L72.6853 333.5H71.5667ZM77.472 330.055V333.5H76.592V327.773H77.4422V328.668H77.5167C77.651 328.377 77.8548 328.143 78.1282 327.967C78.4017 327.788 78.7547 327.698 79.1872 327.698C79.575 327.698 79.9143 327.778 80.2051 327.937C80.496 328.093 80.7222 328.332 80.8837 328.653C81.0453 328.971 81.1261 329.374 81.1261 329.861V333.5H80.2461V329.92C80.2461 329.471 80.1293 329.12 79.8956 328.869C79.662 328.615 79.3413 328.489 78.9336 328.489C78.6527 328.489 78.4017 328.55 78.1804 328.671C77.9617 328.793 77.7889 328.971 77.6622 329.205C77.5354 329.438 77.472 329.722 77.472 330.055ZM85.0608 333.619C84.5438 333.619 84.0901 333.496 83.6998 333.25C83.3121 333.004 83.0088 332.66 82.79 332.217C82.5738 331.775 82.4656 331.258 82.4656 330.666C82.4656 330.07 82.5738 329.549 82.79 329.104C83.0088 328.659 83.3121 328.313 83.6998 328.067C84.0901 327.821 84.5438 327.698 85.0608 327.698C85.5779 327.698 86.0303 327.821 86.4181 328.067C86.8083 328.313 87.1116 328.659 87.3279 329.104C87.5466 329.549 87.656 330.07 87.656 330.666C87.656 331.258 87.5466 331.775 87.3279 332.217C87.1116 332.66 86.8083 333.004 86.4181 333.25C86.0303 333.496 85.5779 333.619 85.0608 333.619ZM85.0608 332.829C85.4536 332.829 85.7767 332.728 86.0303 332.527C86.2838 332.325 86.4715 332.061 86.5933 331.733C86.7151 331.404 86.776 331.049 86.776 330.666C86.776 330.283 86.7151 329.927 86.5933 329.596C86.4715 329.265 86.2838 328.998 86.0303 328.794C85.7767 328.591 85.4536 328.489 85.0608 328.489C84.6681 328.489 84.3449 328.591 84.0914 328.794C83.8378 328.998 83.6501 329.265 83.5283 329.596C83.4065 329.927 83.3456 330.283 83.3456 330.666C83.3456 331.049 83.4065 331.404 83.5283 331.733C83.6501 332.061 83.8378 332.325 84.0914 332.527C84.3449 332.728 84.6681 332.829 85.0608 332.829ZM90.102 333.5L88.357 327.773H89.2817L90.5196 332.158H90.5793L91.8023 327.773H92.7419L93.95 332.143H94.0097L95.2476 327.773H96.1723L94.4273 333.5H93.5622L92.3094 329.1H92.2199L90.9671 333.5H90.102ZM97.1977 333.56C97.0138 333.56 96.8559 333.494 96.7242 333.362C96.5924 333.23 96.5265 333.072 96.5265 332.888C96.5265 332.705 96.5924 332.547 96.7242 332.415C96.8559 332.283 97.0138 332.217 97.1977 332.217C97.3817 332.217 97.5395 332.283 97.6713 332.415C97.803 332.547 97.8689 332.705 97.8689 332.888C97.8689 333.01 97.8378 333.122 97.7757 333.224C97.716 333.326 97.6352 333.408 97.5333 333.47C97.4339 333.53 97.322 333.56 97.1977 333.56ZM100.089 333.56C99.9054 333.56 99.7475 333.494 99.6158 333.362C99.484 333.23 99.4181 333.072 99.4181 332.888C99.4181 332.705 99.484 332.547 99.6158 332.415C99.7475 332.283 99.9054 332.217 100.089 332.217C100.273 332.217 100.431 332.283 100.563 332.415C100.695 332.547 100.76 332.705 100.76 332.888C100.76 333.01 100.729 333.122 100.667 333.224C100.608 333.326 100.527 333.408 100.425 333.47C100.325 333.53 100.214 333.56 100.089 333.56ZM102.981 333.56C102.797 333.56 102.639 333.494 102.507 333.362C102.376 333.23 102.31 333.072 102.31 332.888C102.31 332.705 102.376 332.547 102.507 332.415C102.639 332.283 102.797 332.217 102.981 332.217C103.165 332.217 103.323 332.283 103.454 332.415C103.586 332.547 103.652 332.705 103.652 332.888C103.652 333.01 103.621 333.122 103.559 333.224C103.499 333.326 103.418 333.408 103.316 333.47C103.217 333.53 103.105 333.56 102.981 333.56Z" fill="#667085"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M219.25 323.125C215.453 323.125 212.375 326.203 212.375 330C212.375 333.797 215.453 336.875 219.25 336.875C223.047 336.875 226.125 333.797 226.125 330C226.125 326.203 223.047 323.125 219.25 323.125ZM216.818 327.841C216.75 327.975 216.75 328.15 216.75 328.5V331.5C216.75 331.85 216.75 332.025 216.818 332.159C216.878 332.276 216.974 332.372 217.091 332.432C217.225 332.5 217.4 332.5 217.75 332.5H220.75C221.1 332.5 221.275 332.5 221.409 332.432C221.526 332.372 221.622 332.276 221.682 332.159C221.75 332.025 221.75 331.85 221.75 331.5V328.5C221.75 328.15 221.75 327.975 221.682 327.841C221.622 327.724 221.526 327.628 221.409 327.568C221.275 327.5 221.1 327.5 220.75 327.5H217.75C217.4 327.5 217.225 327.5 217.091 327.568C216.974 327.628 216.878 327.724 216.818 327.841Z" fill="#155EEF"/>
<path d="M240.341 333.109C239.837 333.107 239.405 332.973 239.047 332.709C238.689 332.445 238.415 332.06 238.226 331.555C238.036 331.05 237.941 330.442 237.941 329.73C237.941 329.021 238.036 328.415 238.226 327.912C238.417 327.409 238.692 327.026 239.05 326.761C239.41 326.497 239.841 326.365 240.341 326.365C240.842 326.365 241.272 326.498 241.629 326.765C241.987 327.029 242.261 327.412 242.451 327.915C242.643 328.416 242.739 329.021 242.739 329.73C242.739 330.444 242.644 331.054 242.454 331.559C242.264 332.061 241.991 332.446 241.633 332.712C241.275 332.977 240.844 333.109 240.341 333.109ZM240.341 332.255C240.785 332.255 241.131 332.039 241.38 331.607C241.632 331.174 241.757 330.549 241.757 329.73C241.757 329.187 241.7 328.728 241.585 328.353C241.472 327.976 241.309 327.69 241.096 327.496C240.885 327.3 240.633 327.202 240.341 327.202C239.9 327.202 239.554 327.42 239.303 327.854C239.051 328.289 238.925 328.914 238.922 329.73C238.922 330.276 238.979 330.737 239.092 331.114C239.207 331.489 239.37 331.774 239.581 331.968C239.792 332.159 240.045 332.255 240.341 332.255ZM246.151 333.109C245.646 333.107 245.215 332.973 244.857 332.709C244.499 332.445 244.225 332.06 244.035 331.555C243.846 331.05 243.751 330.442 243.751 329.73C243.751 329.021 243.846 328.415 244.035 327.912C244.227 327.409 244.502 327.026 244.86 326.761C245.22 326.497 245.65 326.365 246.151 326.365C246.652 326.365 247.081 326.498 247.439 326.765C247.797 327.029 248.071 327.412 248.26 327.915C248.452 328.416 248.548 329.021 248.548 329.73C248.548 330.444 248.453 331.054 248.264 331.559C248.074 332.061 247.8 332.446 247.442 332.712C247.084 332.977 246.654 333.109 246.151 333.109ZM246.151 332.255C246.594 332.255 246.94 332.039 247.19 331.607C247.441 331.174 247.567 330.549 247.567 329.73C247.567 329.187 247.509 328.728 247.394 328.353C247.281 327.976 247.118 327.69 246.905 327.496C246.694 327.3 246.443 327.202 246.151 327.202C245.71 327.202 245.364 327.42 245.112 327.854C244.861 328.289 244.734 328.914 244.732 329.73C244.732 330.276 244.788 330.737 244.901 331.114C245.016 331.489 245.179 331.774 245.39 331.968C245.601 332.159 245.855 332.255 246.151 332.255ZM250.324 332.188C250.15 332.188 249.999 332.126 249.874 332.003C249.748 331.877 249.685 331.726 249.685 331.549C249.685 331.374 249.748 331.225 249.874 331.102C249.999 330.976 250.15 330.913 250.324 330.913C250.499 330.913 250.649 330.976 250.775 331.102C250.901 331.225 250.963 331.374 250.963 331.549C250.963 331.666 250.934 331.774 250.874 331.872C250.816 331.968 250.74 332.044 250.644 332.102C250.548 332.159 250.441 332.188 250.324 332.188ZM250.324 328.909C250.15 328.909 249.999 328.847 249.874 328.724C249.748 328.598 249.685 328.447 249.685 328.27C249.685 328.095 249.748 327.946 249.874 327.822C249.999 327.697 250.15 327.634 250.324 327.634C250.499 327.634 250.649 327.697 250.775 327.822C250.901 327.946 250.963 328.095 250.963 328.27C250.963 328.387 250.934 328.495 250.874 328.593C250.816 328.689 250.74 328.765 250.644 328.823C250.548 328.88 250.441 328.909 250.324 328.909ZM254.714 326.455V333H253.723V327.445H253.685L252.119 328.468V327.522L253.752 326.455H254.714ZM256.705 333L259.562 327.349V327.301H256.258V326.455H260.585V327.33L257.737 333H256.705Z" fill="#344054"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M175.5 331.5C175.086 331.5 174.75 331.836 174.75 332.25V348H176.25V332.25C176.25 331.836 175.914 331.5 175.5 331.5ZM172.5 338.25C172.5 337.836 172.836 337.5 173.25 337.5C173.664 337.5 174 337.836 174 338.25V348H172.5V338.25ZM162 339C161.586 339 161.25 339.336 161.25 339.75V348H162.75V339.75C162.75 339.336 162.414 339 162 339ZM78 341.25C78 340.836 78.3358 340.5 78.75 340.5C79.1642 340.5 79.5 340.836 79.5 341.25V348H78V341.25ZM73.5 342.75C73.5 342.336 73.8358 342 74.25 342C74.6642 342 75 342.336 75 342.75V348H73.5V342.75ZM45 343.5C44.5858 343.5 44.25 343.836 44.25 344.25V348H45.75V344.25C45.75 343.836 45.4142 343.5 45 343.5ZM33 345.75C33 345.336 33.3358 345 33.75 345C34.1642 345 34.5 345.336 34.5 345.75V348H33V345.75ZM26.25 347.25C26.25 346.836 26.5858 346.5 27 346.5C27.4142 346.5 27.75 346.836 27.75 347.25V348H26.25V347.25ZM28.5 347.25C28.5 346.836 28.8358 346.5 29.25 346.5C29.6642 346.5 30 346.836 30 347.25V348H28.5V347.25ZM31.5 346.5C31.0858 346.5 30.75 346.836 30.75 347.25V348H32.25V347.25C32.25 346.836 31.9142 346.5 31.5 346.5ZM36 345C35.5858 345 35.25 345.336 35.25 345.75V348H36.75V345.75C36.75 345.336 36.4142 345 36 345ZM37.5 345.75C37.5 345.336 37.8358 345 38.25 345C38.6642 345 39 345.336 39 345.75V348H37.5V345.75ZM40.5 345C40.0858 345 39.75 345.336 39.75 345.75V348H41.25V345.75C41.25 345.336 40.9142 345 40.5 345ZM42 345.75C42 345.336 42.3358 345 42.75 345C43.1642 345 43.5 345.336 43.5 345.75V348H42V345.75ZM46.5 344.25C46.5 343.836 46.8358 343.5 47.25 343.5C47.6642 343.5 48 343.836 48 344.25V348H46.5V344.25ZM49.5 345C49.0858 345 48.75 345.336 48.75 345.75V348H50.25V345.75C50.25 345.336 49.9142 345 49.5 345ZM51 345.75C51 345.336 51.3358 345 51.75 345C52.1642 345 52.5 345.336 52.5 345.75V348H51V345.75ZM54 345C53.5858 345 53.25 345.336 53.25 345.75V348H54.75V345.75C54.75 345.336 54.4142 345 54 345ZM55.5 345.75C55.5 345.336 55.8358 345 56.25 345C56.6642 345 57 345.336 57 345.75V348H55.5V345.75ZM58.5 345C58.0858 345 57.75 345.336 57.75 345.75V348H59.25V345.75C59.25 345.336 58.9142 345 58.5 345ZM60 345.75C60 345.336 60.3358 345 60.75 345C61.1642 345 61.5 345.336 61.5 345.75V348H60V345.75ZM63 343.5C62.5858 343.5 62.25 343.836 62.25 344.25V348H63.75V344.25C63.75 343.836 63.4142 343.5 63 343.5ZM64.5 344.25C64.5 343.836 64.8358 343.5 65.25 343.5C65.6642 343.5 66 343.836 66 344.25V348H64.5V344.25ZM67.5 343.5C67.0858 343.5 66.75 343.836 66.75 344.25V348H68.25V344.25C68.25 343.836 67.9142 343.5 67.5 343.5ZM69 344.25C69 343.836 69.3358 343.5 69.75 343.5C70.1642 343.5 70.5 343.836 70.5 344.25V348H69V344.25ZM72 343.5C71.5858 343.5 71.25 343.836 71.25 344.25V348H72.75V344.25C72.75 343.836 72.4142 343.5 72 343.5ZM76.5 342C76.0858 342 75.75 342.336 75.75 342.75V348H77.25V342.75C77.25 342.336 76.9142 342 76.5 342ZM81 340.5C80.5858 340.5 80.25 340.836 80.25 341.25V348H81.75V341.25C81.75 340.836 81.4142 340.5 81 340.5ZM82.5 341.25C82.5 340.836 82.8358 340.5 83.25 340.5C83.6642 340.5 84 340.836 84 341.25V348H82.5V341.25ZM85.5 340.5C85.0858 340.5 84.75 340.836 84.75 341.25V348H86.25V341.25C86.25 340.836 85.9142 340.5 85.5 340.5ZM87 341.25C87 340.836 87.3358 340.5 87.75 340.5C88.1642 340.5 88.5 340.836 88.5 341.25V348H87V341.25ZM90 340.5C89.5858 340.5 89.25 340.836 89.25 341.25V348H90.75V341.25C90.75 340.836 90.4142 340.5 90 340.5ZM91.5 344.25C91.5 343.836 91.8358 343.5 92.25 343.5C92.6642 343.5 93 343.836 93 344.25V348H91.5V344.25ZM94.5 343.5C94.0858 343.5 93.75 343.836 93.75 344.25V348H95.25V344.25C95.25 343.836 94.9142 343.5 94.5 343.5ZM96 344.25C96 343.836 96.3358 343.5 96.75 343.5C97.1642 343.5 97.5 343.836 97.5 344.25V348H96V344.25ZM99 343.5C98.5858 343.5 98.25 343.836 98.25 344.25V348H99.75V344.25C99.75 343.836 99.4142 343.5 99 343.5ZM100.5 345.75C100.5 345.336 100.836 345 101.25 345C101.664 345 102 345.336 102 345.75V348H100.5V345.75ZM103.5 345C103.086 345 102.75 345.336 102.75 345.75V348H104.25V345.75C104.25 345.336 103.914 345 103.5 345ZM105 345.75C105 345.336 105.336 345 105.75 345C106.164 345 106.5 345.336 106.5 345.75V348H105V345.75ZM108 345C107.586 345 107.25 345.336 107.25 345.75V348H108.75V345.75C108.75 345.336 108.414 345 108 345ZM109.5 345.75C109.5 345.336 109.836 345 110.25 345C110.664 345 111 345.336 111 345.75V348H109.5V345.75ZM112.5 345C112.086 345 111.75 345.336 111.75 345.75V348H113.25V345.75C113.25 345.336 112.914 345 112.5 345ZM114 345.75C114 345.336 114.336 345 114.75 345C115.164 345 115.5 345.336 115.5 345.75V348H114V345.75ZM117 343.5C116.586 343.5 116.25 343.836 116.25 344.25V348H117.75V344.25C117.75 343.836 117.414 343.5 117 343.5ZM118.5 344.25C118.5 343.836 118.836 343.5 119.25 343.5C119.664 343.5 120 343.836 120 344.25V348H118.5V344.25ZM121.5 343.5C121.086 343.5 120.75 343.836 120.75 344.25V348H122.25V344.25C122.25 343.836 121.914 343.5 121.5 343.5ZM123 344.25C123 343.836 123.336 343.5 123.75 343.5C124.164 343.5 124.5 343.836 124.5 344.25V348H123V344.25ZM126 343.5C125.586 343.5 125.25 343.836 125.25 344.25V348H126.75V344.25C126.75 343.836 126.414 343.5 126 343.5ZM127.5 344.25C127.5 343.836 127.836 343.5 128.25 343.5C128.664 343.5 129 343.836 129 344.25V348H127.5V344.25ZM130.5 345C130.086 345 129.75 345.336 129.75 345.75V348H131.25V345.75C131.25 345.336 130.914 345 130.5 345ZM132 345.75C132 345.336 132.336 345 132.75 345C133.164 345 133.5 345.336 133.5 345.75V348H132V345.75ZM135 342C134.586 342 134.25 342.336 134.25 342.75V348H135.75V342.75C135.75 342.336 135.414 342 135 342ZM136.5 342.75C136.5 342.336 136.836 342 137.25 342C137.664 342 138 342.336 138 342.75V348H136.5V342.75ZM139.5 342C139.086 342 138.75 342.336 138.75 342.75V348H140.25V342.75C140.25 342.336 139.914 342 139.5 342ZM141 345.75C141 345.336 141.336 345 141.75 345C142.164 345 142.5 345.336 142.5 345.75V348H141V345.75ZM144 345C143.586 345 143.25 345.336 143.25 345.75V348H144.75V345.75C144.75 345.336 144.414 345 144 345ZM145.5 345.75C145.5 345.336 145.836 345 146.25 345C146.664 345 147 345.336 147 345.75V348H145.5V345.75ZM148.5 345C148.086 345 147.75 345.336 147.75 345.75V348H149.25V345.75C149.25 345.336 148.914 345 148.5 345ZM150 345.75C150 345.336 150.336 345 150.75 345C151.164 345 151.5 345.336 151.5 345.75V348H150V345.75ZM153 342C152.586 342 152.25 342.336 152.25 342.75V348H153.75V342.75C153.75 342.336 153.414 342 153 342ZM154.5 342.75C154.5 342.336 154.836 342 155.25 342C155.664 342 156 342.336 156 342.75V348H154.5V342.75ZM157.5 342C157.086 342 156.75 342.336 156.75 342.75V348H158.25V342.75C158.25 342.336 157.914 342 157.5 342ZM159 342.75C159 342.336 159.336 342 159.75 342C160.164 342 160.5 342.336 160.5 342.75V348H159V342.75ZM163.5 339.75C163.5 339.336 163.836 339 164.25 339C164.664 339 165 339.336 165 339.75V348H163.5V339.75ZM166.5 339C166.086 339 165.75 339.336 165.75 339.75V348H167.25V339.75C167.25 339.336 166.914 339 166.5 339ZM168 339.75C168 339.336 168.336 339 168.75 339C169.164 339 169.5 339.336 169.5 339.75V348H168V339.75ZM171 339C170.586 339 170.25 339.336 170.25 339.75V348H171.75V339.75C171.75 339.336 171.414 339 171 339ZM177 341.25C177 340.836 177.336 340.5 177.75 340.5C178.164 340.5 178.5 340.836 178.5 341.25V348H177V341.25ZM180 340.5C179.586 340.5 179.25 340.836 179.25 341.25V348H180.75V341.25C180.75 340.836 180.414 340.5 180 340.5ZM181.5 341.25C181.5 340.836 181.836 340.5 182.25 340.5C182.664 340.5 183 340.836 183 341.25V348H181.5V341.25ZM184.5 340.5C184.086 340.5 183.75 340.836 183.75 341.25V348H185.25V341.25C185.25 340.836 184.914 340.5 184.5 340.5ZM186 341.25C186 340.836 186.336 340.5 186.75 340.5C187.164 340.5 187.5 340.836 187.5 341.25V348H186V341.25ZM189 340.5C188.586 340.5 188.25 340.836 188.25 341.25V348H189.75V341.25C189.75 340.836 189.414 340.5 189 340.5ZM190.5 341.25C190.5 340.836 190.836 340.5 191.25 340.5C191.664 340.5 192 340.836 192 341.25V348H190.5V341.25ZM193.5 343.5C193.086 343.5 192.75 343.836 192.75 344.25V347.25H194.25V344.25C194.25 343.836 193.914 343.5 193.5 343.5ZM195 345C195 344.586 195.336 344.25 195.75 344.25C196.164 344.25 196.5 344.586 196.5 345V348H195V345ZM198 345.75C197.586 345.75 197.25 346.086 197.25 346.5V348H198.75V346.5C198.75 346.086 198.414 345.75 198 345.75ZM199.5 346.5C199.5 346.086 199.836 345.75 200.25 345.75C200.664 345.75 201 346.086 201 346.5V348H199.5V346.5ZM202.5 345.75C202.086 345.75 201.75 346.086 201.75 346.5V348H203.25V346.5C203.25 346.086 202.914 345.75 202.5 345.75ZM204 346.5C204 346.086 204.336 345.75 204.75 345.75C205.164 345.75 205.5 346.086 205.5 346.5V348H204V346.5ZM207 345.75C206.586 345.75 206.25 346.086 206.25 346.5V348H207.75V346.5C207.75 346.086 207.414 345.75 207 345.75ZM208.5 346.5C208.5 346.086 208.836 345.75 209.25 345.75C209.664 345.75 210 346.086 210 346.5V348H208.5V346.5ZM211.5 345.75C211.086 345.75 210.75 346.086 210.75 346.5V348H212.25V346.5C212.25 346.086 211.914 345.75 211.5 345.75ZM213 346.5C213 346.086 213.336 345.75 213.75 345.75C214.164 345.75 214.5 346.086 214.5 346.5V348H213V346.5ZM216 345.75C215.586 345.75 215.25 346.086 215.25 346.5V348H216.75V346.5C216.75 346.086 216.414 345.75 216 345.75ZM217.5 346.5C217.5 346.086 217.836 345.75 218.25 345.75C218.664 345.75 219 346.086 219 346.5V348H217.5V346.5ZM220.5 345.75C220.086 345.75 219.75 346.086 219.75 346.5V348H221.25V346.5C221.25 346.086 220.914 345.75 220.5 345.75ZM222 346.5C222 346.086 222.336 345.75 222.75 345.75C223.164 345.75 223.5 346.086 223.5 346.5V348H222V346.5ZM225 345.75C224.586 345.75 224.25 346.086 224.25 346.5V348H225.75V346.5C225.75 346.086 225.414 345.75 225 345.75ZM226.5 343.5C226.5 343.086 226.836 342.75 227.25 342.75C227.664 342.75 228 343.086 228 343.5V348H226.5V343.5ZM229.5 342.75C229.086 342.75 228.75 343.086 228.75 343.5V348H230.25V343.5C230.25 343.086 229.914 342.75 229.5 342.75ZM231 343.5C231 343.086 231.336 342.75 231.75 342.75C232.164 342.75 232.5 343.086 232.5 343.5V348H231V343.5ZM234 342.75C233.586 342.75 233.25 343.086 233.25 343.5V348H234.75V343.5C234.75 343.086 234.414 342.75 234 342.75ZM235.5 343.5C235.5 343.086 235.836 342.75 236.25 342.75C236.664 342.75 237 343.086 237 343.5V348H235.5V343.5ZM238.5 342.75C238.086 342.75 237.75 343.086 237.75 343.5V348H239.25V343.5C239.25 343.086 238.914 342.75 238.5 342.75ZM240 343.5C240 343.086 240.336 342.75 240.75 342.75C241.164 342.75 241.5 343.086 241.5 343.5V348H240V343.5ZM243 341.25C242.586 341.25 242.25 341.586 242.25 342V348H243.75V342C243.75 341.586 243.414 341.25 243 341.25ZM244.5 342C244.5 341.586 244.836 341.25 245.25 341.25C245.664 341.25 246 341.586 246 342V348H244.5V342ZM247.5 341.25C247.086 341.25 246.75 341.586 246.75 342V348H248.25V342C248.25 341.586 247.914 341.25 247.5 341.25ZM249 339C249 338.586 249.336 338.25 249.75 338.25C250.164 338.25 250.5 338.586 250.5 339V348H249V339ZM252 339.75C251.586 339.75 251.25 340.086 251.25 340.5V348H252.75V340.5C252.75 340.086 252.414 339.75 252 339.75ZM253.5 340.5C253.5 340.086 253.836 339.75 254.25 339.75C254.664 339.75 255 340.086 255 340.5V348H253.5V340.5ZM256.5 339.75C256.086 339.75 255.75 340.086 255.75 340.5V348H257.25V340.5C257.25 340.086 256.914 339.75 256.5 339.75ZM258 343.5C258 343.086 258.336 342.75 258.75 342.75C259.164 342.75 259.5 343.086 259.5 343.5V348H258V343.5ZM261 342.75C260.586 342.75 260.25 343.086 260.25 343.5V348H261.75V343.5C261.75 343.086 261.414 342.75 261 342.75ZM262.5 346.5C262.5 346.086 262.836 345.75 263.25 345.75C263.664 345.75 264 346.086 264 346.5V348H262.5V346.5ZM265.5 345.75C265.086 345.75 264.75 346.086 264.75 346.5V348H266.25V346.5C266.25 346.086 265.914 345.75 265.5 345.75ZM267 346.5C267 346.086 267.336 345.75 267.75 345.75C268.164 345.75 268.5 346.086 268.5 346.5V348H267V346.5ZM270 345.75C269.586 345.75 269.25 346.086 269.25 346.5V348H270.75V346.5C270.75 346.086 270.414 345.75 270 345.75ZM271.5 346.5C271.5 346.086 271.836 345.75 272.25 345.75C272.664 345.75 273 346.086 273 346.5V348H271.5V346.5ZM274.5 345.75C274.086 345.75 273.75 346.086 273.75 346.5V348H275.25V346.5C275.25 346.086 274.914 345.75 274.5 345.75ZM276 346.5C276 346.086 276.336 345.75 276.75 345.75C277.164 345.75 277.5 346.086 277.5 346.5V348H276V346.5ZM279 344.25C278.586 344.25 278.25 344.586 278.25 345V348H279.75V345C279.75 344.586 279.414 344.25 279 344.25ZM280.5 345C280.5 344.586 280.836 344.25 281.25 344.25C281.664 344.25 282 344.586 282 345V348H280.5V345ZM283.5 344.25C283.086 344.25 282.75 344.586 282.75 345V348H284.25V345C284.25 344.586 283.914 344.25 283.5 344.25ZM285 345C285 344.586 285.336 344.25 285.75 344.25C286.164 344.25 286.5 344.586 286.5 345V348H285V345ZM288 344.25C287.586 344.25 287.25 344.586 287.25 345V348H288.75V345C288.75 344.586 288.414 344.25 288 344.25ZM289.5 345C289.5 344.586 289.836 344.25 290.25 344.25C290.664 344.25 291 344.586 291 345V348H289.5V345ZM292.5 345.75C292.086 345.75 291.75 346.086 291.75 346.5V348H293.25V346.5C293.25 346.086 292.914 345.75 292.5 345.75ZM294 346.5C294 346.086 294.336 345.75 294.75 345.75C295.164 345.75 295.5 346.086 295.5 346.5V348H294V346.5ZM297 345.75C296.586 345.75 296.25 346.086 296.25 346.5V348H297.75V346.5C297.75 346.086 297.414 345.75 297 345.75ZM298.5 346.5C298.5 346.086 298.836 345.75 299.25 345.75C299.664 345.75 300 346.086 300 346.5V348H298.5V346.5ZM301.5 345.75C301.086 345.75 300.75 346.086 300.75 346.5V348H302.25V346.5C302.25 346.086 301.914 345.75 301.5 345.75Z" fill="#D1E0FF"/>
</g>
<rect x="30.5625" y="312.562" width="242.875" height="34.875" rx="8.4375" stroke="url(#paint1_linear_7128_54033)" stroke-width="1.125"/>
</g>
</g>
</g>
<defs>
<filter id="filter0_dd_7128_54033" x="0" y="0" width="304" height="384" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
<feMorphology radius="2" operator="erode" in="SourceAlpha" result="effect1_dropShadow_7128_54033"/>
<feOffset dy="4"/>
<feGaussianBlur stdDeviation="3"/>
<feColorMatrix type="matrix" values="0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.03 0"/>
<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_7128_54033"/>
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
<feMorphology radius="4" operator="erode" in="SourceAlpha" result="effect2_dropShadow_7128_54033"/>
<feOffset dy="12"/>
<feGaussianBlur stdDeviation="8"/>
<feColorMatrix type="matrix" values="0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.08 0"/>
<feBlend mode="normal" in2="effect1_dropShadow_7128_54033" result="effect2_dropShadow_7128_54033"/>
<feBlend mode="normal" in="SourceGraphic" in2="effect2_dropShadow_7128_54033" result="shape"/>
</filter>
<pattern id="pattern0" patternContentUnits="objectBoundingBox" width="1" height="1">
<use xlink:href="#image0_7128_54033" transform="scale(0.00625)"/>
</pattern>
<pattern id="pattern1" patternContentUnits="objectBoundingBox" width="1" height="1">
<use xlink:href="#image0_7128_54033" transform="scale(0.00625)"/>
</pattern>
<filter id="filter1_dd_7128_54033" x="21" y="312" width="262" height="54" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
<feMorphology radius="1.5" operator="erode" in="SourceAlpha" result="effect1_dropShadow_7128_54033"/>
<feOffset dy="3"/>
<feGaussianBlur stdDeviation="2.25"/>
<feColorMatrix type="matrix" values="0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.03 0"/>
<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_7128_54033"/>
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
<feMorphology radius="3" operator="erode" in="SourceAlpha" result="effect2_dropShadow_7128_54033"/>
<feOffset dy="9"/>
<feGaussianBlur stdDeviation="6"/>
<feColorMatrix type="matrix" values="0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.08 0"/>
<feBlend mode="normal" in2="effect1_dropShadow_7128_54033" result="effect2_dropShadow_7128_54033"/>
<feBlend mode="normal" in="SourceGraphic" in2="effect2_dropShadow_7128_54033" result="shape"/>
</filter>
<linearGradient id="paint0_linear_7128_54033" x1="199.59" y1="78" x2="199.59" y2="2.30719e-06" gradientUnits="userSpaceOnUse">
<stop offset="0.65" stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint1_linear_7128_54033" x1="-44.0942" y1="312" x2="209.734" y2="359.473" gradientUnits="userSpaceOnUse">
<stop stop-color="#2250F2"/>
<stop offset="1" stop-color="#0EBCF3"/>
</linearGradient>
<clipPath id="clip0_7128_54033">
<rect x="12" width="280" height="360" rx="12" fill="white"/>
</clipPath>
<clipPath id="clip1_7128_54033">
<rect x="30" y="312" width="244" height="36" rx="9" fill="white"/>
</clipPath>
<image id="image0_7128_54033" width="160" height="160" xlink:href="data:image/png;base64,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"/>
</defs>
</svg>
.preview {
display: none;
position: absolute;
transform: translate(480px, -54px);
width: 280px;
height: 360px;
background: center center no-repeat;
background-size: contain;
border-radius: 8px;
}
.wrap:hover .preview {
display: block;
}
.openingStatementPreview {
background-image: url(./preview-imgs/opening-statement.png);
}
.suggestedQuestionsAfterAnswerPreview {
background-image: url(./preview-imgs/suggested-questions-after-answer.svg);
}
.moreLikeThisPreview {
background-image: url(./preview-imgs/more-like-this.svg);
}
.speechToTextPreview {
background-image: url(./preview-imgs/speech-to-text.svg);
}
.textToSpeechPreview {
@apply shadow-lg rounded-lg;
background-image: url(./preview-imgs/text-to-audio-preview-assistant@2x.png);
}
.citationPreview {
background-image: url(./preview-imgs/citation.svg);
}
'use client'
import type { FC } from 'react'
import React, { useCallback } from 'react'
import produce from 'immer'
import { useTranslation } from 'react-i18next'
import { useFeatures } from '../hooks'
import FeatureGroup from './feature-group'
import FeatureItem from './feature-item'
import Modal from '@/app/components/base/modal'
import SuggestedQuestionsAfterAnswerIcon from '@/app/components/app/configuration/base/icons/suggested-questions-after-answer-icon'
import { Microphone01, Speaker } from '@/app/components/base/icons/src/vender/solid/mediaAndDevices'
import { Citations } from '@/app/components/base/icons/src/vender/solid/editor'
import { FileSearch02 } from '@/app/components/base/icons/src/vender/solid/files'
import {
MessageFast,
MessageHeartCircle,
} from '@/app/components/base/icons/src/vender/solid/communication'
export type ChooseFeatureProps = {
showTextToSpeechItem?: boolean
showSpeechToTextItem?: boolean
}
const ChooseFeature: FC<ChooseFeatureProps> = ({
showTextToSpeechItem,
showSpeechToTextItem,
}) => {
const { t } = useTranslation()
const setShowFeaturesModal = useFeatures(s => s.setShowFeaturesModal)
const openingStatement = useFeatures(s => s.openingStatement)
const setOpeningStatement = useFeatures(s => s.setOpeningStatement)
const suggestedQuestionsAfterAnswer = useFeatures(s => s.suggestedQuestionsAfterAnswer)
const setSuggestedQuestionsAfterAnswer = useFeatures(s => s.setSuggestedQuestionsAfterAnswer)
const textToSpeech = useFeatures(s => s.textToSpeech)
const setTextToSpeech = useFeatures(s => s.setTextToSpeech)
const speechToText = useFeatures(s => s.speechToText)
const setSpeechToText = useFeatures(s => s.setSpeechToText)
const citation = useFeatures(s => s.citation)
const setCitation = useFeatures(s => s.setCitation)
const moderation = useFeatures(s => s.moderation)
const setModeration = useFeatures(s => s.setModeration)
const annotation = useFeatures(s => s.annotation)
const setAnnotation = useFeatures(s => s.setAnnotation)
const handleCancelModal = useCallback(() => {
setShowFeaturesModal(false)
}, [setShowFeaturesModal])
return (
<Modal
isShow
onClose={handleCancelModal}
className='w-[400px]'
title={t('appDebug.operation.addFeature')}
closable
overflowVisible
>
<div className='pt-5 pb-10'>
{/* Chat Feature */}
<FeatureGroup
title={t('appDebug.feature.groupChat.title')}
description={t('appDebug.feature.groupChat.description') as string}
>
<>
<FeatureItem
icon={<MessageHeartCircle className='w-4 h-4 text-[#DD2590]' />}
previewImgClassName='openingStatementPreview'
title={t('appDebug.feature.conversationOpener.title')}
description={t('appDebug.feature.conversationOpener.description')}
value={openingStatement.enabled}
onChange={value => setOpeningStatement(produce(openingStatement, (draft) => {
draft.enabled = value
}))}
/>
<FeatureItem
icon={<SuggestedQuestionsAfterAnswerIcon />}
previewImgClassName='suggestedQuestionsAfterAnswerPreview'
title={t('appDebug.feature.suggestedQuestionsAfterAnswer.title')}
description={t('appDebug.feature.suggestedQuestionsAfterAnswer.description')}
value={suggestedQuestionsAfterAnswer.enabled}
onChange={value => setSuggestedQuestionsAfterAnswer(produce(suggestedQuestionsAfterAnswer, (draft) => {
draft.enabled = value
}))}
/>
{
showTextToSpeechItem && (
<FeatureItem
icon={<Speaker className='w-4 h-4 text-[#7839EE]' />}
previewImgClassName='textToSpeechPreview'
title={t('appDebug.feature.textToSpeech.title')}
description={t('appDebug.feature.textToSpeech.description')}
value={textToSpeech.enabled}
onChange={value => setTextToSpeech(produce(textToSpeech, (draft) => {
draft.enabled = value
}))}
/>
)
}
{
showSpeechToTextItem && (
<FeatureItem
icon={<Microphone01 className='w-4 h-4 text-[#7839EE]' />}
previewImgClassName='speechToTextPreview'
title={t('appDebug.feature.speechToText.title')}
description={t('appDebug.feature.speechToText.description')}
value={speechToText.enabled}
onChange={value => setSpeechToText(produce(speechToText, (draft) => {
draft.enabled = value
}))}
/>
)
}
<FeatureItem
icon={<Citations className='w-4 h-4 text-[#FD853A]' />}
previewImgClassName='citationPreview'
title={t('appDebug.feature.citation.title')}
description={t('appDebug.feature.citation.description')}
value={citation.enabled}
onChange={value => setCitation(produce(citation, (draft) => {
draft.enabled = value
}))}
/>
</>
</FeatureGroup>
<FeatureGroup title={t('appDebug.feature.toolbox.title')}>
<>
<FeatureItem
icon={<FileSearch02 className='w-4 h-4 text-[#039855]' />}
previewImgClassName=''
title={t('appDebug.feature.moderation.title')}
description={t('appDebug.feature.moderation.description')}
value={moderation.enabled}
onChange={value => setModeration(produce(moderation, (draft) => {
draft.enabled = value
}))}
/>
<FeatureItem
icon={<MessageFast className='w-4 h-4 text-[#444CE7]' />}
title={t('appDebug.feature.annotation.title')}
description={t('appDebug.feature.annotation.description')}
value={annotation.enabled}
onChange={value => setAnnotation(produce(annotation, (draft) => {
draft.enabled = value
}))}
/>
</>
</FeatureGroup>
</div>
</Modal>
)
}
export default React.memo(ChooseFeature)
'use client'
import React from 'react'
import { useTranslation } from 'react-i18next'
import { useFeatures } from '../hooks'
import FeatureModal from './feature-modal'
import Button from '@/app/components/base/button'
import { Plus02 } from '@/app/components/base/icons/src/vender/line/general'
const ChooseFeature = () => {
const { t } = useTranslation()
const showFeaturesModal = useFeatures(s => s.showFeaturesModal)
const setShowFeaturesModal = useFeatures(s => s.setShowFeaturesModal)
return (
<>
<Button
className='px-3 py-0 h-8 rounded-lg border border-primary-100 bg-primary-25 shadow-xs text-xs font-semibold text-primary-600'
onClick={() => setShowFeaturesModal(true)}
>
<Plus02 className='mr-1 w-4 h-4' />
{t('appDebug.operation.addFeature')}
</Button>
{
showFeaturesModal && (
<FeatureModal />
)
}
</>
)
}
export default React.memo(ChooseFeature)
'use client'
import type { FC } from 'react'
import React, { useRef, useState } from 'react'
import { useHover } from 'ahooks'
import cn from 'classnames'
import { useTranslation } from 'react-i18next'
import { MessageCheckRemove, MessageFastPlus } from '@/app/components/base/icons/src/vender/line/communication'
import { MessageFast } from '@/app/components/base/icons/src/vender/solid/communication'
import { Edit04 } from '@/app/components/base/icons/src/vender/line/general'
import RemoveAnnotationConfirmModal from '@/app/components/app/annotation/remove-annotation-confirm-modal'
import TooltipPlus from '@/app/components/base/tooltip-plus'
import { addAnnotation, delAnnotation } from '@/service/annotation'
import Toast from '@/app/components/base/toast'
import { useProviderContext } from '@/context/provider-context'
import { useModalContext } from '@/context/modal-context'
type Props = {
appId: string
messageId?: string
annotationId?: string
className?: string
cached: boolean
query: string
answer: string
onAdded: (annotationId: string, authorName: string) => void
onEdit: () => void
onRemoved: () => void
}
const CacheCtrlBtn: FC<Props> = ({
className,
cached,
query,
answer,
appId,
messageId,
annotationId,
onAdded,
onEdit,
onRemoved,
}) => {
const { t } = useTranslation()
const { plan, enableBilling } = useProviderContext()
const isAnnotationFull = (enableBilling && plan.usage.annotatedResponse >= plan.total.annotatedResponse)
const { setShowAnnotationFullModal } = useModalContext()
const [showModal, setShowModal] = useState(false)
const cachedBtnRef = useRef<HTMLDivElement>(null)
const isCachedBtnHovering = useHover(cachedBtnRef)
const handleAdd = async () => {
if (isAnnotationFull) {
setShowAnnotationFullModal()
return
}
const res: any = await addAnnotation(appId, {
message_id: messageId,
question: query,
answer,
})
Toast.notify({
message: t('common.api.actionSuccess') as string,
type: 'success',
})
onAdded(res.id, res.account?.name)
}
const handleRemove = async () => {
await delAnnotation(appId, annotationId!)
Toast.notify({
message: t('common.api.actionSuccess') as string,
type: 'success',
})
onRemoved()
setShowModal(false)
}
return (
<div className={cn(className, 'inline-block')}>
<div className='inline-flex p-0.5 space-x-0.5 rounded-lg bg-white border border-gray-100 shadow-md text-gray-500 cursor-pointer'>
{cached
? (
<div>
<div
ref={cachedBtnRef}
className={cn(isCachedBtnHovering ? 'bg-[#FEF3F2] text-[#D92D20]' : 'bg-[#EEF4FF] text-[#444CE7]', 'flex p-1 space-x-1 items-center rounded-md leading-4 text-xs font-medium')}
onClick={() => setShowModal(true)}
>
{!isCachedBtnHovering
? (
<>
<MessageFast className='w-4 h-4' />
<div>{t('appDebug.feature.annotation.cached')}</div>
</>
)
: <>
<MessageCheckRemove className='w-4 h-4' />
<div>{t('appDebug.feature.annotation.remove')}</div>
</>}
</div>
</div>
)
: answer
? (
<TooltipPlus
popupContent={t('appDebug.feature.annotation.add') as string}
>
<div
className='p-1 rounded-md hover:bg-[#EEF4FF] hover:text-[#444CE7] cursor-pointer'
onClick={handleAdd}
>
<MessageFastPlus className='w-4 h-4' />
</div>
</TooltipPlus>
)
: null
}
<TooltipPlus
popupContent={t('appDebug.feature.annotation.edit') as string}
>
<div
className='p-1 cursor-pointer rounded-md hover:bg-black/5'
onClick={onEdit}
>
<Edit04 className='w-4 h-4' />
</div>
</TooltipPlus>
</div>
<RemoveAnnotationConfirmModal
isShow={showModal}
onHide={() => setShowModal(false)}
onRemove={handleRemove}
/>
</div>
)
}
export default React.memo(CacheCtrlBtn)
'use client'
import type { FC } from 'react'
import React, { useState } from 'react'
import { useTranslation } from 'react-i18next'
import ScoreSlider from '../score-slider'
import { Item } from './config-param'
import Modal from '@/app/components/base/modal'
import Button from '@/app/components/base/button'
import Toast from '@/app/components/base/toast'
import type { AnnotationReplyConfig } from '@/models/debug'
import { ANNOTATION_DEFAULT } from '@/config'
import ModelSelector from '@/app/components/header/account-setting/model-provider-page/model-selector'
import { useModelListAndDefaultModelAndCurrentProviderAndModel } from '@/app/components/header/account-setting/model-provider-page/hooks'
type Props = {
appId: string
isShow: boolean
onHide: () => void
onSave: (embeddingModel: {
embedding_provider_name: string
embedding_model_name: string
}, score: number) => void
isInit?: boolean
annotationConfig: AnnotationReplyConfig
}
const ConfigParamModal: FC<Props> = ({
isShow,
onHide: doHide,
onSave,
isInit,
annotationConfig: oldAnnotationConfig,
}) => {
const { t } = useTranslation()
const {
modelList: embeddingsModelList,
defaultModel: embeddingsDefaultModel,
currentModel: isEmbeddingsDefaultModelValid,
} = useModelListAndDefaultModelAndCurrentProviderAndModel(2)
const [annotationConfig, setAnnotationConfig] = useState(oldAnnotationConfig)
const [isLoading, setLoading] = useState(false)
const [embeddingModel, setEmbeddingModel] = useState(oldAnnotationConfig.embedding_model
? {
providerName: oldAnnotationConfig.embedding_model.embedding_provider_name,
modelName: oldAnnotationConfig.embedding_model.embedding_model_name,
}
: (embeddingsDefaultModel
? {
providerName: embeddingsDefaultModel.provider.provider,
modelName: embeddingsDefaultModel.model,
}
: undefined))
const onHide = () => {
if (!isLoading)
doHide()
}
const handleSave = async () => {
if (!embeddingModel || !embeddingModel.modelName || (embeddingModel.modelName === embeddingsDefaultModel?.model && !isEmbeddingsDefaultModelValid)) {
Toast.notify({
message: t('common.modelProvider.embeddingModel.required'),
type: 'error',
})
return
}
setLoading(true)
await onSave({
embedding_provider_name: embeddingModel.providerName,
embedding_model_name: embeddingModel.modelName,
}, annotationConfig.score_threshold)
setLoading(false)
}
return (
<Modal
isShow={isShow}
onClose={onHide}
className='!p-8 !pb-6 !mt-14 !max-w-none !w-[640px]'
wrapperClassName='!z-50'
>
<div className='mb-2 text-xl font-semibold text-[#1D2939]'>
{t(`appAnnotation.initSetup.${isInit ? 'title' : 'configTitle'}`)}
</div>
<div className='mt-6 space-y-3'>
<Item
title={t('appDebug.feature.annotation.scoreThreshold.title')}
tooltip={t('appDebug.feature.annotation.scoreThreshold.description')}
>
<ScoreSlider
className='mt-1'
value={(annotationConfig.score_threshold || ANNOTATION_DEFAULT.score_threshold) * 100}
onChange={(val) => {
setAnnotationConfig({
...annotationConfig,
score_threshold: val / 100,
})
}}
/>
</Item>
<Item
title={t('common.modelProvider.embeddingModel.key')}
tooltip={t('appAnnotation.embeddingModelSwitchTip')}
>
<div className='pt-1'>
<ModelSelector
defaultModel={embeddingModel && {
provider: embeddingModel.providerName,
model: embeddingModel.modelName,
}}
modelList={embeddingsModelList}
onSelect={(val) => {
setEmbeddingModel({
providerName: val.provider,
modelName: val.model,
})
}}
/>
</div>
</Item>
</div>
<div className='mt-6 flex gap-2 justify-end'>
<Button className='!text-sm' onClick={onHide}>{t('common.operation.cancel')}</Button>
<Button
type='primary'
onClick={handleSave}
className='flex items-center border-[0.5px] !text-sm'
loading={isLoading}
>
<div></div>
<div>{t(`appAnnotation.initSetup.${isInit ? 'confirmBtn' : 'configConfirmBtn'}`)}</div>
</Button >
</div >
</Modal >
)
}
export default React.memo(ConfigParamModal)
'use client'
import type { FC } from 'react'
import React from 'react'
import { useTranslation } from 'react-i18next'
import { useContext } from 'use-context-selector'
import { usePathname, useRouter } from 'next/navigation'
import ConfigParamModal from './config-param-modal'
import Panel from '@/app/components/app/configuration/base/feature-panel'
import { MessageFast } from '@/app/components/base/icons/src/vender/solid/communication'
import TooltipPlus from '@/app/components/base/tooltip-plus'
import { HelpCircle, LinkExternal02, Settings04 } from '@/app/components/base/icons/src/vender/line/general'
import ConfigContext from '@/context/debug-configuration'
import type { EmbeddingModelConfig } from '@/app/components/app/annotation/type'
import { updateAnnotationScore } from '@/service/annotation'
export type AnnotationProps = {
onEmbeddingChange: (embeddingModel: EmbeddingModelConfig) => void
onScoreChange: (score: number, embeddingModel?: EmbeddingModelConfig) => void
}
export const Item: FC<{ title: string; tooltip: string; children: JSX.Element }> = ({
title,
tooltip,
children,
}) => {
return (
<div>
<div className='flex items-center space-x-1'>
<div>{title}</div>
<TooltipPlus
popupContent={
<div className='max-w-[200px] leading-[18px] text-[13px] font-medium text-gray-800'>{tooltip}</div>
}
>
<HelpCircle className='w-3.5 h-3.5 text-gray-400' />
</TooltipPlus>
</div>
<div>{children}</div>
</div>
)
}
const AnnotationReplyConfig: FC<AnnotationProps> = ({
onEmbeddingChange,
onScoreChange,
}) => {
const { t } = useTranslation()
const router = useRouter()
const pathname = usePathname()
const matched = pathname.match(/\/app\/([^/]+)/)
const appId = (matched?.length && matched[1]) ? matched[1] : ''
const {
annotationConfig,
} = useContext(ConfigContext)
const [isShowEdit, setIsShowEdit] = React.useState(false)
return (
<>
<Panel
className="mt-4"
headerIcon={
<MessageFast className='w-4 h-4 text-[#444CE7]' />
}
title={t('appDebug.feature.annotation.title')}
headerRight={
<div className='flex items-center'>
<div
className='flex items-center rounded-md h-7 px-3 space-x-1 text-gray-700 cursor-pointer hover:bg-gray-200'
onClick={() => { setIsShowEdit(true) }}
>
<Settings04 className="w-[14px] h-[14px]" />
<div className='text-xs font-medium'>
{t('common.operation.params')}
</div>
</div>
<div
className='ml-1 flex items-center h-7 px-3 space-x-1 leading-[18px] text-xs font-medium text-gray-700 rounded-md cursor-pointer hover:bg-gray-200'
onClick={() => {
router.push(`/app/${appId}/annotations`)
}}>
<div>{t('appDebug.feature.annotation.cacheManagement')}</div>
<LinkExternal02 className='w-3.5 h-3.5' />
</div>
</div>
}
noBodySpacing
/>
{isShowEdit && (
<ConfigParamModal
appId={appId}
isShow
onHide={() => {
setIsShowEdit(false)
}}
onSave={async (embeddingModel, score) => {
let isEmbeddingModelChanged = false
if (
embeddingModel.embedding_model_name !== annotationConfig.embedding_model.embedding_model_name
&& embeddingModel.embedding_provider_name !== annotationConfig.embedding_model.embedding_provider_name
) {
await onEmbeddingChange(embeddingModel)
isEmbeddingModelChanged = true
}
if (score !== annotationConfig.score_threshold) {
await updateAnnotationScore(appId, annotationConfig.id, score)
if (isEmbeddingModelChanged)
onScoreChange(score, embeddingModel)
else
onScoreChange(score)
}
setIsShowEdit(false)
}}
annotationConfig={annotationConfig}
/>
)}
</>
)
}
export default React.memo(AnnotationReplyConfig)
export enum PageType {
log = 'log',
annotation = 'annotation',
}
import React, { useState } from 'react'
import produce from 'immer'
import type { AnnotationReplyConfig } from '@/models/debug'
import { queryAnnotationJobStatus, updateAnnotationStatus } from '@/service/annotation'
import type { EmbeddingModelConfig } from '@/app/components/app/annotation/type'
import { AnnotationEnableStatus, JobStatus } from '@/app/components/app/annotation/type'
import { sleep } from '@/utils'
import { ANNOTATION_DEFAULT } from '@/config'
import { useProviderContext } from '@/context/provider-context'
type Params = {
appId: string
annotationConfig: AnnotationReplyConfig
setAnnotationConfig: (annotationConfig: AnnotationReplyConfig) => void
}
const useAnnotationConfig = ({
appId,
annotationConfig,
setAnnotationConfig,
}: Params) => {
const { plan, enableBilling } = useProviderContext()
const isAnnotationFull = (enableBilling && plan.usage.annotatedResponse >= plan.total.annotatedResponse)
const [isShowAnnotationFullModal, setIsShowAnnotationFullModal] = useState(false)
const [isShowAnnotationConfigInit, doSetIsShowAnnotationConfigInit] = React.useState(false)
const setIsShowAnnotationConfigInit = (isShow: boolean) => {
if (isShow) {
if (isAnnotationFull) {
setIsShowAnnotationFullModal(true)
return
}
}
doSetIsShowAnnotationConfigInit(isShow)
}
const ensureJobCompleted = async (jobId: string, status: AnnotationEnableStatus) => {
let isCompleted = false
while (!isCompleted) {
const res: any = await queryAnnotationJobStatus(appId, status, jobId)
isCompleted = res.job_status === JobStatus.completed
if (isCompleted)
break
await sleep(2000)
}
}
const handleEnableAnnotation = async (embeddingModel: EmbeddingModelConfig, score?: number) => {
if (isAnnotationFull)
return
const { job_id: jobId }: any = await updateAnnotationStatus(appId, AnnotationEnableStatus.enable, embeddingModel, score)
await ensureJobCompleted(jobId, AnnotationEnableStatus.enable)
setAnnotationConfig(produce(annotationConfig, (draft: AnnotationReplyConfig) => {
draft.enabled = true
draft.embedding_model = embeddingModel
if (!draft.score_threshold)
draft.score_threshold = ANNOTATION_DEFAULT.score_threshold
}))
}
const setScore = (score: number, embeddingModel?: EmbeddingModelConfig) => {
setAnnotationConfig(produce(annotationConfig, (draft: AnnotationReplyConfig) => {
draft.score_threshold = score
if (embeddingModel)
draft.embedding_model = embeddingModel
}))
}
const handleDisableAnnotation = async (embeddingModel: EmbeddingModelConfig) => {
if (!annotationConfig.enabled)
return
await updateAnnotationStatus(appId, AnnotationEnableStatus.disable, embeddingModel)
setAnnotationConfig(produce(annotationConfig, (draft: AnnotationReplyConfig) => {
draft.enabled = false
}))
}
return {
handleEnableAnnotation,
handleDisableAnnotation,
isShowAnnotationConfigInit,
setIsShowAnnotationConfigInit,
isShowAnnotationFullModal,
setIsShowAnnotationFullModal,
setScore,
}
}
export default useAnnotationConfig
'use client'
import React, { type FC } from 'react'
import { useTranslation } from 'react-i18next'
import Panel from '@/app/components/app/configuration/base/feature-panel'
import { Citations } from '@/app/components/base/icons/src/vender/solid/editor'
const Citation: FC = () => {
const { t } = useTranslation()
return (
<Panel
title={
<div className='flex items-center gap-2'>
<div>{t('appDebug.feature.citation.title')}</div>
</div>
}
headerIcon={<Citations className='w-4 h-4 text-[#FD853A]' />}
headerRight={
<div className='text-xs text-gray-500'>{t('appDebug.feature.citation.resDes')}</div>
}
noBodySpacing
/>
)
}
export default React.memo(Citation)
import {
memo,
useMemo,
} from 'react'
import { useTranslation } from 'react-i18next'
import { useFeatures } from '../hooks'
import OpeningStatement from './opening-statement'
import type { OpeningStatementProps } from './opening-statement'
import SuggestedQuestionsAfterAnswer from './suggested-questions-after-answer'
import TextToSpeech from './text-to-speech'
import SpeechToText from './speech-to-text'
import Citation from './citation'
import Moderation from './moderation'
import Annotation from './annotation/config-param'
import type { AnnotationProps } from './annotation/config-param'
export type FeaturePanelProps = {
openingStatementProps: OpeningStatementProps
annotationProps: AnnotationProps
}
const FeaturePanel = ({
openingStatementProps,
annotationProps,
}: FeaturePanelProps) => {
const { t } = useTranslation()
const openingStatement = useFeatures(s => s.openingStatement)
const suggestedQuestionsAfterAnswer = useFeatures(s => s.suggestedQuestionsAfterAnswer)
const textToSpeech = useFeatures(s => s.textToSpeech)
const speechToText = useFeatures(s => s.speechToText)
const citation = useFeatures(s => s.citation)
const moderation = useFeatures(s => s.moderation)
const annotation = useFeatures(s => s.annotation)
const showAdvanceFeature = useMemo(() => {
return openingStatement.enabled || suggestedQuestionsAfterAnswer.enabled || textToSpeech.enabled || speechToText.enabled || citation.enabled
}, [openingStatement, suggestedQuestionsAfterAnswer, textToSpeech, speechToText, citation])
const showToolFeature = useMemo(() => {
return moderation.enabled || annotation.enabled
}, [moderation, annotation])
return (
<div className='space-y-3'>
{
showAdvanceFeature && (
<div>
<div className='flex items-center'>
<div className='shrink-0 text-xs font-semibold text-gray-500'>
{t('appDebug.feature.groupChat.title')}
</div>
<div
className='grow ml-3 h-[1px]'
style={{ background: 'linear-gradient(270deg, rgba(243, 244, 246, 0) 0%, #F3F4F6 100%)' }}
></div>
</div>
<div className='py-2 space-y-2'>
{
openingStatement.enabled && (
<OpeningStatement {...openingStatementProps} />
)
}
{
suggestedQuestionsAfterAnswer.enabled && (
<SuggestedQuestionsAfterAnswer />
)
}
{
textToSpeech.enabled && (
<TextToSpeech />
)
}
{
speechToText.enabled && (
<SpeechToText />
)
}
{
citation.enabled && (
<Citation />
)
}
</div>
</div>
)
}
{
showToolFeature && (
<div>
<div className='flex items-center'>
<div className='shrink-0 text-xs font-semibold text-gray-500'>
{t('appDebug.feature.groupChat.title')}
</div>
<div
className='grow ml-3 h-[1px]'
style={{ background: 'linear-gradient(270deg, rgba(243, 244, 246, 0) 0%, #F3F4F6 100%)' }}
></div>
</div>
<div className='py-2 space-y-2'>
{
moderation.enabled && (
<Moderation />
)
}
{
annotation.enabled && (
<Annotation {...annotationProps} />
)
}
</div>
</div>
)
}
</div>
)
}
export default memo(FeaturePanel)
import type { FC } from 'react'
import { memo } from 'react'
import { useContext } from 'use-context-selector'
import type { CodeBasedExtensionForm } from '@/models/common'
import I18n from '@/context/i18n'
import { PortalSelect } from '@/app/components/base/select'
import type { ModerationConfig } from '@/models/debug'
type FormGenerationProps = {
forms: CodeBasedExtensionForm[]
value: ModerationConfig['config']
onChange: (v: Record<string, string>) => void
}
const FormGeneration: FC<FormGenerationProps> = ({
forms,
value,
onChange,
}) => {
const { locale } = useContext(I18n)
const handleFormChange = (type: string, v: string) => {
onChange({ ...value, [type]: v })
}
return (
<>
{
forms.map((form, index) => (
<div
key={index}
className='py-2'
>
<div className='flex items-center h-9 text-sm font-medium text-gray-900'>
{locale === 'zh-Hans' ? form.label['zh-Hans'] : form.label['en-US']}
</div>
{
form.type === 'text-input' && (
<input
value={value?.[form.variable] || ''}
className='block px-3 w-full h-9 bg-gray-100 rounded-lg text-sm text-gray-900 outline-none appearance-none'
placeholder={form.placeholder}
onChange={e => handleFormChange(form.variable, e.target.value)}
/>
)
}
{
form.type === 'paragraph' && (
<div className='relative px-3 py-2 h-[88px] bg-gray-100 rounded-lg'>
<textarea
value={value?.[form.variable] || ''}
className='block w-full h-full bg-transparent text-sm outline-none appearance-none resize-none'
placeholder={form.placeholder}
onChange={e => handleFormChange(form.variable, e.target.value)}
/>
</div>
)
}
{
form.type === 'select' && (
<PortalSelect
value={value?.[form.variable]}
items={form.options.map((option) => {
return {
name: option.label[locale === 'zh-Hans' ? 'zh-Hans' : 'en-US'],
value: option.value,
}
})}
onSelect={item => handleFormChange(form.variable, item.value as string)}
popupClassName='w-[576px] !z-[102]'
/>
)
}
</div>
))
}
</>
)
}
export default memo(FormGeneration)
import { memo } from 'react'
import { useTranslation } from 'react-i18next'
import useSWR from 'swr'
import { useContext } from 'use-context-selector'
import { useFeatures } from '../../hooks'
import { FileSearch02 } from '@/app/components/base/icons/src/vender/solid/files'
import { Settings01 } from '@/app/components/base/icons/src/vender/line/general'
import { useModalContext } from '@/context/modal-context'
import { fetchCodeBasedExtensionList } from '@/service/common'
import I18n from '@/context/i18n'
const Moderation = () => {
const { t } = useTranslation()
const { setShowModerationSettingModal } = useModalContext()
const { locale } = useContext(I18n)
const moderation = useFeatures(s => s.moderation)
const setModeration = useFeatures(s => s.setModeration)
const { data: codeBasedExtensionList } = useSWR(
'/code-based-extension?module=moderation',
fetchCodeBasedExtensionList,
)
const handleOpenModerationSettingModal = () => {
setShowModerationSettingModal({
payload: moderation,
onSaveCallback: setModeration,
})
}
const renderInfo = () => {
let prefix = ''
let suffix = ''
if (moderation.type === 'openai_moderation')
prefix = t('appDebug.feature.moderation.modal.provider.openai')
else if (moderation.type === 'keywords')
prefix = t('appDebug.feature.moderation.modal.provider.keywords')
else if (moderation.type === 'api')
prefix = t('common.apiBasedExtension.selector.title')
else
prefix = codeBasedExtensionList?.data.find(item => item.name === moderation.type)?.label[locale] || ''
if (moderation.config?.inputs_config?.enabled && moderation.config?.outputs_config?.enabled)
suffix = t('appDebug.feature.moderation.allEnabled')
else if (moderation.config?.inputs_config?.enabled)
suffix = t('appDebug.feature.moderation.inputEnabled')
else if (moderation.config?.outputs_config?.enabled)
suffix = t('appDebug.feature.moderation.outputEnabled')
return `${prefix} · ${suffix}`
}
return (
<div className='flex items-center px-3 h-12 bg-gray-50 rounded-xl overflow-hidden'>
<div className='shrink-0 flex items-center justify-center mr-1 w-6 h-6'>
<FileSearch02 className='shrink-0 w-4 h-4 text-[#039855]' />
</div>
<div className='shrink-0 mr-2 whitespace-nowrap text-sm text-gray-800 font-semibold'>
{t('appDebug.feature.moderation.title')}
</div>
<div
className='grow block w-0 text-right text-xs text-gray-500 truncate'
title={renderInfo()}>
{renderInfo()}
</div>
<div className='shrink-0 ml-4 mr-1 w-[1px] h-3.5 bg-gray-200'></div>
<div
className={`
shrink-0 flex items-center px-3 h-7 cursor-pointer rounded-md
text-xs text-gray-700 font-medium hover:bg-gray-200
`}
onClick={handleOpenModerationSettingModal}
>
<Settings01 className='mr-[5px] w-3.5 h-3.5' />
{t('common.operation.settings')}
</div>
</div>
)
}
export default memo(Moderation)
import type { FC } from 'react'
import { memo } from 'react'
import { useTranslation } from 'react-i18next'
import Switch from '@/app/components/base/switch'
import type { ModerationContentConfig } from '@/models/debug'
type ModerationContentProps = {
title: string
info?: string
showPreset?: boolean
config: ModerationContentConfig
onConfigChange: (config: ModerationContentConfig) => void
}
const ModerationContent: FC<ModerationContentProps> = ({
title,
info,
showPreset = true,
config,
onConfigChange,
}) => {
const { t } = useTranslation()
const handleConfigChange = (field: string, value: boolean | string) => {
if (field === 'preset_response' && typeof value === 'string')
value = value.slice(0, 100)
onConfigChange({ ...config, [field]: value })
}
return (
<div className='py-2'>
<div className='rounded-lg bg-gray-50 border border-gray-200'>
<div className='flex items-center justify-between px-3 h-10 rounded-lg'>
<div className='shrink-0 text-sm font-medium text-gray-900'>{title}</div>
<div className='grow flex items-center justify-end'>
{
info && (
<div className='mr-2 text-xs text-gray-500 truncate' title={info}>{info}</div>
)
}
<Switch
size='l'
defaultValue={config.enabled}
onChange={v => handleConfigChange('enabled', v)}
/>
</div>
</div>
{
config.enabled && showPreset && (
<div className='px-3 pt-1 pb-3 bg-white rounded-lg'>
<div className='flex items-center justify-between h-8 text-[13px] font-medium text-gray-700'>
{t('appDebug.feature.moderation.modal.content.preset')}
<span className='text-xs font-normal text-gray-500'>{t('appDebug.feature.moderation.modal.content.supportMarkdown')}</span>
</div>
<div className='relative px-3 py-2 h-20 rounded-lg bg-gray-100'>
<textarea
value={config.preset_response || ''}
className='block w-full h-full bg-transparent text-sm outline-none appearance-none resize-none'
placeholder={t('appDebug.feature.moderation.modal.content.placeholder') || ''}
onChange={e => handleConfigChange('preset_response', e.target.value)}
/>
<div className='absolute bottom-2 right-2 flex items-center px-1 h-5 rounded-md bg-gray-50 text-xs font-medium text-gray-300'>
<span>{(config.preset_response || '').length}</span>/<span className='text-gray-500'>100</span>
</div>
</div>
</div>
)
}
</div>
</div>
)
}
export default memo(ModerationContent)
import type { ChangeEvent, FC } from 'react'
import {
memo,
useState,
} from 'react'
import useSWR from 'swr'
import { useContext } from 'use-context-selector'
import { useTranslation } from 'react-i18next'
import ModerationContent from './moderation-content'
import FormGeneration from './form-generation'
import ApiBasedExtensionSelector from '@/app/components/header/account-setting/api-based-extension-page/selector'
import Modal from '@/app/components/base/modal'
import Button from '@/app/components/base/button'
import { BookOpen01 } from '@/app/components/base/icons/src/vender/line/education'
import type { ModerationConfig, ModerationContentConfig } from '@/models/debug'
import { useToastContext } from '@/app/components/base/toast'
import {
fetchCodeBasedExtensionList,
fetchModelProviders,
} from '@/service/common'
import type { CodeBasedExtensionItem } from '@/models/common'
import I18n from '@/context/i18n'
import { LanguagesSupported } from '@/i18n/language'
import { InfoCircle } from '@/app/components/base/icons/src/vender/line/general'
import { useModalContext } from '@/context/modal-context'
import { CustomConfigurationStatusEnum } from '@/app/components/header/account-setting/model-provider-page/declarations'
const systemTypes = ['openai_moderation', 'keywords', 'api']
type Provider = {
key: string
name: string
form_schema?: CodeBasedExtensionItem['form_schema']
}
type ModerationSettingModalProps = {
data: ModerationConfig
onCancel: () => void
onSave: (moderationConfig: ModerationConfig) => void
}
const ModerationSettingModal: FC<ModerationSettingModalProps> = ({
data,
onCancel,
onSave,
}) => {
const { t } = useTranslation()
const { notify } = useToastContext()
const { locale } = useContext(I18n)
const { data: modelProviders, isLoading, mutate } = useSWR('/workspaces/current/model-providers', fetchModelProviders)
const [localeData, setLocaleData] = useState<ModerationConfig>(data)
const { setShowAccountSettingModal } = useModalContext()
const handleOpenSettingsModal = () => {
setShowAccountSettingModal({
payload: 'provider',
onCancelCallback: () => {
mutate()
},
})
}
const { data: codeBasedExtensionList } = useSWR(
'/code-based-extension?module=moderation',
fetchCodeBasedExtensionList,
)
const openaiProvider = modelProviders?.data.find(item => item.provider === 'openai')
const systemOpenaiProviderEnabled = openaiProvider?.system_configuration.enabled
const systemOpenaiProviderQuota = systemOpenaiProviderEnabled ? openaiProvider?.system_configuration.quota_configurations.find(item => item.quota_type === openaiProvider.system_configuration.current_quota_type) : undefined
const systemOpenaiProviderCanUse = systemOpenaiProviderQuota?.is_valid
const customOpenaiProvidersCanUse = openaiProvider?.custom_configuration.status === CustomConfigurationStatusEnum.active
const openaiProviderConfiged = customOpenaiProvidersCanUse || systemOpenaiProviderCanUse
const providers: Provider[] = [
{
key: 'openai_moderation',
name: t('appDebug.feature.moderation.modal.provider.openai'),
},
{
key: 'keywords',
name: t('appDebug.feature.moderation.modal.provider.keywords'),
},
{
key: 'api',
name: t('common.apiBasedExtension.selector.title'),
},
...(
codeBasedExtensionList
? codeBasedExtensionList.data.map((item) => {
return {
key: item.name,
name: locale === 'zh-Hans' ? item.label['zh-Hans'] : item.label['en-US'],
form_schema: item.form_schema,
}
})
: []
),
]
const currentProvider = providers.find(provider => provider.key === localeData.type)
const handleDataTypeChange = (type: string) => {
let config: undefined | Record<string, any>
const currProvider = providers.find(provider => provider.key === type)
if (systemTypes.findIndex(t => t === type) < 0 && currProvider?.form_schema) {
config = currProvider?.form_schema.reduce((prev, next) => {
prev[next.variable] = next.default
return prev
}, {} as Record<string, any>)
}
setLocaleData({
...localeData,
type,
config,
})
}
const handleDataKeywordsChange = (e: ChangeEvent<HTMLTextAreaElement>) => {
const value = e.target.value
const arr = value.split('\n').reduce((prev: string[], next: string) => {
if (next !== '')
prev.push(next.slice(0, 100))
if (next === '' && prev[prev.length - 1] !== '')
prev.push(next)
return prev
}, [])
setLocaleData({
...localeData,
config: {
...localeData.config,
keywords: arr.slice(0, 100).join('\n'),
},
})
}
const handleDataContentChange = (contentType: string, contentConfig: ModerationContentConfig) => {
setLocaleData({
...localeData,
config: {
...localeData.config,
[contentType]: contentConfig,
},
})
}
const handleDataApiBasedChange = (apiBasedExtensionId: string) => {
setLocaleData({
...localeData,
config: {
...localeData.config,
api_based_extension_id: apiBasedExtensionId,
},
})
}
const handleDataExtraChange = (extraValue: Record<string, string>) => {
setLocaleData({
...localeData,
config: {
...localeData.config,
...extraValue,
},
})
}
const formatData = (originData: ModerationConfig) => {
const { enabled, type, config } = originData
const { inputs_config, outputs_config } = config!
const params: Record<string, string | undefined> = {}
if (type === 'keywords')
params.keywords = config?.keywords
if (type === 'api')
params.api_based_extension_id = config?.api_based_extension_id
if (systemTypes.findIndex(t => t === type) < 0 && currentProvider?.form_schema) {
currentProvider.form_schema.forEach((form) => {
params[form.variable] = config?.[form.variable]
})
}
return {
type,
enabled,
config: {
inputs_config: inputs_config || { enabled: false },
outputs_config: outputs_config || { enabled: false },
...params,
},
}
}
const handleSave = () => {
if (localeData.type === 'openai_moderation' && !openaiProviderConfiged)
return
if (!localeData.config?.inputs_config?.enabled && !localeData.config?.outputs_config?.enabled) {
notify({ type: 'error', message: t('appDebug.feature.moderation.modal.content.condition') })
return
}
if (localeData.type === 'keywords' && !localeData.config.keywords) {
notify({ type: 'error', message: t('appDebug.errorMessage.valueOfVarRequired', { key: locale !== LanguagesSupported[1] ? 'keywords' : '关键词' }) })
return
}
if (localeData.type === 'api' && !localeData.config.api_based_extension_id) {
notify({ type: 'error', message: t('appDebug.errorMessage.valueOfVarRequired', { key: locale !== LanguagesSupported[1] ? 'API Extension' : 'API 扩展' }) })
return
}
if (systemTypes.findIndex(t => t === localeData.type) < 0 && currentProvider?.form_schema) {
for (let i = 0; i < currentProvider.form_schema.length; i++) {
if (!localeData.config?.[currentProvider.form_schema[i].variable] && currentProvider.form_schema[i].required) {
notify({
type: 'error',
message: t('appDebug.errorMessage.valueOfVarRequired', { key: locale !== LanguagesSupported[1] ? currentProvider.form_schema[i].label['en-US'] : currentProvider.form_schema[i].label['zh-Hans'] }),
})
return
}
}
}
if (localeData.config.inputs_config?.enabled && !localeData.config.inputs_config.preset_response && localeData.type !== 'api') {
notify({ type: 'error', message: t('appDebug.feature.moderation.modal.content.errorMessage') })
return
}
if (localeData.config.outputs_config?.enabled && !localeData.config.outputs_config.preset_response && localeData.type !== 'api') {
notify({ type: 'error', message: t('appDebug.feature.moderation.modal.content.errorMessage') })
return
}
onSave(formatData(localeData))
}
return (
<Modal
isShow
onClose={() => { }}
className='!p-8 !pb-6 !mt-14 !max-w-none !w-[640px]'
>
<div className='mb-2 text-xl font-semibold text-[#1D2939]'>
{t('appDebug.feature.moderation.modal.title')}
</div>
<div className='py-2'>
<div className='leading-9 text-sm font-medium text-gray-900'>
{t('appDebug.feature.moderation.modal.provider.title')}
</div>
<div className='grid gap-2.5 grid-cols-3'>
{
providers.map(provider => (
<div
key={provider.key}
className={`
flex items-center px-3 py-2 rounded-lg text-sm text-gray-900 cursor-pointer
${localeData.type === provider.key ? 'bg-white border-[1.5px] border-primary-400 shadow-sm' : 'border border-gray-100 bg-gray-25'}
${localeData.type === 'openai_moderation' && provider.key === 'openai_moderation' && !openaiProviderConfiged && 'opacity-50'}
`}
onClick={() => handleDataTypeChange(provider.key)}
>
<div className={`
mr-2 w-4 h-4 rounded-full border
${localeData.type === provider.key ? 'border-[5px] border-primary-600' : 'border border-gray-300'}`} />
{provider.name}
</div>
))
}
</div>
{
!isLoading && !openaiProviderConfiged && localeData.type === 'openai_moderation' && (
<div className='flex items-center mt-2 px-3 py-2 bg-[#FFFAEB] rounded-lg border border-[#FEF0C7]'>
<InfoCircle className='mr-1 w-4 h-4 text-[#F79009]' />
<div className='flex items-center text-xs font-medium text-gray-700'>
{t('appDebug.feature.moderation.modal.openaiNotConfig.before')}
<span
className='text-primary-600 cursor-pointer'
onClick={handleOpenSettingsModal}
>
&nbsp;{t('common.settings.provider')}&nbsp;
</span>
{t('appDebug.feature.moderation.modal.openaiNotConfig.after')}
</div>
</div>
)
}
</div>
{
localeData.type === 'keywords' && (
<div className='py-2'>
<div className='mb-1 text-sm font-medium text-gray-900'>{t('appDebug.feature.moderation.modal.provider.keywords')}</div>
<div className='mb-2 text-xs text-gray-500'>{t('appDebug.feature.moderation.modal.keywords.tip')}</div>
<div className='relative px-3 py-2 h-[88px] bg-gray-100 rounded-lg'>
<textarea
value={localeData.config?.keywords || ''}
onChange={handleDataKeywordsChange}
className='block w-full h-full bg-transparent text-sm outline-none appearance-none resize-none'
placeholder={t('appDebug.feature.moderation.modal.keywords.placeholder') || ''}
/>
<div className='absolute bottom-2 right-2 flex items-center px-1 h-5 rounded-md bg-gray-50 text-xs font-medium text-gray-300'>
<span>{(localeData.config?.keywords || '').split('\n').filter(Boolean).length}</span>/<span className='text-gray-500'>100 {t('appDebug.feature.moderation.modal.keywords.line')}</span>
</div>
</div>
</div>
)
}
{
localeData.type === 'api' && (
<div className='py-2'>
<div className='flex items-center justify-between h-9'>
<div className='text-sm font-medium text-gray-900'>{t('common.apiBasedExtension.selector.title')}</div>
<a
href={t('common.apiBasedExtension.linkUrl') || '/'}
target='_blank' rel='noopener noreferrer'
className='group flex items-center text-xs text-gray-500 hover:text-primary-600'
>
<BookOpen01 className='mr-1 w-3 h-3 text-gray-500 group-hover:text-primary-600' />
{t('common.apiBasedExtension.link')}
</a>
</div>
<ApiBasedExtensionSelector
value={localeData.config?.api_based_extension_id || ''}
onChange={handleDataApiBasedChange}
/>
</div>
)
}
{
systemTypes.findIndex(t => t === localeData.type) < 0
&& currentProvider?.form_schema
&& (
<FormGeneration
forms={currentProvider?.form_schema}
value={localeData.config}
onChange={handleDataExtraChange}
/>
)
}
<div className='my-3 h-[1px] bg-gradient-to-r from-[#F3F4F6]'></div>
<ModerationContent
title={t('appDebug.feature.moderation.modal.content.input') || ''}
config={localeData.config?.inputs_config || { enabled: false, preset_response: '' }}
onConfigChange={config => handleDataContentChange('inputs_config', config)}
info={(localeData.type === 'api' && t('appDebug.feature.moderation.modal.content.fromApi')) || ''}
showPreset={!(localeData.type === 'api')}
/>
<ModerationContent
title={t('appDebug.feature.moderation.modal.content.output') || ''}
config={localeData.config?.outputs_config || { enabled: false, preset_response: '' }}
onConfigChange={config => handleDataContentChange('outputs_config', config)}
info={(localeData.type === 'api' && t('appDebug.feature.moderation.modal.content.fromApi')) || ''}
showPreset={!(localeData.type === 'api')}
/>
<div className='mt-1 mb-8 text-xs font-medium text-gray-500'>{t('appDebug.feature.moderation.modal.content.condition')}</div>
<div className='flex items-center justify-end'>
<Button
onClick={onCancel}
className='mr-2 text-sm font-medium'
>
{t('common.operation.cancel')}
</Button>
<Button
type='primary'
className='text-sm font-medium'
onClick={handleSave}
disabled={localeData.type === 'openai_moderation' && !openaiProviderConfiged}
>
{t('common.operation.save')}
</Button>
</div>
</Modal>
)
}
export default memo(ModerationSettingModal)
/* eslint-disable multiline-ternary */
'use client'
import type { FC } from 'react'
import React, { useEffect, useRef, useState } from 'react'
import produce from 'immer'
import cn from 'classnames'
import { useTranslation } from 'react-i18next'
import { useBoolean } from 'ahooks'
import { ReactSortable } from 'react-sortablejs'
import { useFeatures } from '../../hooks'
import Panel from '@/app/components/app/configuration/base/feature-panel'
import Button from '@/app/components/base/button'
import OperationBtn from '@/app/components/app/configuration/base/operation-btn'
import { getInputKeys } from '@/app/components/base/block-input'
import ConfirmAddVar from '@/app/components/app/configuration/config-prompt/confirm-add-var'
import { getNewVar } from '@/utils/var'
import { varHighlightHTML } from '@/app/components/app/configuration/base/var-highlight'
import { Plus, Trash03 } from '@/app/components/base/icons/src/vender/line/general'
import type { PromptVariable } from '@/models/debug'
const MAX_QUESTION_NUM = 5
export type OpeningStatementProps = {
readonly?: boolean
promptVariables?: PromptVariable[]
onAutoAddPromptVariable: (variable: PromptVariable[]) => void
}
// regex to match the {{}} and replace it with a span
const regex = /\{\{([^}]+)\}\}/g
const OpeningStatement: FC<OpeningStatementProps> = ({
readonly,
promptVariables = [],
onAutoAddPromptVariable,
}) => {
const { t } = useTranslation()
const openingStatement = useFeatures(s => s.openingStatement)
const setOpeningStatement = useFeatures(s => s.setOpeningStatement)
const value = openingStatement.opening_statement || ''
const suggestedQuestions = openingStatement.suggested_questions || []
const [notIncludeKeys, setNotIncludeKeys] = useState<string[]>([])
const hasValue = !!(value || '').trim()
const inputRef = useRef<HTMLTextAreaElement>(null)
const [isFocus, { setTrue: didSetFocus, setFalse: setBlur }] = useBoolean(false)
const setFocus = () => {
didSetFocus()
setTimeout(() => {
const input = inputRef.current
if (input) {
input.focus()
input.setSelectionRange(input.value.length, input.value.length)
}
}, 0)
}
const [tempValue, setTempValue] = useState(value)
useEffect(() => {
setTempValue(value || '')
}, [value])
const [tempSuggestedQuestions, setTempSuggestedQuestions] = useState(suggestedQuestions || [])
const notEmptyQuestions = tempSuggestedQuestions.filter(question => !!question && question.trim())
const coloredContent = (tempValue || '')
.replace(/</g, '&lt;')
.replace(/>/g, '&gt;')
.replace(regex, varHighlightHTML({ name: '$1' })) // `<span class="${highLightClassName}">{{$1}}</span>`
.replace(/\n/g, '<br />')
const handleEdit = () => {
if (readonly)
return
setFocus()
}
const [isShowConfirmAddVar, { setTrue: showConfirmAddVar, setFalse: hideConfirmAddVar }] = useBoolean(false)
const handleCancel = () => {
setBlur()
setTempValue(value)
setTempSuggestedQuestions(suggestedQuestions)
}
const handleConfirm = () => {
const keys = getInputKeys(tempValue)
const promptKeys = promptVariables.map(item => item.key)
let notIncludeKeys: string[] = []
if (promptKeys.length === 0) {
if (keys.length > 0)
notIncludeKeys = keys
}
else {
notIncludeKeys = keys.filter(key => !promptKeys.includes(key))
}
if (notIncludeKeys.length > 0) {
setNotIncludeKeys(notIncludeKeys)
showConfirmAddVar()
return
}
setBlur()
setOpeningStatement(produce(openingStatement, (draft) => {
draft.opening_statement = tempValue
draft.suggested_questions = tempSuggestedQuestions
}))
}
const cancelAutoAddVar = () => {
setOpeningStatement(produce(openingStatement, (draft) => {
draft.opening_statement = tempValue
}))
hideConfirmAddVar()
setBlur()
}
const autoAddVar = () => {
setOpeningStatement(produce(openingStatement, (draft) => {
draft.opening_statement = tempValue
}))
onAutoAddPromptVariable([...notIncludeKeys.map(key => getNewVar(key, 'string'))])
hideConfirmAddVar()
setBlur()
}
const headerRight = !readonly ? (
isFocus ? (
<div className='flex items-center space-x-1'>
<div className='px-3 leading-[18px] text-xs font-medium text-gray-700 cursor-pointer' onClick={handleCancel}>{t('common.operation.cancel')}</div>
<Button className='!h-8 !px-3 text-xs' onClick={handleConfirm} type="primary">{t('common.operation.save')}</Button>
</div>
) : (
<OperationBtn type='edit' actionName={hasValue ? '' : t('appDebug.openingStatement.writeOpner') as string} onClick={handleEdit} />
)
) : null
const renderQuestions = () => {
return isFocus ? (
<div>
<div className='flex items-center py-2'>
<div className='shrink-0 flex space-x-0.5 leading-[18px] text-xs font-medium text-gray-500'>
<div className='uppercase'>{t('appDebug.openingStatement.openingQuestion')}</div>
<div>·</div>
<div>{tempSuggestedQuestions.length}/{MAX_QUESTION_NUM}</div>
</div>
<div className='ml-3 grow w-0 h-px bg-[#243, 244, 246]'></div>
</div>
<ReactSortable
className="space-y-1"
list={tempSuggestedQuestions.map((name, index) => {
return {
id: index,
name,
}
})}
setList={list => setTempSuggestedQuestions(list.map(item => item.name))}
handle='.handle'
ghostClass="opacity-50"
animation={150}
>
{tempSuggestedQuestions.map((question, index) => {
return (
<div className='group relative rounded-lg border border-gray-200 flex items-center pl-2.5 hover:border-gray-300 hover:bg-white' key={index}>
<div className='handle flex items-center justify-center w-4 h-4 cursor-grab'>
<svg width="6" height="10" viewBox="0 0 6 10" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fillRule="evenodd" clipRule="evenodd" d="M1 2C1.55228 2 2 1.55228 2 1C2 0.447715 1.55228 0 1 0C0.447715 0 0 0.447715 0 1C0 1.55228 0.447715 2 1 2ZM1 6C1.55228 6 2 5.55228 2 5C2 4.44772 1.55228 4 1 4C0.447715 4 0 4.44772 0 5C0 5.55228 0.447715 6 1 6ZM6 1C6 1.55228 5.55228 2 5 2C4.44772 2 4 1.55228 4 1C4 0.447715 4.44772 0 5 0C5.55228 0 6 0.447715 6 1ZM5 6C5.55228 6 6 5.55228 6 5C6 4.44772 5.55228 4 5 4C4.44772 4 4 4.44772 4 5C4 5.55228 4.44772 6 5 6ZM2 9C2 9.55229 1.55228 10 1 10C0.447715 10 0 9.55229 0 9C0 8.44771 0.447715 8 1 8C1.55228 8 2 8.44771 2 9ZM5 10C5.55228 10 6 9.55229 6 9C6 8.44771 5.55228 8 5 8C4.44772 8 4 8.44771 4 9C4 9.55229 4.44772 10 5 10Z" fill="#98A2B3" />
</svg>
</div>
<input
type="input"
value={question || ''}
onChange={(e) => {
const value = e.target.value
setTempSuggestedQuestions(tempSuggestedQuestions.map((item, i) => {
if (index === i)
return value
return item
}))
}}
className={'w-full overflow-x-auto pl-1.5 pr-8 text-sm leading-9 text-gray-900 border-0 grow h-9 bg-transparent focus:outline-none cursor-pointer rounded-lg'}
/>
<div
className='block absolute top-1/2 translate-y-[-50%] right-1.5 p-1 rounded-md cursor-pointer hover:bg-[#FEE4E2] hover:text-[#D92D20]'
onClick={() => {
setTempSuggestedQuestions(tempSuggestedQuestions.filter((_, i) => index !== i))
}}
>
<Trash03 className='w-3.5 h-3.5' />
</div>
</div>
)
})}</ReactSortable>
{tempSuggestedQuestions.length < MAX_QUESTION_NUM && (
<div
onClick={() => { setTempSuggestedQuestions([...tempSuggestedQuestions, '']) }}
className='mt-1 flex items-center h-9 px-3 gap-2 rounded-lg cursor-pointer text-gray-400 bg-gray-100 hover:bg-gray-200'>
<Plus className='w-4 h-4'></Plus>
<div className='text-gray-500 text-[13px]'>{t('appDebug.variableConig.addOption')}</div>
</div>
)}
</div>
) : (
<div className='mt-1.5 flex flex-wrap'>
{notEmptyQuestions.map((question, index) => {
return (
<div key={index} className='mt-1 mr-1 max-w-full truncate last:mr-0 shrink-0 leading-8 items-center px-2.5 rounded-lg border border-gray-200 shadow-xs bg-white text-[13px] font-normal text-gray-900 cursor-pointer'>
{question}
</div>
)
})}
</div>
)
}
return (
<Panel
className={cn(isShowConfirmAddVar && 'h-[220px]', 'relative !bg-gray-25')}
title={t('appDebug.openingStatement.title')}
headerIcon={
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fillRule="evenodd" clipRule="evenodd" d="M8.33353 1.33301C4.83572 1.33301 2.00019 4.16854 2.00019 7.66634C2.00019 8.37301 2.11619 9.05395 2.3307 9.69036C2.36843 9.80229 2.39063 9.86853 2.40507 9.91738L2.40979 9.93383L2.40729 9.93903C2.39015 9.97437 2.36469 10.0218 2.31705 10.11L1.2158 12.1484C1.14755 12.2746 1.07633 12.4064 1.02735 12.5209C0.978668 12.6348 0.899813 12.8437 0.938613 13.0914C0.984094 13.3817 1.15495 13.6373 1.40581 13.7903C1.61981 13.9208 1.843 13.9279 1.96683 13.9264C2.09141 13.925 2.24036 13.9095 2.38314 13.8947L5.81978 13.5395C5.87482 13.5338 5.9036 13.5309 5.92468 13.5292L5.92739 13.529L5.93564 13.532C5.96154 13.5413 5.99666 13.5548 6.0573 13.5781C6.76459 13.8506 7.53244 13.9997 8.33353 13.9997C11.8313 13.9997 14.6669 11.1641 14.6669 7.66634C14.6669 4.16854 11.8313 1.33301 8.33353 1.33301ZM5.9799 5.72116C6.73142 5.08698 7.73164 5.27327 8.33144 5.96584C8.93125 5.27327 9.91854 5.09365 10.683 5.72116C11.4474 6.34867 11.5403 7.41567 10.9501 8.16572C10.5845 8.6304 9.6668 9.47911 9.02142 10.0576C8.78435 10.2702 8.66582 10.3764 8.52357 10.4192C8.40154 10.456 8.26134 10.456 8.13931 10.4192C7.99706 10.3764 7.87853 10.2702 7.64147 10.0576C6.99609 9.47911 6.07839 8.6304 5.71276 8.16572C5.12259 7.41567 5.22839 6.35534 5.9799 5.72116Z" fill="#E74694" />
</svg>
}
headerRight={headerRight}
hasHeaderBottomBorder={!hasValue}
isFocus={isFocus}
>
<div className='text-gray-700 text-sm'>
{(hasValue || (!hasValue && isFocus)) ? (
<>
{isFocus
? (
<div>
<textarea
ref={inputRef}
value={tempValue}
rows={3}
onChange={e => setTempValue(e.target.value)}
className="w-full px-0 text-sm border-0 bg-transparent focus:outline-none "
placeholder={t('appDebug.openingStatement.placeholder') as string}
>
</textarea>
</div>
)
: (
<div dangerouslySetInnerHTML={{
__html: coloredContent,
}}></div>
)}
{renderQuestions()}
</>) : (
<div className='pt-2 pb-1 text-xs text-gray-500'>{t('appDebug.openingStatement.noDataPlaceHolder')}</div>
)}
{isShowConfirmAddVar && (
<ConfirmAddVar
varNameArr={notIncludeKeys}
onConfrim={autoAddVar}
onCancel={cancelAutoAddVar}
onHide={hideConfirmAddVar}
/>
)}
</div>
</Panel>
)
}
export default React.memo(OpeningStatement)
import ReactSlider from 'react-slider'
import cn from 'classnames'
import s from './style.module.css'
type ISliderProps = {
className?: string
value: number
max?: number
min?: number
step?: number
disabled?: boolean
onChange: (value: number) => void
}
const Slider: React.FC<ISliderProps> = ({ className, max, min, step, value, disabled, onChange }) => {
return <ReactSlider
disabled={disabled}
value={isNaN(value) ? 0 : value}
min={min || 0}
max={max || 100}
step={step || 1}
className={cn(className, s.slider)}
thumbClassName={cn(s['slider-thumb'], 'top-[-7px] w-2 h-[18px] bg-white border !border-black/8 rounded-[36px] shadow-md cursor-pointer')}
trackClassName={s['slider-track']}
onChange={onChange}
renderThumb={(props, state) => (
<div {...props}>
<div className='relative w-full h-full'>
<div className='absolute top-[-16px] left-[50%] translate-x-[-50%] leading-[18px] text-xs font-medium text-gray-900'>
{(state.valueNow / 100).toFixed(2)}
</div>
</div>
</div>
)}
/>
}
export default Slider
.slider {
position: relative;
}
.slider.disabled {
opacity: 0.6;
}
.slider-thumb:focus {
outline: none;
}
.slider-track {
background-color: #528BFF;
height: 2px;
}
.slider-track-1 {
background-color: #E5E7EB;
}
\ No newline at end of file
'use client'
import type { FC } from 'react'
import React from 'react'
import { useTranslation } from 'react-i18next'
import Slider from '@/app/components/app/configuration/toolbox/score-slider/base-slider'
type Props = {
className?: string
value: number
onChange: (value: number) => void
}
const ScoreSlider: FC<Props> = ({
className,
value,
onChange,
}) => {
const { t } = useTranslation()
return (
<div className={className}>
<div className='h-[1px] mt-[14px]'>
<Slider
max={100}
min={80}
step={1}
value={value}
onChange={onChange}
/>
</div>
<div className='mt-[10px] flex justify-between items-center leading-4 text-xs font-normal '>
<div className='flex space-x-1 text-[#00A286]'>
<div>0.8</div>
<div>·</div>
<div>{t('appDebug.feature.annotation.scoreThreshold.easyMatch')}</div>
</div>
<div className='flex space-x-1 text-[#0057D8]'>
<div>1.0</div>
<div>·</div>
<div>{t('appDebug.feature.annotation.scoreThreshold.accurateMatch')}</div>
</div>
</div>
</div>
)
}
export default React.memo(ScoreSlider)
'use client'
import React, { type FC } from 'react'
import { useTranslation } from 'react-i18next'
import Panel from '@/app/components/app/configuration/base/feature-panel'
import { Microphone01 } from '@/app/components/base/icons/src/vender/solid/mediaAndDevices'
const SpeechToTextConfig: FC = () => {
const { t } = useTranslation()
return (
<Panel
title={
<div className='flex items-center gap-2'>
<div>{t('appDebug.feature.speechToText.title')}</div>
</div>
}
headerIcon={<Microphone01 className='w-4 h-4 text-[#7839EE]' />}
headerRight={
<div className='text-xs text-gray-500'>{t('appDebug.feature.speechToText.resDes')}</div>
}
noBodySpacing
/>
)
}
export default React.memo(SpeechToTextConfig)
'use client'
import type { FC } from 'react'
import React from 'react'
import { useTranslation } from 'react-i18next'
import Panel from '@/app/components/app/configuration/base/feature-panel'
import SuggestedQuestionsAfterAnswerIcon from '@/app/components/app/configuration/base/icons/suggested-questions-after-answer-icon'
import Tooltip from '@/app/components/base/tooltip'
import { HelpCircle } from '@/app/components/base/icons/src/vender/line/general'
const SuggestedQuestionsAfterAnswer: FC = () => {
const { t } = useTranslation()
return (
<Panel
title={
<div className='flex items-center gap-2'>
<div>{t('appDebug.feature.suggestedQuestionsAfterAnswer.title')}</div>
<Tooltip htmlContent={<div className='w-[180px]'>
{t('appDebug.feature.suggestedQuestionsAfterAnswer.description')}
</div>} selector='suggestion-question-tooltip'>
<HelpCircle className='w-[14px] h-[14px] text-gray-400' />
</Tooltip>
</div>
}
headerIcon={<SuggestedQuestionsAfterAnswerIcon />}
headerRight={
<div className='text-xs text-gray-500'>{t('appDebug.feature.suggestedQuestionsAfterAnswer.resDes')}</div>
}
noBodySpacing
/>
)
}
export default React.memo(SuggestedQuestionsAfterAnswer)
'use client'
import useSWR from 'swr'
import React, { type FC } from 'react'
import { useTranslation } from 'react-i18next'
import { usePathname } from 'next/navigation'
import { useFeatures } from '../../hooks'
import Panel from '@/app/components/app/configuration/base/feature-panel'
import { Speaker } from '@/app/components/base/icons/src/vender/solid/mediaAndDevices'
import { languages } from '@/i18n/language'
import { fetchAppVoices } from '@/service/apps'
import AudioBtn from '@/app/components/base/audio-btn'
const TextToSpeech: FC = () => {
const { t } = useTranslation()
const textToSpeech = useFeatures(s => s.textToSpeech)
const pathname = usePathname()
const matched = pathname.match(/\/app\/([^/]+)/)
const appId = (matched?.length && matched[1]) ? matched[1] : ''
const language = textToSpeech.language
const languageInfo = languages.find(i => i.value === textToSpeech.language)
const voiceItems = useSWR({ appId, language }, fetchAppVoices).data
const voiceItem = voiceItems?.find(item => item.value === textToSpeech.voice)
return (
<Panel
title={
<div className='flex items-center'>
<div>{t('appDebug.feature.textToSpeech.title')}</div>
</div>
}
headerIcon={<Speaker className='w-4 h-4 text-[#7839EE]' />}
headerRight={
<div className='text-xs text-gray-500 inline-flex items-center gap-2'>
{languageInfo && (`${languageInfo?.name} - `)}{voiceItem?.name ?? t('appDebug.voice.defaultDisplay')}
{ languageInfo?.example && (
<AudioBtn
value={languageInfo?.example}
isAudition={true}
/>
)}
</div>
}
noBodySpacing
isShowTextToSpeech={true}
/>
)
}
export default React.memo(TextToSpeech)
import { useContext } from 'react'
import { useStore } from 'zustand'
import { FeaturesContext } from './context'
import type { FeatureStoreState } from './store'
export function useFeatures<T>(selector: (state: FeatureStoreState) => T): T {
const store = useContext(FeaturesContext)
if (!store)
throw new Error('Missing FeaturesContext.Provider in the tree')
return useStore(store, selector)
}
export { default as FeaturesPanel } from './feature-panel'
export { default as FeaturesChoose } from './feature-choose'
export { FeaturesProvider } from './context'
import { createStore } from 'zustand'
import type {
AnnotationReply,
OpeningStatement,
RetrieverResource,
SensitiveWordAvoidance,
SpeechToText,
SuggestedQuestionsAfterAnswer,
TextToSpeech,
} from './types'
export type FeaturesModal = {
showFeaturesModal: boolean
setShowFeaturesModal: (showFeaturesModal: boolean) => void
}
export type FeaturesState = {
openingStatement: OpeningStatement
suggestedQuestionsAfterAnswer: SuggestedQuestionsAfterAnswer
textToSpeech: TextToSpeech
speechToText: SpeechToText
citation: RetrieverResource
moderation: SensitiveWordAvoidance
annotation: AnnotationReply
}
export type FeaturesAction = {
setOpeningStatement: (openingStatement: OpeningStatement) => void
setSuggestedQuestionsAfterAnswer: (suggestedQuestionsAfterAnswer: SuggestedQuestionsAfterAnswer) => void
setTextToSpeech: (textToSpeech: TextToSpeech) => void
setSpeechToText: (speechToText: SpeechToText) => void
setCitation: (citation: RetrieverResource) => void
setModeration: (moderation: SensitiveWordAvoidance) => void
setAnnotation: (annotation: AnnotationReply) => void
}
export type FeatureStoreState = FeaturesState & FeaturesAction & FeaturesModal
export type FeaturesStore = ReturnType<typeof createFeaturesStore>
export const createFeaturesStore = (initProps?: Partial<FeaturesState>) => {
const DEFAULT_PROPS: FeaturesState = {
openingStatement: {
enabled: false,
},
suggestedQuestionsAfterAnswer: {
enabled: false,
},
textToSpeech: {
enabled: false,
},
speechToText: {
enabled: false,
},
citation: {
enabled: false,
},
moderation: {
enabled: false,
},
annotation: {
enabled: false,
},
}
return createStore<FeatureStoreState>()(set => ({
...DEFAULT_PROPS,
...initProps,
setOpeningStatement: openingStatement => set(() => ({ openingStatement })),
setSuggestedQuestionsAfterAnswer: suggestedQuestionsAfterAnswer => set(() => ({ suggestedQuestionsAfterAnswer })),
setSpeechToText: speechToText => set(() => ({ speechToText })),
setTextToSpeech: textToSpeech => set(() => ({ textToSpeech })),
setCitation: citation => set(() => ({ citation })),
setModeration: moderation => set(() => ({ moderation })),
setAnnotation: annotation => set(() => ({ annotation })),
showFeaturesModal: false,
setShowFeaturesModal: showFeaturesModal => set(() => ({ showFeaturesModal })),
}))
}
export type EnabledOrDisabled = {
enabled: boolean
}
export type OpeningStatement = EnabledOrDisabled & {
opening_statement?: string
suggested_questions?: string[]
}
export type SuggestedQuestionsAfterAnswer = EnabledOrDisabled
export type TextToSpeech = EnabledOrDisabled & {
language?: string
voice?: string
}
export type SpeechToText = EnabledOrDisabled
export type RetrieverResource = EnabledOrDisabled
export type SensitiveWordAvoidance = EnabledOrDisabled & {
type?: string
config?: any
}
export type AnnotationReply = EnabledOrDisabled & {
id?: string
score_threshold?: number
embedding_model?: {
embedding_model_name: string
embedding_provider_name: string
}
}
import { memo } from 'react'
import { useStore } from './store'
import Button from '@/app/components/base/button'
import { XClose } from '@/app/components/base/icons/src/vender/line/general'
import {
Plus02,
XClose,
} from '@/app/components/base/icons/src/vender/line/general'
FeaturesChoose,
FeaturesPanel,
FeaturesProvider,
} from '@/app/components/base/features'
const Features = () => {
const showFeatures = useStore(state => state.showFeatures)
const setShowFeatures = useStore(state => state.setShowFeatures)
if (!showFeatures)
return null
const setShowFeaturesPanel = useStore(state => state.setShowFeaturesPanel)
return (
<div className='absolute top-2 left-2 bottom-2 w-[600px] rounded-2xl border-[0.5px] border-gray-200 bg-white shadow-xl z-10'>
<div className='flex items-center justify-between px-4 pt-3'>
Features
<div className='flex items-center'>
<Button className='px-3 py-0 h-8 rounded-lg border border-primary-100 bg-primary-25 shadow-xs text-xs font-semibold text-primary-600'>
<Plus02 className='mr-1 w-4 h-4' />
Add Features
</Button>
<div className='mx-3 w-[1px] h-[14px] bg-gray-200'></div>
<div
className='flex items-center justify-center w-6 h-6 cursor-pointer'
onClick={() => setShowFeatures(false)}
>
<XClose className='w-4 h-4 text-gray-500' />
<FeaturesProvider>
<div className='absolute top-2 left-2 bottom-2 w-[600px] rounded-2xl border-[0.5px] border-gray-200 bg-white shadow-xl z-10'>
<div className='flex items-center justify-between px-4 pt-3'>
Features
<div className='flex items-center'>
<FeaturesChoose />
<div className='mx-3 w-[1px] h-[14px] bg-gray-200'></div>
<div
className='flex items-center justify-center w-6 h-6 cursor-pointer'
onClick={() => setShowFeaturesPanel(false)}
>
<XClose className='w-4 h-4 text-gray-500' />
</div>
</div>
</div>
<div className='p-4'>
<FeaturesPanel
openingStatementProps={{
onAutoAddPromptVariable: () => {},
}}
annotationProps={{
onEmbeddingChange: () => {},
onScoreChange: () => {},
}}
/>
</div>
</div>
</div>
</FeaturesProvider>
)
}
......
......@@ -13,13 +13,13 @@ import { ArrowNarrowLeft } from '@/app/components/base/icons/src/vender/line/arr
const Header: FC = () => {
const mode = useStore(state => state.mode)
const setShowFeatures = useStore(state => state.setShowFeatures)
const setShowFeaturesPanel = useStore(state => state.setShowFeaturesPanel)
const runStaus = useStore(state => state.runStaus)
const setRunStaus = useStore(state => state.setRunStaus)
const handleShowFeatures = useCallback(() => {
setShowFeatures(true)
}, [setShowFeatures])
setShowFeaturesPanel(true)
}, [setShowFeaturesPanel])
return (
<div
......
......@@ -22,6 +22,7 @@ import CustomEdge from './custom-edge'
import CustomConnectionLine from './custom-connection-line'
import Panel from './panel'
import Features from './features'
import { useStore } from './store'
const nodeTypes = {
custom: CustomNode,
......@@ -38,6 +39,7 @@ const Workflow: FC<WorkflowProps> = memo(({
nodes: initialNodes,
edges: initialEdges,
}) => {
const showFeaturesPanel = useStore(state => state.showFeaturesPanel)
const [nodes] = useNodesState(initialNodes)
const [edges, _, onEdgesChange] = useEdgesState(initialEdges)
const nodesInitialized = useNodesInitialized()
......@@ -64,7 +66,9 @@ const Workflow: FC<WorkflowProps> = memo(({
<Header />
<Panel />
<ZoomInOut />
<Features />
{
showFeaturesPanel && <Features />
}
<ReactFlow
nodeTypes={nodeTypes}
edgeTypes={edgeTypes}
......
......@@ -3,13 +3,15 @@ import { create } from 'zustand'
type State = {
mode: string
showRunHistory: boolean
showFeatures: boolean
showFeaturesPanel: boolean
showFeaturesModal: boolean
runStaus: string
}
type Action = {
setShowRunHistory: (showRunHistory: boolean) => void
setShowFeatures: (showFeatures: boolean) => void
setShowFeaturesPanel: (showFeaturesPanel: boolean) => void
setShowFeaturesModal: (showFeaturesModal: boolean) => void
setRunStaus: (runStaus: string) => void
}
......@@ -17,8 +19,10 @@ export const useStore = create<State & Action>(set => ({
mode: 'workflow',
showRunHistory: false,
setShowRunHistory: showRunHistory => set(() => ({ showRunHistory })),
showFeatures: false,
setShowFeatures: showFeatures => set(() => ({ showFeatures })),
showFeaturesPanel: false,
setShowFeaturesPanel: showFeaturesPanel => set(() => ({ showFeaturesPanel })),
showFeaturesModal: false,
setShowFeaturesModal: showFeaturesModal => set(() => ({ showFeaturesModal })),
runStaus: '',
setRunStaus: runStaus => set(() => ({ runStaus })),
}))
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment