From e8272cd46261a34554c16fd370a536c5514e1312 Mon Sep 17 00:00:00 2001 From: Fernando Rojo Date: Wed, 12 Apr 2023 14:48:43 -0400 Subject: [PATCH] feat: dot path theme tokens --- packages/dripsy/src/core/types-v2/sx.ts | 52 +++++++++++++++++++------ 1 file changed, 40 insertions(+), 12 deletions(-) diff --git a/packages/dripsy/src/core/types-v2/sx.ts b/packages/dripsy/src/core/types-v2/sx.ts index b1113fe..df727a6 100644 --- a/packages/dripsy/src/core/types-v2/sx.ts +++ b/packages/dripsy/src/core/types-v2/sx.ts @@ -146,12 +146,35 @@ type AllVariantSets = { : never]: DripsyFinalTheme[K] } -type DotPath = keyof { - [K in keyof T as `${Extract}.${Extract< - keyof T[K], - string - >}`]: undefined -} +type ValueOf = T[keyof T] + +type DotPath = ValueOf< + { + [K in keyof T]: `${Extract}.${Extract< + keyof T[K], + string | number + >}` + } +> + +type DotPathOrKeyOf = ValueOf< + { + [K in keyof T]: T[K] extends Record + ? `${Extract}.${Extract}` + : K + } +> + +type DotPathOrKeyofTest = AssertEqual< + DotPathOrKeyOf, + '$nested.100' +> + +type DotPathColors = DotPathOrKeyOf<{ + $here: { + 100: 1 + } +}> export type Variant = DotPath @@ -179,6 +202,7 @@ const sx: SxProp = { paddingLeft: 20, borderColor: '$text', flex: 1, + color: '$nested.100', shadowOffset: { height: 10, width: 10, @@ -243,6 +267,10 @@ type AssertedAliasTests = AssertTest const testTheme = makeTheme({ colors: { $text: 'color', + $nested: { + 100: 'red', + 200: 'blue', + }, }, space: { $1: 1, @@ -264,7 +292,6 @@ const testTheme = makeTheme({ }) type TestTheme = typeof testTheme -// remember to comment this out before pushing // declare module './declarations' { // // @ts-expect-error leave this here so we remember to comment out lol // // eslint-disable-next-line @typescript-eslint/no-empty-interface @@ -285,7 +312,8 @@ type MaybeTokenOptionsFromScale< Key extends Scales[keyof Scales] | undefined > = Key extends Scales[keyof Scales] ? MaybeTokensObjectFromScale extends Record - ? `${Extract, string>}` + ? // ? `${Extract, string>}` + `${Exclude>, symbol>}` : undefined : undefined @@ -300,10 +328,10 @@ type MaybeTokenFromStyleKey< ? undefined : MaybeTokenOptionsFromScale> -type MaybeTokenOptionsFromStyleKeyTest = AssertEqual< - MaybeTokenFromStyleKey<'bg'>, - keyof DripsyFinalTheme['colors'] -> +// type MaybeTokenOptionsFromStyleKeyTest = AssertEqual< +// MaybeTokenFromStyleKey<'bg'>, +// keyof DripsyFinalTheme['colors'] +// > // type MaybeTokenOptionsFromStyleKeyTest2 = AssertEqual< // '$1',