Skip to content

Commit 010f787

Browse files
authored
Types: allow for arbitrary theme values (for 3rd party plugins) (#7926)
* allow for arbitrary configuration in the `theme` section This is useful for third party plugins otherwise you will get an error. * WIP: `theme()` utility function code completion This will give you code completion in the `theme()` function. The reason it is still a WIP is that this only works with the default config right now and not 100% sure if it is possible to define generics in JSDoc. The idea would be to: - Provide types from the default config - Provide types from the custom config (e.g.: 3rd party plugin) - Override default config types with the overrides of the user's config Right now this only provides types for the defaultConfig which might result in dropping all of this in favor of a much simpler: ```ts theme<D = any>(path: string, defaultValue: D) => D ``` But this sadly doesn't give you "nice" auto completion. However, the default might be good enough if we don't error on for example `theme('customPlugin')` which is currently not the case. * update changelog * undo all `theme` types, and type it as `theme(path: string): any` Since currently we don't want to investigate time to make the code completion *perfect* (because it might be even impossible to do it properly due to resolving of overrides, extend and deeply nested presets) For now we will provide a way simpler type, which is better than incorrect types. So far we only had types for the default config theme *only*.
1 parent 8ba3d61 commit 010f787

File tree

2 files changed

+5
-2
lines changed

2 files changed

+5
-2
lines changed

CHANGELOG.md

+1
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
2222
- Fix generation of `div:not(.foo)` if `.foo` is never defined ([#7815](https://github.com/tailwindlabs/tailwindcss/pull/7815))
2323
- Allow for custom properties in `rgb`, `rgba`, `hsl` and `hsla` colors ([#7933](https://github.com/tailwindlabs/tailwindcss/pull/7933))
2424
- Remove autoprefixer as explicit peer-dependency to avoid invalid warnings in situations where it isn't actually needed ([#7949](https://github.com/tailwindlabs/tailwindcss/pull/7949))
25+
- Types: allow for arbitrary theme values (for 3rd party plugins) ([#7926](https://github.com/tailwindlabs/tailwindcss/pull/7926))
2526

2627
### Changed
2728

types/config.d.ts

+4-2
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ type ResolvableTo<T> = T | ((utils: PluginUtils) => T)
1515

1616
interface PluginUtils {
1717
colors: DefaultColors
18-
theme(path: string, defaultValue: unknown): keyof ThemeConfig
18+
theme(path: string, defaultValue?: unknown): any
1919
breakpoints<I = Record<string, unknown>, O = I>(arg: I): O
2020
rgb(arg: string): (arg: Partial<{ opacityVariable: string; opacityValue: number }>) => string
2121
hsl(arg: string): (arg: Partial<{ opacityVariable: string; opacityValue: number }>) => string
@@ -218,6 +218,9 @@ interface ThemeConfig {
218218
transitionDuration: ResolvableTo<KeyValuePair>
219219
willChange: ResolvableTo<KeyValuePair>
220220
content: ResolvableTo<KeyValuePair>
221+
222+
/** Custom */
223+
[key: string]: any
221224
}
222225

223226
// Core plugins related config
@@ -320,4 +323,3 @@ interface OptionalConfig {
320323
}
321324

322325
export type Config = RequiredConfig & Partial<OptionalConfig>
323-

0 commit comments

Comments
 (0)