Skip to content

Commit 5087d1b

Browse files
committed
feat(provider): [theme] add support for extending and implementing theme typedef
1 parent c758864 commit 5087d1b

File tree

6 files changed

+34
-8
lines changed

6 files changed

+34
-8
lines changed

.github/workflows/release.yml

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ jobs:
4848
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
4949
run: pnpm release
5050

51-
sync:
51+
sync-beta:
5252
runs-on: ubuntu-latest
5353
needs: release
5454
if: startsWith(github.ref, 'refs/heads/beta')
@@ -64,4 +64,22 @@ jobs:
6464
run: |
6565
git checkout main
6666
git pull --rebase origin beta
67+
git push -f
68+
69+
sync-alpha:
70+
runs-on: ubuntu-latest
71+
needs: release
72+
if: startsWith(github.ref, 'refs/heads/alpha')
73+
steps:
74+
- name: Checkout
75+
uses: actions/checkout@v4
76+
with:
77+
fetch-depth: 0
78+
79+
- name: Sync
80+
env:
81+
ACCESS_TOKEN: ${{ secrets.GITHUB_TOKEN }}
82+
run: |
83+
git checkout main
84+
git pull --rebase origin alpha
6785
git push -f

packages/core/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
"files": [
66
"dist/*"
77
],
8-
"main": "./dist/index.umd.cjs",
8+
"main": "./dist/index.js",
99
"module": "./dist/index.js",
1010
"exports": {
1111
".": {

packages/core/src/providers/theme.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
import { defineComponent, h, PropType, provide, ref, watch } from 'vue'
22

3-
export type DefaultTheme = Record<string, any>
3+
export interface DefaultTheme {
4+
[key: string]: any
5+
}
46

57
export const ThemeProvider = defineComponent(
68
(props, { slots }) => {

packages/core/src/styled.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import {
1414
import domElements, { type SupportedHTMLElements } from '@/src/constants/domElements'
1515
import { type ExpressionType, generateClassName, generateComponentName, insertExpressions, injectStyle, removeStyle } from '@/src/utils'
1616
import { isStyledComponent, isValidElementType, isVueComponent } from '@/src/helper'
17+
import { DefaultTheme } from './providers'
1718

1819
interface IProps {
1920
as?: PropType<SupportedHTMLElements>
@@ -27,7 +28,7 @@ export type StyledComponentType<P = any> = DefineSetupFnComponent<IProps & P, an
2728

2829
type StyledFactory = <T = Record<string, any>>(
2930
styles: TemplateStringsArray,
30-
...expressions: (ExpressionType<T> | ExpressionType<T>[])[]
31+
...expressions: (ExpressionType<T & { theme: DefaultTheme }> | ExpressionType<T & { theme: DefaultTheme }>[])[]
3132
) => StyledComponentType
3233
type StyledComponent = StyledFactory & {
3334
attrs: <T extends Record<string, unknown>>(attrs: T) => StyledFactory
@@ -52,7 +53,7 @@ function baseStyled<P extends Record<string, any>>(target: string | InstanceType
5253
return styledComponent
5354
}
5455

55-
function createStyledComponent<T>(cssWithExpression: ExpressionType<T>[]): StyledComponentType {
56+
function createStyledComponent<T>(cssWithExpression: ExpressionType<T & { theme: DefaultTheme }>[]): StyledComponentType {
5657
let type: string = target
5758
if (isVueComponent(target)) {
5859
type = 'vue-component'
@@ -80,15 +81,15 @@ function baseStyled<P extends Record<string, any>>(target: string | InstanceType
8081
theme: theme?.value ?? {},
8182
...props,
8283
}
83-
injectStyle<T>(myAttrs.class, cssWithExpression, context)
84+
injectStyle<T & { theme: DefaultTheme }>(myAttrs.class, cssWithExpression, context)
8485
},
8586
{
8687
deep: true,
8788
},
8889
)
8990

9091
onMounted(() => {
91-
injectStyle<T>(myAttrs.class, cssWithExpression, context)
92+
injectStyle<T & { theme: DefaultTheme }>(myAttrs.class, cssWithExpression, context)
9293
})
9394

9495
onUnmounted(() => {

packages/core/vite.config.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ export default defineConfig({
2424
},
2525
plugins: [
2626
dts({
27-
include: ['index.ts', './src/**.ts'],
27+
include: ['index.ts', './src/**/*.ts'],
2828
exclude: ['__test__'],
2929
}),
3030
],

packages/playground/theme.d.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
// declare module '@vue-styled-components/core' {
2+
// export interface DefaultTheme extends ThemeType {
3+
// primary: 'blue'
4+
// }
5+
// }

0 commit comments

Comments
 (0)