Skip to content

Commit fa57d0c

Browse files
committed
feat(helper): [cssClass] add function to generate common class
1 parent 114ef17 commit fa57d0c

File tree

4 files changed

+27
-2
lines changed

4 files changed

+27
-2
lines changed

core/helper/css.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
import { type ExpressionType, insertExpressions } from '@/utils'
22

3-
export function css<T>(strings: TemplateStringsArray, ...interpolations: ExpressionType<T>[]): ExpressionType<T>[] {
3+
export function css<T = any>(
4+
strings: TemplateStringsArray,
5+
...interpolations: (ExpressionType<T> | ExpressionType<T>[])[]
6+
): ExpressionType<T>[] {
47
return insertExpressions<T>(strings, interpolations)
58
}

core/helper/cssClass.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import { ExpressionType, generateClassName, insertExpressions } from '@/utils'
2+
import { injectStyle } from '@/utils/injectStyle'
3+
4+
export function cssClass(cssStrings: TemplateStringsArray, ...interpolations: (ExpressionType<any> | ExpressionType<any>[])[]): string {
5+
const className = generateClassName()
6+
injectStyle(className, insertExpressions(cssStrings, interpolations), {})
7+
8+
return className
9+
}

core/helper/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,4 @@ export * from './is'
33
export * from './create-global-style'
44
export * from './keyframes'
55
export * from './css'
6+
export * from './cssClass'

example/App.vue

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<script setup lang="ts">
2-
import { styled, ThemeProvider, keyframes, withAttrs, css } from '@vvide/vue-styled-components'
2+
import { styled, ThemeProvider, keyframes, withAttrs, css, cssClass } from '@vvide/vue-styled-components'
33
import Component from './Component.vue'
44
import { ref } from 'vue'
55
@@ -86,6 +86,17 @@ const StyledLink = styled.a`
8686
const StyledBlueLink = styled(StyledLink, { color: String })`
8787
color: ${(props: any) => props.color};
8888
`
89+
90+
const commonCSS = css`
91+
padding: 10px 20px;
92+
border-radius: 8px;
93+
`
94+
95+
const commonClass = cssClass`
96+
${commonCSS}
97+
color: #fff;
98+
background-color: red;
99+
`
89100
</script>
90101

91102
<template>
@@ -97,6 +108,7 @@ const StyledBlueLink = styled(StyledLink, { color: String })`
97108
<StyledComp7 color="blue">123</StyledComp7>
98109
<LinkButton as="a" href="#">Link Button</LinkButton>
99110
<StyledBlueLink :color="color" href="#" @click="update">Styled Link</StyledBlueLink>
111+
<div :class="commonClass">test common class</div>
100112
</ThemeProvider>
101113
</template>
102114

0 commit comments

Comments
 (0)