Skip to content

Commit 5dc5e5a

Browse files
author
Andrii Kirmas
committed
#38 Add sandbox of boostrap4
1 parent 006f41a commit 5dc5e5a

9 files changed

+6185
-15
lines changed

__recipes__/package-lock.json

+786
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

__sandbox__/atom.test.ts

+50-15
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,57 @@
1+
/// <reference path="../src/global.d.ts" />
2+
import type {CssIdentifiersMap as BootStrap4} from "../__typing__/bootstrap4.css"
13
import type { Cut, Strip, UnionToIntersection } from "../src/ts-swiss.types"
24

3-
it("stripper", () => {
4-
type C1 = `${"visible-print"}-${"inline"|"block"|"inline-block"}`|`col${""|"-y"|"-x"}`|"display"
5-
type Pairs<classes extends string> = {
6-
[root in Strip<classes, "-">]: {
7-
[m1 in Merge<root, `${root}-${Strip<Cut<classes, `${root}-`, true>, "-">}`>]: true
8-
}
9-
}
5+
type After<Str extends string, Start extends string> = Str extends `${Start}${infer End}` ? End : never
6+
type StrToInt<K extends string> = K extends keyof ReactClassNaming.StrToNum ? ReactClassNaming.StrToNum[K] : K
7+
type Merge<Base extends string, Result extends string> = [Result] extends [never] ? Base : [UnionToIntersection<Result>] extends [never] ? Base : Result
8+
9+
type RootProps<classes extends string> = {
10+
[root in Strip<classes, "-">]: Merge<root, `${root}-${Strip<Cut<classes, `${root}-`, true>, "-">}`>
11+
}[Strip<classes, "-">]
12+
13+
type MiddleProps<classes extends string> = {
14+
[root in Strip<classes, "-", true>]: Exclude<classes extends `${string}-${root}` ? never : root, classes>
15+
}[Strip<classes, "-", true>]
1016

11-
type Merge<Base extends string, Result extends string> = [Result] extends [never] ? Base : [UnionToIntersection<Result>] extends [never] ? Base : Result
17+
type ValuesQ<classes extends string, props extends string, values extends string> = (
18+
false
19+
| values
20+
| {[p in props|"_"]?: p extends "_" ? values : After<classes, `${p}-`>}
21+
| [
22+
values,
23+
{[p in props]?: After<classes, `${p}-`>}
24+
]
25+
)
1226

13-
const checks: Record<string, Pairs<C1>> = {
14-
"x": {
15-
visible: {"visible-print": true},
16-
col: {col: true},
17-
display: {display: true}
27+
type Values<classes extends string> = ValuesQ<
28+
classes,
29+
MiddleProps<classes>,
30+
StrToInt<Cut<classes, `${MiddleProps<classes>}-`>>
31+
>
32+
33+
type AtomicQuery<classes extends string> = {
34+
[p in RootProps<classes>]?: Values<After<classes, `${p}-`>>
35+
}
36+
37+
it("atomic bootstrap", () => {
38+
const check: Record<string, AtomicQuery<keyof BootStrap4>> = {
39+
"1": {
40+
d: ["inline", {lg: "inline-block"}]
1841
}
1942
}
43+
expect(check).toBeInstanceOf(Object)
44+
})
2045

21-
expect(checks).toBeInstanceOf(Object)
22-
})
46+
it("merge values",() => {
47+
type Display = `${""|"lg-"|"md-"}${
48+
"none"
49+
|`table${""|"-row"|"-cell"}`
50+
|"inline"
51+
|`${"inline-"|""}${"block"|"flex"}`
52+
}`
53+
const check: Record<string, Values<Display>> = {
54+
"1": ["block", {lg: "block"}]
55+
}
56+
expect(check).toBeInstanceOf(Object)
57+
})

0 commit comments

Comments
 (0)