@klass/solid
Version:
Class variant utility for Solid
171 lines (150 loc) • 4.25 kB
Markdown
<img src="https://klass.pages.dev/cover.png" width="100%" />
<p>
<h1 align="center">klass</h1>
</p>
<p align="center">
<a title="license" href="https://github.com/flamrdevs/klass/blob/main/LICENSE">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://none.deno.dev/npm/l/@klass/solid?t=dark">
<img alt="license" src="https://none.deno.dev/npm/l/@klass/solid?t=light" hspace="1">
</picture>
</a>
<a title="version" href="https://www.npmjs.com/package/@klass/solid">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://none.deno.dev/npm/v/@klass/solid?t=dark">
<img alt="version" src="https://none.deno.dev/npm/v/@klass/solid?t=light" hspace="1">
</picture>
</a>
<a title="size" href="https://bundlejs.com/?q=@klass/solid">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://none.deno.dev/bundlejs/mz/@klass/solid?t=dark">
<img alt="size" src="https://none.deno.dev/bundlejs/mz/@klass/solid?t=light" hspace="1">
</picture>
</a>
<picture title="npm monthly downloads">
<source media="(prefers-color-scheme: dark)" srcset="https://none.deno.dev/npm/dm/@klass/solid?t=dark">
<img alt="size" src="https://none.deno.dev/npm/dm/@klass/solid?t=light" hspace="1">
</picture>
</p>
# klass solid
## Introduction
Class variant utility for Solid.
## Installation
```sh
npm install @klass/core @klass/solid
# or
yarn add @klass/core @klass/solid
# or
pnpm add @klass/core @klass/solid
# or
bun add @klass/core @klass/solid
```
## Usage
```tsx
import { klassed, reklassed } from "@klass/solid";
const Button = klassed(
"button",
{
base: "inline-flex items-center justify-center rounded-md outline-none",
variants: {
color: {
default: "bg-neutral-700 text-white",
primary: "bg-indigo-700 text-white",
secondary: "bg-orange-700 text-white",
},
size: {
sm: "px-3 py-0.5 h-7 text-sm font-medium",
md: "px-4 py-1 h-8 text-base font-medium",
lg: "px-5 py-1.5 h-9 text-lg font-semibold",
},
block: {
true: "w-full",
},
// "class" variants are not allowed
// "classList" variants are not allowed
},
defaultVariants: {
color: "default",
size: "md",
},
},
{
// default props
dp: {
type: "button",
},
}
);
const Box = reklassed("div", {
conditions: {
base: "",
sm: "sm:",
md: "md:",
lg: "lg:",
xl: "xl:",
"2xl": "2xl:",
},
defaultCondition: "base",
variants: {
m: {
"0": "m-0",
"1": "m-1",
"2": "m-2",
"3": "m-3",
"4": "m-4",
"5": "m-5",
"6": "m-6",
"7": "m-7",
"8": "m-8",
},
p: {
"0": "p-0",
"1": "p-1",
"2": "p-2",
"3": "p-3",
"4": "p-4",
"5": "p-5",
"6": "p-6",
"7": "p-7",
"8": "p-8",
},
},
});
const App = () => {
return (
<Box m={{ base: "1", md: "2" }} p="2">
<Box as="section">
<Button color="primary" block>
Primary Block Button
</Button>
</Box>
<Box as="section">
<Button as="a" color="secondary">
Secondary Anchor Button
</Button>
</Box>
</Box>
);
};
export default App;
```
## Documentation
<p>
<a title="docs" href="https://klass.pages.dev/klass/solid.html">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://none.deno.dev/ui/button/lucide?t=dark&i=external-link&e=Docs">
<img alt="docs" src="https://none.deno.dev/ui/button/lucide?t=light&i=external-link&e=Docs" hspace="1">
</picture>
</a>
</p>
## Authors
<p>
<a title="github" href="https://github.com/flamrdevs">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://flamrdevs.pages.dev/badge/dark.svg">
<img alt="github" src="https://flamrdevs.pages.dev/badge/light.svg" hspace="1">
</picture>
</a>
</p>
## License
[MIT License](https://github.com/flamrdevs/klass/blob/main/LICENSE)