Skip to content

Commit 2eec2a1

Browse files
committed
Some css improvements
1 parent f053534 commit 2eec2a1

File tree

3 files changed

+29
-33
lines changed

3 files changed

+29
-33
lines changed

src/css.js

Lines changed: 17 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { $, IS_NON_DIMENSIONAL } from "./render.js";
22
import { options } from "./options.js";
3-
import { isArray, isNumber, isObject, isTagged } from "./utils.js";
3+
import { isNumber, isObject, isTagged } from "./utils.js";
44

55
/**
66
* @type {{[id:string]:string}}
@@ -13,32 +13,29 @@ const PROPS = {};
1313
const hyphenate = (str) =>
1414
(PROPS[str] =
1515
PROPS[str] ||
16-
(str[0] === "-"
17-
? str
18-
: str
19-
.replace(/([A-Z])/g, "-$1")
20-
.toLowerCase()
21-
.replace(/^ms-/, "-ms-")));
16+
str
17+
.replace(/([A-Z])/g, "-$1")
18+
.toLowerCase()
19+
.replace(/^ms-/, "-ms-"));
2220

2321
/**
2422
* @param {object} obj
23+
* @returns {string}
2524
*/
2625
function stringify(obj) {
2726
return Object.entries(obj)
28-
.map(([key, val]) => {
29-
if (isObject(val) && !isArray(val)) {
30-
return `${key}{${stringify(val)};}`.replace(/;;/g, ";");
27+
.map(([key, value]) => {
28+
if (isObject(value)) {
29+
return `${key}{${stringify(value)};}`.replace(/;;/g, ";");
3130
}
32-
return (isArray(val) ? val : [val])
33-
.map(
34-
(v) =>
35-
`${hyphenate(key)}:${
36-
!isNumber(v) || IS_NON_DIMENSIONAL.test(key)
37-
? v
38-
: `${v}px`
39-
}`
40-
)
41-
.join(";");
31+
if (key[0] === "-") {
32+
return `${key}:${value}`;
33+
}
34+
return `${hyphenate(key)}:${
35+
!isNumber(value) || IS_NON_DIMENSIONAL.test(key)
36+
? value
37+
: `${value}px`
38+
}`;
4239
})
4340
.join(";")
4441
.replace(/};/g, "}");

types/css.d.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import * as CSS from "csstype";
2+
13
export type Sheet = CSSStyleSheet | HTMLStyleElement;
24

35
export type Sheets = Sheet | Sheet[] | Sheets[];
@@ -20,5 +22,5 @@ export type Sheets = Sheet | Sheet[] | Sheets[];
2022
*/
2123
export function css(strings: TemplateStringsArray, ...values: any[]): Sheet;
2224
export function css(strings: {
23-
[key: string]: Partial<CSSStyleDeclaration>;
25+
[key: string]: CSS.Properties<string | number>;
2426
}): Sheet;

types/dom.d.ts

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ type DOMRef<Target> = {
2020
};
2121

2222
interface DOMGenericProperties {
23-
style?: string | Partial<CSS.Properties<string | number>>;
23+
style?: string | CSS.Properties<string | number>;
2424
class?: string;
2525
id?: string;
2626
slot?: string;
@@ -142,7 +142,7 @@ type DOMEventTarget<CurrentEvent, CurrentTarget, Target> = {
142142
type DOMTarget<
143143
Target,
144144
CurrentEvent,
145-
Targets = Element | Node,
145+
Targets = Element | Node
146146
> = CurrentEvent extends {
147147
customTarget: infer EventTarget;
148148
}
@@ -157,7 +157,7 @@ type DOMGetEventBefore<Value, Target> = Value extends DOMEventHandlerValue<
157157

158158
type DOMGetEvent<
159159
Type extends string,
160-
Element extends AtomicoStatic<any>,
160+
Element extends AtomicoStatic<any>
161161
> = Element extends {
162162
"##props": infer Props;
163163
}
@@ -168,15 +168,15 @@ type DOMGetEvent<
168168

169169
type DOMEvent<
170170
Target = HTMLElement,
171-
CurrentEvent = Event,
171+
CurrentEvent = Event
172172
> = Target extends string
173173
? CurrentEvent extends AtomicoStatic<any>
174174
? DOMGetEvent<Target, CurrentEvent>
175175
: DOMEventType<Target, CurrentEvent>
176176
: DOMTarget<DOMThis<Target>, CurrentEvent>;
177177

178178
type DOMEventHandler<Target, Handler> = Handler extends (
179-
ev: infer CurrentEvent,
179+
ev: infer CurrentEvent
180180
) => any
181181
? CurrentEvent extends Event
182182
? (ev: DOMEvent<Target, CurrentEvent>) => any
@@ -232,7 +232,7 @@ export interface DOMCustomTags {
232232
};
233233
form: DOMFormElement & {
234234
onsubmit: (
235-
event: SubmitEvent & DOMCustomTarget<DOMFormElements>,
235+
event: SubmitEvent & DOMCustomTarget<DOMFormElements>
236236
) => any;
237237
onchange: (event: Event & DOMCustomTarget<DOMFormElements>) => any;
238238
oninput: (event: Event & DOMCustomTarget<DOMFormElements>) => any;
@@ -257,7 +257,7 @@ export type JSXProxy<Props, This> = {
257257
? NonNullable<Props[I]> extends DOMEventHandlerValue<infer CurrentEvent>
258258
? Nullable<
259259
(
260-
ev: DOMEventTarget<CurrentEvent, This, Element | Node>,
260+
ev: DOMEventTarget<CurrentEvent, This, Element | Node>
261261
) => any
262262
>
263263
: Props[I]
@@ -316,10 +316,7 @@ export interface AtomicoStatic<Props> extends HTMLElement {
316316

317317
export interface Atomico<Props, Base> extends AtomicoStatic<Props> {
318318
new (
319-
props?: JSXProxy<
320-
DOMTag<DOMThis<Base>, Props>,
321-
AtomicoThis<Props, Base>
322-
>,
319+
props?: JSXProxy<DOMTag<DOMThis<Base>, Props>, AtomicoThis<Props, Base>>
323320
): AtomicoThis<Props, Base>;
324321
}
325322

@@ -345,7 +342,7 @@ export type JSXElement<Base extends FillConstructor> =
345342
*/
346343
export interface JSX<Props = {}, Base = HTMLElement> extends Element {
347344
new (
348-
props?: JSXProxy<DOMTag<DOMThis<Base>, Props>, Base>,
345+
props?: JSXProxy<DOMTag<DOMThis<Base>, Props>, Base>
349346
): PropsNullable<Props> & DOMThis<Base>;
350347
}
351348

0 commit comments

Comments
 (0)