@crossed/styled
Version:
A universal & performant styling library for React Native, Next.js & React
35 lines (34 loc) • 1.38 kB
JavaScript
import { convertKeyToCss, normalizeUnitPixel } from "./../utils";
const PseudoClassPlugin = {
name: "PseudoClassPlugin",
test: [":hover", ":active", ":focus", ":focus-visible", ":disabled"],
apply: ({ styles, key: ctxKey, addClassname, props, isWeb }) => {
const pseudoClass = ctxKey.replace(/:/i, "");
Object.entries(styles).forEach(([key, value]) => {
const valueNormalized = normalizeUnitPixel(key, value, isWeb);
if (isWeb) {
addClassname({
suffix: `:${pseudoClass}${pseudoClass === "hover" ? ":not(:disabled):not(:active)" : pseudoClass === "active" ? ":not(:disabled)" : ""}`,
body: {
[`${pseudoClass}:${convertKeyToCss(key)}-[${typeof valueNormalized === "number" ? valueNormalized : valueNormalized == null ? void 0 : valueNormalized.replace(/ /g, "-")}]`]: {
[key]: valueNormalized
}
}
});
}
if ((props == null ? void 0 : props[pseudoClass]) || !props) {
addClassname({
body: {
[`${convertKeyToCss(key)}-[${typeof valueNormalized === "number" ? valueNormalized : valueNormalized == null ? void 0 : valueNormalized.replace(/ /g, "-")}]`]: {
[key]: valueNormalized
}
}
});
}
}, {});
}
};
export {
PseudoClassPlugin
};
//# sourceMappingURL=PseudoClass.js.map