Skip to content

Commit 71f7731

Browse files
author
Andrii Kirmas
committed
#9 Add TSDoc comment to ClassNamesProperty
1 parent 1fe375b commit 71f7731

File tree

3 files changed

+31
-18
lines changed

3 files changed

+31
-18
lines changed

src/check.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,10 @@ export {
1515
/** Identical function */
1616
function classNamesCheck<T extends CssModule>(classnames: T): T
1717

18-
/* Declares class keys
19-
* @example classNamesCheck() // Anything
20-
* @example classNamesCheck<typeof Component>()
18+
/** Declares class keys
19+
* @example
20+
* classNamesCheck() // Anything
21+
* classNamesCheck<typeof Component>()
2122
*/
2223
function classNamesCheck(): never
2324

src/defs.ts

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,12 @@ import type {
55
} from "react"
66

77
/** Multipurpose generic
8-
* @example ClassNames<true> === {className: string}
9-
* @example ClassNames<"class1"|"class2"> === {classnames: {class1: undefined|string, class2: undefined|string}}
10-
* @example ClassNames<Props1, Props2> === {classnames: Props1["classnames"] & Props2["classnames"]}
11-
* @example ClassNames<true, "class1", Props, typeof Component1, typeof FunctionalComponent>
8+
* @example
9+
* ClassNames<true> // {className: string}
10+
* ClassNames<Props1> // {classnames: Props1["classnames"] & Props2["classnames"]}
11+
* ClassNames<typeof Component>
12+
* ClassNames<true, Props, typeof ClassComponent, typeof FunctionalComponent>
1213
*/
13-
1414
export type ClassNames<
1515
C0 extends true | ReactRelated,
1616
C1 extends ReactRelated = never,
@@ -39,13 +39,19 @@ export type ClassNames<
3939
& Ever<C10, ClassNamesFrom<C10>>
4040
>
4141

42+
/** Declaration of self Component's classNames
43+
* @example
44+
* ClassNames<{class1: ClassHash, class2: ClassHash}>
45+
* ClassNames<typeof some_module_css, {class1: ClassHash, class2: ClassHash}>
46+
*/
4247
export type ClassNamesProperty<
4348
C extends CssModule, T extends {[K in keyof C]?: ClassHash} = C
4449
> = {classnames: {[K in keyof T & keyof C]: ClassHash}}
45-
type ClassNamesCombiner<C extends CssModule> = Ever<C, Ever<keyof C, {classnames: {[K in keyof C]: ClassHash}}>>
4650

51+
/** Primitive for global CSS and CSS module */
4752
export type ClassHash = undefined|string
4853

54+
/** Shortcut to require property `className` */
4955
export type ClassNamed = {
5056
className: string
5157
}
@@ -58,6 +64,7 @@ export type ClassNamingContext<T extends CssModule> = Partial<ClassNamed> & {
5864
}
5965

6066
/// iNTERNAL
67+
type ClassNamesCombiner<C extends CssModule> = Ever<C, Ever<keyof C, {classnames: {[K in keyof C]: ClassHash}}>>
6168
type WithClassNames = {classnames: CssModule}
6269

6370
export type CssModule = Record<string, ClassHash>
@@ -72,6 +79,7 @@ export type GetProps<C> = C extends JSXElementConstructor<infer P> ? P : C
7279
/// REACT
7380

7481
export type ReactRelated = (AnyObject & WithClassNames) | RFC | RCC
82+
//TODO Is there any way to require `classnames` in `props`?
7583
type RFC = (props: any) => ReactElement<any, any> | null
7684
type RCC = new (props: any) => Component<AnyObject & WithClassNames, any>
7785

src/index.ts

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -12,18 +12,20 @@ export {classNamesCheck} from "./check"
1212

1313
/**
1414
* Makes `className` string from imported CSS
15-
* @example <div className={`${classNamingBasic({ClassName})}`} />
16-
* @example <div {...classNamingBasic({ClassName})} />
17-
* @example const cn = classNamingBasic({C1})({C2}); <div {...cn({C3})({C4})} />
15+
* @example
16+
* <div className={`${classNamingBasic({ClassName})}`} />
17+
* <div {...classNamingBasic({ClassName})} />
18+
* const cn = classNamingBasic({C1})({C2}); <div {...cn({C3})({C4})} />
1819
*/
1920
interface ClassNamingCall<
2021
//TODO #8 `extends ReactRelated`
2122
Source extends CssModule
2223
> {
2324
/**
24-
* @example classes(true) === props.className
25-
* @example classes({class1: true, class2: false}) === "class1"
26-
* @example classes(true, {class1: true, class2: false})
25+
* @example
26+
* classes(true) === props.className
27+
* classes({class1: true, class2: false}) === "class1"
28+
* classes(true, {class1: true, class2: false})
2729
*/
2830
(
2931
arg0?: ClassNamingContext<Source> | true | string | ActionsMap<Source>,
@@ -49,9 +51,11 @@ type ActionsMap<K extends CssModule> = {[k in keyof K]?: ClassHash|boolean}
4951
// type ToggleMap<K extends ClassNamesMap> = {[k in keyof K]?: boolean}
5052

5153
/**
52-
* @example const classes = classNamingCtx(this.props)
53-
* @example const classes = classNamingCtx({className, classnames})
54-
* @example const classes = classNamingCtx({classnames})
54+
*
55+
* @example
56+
* const classes = classNaming(this.props)
57+
* const classes = classNaming({classnames, className})
58+
* const classes = classNaming({classnames})
5559
*/
5660

5761
function classNaming<

0 commit comments

Comments
 (0)