Files
FastGPT/projects/app/src/components/Slider/index.tsx
Archer 34602b25df 4.6.8-alpha (#804)
* perf: redirect request and err log replace

perf: dataset openapi

feat: session

fix: retry input error

feat: 468 doc

sub page

feat: standard sub

perf: rerank tip

perf: rerank tip

perf: api sdk

perf: openapi

sub plan

perf: sub ui

fix: ts

* perf: init log

* fix: variable select

* sub page

* icon

* perf: llm model config

* perf: menu ux

* perf: system store

* perf: publish app name

* fix: init data

* perf: flow edit ux

* fix: value type format and ux

* fix prompt editor default value (#13)

* fix prompt editor default value

* fix prompt editor update when not focus

* add key with variable

---------

Co-authored-by: Archer <545436317@qq.com>

* fix: value type

* doc

* i18n

* import path

* home page

* perf: mongo session running

* fix: ts

* perf: use toast

* perf: flow edit

* perf: sse response

* slider ui

* fetch error

* fix prompt editor rerender when not focus by key defaultvalue (#14)

* perf: prompt editor

* feat: dataset search concat

* perf: doc

* fix:ts

* perf: doc

* fix json editor onblur value (#15)

* faq

* vector model default config

* ipv6

---------

Co-authored-by: heheer <71265218+newfish-cmyk@users.noreply.github.com>
2024-02-01 21:57:41 +08:00

119 lines
2.5 KiB
TypeScript

import React, { useMemo } from 'react';
import {
Slider,
SliderTrack,
SliderFilledTrack,
SliderThumb,
SliderMark,
Box
} from '@chakra-ui/react';
const MySlider = ({
markList = [],
onChange,
value,
max = 100,
min = 0,
step = 1,
width = '100%'
}: {
markList?: {
label: string | number;
value: number;
}[];
value: number;
onChange?: (index: number) => void;
max?: number;
min?: number;
step?: number;
width?: string | string[] | number | number[];
}) => {
const startEndPointStyle = {
content: '""',
borderRadius: '6px',
width: '6px',
height: '6px',
backgroundColor: '#ffffff',
border: '2px solid #D7DBE2',
position: 'absolute',
zIndex: 1,
top: 0,
transform: 'translateY(-3px)'
};
return (
<Box pb={4} zIndex={10}>
<Slider
max={max}
min={min}
step={step}
size={'lg'}
value={value}
width={width}
onChange={onChange}
_hover={{
'& .marker': {
display: 'block'
}
}}
_active={{
'& .marker': {
display: 'block'
}
}}
>
{markList?.map((item, i) => (
<SliderMark
key={item.value}
value={item.value}
fontSize={'sm'}
mt={2}
whiteSpace={'nowrap'}
transform={'translateX(-50%)'}
color={'myGray.600'}
>
<Box px={3} cursor={'pointer'}>
{item.label}
</Box>
</SliderMark>
))}
<SliderMark
className="marker"
value={value}
textAlign="center"
bg="primary.500"
color="white"
px={1}
minW={'20px'}
w={'auto'}
py={'1px'}
borderRadius={'md'}
transform={'translate(-50%, -155%)'}
fontSize={'11px'}
display={'none'}
>
<Box transform={'scale(0.9)'}>{value}</Box>
</SliderMark>
<SliderTrack
bg={'#EAEDF3'}
overflow={'visible'}
h={'4px'}
_before={{
...startEndPointStyle,
left: '-3px'
}}
_after={{
...startEndPointStyle,
right: '-3px'
}}
>
<SliderFilledTrack bg={'primary.500'} />
</SliderTrack>
<SliderThumb border={'3px solid'} borderColor={'primary.500'}></SliderThumb>
</Slider>
</Box>
);
};
export default MySlider;