@amj7/nativescript-tailwind-shadcn-vue-colors
Version:
NativeScript Tailwind CSS plugin that provides shadcn-vue color classes and css variables
169 lines (129 loc) • 4.4 kB
Markdown
This plugin helps you integrate shadcn-vue classes into your Tailwind CSS setup.
```js
colors: {
border: "hsl(var(--border))",
input: "hsl(var(--input))",
ring: "hsl(var(--ring))",
background: "hsl(var(--background))",
foreground: "hsl(var(--foreground))",
...
```
Bonus: Contains an optional plugin to add some handy NS responsive modifiers:
```js
addVariant("l", ".ns-light &"); // l:border
addVariant("d", ".ns-dark &"); // d:border-2
addVariant("ios", ".ns-ios &"); // ios:py-10
addVariant("android", ".ns-android &"); // android:border-none
addVariant("tablet", ".ns-tablet &"); // tablet:w-48
```
# Usage
### Install
```
npm i /nativescript-tailwind-shadcn-vue-colors
```
### Setup in `tailwind.config.js`
<details>
<summary>For fast drop-in:</summary>
In your `tailwind.config.js`:
```js
const { theme, plugins } =
require("@amj7/nativescript-tailwind-shadcn-vue-colors")(); // <- it's a function!
/** @type {import('tailwindcss').Config} */
module.exports = {
content: ["./src/**/*.{css,xml,html,vue,svelte,ts,tsx}"],
darkMode: ["class", ".ns-dark"],
theme, // <-- Add theme
plugins, // <-- (Optional) Add responsive modifiers
corePlugins: {
preflight: false,
},
};
```
</details>
<details>
<summary>Mix in with your stuff:</summary>
In your `tailwind.config.js`:
```js
const { theme, plugins } =
require("@amj7/nativescript-tailwind-shadcn-vue-colors")();
/** @type {import('tailwindcss').Config} */
module.exports = {
content: ["./src/**/*.{css,xml,html,vue,svelte,ts,tsx}"],
darkMode: ["class", ".ns-dark"],
theme: {
extend: {
...theme.extend, // Method 1: Add theme.extend
// Method 2: add container, colors and borderRadius individually
container: theme.extend.container,
colors: theme.extend.colors,
borderRadius: theme.extend.borderRadius,
},
},
plugins: [
...plugins, // <-- (Optional) Add responsive modifiers
yourPluginHere,
],
corePlugins: {
preflight: false,
},
};
```
</details>
### Add theme to your `app.css`
Included theme files:
`zinc` ,`rose` ,`blue` ,`green` ,`orange` ,`red` ,`slate` ,`stone` ,`gray` ,`neutral` ,`yellow` ,`violet`
```css
"@amj7/nativescript-tailwind-shadcn-vue-colors/themes/zinc.css"; /* THIS */
base;
components;
utilities;
```
# Themes
The included themes (CSS variable preset files) are taken from [Theming - shadcn-vue](https://www.shadcn-vue.com/themes.html) with a border radius of 0.5.
Minor modifications include adding base definitions for `Page` and `ActionBar` (see `themes/_base.css`).
You can create your own theme by using one of the provided themes as a template (see `themes/zinc.css`).
Alternatively, use `themes/_template.css` if you want to copy and paste a different variant from [shadcn-vue](https://www.shadcn-vue.com/themes.html).
<details>
<summary>Example template</summary>
```css
"@amj7/nativescript-tailwind-shadcn-vue-colors/themes/_base.css";
.ns-root,
.ns-modal {
/* :root content here */
}
.ns-root.ns-dark,
.ns-modal.ns-dark {
/* .dark content here */
}
```
</details>
# Bonus
### Example usage with `/theme-switcher`
Install `theme-switcher` and/or follow [@nativescript/theme-switcher](https://github.com/NativeScript/plugins/tree/main/packages/theme-switcher) setup guide
```sh
npm install /theme-switcher
```
Call this function in the app's `app.ts` or `main.ts` file, before the app starts.
```ts
import { initThemes } from "@nativescript/theme-switcher";
initThemes({
default: () => import(`theme-loader!/nativescript-tailwind-shadcn-vue-colors/themes/zinc.css`),
green: () => import(`theme-loader!/nativescript-tailwind-shadcn-vue-colors/themes/green.css`),
blue: () => import(`theme-loader!/nativescript-tailwind-shadcn-vue-colors/themes/blue.css`),
// custom: () => import('theme-loader!./themes/example.css'),
})
```
Example usage:
```ts
import { switchTheme } from "@nativescript/theme-switcher";
async function onTap() {
const res = await action("Select theme", "Cancel", [
"default",
"green",
"blue",
]);
if (res && res !== "Cancel") {
switchTheme(res);
}
}
```