less-plugin-dls
Version:
Less plugin for Baidu Light DLS.
241 lines (152 loc) • 5.8 kB
Markdown
# less-plugin-dls
Less plugin for Baidu DLS.
## Installation
```sh
npm i --save-dev less-plugin-dls
```
## Usage
### Autoinject with Less plugin
```js
import less from 'less'
import dls from 'less-plugin-dls'
less
.render('a { color: @dls-link-font-color-normal; }', {
plugins: [dls()]
})
.then(result => {
// handle result
})
```
### Import from stylesheets
With [less-loader](https://github.com/webpack-contrib/less-loader):
```less
@import "~less-plugin-dls/tokens/index.less";
a {
color: @dls-link-font-color-normal;
}
```
### Use CLI argument
```sh
lessc style.less --dls
```
## Using metadata
Variable values/metadata are provided in three formats for each theme.
| File | Description |
| -- | -- |
| `variables.js` | The raw variable values in JavaScript ESM format. Token names are transformed from `@dls-color-brand-7` to `dlsColorBrand7` as named exports. |
| `variables.json` | The raw variable values in JSON format. |
| `variables.less` | The variable values in Less format. |
```ts
// types for the JSON format:
interface Variables {
[tokenName: string]: {
value: string
type: 'color' | 'font' | 'numeric' | 'length' | 'complex'
global: boolean
}
}
```
We also included a set of metadata files for different themes and scopes. Currently the only supported theme is `ai` and supported scopes are `global` and `palette`. The dist file names are in the format of `variables.<scope>.<theme>.<format>`, where `<scope>` and `<theme>` are both optional. eg.
```sh
variables.global.less # global variables, w/o component variables
variables.palette.ai.less # global color palette variables in AI theme
```
## Custom functions
### `dls-contextual(@color, @type)`
To generate contextual colors according to the given brand color.
**Params**:
- `@color: Color` - the brand color.
- `@type: info | success | warning | error` - the color context.
**Return value**:
`Color` - the generated contextual color.
```less
@color: dls-contextual(#0052cc, success); // → #39bf45
```
### `dls-shade(@color, @level)`
To generate a specific shade level of the given base color.
**Params**:
- `@color: Color` - the base color.
- `@level: Number` - the shade level.
**Return value**:
`Color` - the generated shaded color.
```less
@color: dls-shade(#3d88f2, 3); // → #b3cfff
```
### `dls-sum(...@dimensions)`
To get the sum of the given dimensions or `calc` expressions.
**Params**:
- `@dimensions: List<Dimension | Calc>` - A list of length values.
**Return value**:
`Dimension | Calc` - the total value of the given list.
```less
@width: dls-sum(1px, 30%); // → calc(1px + 30%)
@height: dls-sum(1px, 10px, 100px); // → 111px
@top: dls-sum(calc(1px + 5em), -1px); // → 5em
@left: dls-sum(calc(1px + 5em), -1px, calc(-5em)); // → 0
```
### `dls-even(@dimension)`
To calculate the closest even integer value for a given dimension.
**Params**:
- `@dimension: Dimension` - The given length value.
**Return value**:
`Dimension` - the closest even value.
```less
@width: dls-even(1px); // → 2px
@height: dls-even(2); // → 2
@top: dls-even(19.6px); // → 20px
@left: dls-even(2.8em); // → 2em
```
### `dls-line-height(@line-height, @font-size): Dimension`
To calculate the absolute `line-height` from the given `line-height` and `font-size` value.
Will return `@line-height` directly if it is an absolute length (eg. `15px`, `2em`). Will return the product of `@line-height` and `@font-size` for relative lengths (eg. `1.5`, `200%`).
**Params**:
- `@line-height: Dimension` - the `line-height` value.
- `@font-size: Dimension` - the `font-size` value.
**Return value**:
The absolute length of the line-height.
```less
@h1: dls-line-height(1.5, 16px); // → 24px
@h2: dls-line-height(120%, 15px); // → 18px
@h3: dls-line-height(2em, 1.2em); // → 2em
```
## Options
### `theme: 'ai' | undefined`
The theme of the DLS. If not specified, the default theme will be used.
### `reduceCalc: boolean`
Indicates whether to reduce `calc` expression to the simplest form or not.
Default value: `true`.
## Tooling
### CLI checker
```sh
npx dls check -c -o result.log
```
#### Commands
##### `check`
To check which variables are not used inside a directory. The current strategy is plain text search so that doesn't cover the case of Less's variable name interpolation.
###### Options
- `--dir` / `-d`
The target directory to check.
Default: `.`.
- `--exclude` / `-x`
Comma-separated glob expression, indicates which files should be ignored.
Default: `node_modules,test`.
```sh
npx dls check -x node_modules,test,dist # or --exclude=node_modules,test,dist
```
- `--components` / `-c`
Comma-separated component names to specify which component-level variables will be checked. `--components=all` will check all component-level variables.
Variables can be ignored if you put a `.dlsignore` file under the project root directory, with each variable (should be prefixed by `@`) on a single line. Lines led by `#` will be treated as comments.
```sh
npx dls check -c button,select # or --components=button,select
npx dls check -c all # or --components=all
```
- `--output` / `-o`
The output file for the check result.
```sh
npx dls check -o result.log # or --output=result.log
```
### Editor Extensions
- **Baidu DLS (VS Code)**
[Marketplace](https://marketplace.visualstudio.com/items?itemName=justice360.vscode-dls) / [GitHub](https://github.com/Justineo/vscode-dls)
## License
[MIT](https://github.com/ecomfe/less-plugin-dls/blob/master/LICENSE)