init filter
This commit is contained in:
0
ArtisanConnect/components/FilterSection.jsx
Normal file
0
ArtisanConnect/components/FilterSection.jsx
Normal file
264
ArtisanConnect/components/ui/slider/index.tsx
Normal file
264
ArtisanConnect/components/ui/slider/index.tsx
Normal file
@@ -0,0 +1,264 @@
|
||||
'use client';
|
||||
import { createSlider } from '@gluestack-ui/slider';
|
||||
import { Pressable } from 'react-native';
|
||||
import { View } from 'react-native';
|
||||
import React from 'react';
|
||||
import { tva } from '@gluestack-ui/nativewind-utils/tva';
|
||||
import {
|
||||
withStyleContext,
|
||||
useStyleContext,
|
||||
} from '@gluestack-ui/nativewind-utils/withStyleContext';
|
||||
import type { VariantProps } from '@gluestack-ui/nativewind-utils';
|
||||
import { cssInterop } from 'nativewind';
|
||||
|
||||
const SCOPE = 'SLIDER';
|
||||
const Root = withStyleContext(View, SCOPE);
|
||||
export const UISlider = createSlider({
|
||||
Root: Root,
|
||||
Thumb: View,
|
||||
Track: Pressable,
|
||||
FilledTrack: View,
|
||||
ThumbInteraction: View,
|
||||
});
|
||||
|
||||
cssInterop(UISlider.Track, { className: 'style' });
|
||||
|
||||
const sliderStyle = tva({
|
||||
base: 'justify-center items-center data-[disabled=true]:opacity-40 data-[disabled=true]:web:pointer-events-none',
|
||||
variants: {
|
||||
orientation: {
|
||||
horizontal: 'w-full',
|
||||
vertical: 'h-full',
|
||||
},
|
||||
size: {
|
||||
sm: '',
|
||||
md: '',
|
||||
lg: '',
|
||||
},
|
||||
isReversed: {
|
||||
true: '',
|
||||
false: '',
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const sliderThumbStyle = tva({
|
||||
base: 'bg-primary-500 absolute rounded-full data-[focus=true]:bg-primary-600 data-[active=true]:bg-primary-600 data-[hover=true]:bg-primary-600 data-[disabled=true]:bg-primary-500 web:cursor-pointer web:data-[active=true]:outline web:data-[active=true]:outline-4 web:data-[active=true]:outline-primary-400 shadow-hard-1',
|
||||
|
||||
parentVariants: {
|
||||
size: {
|
||||
sm: 'h-4 w-4',
|
||||
md: 'h-5 w-5',
|
||||
lg: 'h-6 w-6',
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const sliderTrackStyle = tva({
|
||||
base: 'bg-background-300 rounded-lg overflow-hidden',
|
||||
parentVariants: {
|
||||
orientation: {
|
||||
horizontal: 'w-full',
|
||||
vertical: 'h-full',
|
||||
},
|
||||
isReversed: {
|
||||
true: '',
|
||||
false: '',
|
||||
},
|
||||
size: {
|
||||
sm: '',
|
||||
md: '',
|
||||
lg: '',
|
||||
},
|
||||
},
|
||||
parentCompoundVariants: [
|
||||
{
|
||||
orientation: 'horizontal',
|
||||
size: 'sm',
|
||||
class: 'h-1 flex-row',
|
||||
},
|
||||
{
|
||||
orientation: 'horizontal',
|
||||
size: 'sm',
|
||||
isReversed: true,
|
||||
class: 'h-1 flex-row-reverse',
|
||||
},
|
||||
{
|
||||
orientation: 'horizontal',
|
||||
size: 'md',
|
||||
class: 'h-1 flex-row',
|
||||
},
|
||||
{
|
||||
orientation: 'horizontal',
|
||||
size: 'md',
|
||||
isReversed: true,
|
||||
class: 'h-[5px] flex-row-reverse',
|
||||
},
|
||||
{
|
||||
orientation: 'horizontal',
|
||||
size: 'lg',
|
||||
class: 'h-1.5 flex-row',
|
||||
},
|
||||
{
|
||||
orientation: 'horizontal',
|
||||
size: 'lg',
|
||||
isReversed: true,
|
||||
class: 'h-1.5 flex-row-reverse',
|
||||
},
|
||||
{
|
||||
orientation: 'vertical',
|
||||
size: 'sm',
|
||||
class: 'w-1 flex-col-reverse',
|
||||
},
|
||||
{
|
||||
orientation: 'vertical',
|
||||
size: 'sm',
|
||||
isReversed: true,
|
||||
class: 'w-1 flex-col',
|
||||
},
|
||||
{
|
||||
orientation: 'vertical',
|
||||
size: 'md',
|
||||
class: 'w-[5px] flex-col-reverse',
|
||||
},
|
||||
{
|
||||
orientation: 'vertical',
|
||||
size: 'md',
|
||||
isReversed: true,
|
||||
class: 'w-[5px] flex-col',
|
||||
},
|
||||
{
|
||||
orientation: 'vertical',
|
||||
size: 'lg',
|
||||
class: 'w-1.5 flex-col-reverse',
|
||||
},
|
||||
{
|
||||
orientation: 'vertical',
|
||||
size: 'lg',
|
||||
isReversed: true,
|
||||
class: 'w-1.5 flex-col',
|
||||
},
|
||||
],
|
||||
});
|
||||
|
||||
const sliderFilledTrackStyle = tva({
|
||||
base: 'bg-primary-500 data-[focus=true]:bg-primary-600 data-[active=true]:bg-primary-600 data-[hover=true]:bg-primary-600',
|
||||
parentVariants: {
|
||||
orientation: {
|
||||
horizontal: 'h-full',
|
||||
vertical: 'w-full',
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
type ISliderProps = React.ComponentProps<typeof UISlider> &
|
||||
VariantProps<typeof sliderStyle>;
|
||||
|
||||
const Slider = React.forwardRef<
|
||||
React.ComponentRef<typeof UISlider>,
|
||||
ISliderProps
|
||||
>(function Slider(
|
||||
{
|
||||
className,
|
||||
size = 'md',
|
||||
orientation = 'horizontal',
|
||||
isReversed = false,
|
||||
...props
|
||||
},
|
||||
ref
|
||||
) {
|
||||
return (
|
||||
<UISlider
|
||||
ref={ref}
|
||||
isReversed={isReversed}
|
||||
orientation={orientation}
|
||||
{...props}
|
||||
className={sliderStyle({
|
||||
orientation,
|
||||
isReversed,
|
||||
class: className,
|
||||
})}
|
||||
context={{ size, orientation, isReversed }}
|
||||
/>
|
||||
);
|
||||
});
|
||||
|
||||
type ISliderThumbProps = React.ComponentProps<typeof UISlider.Thumb> &
|
||||
VariantProps<typeof sliderThumbStyle>;
|
||||
|
||||
const SliderThumb = React.forwardRef<
|
||||
React.ComponentRef<typeof UISlider.Thumb>,
|
||||
ISliderThumbProps
|
||||
>(function SliderThumb({ className, size, ...props }, ref) {
|
||||
const { size: parentSize } = useStyleContext(SCOPE);
|
||||
|
||||
return (
|
||||
<UISlider.Thumb
|
||||
ref={ref}
|
||||
{...props}
|
||||
className={sliderThumbStyle({
|
||||
parentVariants: {
|
||||
size: parentSize,
|
||||
},
|
||||
size,
|
||||
class: className,
|
||||
})}
|
||||
/>
|
||||
);
|
||||
});
|
||||
|
||||
type ISliderTrackProps = React.ComponentProps<typeof UISlider.Track> &
|
||||
VariantProps<typeof sliderTrackStyle>;
|
||||
|
||||
const SliderTrack = React.forwardRef<
|
||||
React.ComponentRef<typeof UISlider.Track>,
|
||||
ISliderTrackProps
|
||||
>(function SliderTrack({ className, ...props }, ref) {
|
||||
const {
|
||||
orientation: parentOrientation,
|
||||
size: parentSize,
|
||||
isReversed,
|
||||
} = useStyleContext(SCOPE);
|
||||
|
||||
return (
|
||||
<UISlider.Track
|
||||
ref={ref}
|
||||
{...props}
|
||||
className={sliderTrackStyle({
|
||||
parentVariants: {
|
||||
orientation: parentOrientation,
|
||||
size: parentSize,
|
||||
isReversed,
|
||||
},
|
||||
class: className,
|
||||
})}
|
||||
/>
|
||||
);
|
||||
});
|
||||
|
||||
type ISliderFilledTrackProps = React.ComponentProps<
|
||||
typeof UISlider.FilledTrack
|
||||
> &
|
||||
VariantProps<typeof sliderFilledTrackStyle>;
|
||||
|
||||
const SliderFilledTrack = React.forwardRef<
|
||||
React.ComponentRef<typeof UISlider.FilledTrack>,
|
||||
ISliderFilledTrackProps
|
||||
>(function SliderFilledTrack({ className, ...props }, ref) {
|
||||
const { orientation: parentOrientation } = useStyleContext(SCOPE);
|
||||
|
||||
return (
|
||||
<UISlider.FilledTrack
|
||||
ref={ref}
|
||||
{...props}
|
||||
className={sliderFilledTrackStyle({
|
||||
parentVariants: {
|
||||
orientation: parentOrientation,
|
||||
},
|
||||
class: className,
|
||||
})}
|
||||
/>
|
||||
);
|
||||
});
|
||||
|
||||
export { Slider, SliderThumb, SliderTrack, SliderFilledTrack };
|
||||
Reference in New Issue
Block a user