Skip to content

Commit 63fd198

Browse files
authored
Merge pull request #10100 from TylerAPfledderer/feat/new-tag-theme
Feat: Create New Tag Theme
2 parents eb258ff + 18019aa commit 63fd198

File tree

9 files changed

+618
-103
lines changed

9 files changed

+618
-103
lines changed

src/@chakra-ui/gatsby-plugin/components/Tag.ts

Lines changed: 0 additions & 57 deletions
This file was deleted.
Lines changed: 123 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,123 @@
1+
import {
2+
createMultiStyleConfigHelpers,
3+
theme,
4+
defineStyle,
5+
} from "@chakra-ui/react"
6+
import { tagAnatomy } from "@chakra-ui/anatomy"
7+
import { $badgeColor, STATUS_COLORS } from "./utils"
8+
import { defineMergeStyles } from "../components.utils"
9+
10+
const { definePartsStyle, defineMultiStyleConfig } =
11+
createMultiStyleConfigHelpers(tagAnatomy.keys)
12+
13+
const { Tag: tagTheme } = theme.components
14+
15+
const baseStyleContainer = defineMergeStyles(tagTheme.baseStyle?.container, {
16+
border: "1px",
17+
borderColor: "transparent",
18+
gap: 1,
19+
borderRadius: "full",
20+
px: 2,
21+
minH: 8,
22+
fontWeight: 300,
23+
"&:any-link": {
24+
textDecor: "none",
25+
_focusWithin: {
26+
outline: "4px solid",
27+
outlineColor: "transparent",
28+
outlineOffset: 0,
29+
},
30+
},
31+
})
32+
33+
const baseStyleLabel = defineStyle({
34+
...tagTheme.baseStyle?.label,
35+
fontSize: "xs",
36+
textTransform: "uppercase",
37+
textAlign: "center",
38+
lineHeight: 1,
39+
})
40+
41+
const baseStyleCloseButton = defineStyle({
42+
...tagTheme.baseStyle?.closeButton,
43+
opacity: 1,
44+
m: 0,
45+
// Clear default
46+
_focusVisible: null,
47+
"&:focus-visible, &:hover": {
48+
outline: "3px solid",
49+
outlineOffset: "-2px",
50+
},
51+
})
52+
53+
const baseStyle = definePartsStyle({
54+
container: baseStyleContainer,
55+
label: baseStyleLabel,
56+
closeButton: baseStyleCloseButton,
57+
})
58+
59+
const getStatusStyles = (status: string, variant: string) => {
60+
const statusStyles = STATUS_COLORS[status][variant]
61+
62+
return {
63+
container: statusStyles,
64+
}
65+
}
66+
67+
const variantSubtle = definePartsStyle((props) => {
68+
const { status = "normal" } = props
69+
const defaultStyles = tagTheme.variants?.subtle(props)
70+
const statusStyles = getStatusStyles(status, "subtle")
71+
return {
72+
container: {
73+
...defaultStyles?.container,
74+
// Remove default dark mode styles
75+
_dark: {},
76+
...statusStyles.container,
77+
},
78+
}
79+
})
80+
81+
const variantSolid = definePartsStyle((props) => {
82+
const { status = "normal" } = props
83+
const defaultStyles = tagTheme.variants?.solid(props)
84+
const statusStyles = getStatusStyles(status, "solid")
85+
return {
86+
container: {
87+
...defaultStyles?.container,
88+
// Remove default dark mode styles
89+
_dark: {},
90+
...statusStyles.container,
91+
},
92+
}
93+
})
94+
95+
const variantOutline = definePartsStyle((props) => {
96+
const { status = "normal" } = props
97+
const defaultStyles = tagTheme.variants?.outline(props)
98+
const statusStyles = getStatusStyles(status, "outline")
99+
return {
100+
container: {
101+
...defaultStyles?.container,
102+
boxShadow: "none",
103+
borderColor: $badgeColor.reference,
104+
// Remove default dark mode styles
105+
_dark: {},
106+
...statusStyles.container,
107+
},
108+
}
109+
})
110+
111+
const variants = {
112+
subtle: variantSubtle,
113+
solid: variantSolid,
114+
outline: variantOutline,
115+
}
116+
117+
export const Tag = defineMultiStyleConfig({
118+
baseStyle,
119+
variants,
120+
defaultProps: {
121+
variant: "subtle",
122+
},
123+
})

0 commit comments

Comments
 (0)