
Product
Announcing Socket Fix 2.0
Socket Fix 2.0 brings targeted CVE remediation, smarter upgrade planning, and broader ecosystem support to help developers get to zero alerts.
class-c
Chainable class name helper with first class CSS Module support
$ npm install class-c
c
uses the tagged template syntax
import c from "class-c";
c`a b`; // => "a b"
// Extra whitespace will be removed
c` a b `; // => "a b"
c`
a
b
`; // => "a b"
// Calling with a string can be useful for class forwarding, see CSS Modules section
c("a b"); // => "a b"
Functions passed into the template will be unwrapped to their return value
import c from "class-c";
c`a ${() => "b"}`; // => "a b"
You can chain as many scopes as you'd like
c`a`.c`b c`.c`d`; // => "a b c d"
// This is more useful when used with CSS Modules, see CSS Modules section for more details
const styles = {
a: "scoped-a",
b: "scoped-b",
};
c(styles)`a b`.c`a b`; // => "scoped-a scoped-b a b"
Falsey values will be omitted, condition-by-class mapping is also supported. This can be useful with object shorthand. This also supports function conditions.
c`a ${condition && b}`; // => condition ? "a b" : "a"
c`a ${{ b: false, c: true }}`; // => "a c"
const focused = true;
const highlighted = false;
const open = true;
c`${{ focused, highlighted, open }}`; // => "focused open"
// Function conditions
const focused = () => true;
const highlighted = () => false;
const open = () => true;
c`${{ focused, highlighted, open }}`; // => "focused open"
// Function values may also return conditional maps
c`${() => ({ focused, highlighted, open })}`; // => "focused open"
Calling c
with a styles object will create a scoped context
const styles = {
a: "scoped-a",
b: "scoped-b",
};
c(styles)`a b`; // => "scoped-a scoped-b"
Chaining will reset context which can be useful for forwarding classes
c(styles)`a b`.c`a b`; // => "scoped-a scoped-b a b"
// Forwarding classes
const someExternalClasses = "external-a external-b";
c(styles)`a b`.c(someExternalClasses); // => "scoped-a scoped-b external-a external-b"
If you need to use a context in many places, it can be convenient to make a new helper
const cs = c(styles);
cs`a`; // => "scoped-a"
// Chaining will still reset context
cs`b`.c`c`; // => "scoped-b"
const otherStyles = {
a: "other-a",
b: "other-b",
};
c(styles)`a b`.c(otherStyles)`a b`; // => "scoped-a scoped-b other-a other-b"
// Non existant classes will be removed
c(styles)`a nonexistant b`; // => "scoped-a scoped-b"
const styles = {
variant_a: "scoped-variant_a",
variant_b: "scoped-variant_b",
};
const variant: "a" | "b" = "a";
c(styles)`variant_${variant}`; // => "scoped-variant_a"
const suffixStyles = {
a_suffix: "scoped-a_suffix",
b_suffix: "scoped-b_suffix",
};
c(suffixStyles)`${variant}_suffix`; // => "scoped-variant_a"
FAQs
className helper
We found that class-c demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Product
Socket Fix 2.0 brings targeted CVE remediation, smarter upgrade planning, and broader ecosystem support to help developers get to zero alerts.
Security News
Socket CEO Feross Aboukhadijeh joins Risky Business Weekly to unpack recent npm phishing attacks, their limited impact, and the risks if attackers get smarter.
Product
Socket’s new Tier 1 Reachability filters out up to 80% of irrelevant CVEs, so security teams can focus on the vulnerabilities that matter.