mirror of
https://github.com/hanzonet/explore.git
synced 2026-10-30 18:16:57 +00:00
278 lines
6.4 KiB
TypeScript
278 lines
6.4 KiB
TypeScript
import { defineSlotRecipe } from '@chakra-ui/react';
|
|
|
|
export const recipe = defineSlotRecipe({
|
|
slots: [ 'root', 'trigger', 'indicatorGroup', 'indicator', 'content', 'item', 'control', 'itemText', 'itemGroup', 'itemGroupLabel', 'label', 'valueText' ],
|
|
base: {
|
|
root: {
|
|
display: 'flex',
|
|
flexDirection: 'column',
|
|
gap: '1.5',
|
|
width: '100%',
|
|
},
|
|
trigger: {
|
|
display: 'flex',
|
|
alignItems: 'center',
|
|
justifyContent: 'flex-start',
|
|
width: 'full',
|
|
minH: 'var(--select-trigger-height)',
|
|
pr: 'var(--select-trigger-padding-right)',
|
|
pl: 'var(--select-trigger-padding-left)',
|
|
borderRadius: 'base',
|
|
userSelect: 'none',
|
|
textAlign: 'start',
|
|
fontWeight: 'semibold',
|
|
cursor: 'pointer',
|
|
focusVisibleRing: 'none',
|
|
_disabled: {
|
|
opacity: 'control.disabled',
|
|
},
|
|
_placeholderShown: {
|
|
'& [data-part=value-text]': {
|
|
display: '-webkit-box',
|
|
},
|
|
},
|
|
},
|
|
indicatorGroup: {
|
|
display: 'flex',
|
|
alignItems: 'center',
|
|
gap: '1',
|
|
pos: 'absolute',
|
|
right: '0',
|
|
top: '0',
|
|
bottom: '0',
|
|
px: '0',
|
|
pointerEvents: 'none',
|
|
},
|
|
indicator: {
|
|
display: 'flex',
|
|
alignItems: 'center',
|
|
justifyContent: 'center',
|
|
boxSize: '5',
|
|
color: 'inherit',
|
|
_open: {
|
|
color: 'link.primary.hover',
|
|
},
|
|
},
|
|
content: {
|
|
background: 'popover.bg',
|
|
display: 'flex',
|
|
flexDirection: 'column',
|
|
zIndex: 'popover',
|
|
borderRadius: 'md',
|
|
borderWidth: '0',
|
|
outline: 0,
|
|
boxShadow: 'popover',
|
|
boxShadowColor: 'colors.popover.shadow',
|
|
maxH: '96',
|
|
overflowY: 'auto',
|
|
minWidth: '150px',
|
|
rowGap: '2',
|
|
_open: {
|
|
animationStyle: 'slide-fade-in',
|
|
animationDuration: 'fast',
|
|
},
|
|
_closed: {
|
|
animationStyle: 'slide-fade-out',
|
|
animationDuration: 'fastest',
|
|
},
|
|
},
|
|
item: {
|
|
position: 'relative',
|
|
userSelect: 'none',
|
|
display: 'flex',
|
|
alignItems: 'center',
|
|
gap: '2',
|
|
cursor: 'pointer',
|
|
justifyContent: 'flex-start',
|
|
flex: '1',
|
|
textAlign: 'start',
|
|
borderRadius: 'none',
|
|
_disabled: {
|
|
pointerEvents: 'none',
|
|
opacity: 'control.disabled',
|
|
},
|
|
_highlighted: {
|
|
bg: 'select.item.bg.highlighted',
|
|
},
|
|
},
|
|
control: {
|
|
pos: 'relative',
|
|
},
|
|
itemText: {
|
|
flex: '1',
|
|
},
|
|
itemGroup: {
|
|
_first: { mt: '0' },
|
|
},
|
|
itemGroupLabel: {
|
|
py: '1',
|
|
fontWeight: 'medium',
|
|
},
|
|
label: {
|
|
fontWeight: 'medium',
|
|
userSelect: 'none',
|
|
textStyle: 'sm',
|
|
_disabled: {
|
|
opacity: 'control.disabled',
|
|
},
|
|
},
|
|
valueText: {
|
|
display: 'flex',
|
|
flexDirection: 'column',
|
|
lineClamp: '1',
|
|
maxW: '100%',
|
|
wordBreak: 'break-all',
|
|
},
|
|
},
|
|
|
|
variants: {
|
|
variant: {
|
|
outline: {
|
|
trigger: {
|
|
borderWidth: '2px',
|
|
bg: 'input.bg',
|
|
color: 'select.trigger.outline.fg',
|
|
borderColor: 'input.border.filled',
|
|
_expanded: {
|
|
color: 'link.primary.hover',
|
|
borderColor: 'link.primary.hover',
|
|
_hover: {
|
|
color: 'link.primary.hover',
|
|
borderColor: 'link.primary.hover',
|
|
},
|
|
},
|
|
_hover: {
|
|
color: 'select.trigger.outline.fg',
|
|
borderColor: 'input.border.hover',
|
|
},
|
|
_focusVisible: {
|
|
borderColor: 'input.border.focus',
|
|
},
|
|
_readOnly: {
|
|
userSelect: 'all',
|
|
pointerEvents: 'none',
|
|
cursor: 'default',
|
|
bg: 'input.bg.readOnly',
|
|
borderColor: 'input.border.readOnly',
|
|
_focus: {
|
|
borderColor: 'input.border.readOnly',
|
|
},
|
|
_hover: {
|
|
borderColor: 'input.border.readOnly',
|
|
},
|
|
},
|
|
_invalid: {
|
|
borderColor: 'input.border.error',
|
|
_hover: {
|
|
borderColor: 'input.border.error',
|
|
},
|
|
_expanded: {
|
|
color: 'link.primary.hover',
|
|
borderColor: 'link.primary.hover',
|
|
_hover: {
|
|
color: 'link.primary.hover',
|
|
borderColor: 'link.primary.hover',
|
|
},
|
|
},
|
|
},
|
|
_placeholderShown: {
|
|
color: 'select.placeholder.fg',
|
|
borderColor: 'input.border',
|
|
_hover: {
|
|
color: 'select.placeholder.fg',
|
|
},
|
|
_invalid: {
|
|
color: 'select.placeholder.fg.error',
|
|
_hover: {
|
|
color: 'select.placeholder.fg.error',
|
|
},
|
|
},
|
|
},
|
|
},
|
|
indicatorGroup: {
|
|
color: 'select.indicator.fg',
|
|
_peerDisabled: {
|
|
opacity: 'control.disabled',
|
|
},
|
|
},
|
|
},
|
|
plain: {
|
|
trigger: {},
|
|
indicatorGroup: {},
|
|
},
|
|
},
|
|
|
|
size: {
|
|
sm: {
|
|
root: {
|
|
'--select-trigger-height': 'sizes.8',
|
|
'--select-trigger-padding-right': 'spacing.8',
|
|
'--select-trigger-padding-left': 'spacing.2',
|
|
},
|
|
content: {
|
|
px: '0',
|
|
py: '4',
|
|
textStyle: 'md',
|
|
},
|
|
trigger: {
|
|
textStyle: 'sm',
|
|
gap: '1',
|
|
},
|
|
indicatorGroup: {
|
|
pr: '2',
|
|
pl: '1',
|
|
},
|
|
item: {
|
|
py: '5px',
|
|
px: '4',
|
|
},
|
|
},
|
|
lg: {
|
|
root: {
|
|
'--select-trigger-height': '60px',
|
|
'--select-trigger-padding-right': '44px',
|
|
'--select-trigger-padding-left': 'spacing.4',
|
|
},
|
|
content: {
|
|
px: '0',
|
|
py: '4',
|
|
textStyle: 'md',
|
|
},
|
|
trigger: {
|
|
py: '2',
|
|
},
|
|
item: {
|
|
py: '5px',
|
|
px: '4',
|
|
},
|
|
indicatorGroup: {
|
|
pr: '4',
|
|
pl: '2',
|
|
},
|
|
},
|
|
},
|
|
},
|
|
|
|
compoundVariants: [
|
|
{
|
|
size: 'sm',
|
|
variant: 'outline',
|
|
css: {
|
|
trigger: {
|
|
_placeholderShown: {
|
|
color: 'select.trigger.outline.fg',
|
|
_hover: {
|
|
color: 'select.trigger.outline.fg',
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
],
|
|
|
|
defaultVariants: {
|
|
size: 'sm',
|
|
variant: 'outline',
|
|
},
|
|
});
|