open-index/open-npm huggingface dataset:
npm package: @jswork/page-update-checker
Description: A lightweight, self-contained JavaScript module for real-time webpage update detection and user notification.
Latest version: 1.0.13

# page-update-checker
> A lightweight, self-contained JavaScript module for real-time webpage update detection and user notification.

[![version][version-image]][version-url]
[![license][license-image]][license-url]
[![size][size-image]][size-url]
[![download][download-image]][download-url]

> [!NOTE]
> The url should be a public accessible url, no cacheable content.

## installation
```shell
npm install @jswork/page-update-checker
```

## usage
```js
import PageUpdateChecker from '@jswork/page-update-checker';

const checker = PageUpdateChecker.run({
  url: 'https://afeiship.github.io/page-update-checker',
  interval: 1000 * 60 * 1, // 1 minutes
  onUpdateAvailable: () => {
    const confirmed = window.confirm('网页内容已经更新，你是否现在刷新？');
    if (confirmed) {
      window.location.reload();
    } else {
      this.ignore();
    }
  }
});

// trigger ingore events;
window.dispatchEvent(new CustomEvent('@:page-update-checker:ignore'));
// use nx
nx.rootDispatch('@:page-update-checker:ignore');
```

## license
Code released under [the MIT license](https://github.com/afeiship/page-update-checker/blob/master/LICENSE.txt).

[version-image]: https://img.shields.io/npm/v/@jswork/page-update-checker
[version-url]: https://npmjs.org/package/@jswork/page-update-checker

[license-image]: https://img.shields.io/npm/l/@jswork/page-update-checker
[license-url]: https://github.com/afeiship/page-update-checker/blob/master/LICENSE.txt

[size-image]: https://img.shields.io/bundlephobia/minzip/@jswork/page-update-checker
[size-url]: https://github.com/afeiship/page-update-checker/blob/master/dist/index.min.js

[download-image]: https://img.shields.io/npm/dm/@jswork/page-update-checker
[download-url]: https://www.npmjs.com/package/@jswork/page-update-checker
npm package: @jswork/path2modname
Description: Path to module name.
Latest version: 1.0.3

# path2modname
> Path to module name.

[![version][version-image]][version-url]
[![license][license-image]][license-url]
[![size][size-image]][size-url]
[![download][download-image]][download-url]

## installation
```shell
npm install @jswork/path2modname
```

## usage
```js
import path2modname from '@jswork/path2modname';

const path1 = 'features.user-center.profile';
const path2 = 'features.profile';
const path3 = 'features.user-center';

console.log(path2modname(path1)); // 'features.userCenterProfile'
console.log(path2modname(path2)); // 'features.profile'
console.log(path2modname(path3)); // 'features.userCenter'
```

## license
Code released under [the MIT license](https://github.com/afeiship/path2modname/blob/master/LICENSE.txt).

[version-image]: https://img.shields.io/npm/v/@jswork/path2modname
[version-url]: https://npmjs.org/package/@jswork/path2modname

[license-image]: https://img.shields.io/npm/l/@jswork/path2modname
[license-url]: https://github.com/afeiship/path2modname/blob/master/LICENSE.txt

[size-image]: https://img.shields.io/bundlephobia/minzip/@jswork/path2modname
[size-url]: https://github.com/afeiship/path2modname/blob/master/dist/index.min.js

[download-image]: https://img.shields.io/npm/dm/@jswork/path2modname
[download-url]: https://www.npmjs.com/package/@jswork/path2modname
npm package: @jswork/photon
Description: Photon sass/css for npm.
Author: afei
Latest version: 1.0.0

# photon
> Photon sass/css for npm.

## installation
```shell
npm i -S @jswork/photon 
```

## usage
```scss
// use sass
@import '@jswork/photon/dist/sass/photon.scss';

// use css
@import '@jswork/photon/dist/css/photon.css';
```

## resources
- http://photonkit.com/
npm package: @jswork/pinia-plugin-persist
Description: Persist pinia state data storages.
Latest version: 1.0.6

# pinia-plugin-persist
> Persist pinia state data storages.

[![version][version-image]][version-url]
[![license][license-image]][license-url]
[![size][size-image]][size-url]
[![download][download-image]][download-url]

## installation
```shell
npm install @jswork/pinia-plugin-persist
```

## usage
```js
import PiniaPluginPersist from '@jswork/pinia-plugin-persist';

// ======== main.js  ======
export function createApp() {
  const app = createSSRApp(App);
  const pinia = createPinia();

  // Attach storage
  app.$storage = nx.$storage;
  pinia.use(PiniaPluginPersist);
  //...
}

// ======== stores/auth.js ======
import { defineStore } from "pinia";

export default defineStore("auth", {
  state: () => ({ profile: null, user: null, other: null }),
  persist: {
    keys: ["profile", "user"]
  },
});
```

## license
Code released under [the MIT license](https://github.com/afeiship/pinia-plugin-persist/blob/master/LICENSE.txt).

[version-image]: https://img.shields.io/npm/v/@jswork/pinia-plugin-persist
[version-url]: https://npmjs.org/package/@jswork/pinia-plugin-persist

[license-image]: https://img.shields.io/npm/l/@jswork/pinia-plugin-persist
[license-url]: https://github.com/afeiship/pinia-plugin-persist/blob/master/LICENSE.txt

[size-image]: https://img.shields.io/bundlephobia/minzip/@jswork/pinia-plugin-persist
[size-url]: https://github.com/afeiship/pinia-plugin-persist/blob/master/dist/pinia-plugin-persist.min.js

[download-image]: https://img.shields.io/npm/dm/@jswork/pinia-plugin-persist
[download-url]: https://www.npmjs.com/package/@jswork/pinia-plugin-persist
npm package: @jswork/pinia-plugin-watch
Description: The easiest way to watch for your Pinia State.
Latest version: 1.0.8

# pinia-plugin-watch
> The easiest way to watch for your Pinia State.

[![version][version-image]][version-url]
[![license][license-image]][license-url]
[![size][size-image]][size-url]
[![download][download-image]][download-url]

## installation
```shell
npm install @jswork/pinia-plugin-watch
```

## usage
```js
import PiniaPluginWatch from '@jswork/pinia-plugin-watch';

// ======== main.js  ======
export function createApp() {
  const app = createSSRApp(App);
  const pinia = createPinia();

  pinia.use(PiniaStateTree);
  pinia.use(piniaPluginWatch);
  //...
}

// ======== stores/auth.js ======
import { defineStore } from "pinia";

export default defineStore("auth", {
  state: () => ({ profile: null, other: null }),
  watch: {
    profile: (newValue, oldValue) => {
      if (newValue) console.log("profile changed", newValue);
      else console.log("profile removed", oldValue);
    },
  },
});
```

## license
Code released under [the MIT license](https://github.com/afeiship/pinia-plugin-watch/blob/master/LICENSE.txt).

[version-image]: https://img.shields.io/npm/v/@jswork/pinia-plugin-watch
[version-url]: https://npmjs.org/package/@jswork/pinia-plugin-watch

[license-image]: https://img.shields.io/npm/l/@jswork/pinia-plugin-watch
[license-url]: https://github.com/afeiship/pinia-plugin-watch/blob/master/LICENSE.txt

[size-image]: https://img.shields.io/bundlephobia/minzip/@jswork/pinia-plugin-watch
[size-url]: https://github.com/afeiship/pinia-plugin-watch/blob/master/dist/pinia-plugin-watch.min.js

[download-image]: https://img.shields.io/npm/dm/@jswork/pinia-plugin-watch
[download-url]: https://www.npmjs.com/package/@jswork/pinia-plugin-watch
npm package: @jswork/pinia-state-tree
Description: Pinia state tree.
Latest version: 1.1.1

# pinia-state-tree
> Pinia state tree.

![Alt text](https://tva1.js.work/large/da432263gy1heacbgtg89j21aw0mm766.jpg)

[![version][version-image]][version-url]
[![license][license-image]][license-url]
[![size][size-image]][size-url]
[![download][download-image]][download-url]

## installation
```shell
npm install @jswork/pinia-state-tree
```

## usage
```js
import { createSSRApp, watch } from "vue";
import { createPinia } from "pinia";
import PiniaStateTree from "@jswork/pinia-state-tree";
import App from "./App.vue";

export function createApp() {
  const app = createSSRApp(App);
  const pinia = createPinia();

  pinia.use(PiniaStateTree);
  app.use(pinia);
  //...
}
```

## features
- [x] `nx.$app`: app instance
- [x] `nx.$pin`: pinia instance 
- [x] `nx.$get`: get state by path
- [x] `nx.$set`: set state by path
- [x] `nx.$state`: root state tree
- [x] `nx.$store`: root store tree
- [x] `nx.$query`: query store by path
- [x] `nx.$call`: call store action by path
- [x] `nx.$map`: map computed by path list

## license
Code released under [the MIT license](https://github.com/afeiship/pinia-state-tree/blob/master/LICENSE.txt).

[version-image]: https://img.shields.io/npm/v/@jswork/pinia-state-tree
[version-url]: https://npmjs.org/package/@jswork/pinia-state-tree

[license-image]: https://img.shields.io/npm/l/@jswork/pinia-state-tree
[license-url]: https://github.com/afeiship/pinia-state-tree/blob/master/LICENSE.txt

[size-image]: https://img.shields.io/bundlephobia/minzip/@jswork/pinia-state-tree
[size-url]: https://github.com/afeiship/pinia-state-tree/blob/master/dist/pinia-state-tree.min.js

[download-image]: https://img.shields.io/npm/dm/@jswork/pinia-state-tree
[download-url]: https://www.npmjs.com/package/@jswork/pinia-state-tree
npm package: @jswork/pipe
Description: Pipe is a lightweight JavaScript library for function composition and execution.
Latest version: 1.1.1

# pipe
> Pipe is a lightweight JavaScript library for function composition and execution.

[![version][version-image]][version-url]
[![license][license-image]][license-url]
[![size][size-image]][size-url]
[![download][download-image]][download-url]

## installation
```shell
npm install @jswork/pipe
```

## methods
- [x] pipe === pipe.sync
- [x] pipe.sync (default)
- [x] pipe.async

## usage
```js
import pipe from '@jswork/pipe';

// fns
function addOne(n: number): number {
  return n + 1;
}

function double(n: number): number {
  return n * 2;
}

function divide(n: number): number {
  if (n === 0) {
    throw new Error('Divide by zero error.');
  }
  return 10 / n;
}

// use pipe
const calculate = pipe(
  addOne,
  double,
  divide,
  addOne
);

const result1 = calculate(3);
const result2 = calculate(-1);

// has result, without log
console.log('Result1:', result1); // 10 / (3 + 1)*2  + 1
// has result, but with warning log
console.log('Result2:', result2); // 10 / (-1+1)*2 + 1
```

## license
Code released under [the MIT license](https://github.com/afeiship/pipe/blob/master/LICENSE.txt).

[version-image]: https://img.shields.io/npm/v/@jswork/pipe
[version-url]: https://npmjs.org/package/@jswork/pipe

[license-image]: https://img.shields.io/npm/l/@jswork/pipe
[license-url]: https://github.com/afeiship/pipe/blob/master/LICENSE.txt

[size-image]: https://img.shields.io/bundlephobia/minzip/@jswork/pipe
[size-url]: https://github.com/afeiship/pipe/blob/master/dist/pipe.min.js

[download-image]: https://img.shields.io/npm/dm/@jswork/pipe
[download-url]: https://www.npmjs.com/package/@jswork/pipe
npm package: @jswork/plop-utils
Description: Plop notes.
Latest version: 1.0.9

# plop-utils
> Plop notes.

[![version][version-image]][version-url]
[![license][license-image]][license-url]
[![size][size-image]][size-url]
[![download][download-image]][download-url]

## installation
```shell
npm install @jswork/plop-utils
yarn add dayjs
```

## usage
```js
import { load, metadata } from '@jswork/plop-utils';

// plopfile.js
export default async function (plop) {
  await load(plop);
}

// a generator file
export default function (
  /** @type {import('plop').NodePlopAPI} */
  plop
) {
  plop.setGenerator('component', {
    description: 'Create a component',
    prompts: [
      {
        type: 'input',
        name: 'name',
        message: "What is this component's name?"
      }
    ],
    actions: [
      {
        type: 'addMany',
        destination: 'src/components/{{ name }}/',
        templateFiles: '.templates/component/*.hbs',
        data: metadata
      }
    ]
  });
}
```

## license
Code released under [the MIT license](https://github.com/afeiship/plop-utils/blob/master/LICENSE.txt).

[version-image]: https://img.shields.io/npm/v/@jswork/plop-utils
[version-url]: https://npmjs.org/package/@jswork/plop-utils

[license-image]: https://img.shields.io/npm/l/@jswork/plop-utils
[license-url]: https://github.com/afeiship/plop-utils/blob/master/LICENSE.txt

[size-image]: https://img.shields.io/bundlephobia/minzip/@jswork/plop-utils
[size-url]: https://github.com/afeiship/plop-utils/blob/master/dist/index.min.js

[download-image]: https://img.shields.io/npm/dm/@jswork/plop-utils
[download-url]: https://www.npmjs.com/package/@jswork/plop-utils
npm package: @jswork/plugin-compose-entity
Description: Plugin compose entity.
Latest version: 1.0.6

# plugin-compose-entity
> Plugin compose entity.

[![version][version-image]][version-url]
[![license][license-image]][license-url]
[![size][size-image]][size-url]
[![download][download-image]][download-url]

## installation
```shell
npm install @jswork/plugin-compose-entity
```

## usage
```js
import boilerplateTypescriptPackage from '@jswork/plugin-compose-entity';

// usage goes here.
```

## license
Code released under [the MIT license](https://github.com/afeiship/plugin-compose-entity/blob/master/LICENSE.txt).

[version-image]: https://img.shields.io/npm/v/@jswork/plugin-compose-entity
[version-url]: https://npmjs.org/package/@jswork/plugin-compose-entity

[license-image]: https://img.shields.io/npm/l/@jswork/plugin-compose-entity
[license-url]: https://github.com/afeiship/plugin-compose-entity/blob/master/LICENSE.txt

[size-image]: https://img.shields.io/bundlephobia/minzip/@jswork/plugin-compose-entity
[size-url]: https://github.com/afeiship/plugin-compose-entity/blob/master/dist/plugin-compose-entity.min.js

[download-image]: https://img.shields.io/npm/dm/@jswork/plugin-compose-entity
[download-url]: https://www.npmjs.com/package/@jswork/plugin-compose-entity
npm package: @jswork/plugin-normalize
Description: Styled plugin normalize.
Latest version: 1.0.5
Deprecated: this package has been deprecated

# plugin-normalize
> Styled plugin normalize.

[![version][version-image]][version-url]
[![license][license-image]][license-url]
[![size][size-image]][size-url]
[![download][download-image]][download-url]

## installation
```shell
npm install @jswork/plugin-normalize
```

## usage
```js
import boilerplateTypescriptPackage from '@jswork/plugin-normalize';

// usage goes here.
```

## license
Code released under [the MIT license](https://github.com/afeiship/plugin-normalize/blob/master/LICENSE.txt).

[version-image]: https://img.shields.io/npm/v/@jswork/plugin-normalize
[version-url]: https://npmjs.org/package/@jswork/plugin-normalize

[license-image]: https://img.shields.io/npm/l/@jswork/plugin-normalize
[license-url]: https://github.com/afeiship/plugin-normalize/blob/master/LICENSE.txt

[size-image]: https://img.shields.io/bundlephobia/minzip/@jswork/plugin-normalize
[size-url]: https://github.com/afeiship/plugin-normalize/blob/master/dist/plugin-normalize.min.js

[download-image]: https://img.shields.io/npm/dm/@jswork/plugin-normalize
[download-url]: https://www.npmjs.com/package/@jswork/plugin-normalize
npm package: @jswork/position-value
Description: Get position value by shorty.
Latest version: 1.0.4

# position-value
> Get position value by shorty..

[![version][version-image]][version-url]
[![license][license-image]][license-url]
[![size][size-image]][size-url]
[![download][download-image]][download-url]

## installation
```shell
npm install @jswork/position-value
```

## usage
```js
import positionValue from '@jswork/position-value';

positionValue({ rel: true })    // 'relative'
positionValue({ abs: true })    // 'absolute'
positionValue({ fixed: true })  // 'fixed'
positionValue({ xxx: true })    // null
```

## license
Code released under [the MIT license](https://github.com/afeiship/position-value/blob/master/LICENSE.txt).

[version-image]: https://img.shields.io/npm/v/@jswork/position-value
[version-url]: https://npmjs.org/package/@jswork/position-value

[license-image]: https://img.shields.io/npm/l/@jswork/position-value
[license-url]: https://github.com/afeiship/position-value/blob/master/LICENSE.txt

[size-image]: https://img.shields.io/bundlephobia/minzip/@jswork/position-value
[size-url]: https://github.com/afeiship/position-value/blob/master/dist/position-value.min.js

[download-image]: https://img.shields.io/npm/dm/@jswork/position-value
[download-url]: https://www.npmjs.com/package/@jswork/position-value
npm package: @jswork/postsass
Description: Cli compiler for sass/scss via dart-sass and postcss.
Latest version: 1.0.6

# postsass
> Cli compiler for sass/scss via dart-sass and postcss.

[![version][version-image]][version-url]
[![license][license-image]][license-url]
[![size][size-image]][size-url]
[![download][download-image]][download-url]

## installation
```shell
# public
npm i -g @jswork/postsass

# private
git clone https://github.com/afeiship/postsass.git
cd postsass
npm i && npm link
```

## usage
~~~
Usage: postsass [options]

Options:
  -V, --version       output the version number
  -s, --src <string>  Sass/scss file path.
  -d, --dst <string>  Css file path.
  -c, --copy          Copy original src to dst.
  -a, --is-sass       Is sass file.
  -m, --minify        Minify css.
  -l, --load-paths    Load path.
  -h, --help          display help for command
~~~

## license
Code released under [the MIT license](https://github.com/afeiship/postsass/blob/master/LICENSE.txt).

[version-image]: https://img.shields.io/npm/v/@jswork/postsass
[version-url]: https://npmjs.org/package/@jswork/postsass

[license-image]: https://img.shields.io/npm/l/@jswork/postsass
[license-url]: https://github.com/afeiship/postsass/blob/master/LICENSE.txt

[size-image]: https://img.shields.io/bundlephobia/minzip/@jswork/postsass
[size-url]: https://github.com/afeiship/postsass/blob/master/dist/postsass.min.js

[download-image]: https://img.shields.io/npm/dm/@jswork/postsass
[download-url]: https://www.npmjs.com/package/@jswork/postsass
npm package: @jswork/postsass-init
Description: Postsass init tools.
Latest version: 1.0.4

# i18n-helper
> I18n helper.

[![version][version-image]][version-url]
[![license][license-image]][license-url]
[![size][size-image]][size-url]
[![download][download-image]][download-url]

## installation
```shell
npm install @jswork/i18n-helper
```

## usage
```js
import i18nHelper from '@jswork/i18n-helper';

// usage goes here.
```

## license
Code released under [the MIT license](https://github.com/afeiship/i18n-helper/blob/master/LICENSE.txt).

[version-image]: https://img.shields.io/npm/v/@jswork/i18n-helper
[version-url]: https://npmjs.org/package/@jswork/i18n-helper

[license-image]: https://img.shields.io/npm/l/@jswork/i18n-helper
[license-url]: https://github.com/afeiship/i18n-helper/blob/master/LICENSE.txt

[size-image]: https://img.shields.io/bundlephobia/minzip/@jswork/i18n-helper
[size-url]: https://github.com/afeiship/i18n-helper/blob/master/dist/index.min.js

[download-image]: https://img.shields.io/npm/dm/@jswork/i18n-helper
[download-url]: https://www.npmjs.com/package/@jswork/i18n-helper
npm package: @jswork/pptr-html
Description: Get html by puppeteer.
Latest version: 1.2.0

# pptr-html
> Get html by puppeteer.

[![version][version-image]][version-url]
[![license][license-image]][license-url]
[![size][size-image]][size-url]
[![download][download-image]][download-url]

## installation
```shell
npm install -S @jswork/pptr-html
```

## usage
```js
import pptrHtml from '@jswork/pptr-html';

pptrHtml('https://github.com/afeiship').then(res => {
  console.log(res);
});
```

## options
> { headless: true, closeable: true, userAgent: nx.randomUa(), selector: null };

## install puppeteer
- https://gera2ld.space/posts/how-to-install-puppeteer/

```shell
# use taobao source
PUPPETEER_DOWNLOAD_HOST=https://npm.taobao.org/mirrors npm i -D puppeteer

# or skip download
PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true npm i puppeteer
```

## license
Code released under [the MIT license](https://github.com/afeiship/pptr-html/blob/master/LICENSE.txt).

[version-image]: https://img.shields.io/npm/v/@jswork/pptr-html
[version-url]: https://npmjs.org/package/@jswork/pptr-html

[license-image]: https://img.shields.io/npm/l/@jswork/pptr-html
[license-url]: https://github.com/afeiship/pptr-html/blob/master/LICENSE.txt

[size-image]: https://img.shields.io/bundlephobia/minzip/@jswork/pptr-html
[size-url]: https://github.com/afeiship/pptr-html/blob/master/dist/pptr-html.min.js

[download-image]: https://img.shields.io/npm/dm/@jswork/pptr-html
[download-url]: https://www.npmjs.com/package/@jswork/pptr-html
npm package: @jswork/preload-kit
Description: Lightweight web resource preloader with priority and type detection.
Latest version: 1.0.9

# preload-kit
> Lightweight web resource preloader with priority and type detection.

[![version][version-image]][version-url]
[![license][license-image]][license-url]
[![size][size-image]][size-url]
[![download][download-image]][download-url]

## installation
```shell
yarn add @jswork/preload-kit
```

## usage
```js
import PreloadKit from '@jswork/preload-kit';

const loader = new PreloadKit({
  maxConcurrent: 4,
  maxPagesToPreload: 3, // 前 3 页优先加载
  debug: true,
  onProgress: (progress, loaded, total) => {
    console.log(`🚀 Progress: ${(progress * 100).toFixed(1)}% (${loaded}/${total})`);
  }
});

// 👇 高优先级资源（手动设置 priority）
loader.addResource({
  url: '/important/assets/splash-screen.png',
  type: 'image',
  priority: 100, // ⬅️ 手动设置极高优先级
});

loader.addResource({
  url: '/common/core.js',
  type: 'js',
  priority: 90, // ⬅️ 手动设置高优先级
});

// 👇 带 page 的资源（自动计算优先级）
loader.addResource({ url: '/page1/image1.jpg', group: 'page1' });
loader.addResource({ url: '/page1/style.css', group: 'page1' });
loader.addResource({ url: '/page2/video.mp4', group: 'page2' });
loader.addResource({ url: '/page3/data.json', group: 'page3' });

// 👇 普通资源（无分组，默认 priority=1）
loader.addResource({ url: '/favicon.ico' });
loader.addResource({ url: '/analytics.js' });
loader.addResource({ url: '/fonts/roboto.woff2', type: 'font' });

// 开始预加载
loader.start();
```

## resources
- https://developer.mozilla.org/zh-CN/docs/Web/HTML/Reference/Elements/link

## license
Code released under [the MIT license](https://github.com/afeiship/preload-kit/blob/master/LICENSE.txt).

[version-image]: https://img.shields.io/npm/v/@jswork/preload-kit
[version-url]: https://npmjs.org/package/@jswork/preload-kit

[license-image]: https://img.shields.io/npm/l/@jswork/preload-kit
[license-url]: https://github.com/afeiship/preload-kit/blob/master/LICENSE.txt

[size-image]: https://img.shields.io/bundlephobia/minzip/@jswork/preload-kit
[size-url]: https://github.com/afeiship/preload-kit/blob/master/dist/preload-kit.min.js

[download-image]: https://img.shields.io/npm/dm/@jswork/preload-kit
[download-url]: https://www.npmjs.com/package/@jswork/preload-kit
npm package: @jswork/presets-tailwind
Description: Presets for me.
Latest version: 1.2.37

# presets-tailwind
> Presets for me.

[![version][version-image]][version-url]
[![license][license-image]][license-url]
[![size][size-image]][size-url]
[![download][download-image]][download-url]

## installation
```shell
npm install @jswork/presets-tailwind
```

## usage
```js
import jswTailwind from '@jswork/presets-tailwind';
/** @type {import('tailwindcss').Config} */
export default {
  presets: [jswTailwind],
  // or
  // presets: [jswTailwind()]
  content: ['./index.html', './src/**/*.{js,ts,jsx,tsx}'],
  theme: {
    extend: {}
  },
  // ...
};
```

## license
Code released under [the MIT license](https://github.com/afeiship/presets-tailwind/blob/master/LICENSE.txt).

[version-image]: https://img.shields.io/npm/v/@jswork/presets-tailwind
[version-url]: https://npmjs.org/package/@jswork/presets-tailwind

[license-image]: https://img.shields.io/npm/l/@jswork/presets-tailwind
[license-url]: https://github.com/afeiship/presets-tailwind/blob/master/LICENSE.txt

[size-image]: https://img.shields.io/bundlephobia/minzip/@jswork/presets-tailwind
[size-url]: https://github.com/afeiship/presets-tailwind/blob/master/dist/index.min.js

[download-image]: https://img.shields.io/npm/dm/@jswork/presets-tailwind
[download-url]: https://www.npmjs.com/package/@jswork/presets-tailwind
npm package: @jswork/protofill
Description: Enhance native JavaScript prototypes with custom methods safely.
Latest version: 1.0.7

# protofill
> Enhance native JavaScript prototypes with custom methods safely.

[![version][version-image]][version-url]
[![license][license-image]][license-url]
[![size][size-image]][size-url]
[![download][download-image]][download-url]

## installation
```shell
npm install @jswork/protofill

# add types for `src/global.d.ts`
import '@jswork/protofill/dist/types';
```

## usage
```js
// just oneline
import '@jswork/protofill'

// ------ Array ---- 
const arr = [1,2,3]

// set/get first: 
arr.first = 'a';
arr.first;

// set/get last: 
arr.last = 'a';
arr.last;

// filter2tuple
const numbers = [1, 2, 3, 4, 5];
const result = numbers.filter2tuple((item) => item > 2);
// result: [[3, 4, 5], [1, 2, 3, 4, 5]]

// ------ Date ----
const date = new Date();
format: date.format('YYYY-MM-DD HH:mm:ss');
```

## license
Code released under [the MIT license](https://github.com/afeiship/protofill/blob/master/LICENSE.txt).

[version-image]: https://img.shields.io/npm/v/@jswork/protofill
[version-url]: https://npmjs.org/package/@jswork/protofill

[license-image]: https://img.shields.io/npm/l/@jswork/protofill
[license-url]: https://github.com/afeiship/protofill/blob/master/LICENSE.txt

[size-image]: https://img.shields.io/bundlephobia/minzip/@jswork/protofill
[size-url]: https://github.com/afeiship/protofill/blob/master/dist/protofill.min.js

[download-image]: https://img.shields.io/npm/dm/@jswork/protofill
[download-url]: https://www.npmjs.com/package/@jswork/protofill
npm package: @jswork/qrjs
Description: A wrapper for qr.js.
Latest version: 1.0.3

# qrjs
> A wrapper for qr.js.

[![version][version-image]][version-url]
[![license][license-image]][license-url]
[![size][size-image]][size-url]
[![download][download-image]][download-url]

## installation
```shell
npm install @jswork/qrjs
```

## usage
```js
import qrcode, { ErrorCorrectLevel, QRCode } from '@jswork/qrjs';

const qr = qrcode('afei', {
  errorCorrectLevel: ErrorCorrectLevel.H,
  typeNumber: -1,
});
```

## with canvas
> yarn add canvas

```js
import { ErrorCorrectLevel, QRCode } from '@jswork/qrjs';
import { createCanvas } from "canvas";
import fs from "fs";

// 生成二维码
const qrcode = new QRCode(-1, ErrorCorrectLevel.H);
qrcode.addData("afei");
qrcode.make();

// 获取二维码模块的大小和数据
const size = qrcode.getModuleCount();
const cellSize = 10; // 每个模块的大小，调整这个值可以改变二维码的尺寸
const margin = 4 * cellSize; // 留白的大小

// 创建Canvas
const canvas = createCanvas(
  size * cellSize + margin * 2,
  size * cellSize + margin * 2
);
const ctx = canvas.getContext("2d");

// 绘制二维码背景
ctx.fillStyle = "#ffffff";
ctx.fillRect(0, 0, canvas.width, canvas.height);

// 绘制二维码
ctx.fillStyle = "#000000";
for (let row = 0; row < size; row++) {
  for (let col = 0; col < size; col++) {
    if (qrcode.isDark(row, col)) {
      ctx.fillRect(
        margin + col * cellSize,
        margin + row * cellSize,
        cellSize,
        cellSize
      );
    }
  }
}

// 保存为PNG文件
const out = fs.createWriteStream("qrcode.png");
const stream = canvas.createPNGStream();
stream.pipe(out);
out.on("finish", () => console.log("QR code PNG file generated: qrcode.png"));
```

## license
Code released under [the MIT license](https://github.com/afeiship/qrjs/blob/master/LICENSE.txt).

[version-image]: https://img.shields.io/npm/v/@jswork/qrjs
[version-url]: https://npmjs.org/package/@jswork/qrjs

[license-image]: https://img.shields.io/npm/l/@jswork/qrjs
[license-url]: https://github.com/afeiship/qrjs/blob/master/LICENSE.txt

[size-image]: https://img.shields.io/bundlephobia/minzip/@jswork/qrjs
[size-url]: https://github.com/afeiship/qrjs/blob/master/dist/index.min.js

[download-image]: https://img.shields.io/npm/dm/@jswork/qrjs
[download-url]: https://www.npmjs.com/package/@jswork/qrjs
npm package: @jswork/qs
Description: A tiny querystring parser.
Latest version: 1.0.3

# qs
> A tiny querystring parser.

[![version][version-image]][version-url]
[![license][license-image]][license-url]
[![size][size-image]][size-url]
[![download][download-image]][download-url]

## installation
```shell
npm install @jswork/qs
```

## usage
```js
import qs from '@jswork/qs';

qs.parse('a=1&b=2'); // { a: '1', b: '2' }
qs.stringify({ a: 1, b: 2 }); // a=1&b=2
```

## license
Code released under [the MIT license](https://github.com/afeiship/qs/blob/master/LICENSE.txt).

[version-image]: https://img.shields.io/npm/v/@jswork/qs
[version-url]: https://npmjs.org/package/@jswork/qs

[license-image]: https://img.shields.io/npm/l/@jswork/qs
[license-url]: https://github.com/afeiship/qs/blob/master/LICENSE.txt

[size-image]: https://img.shields.io/bundlephobia/minzip/@jswork/qs
[size-url]: https://github.com/afeiship/qs/blob/master/dist/index.js

[download-image]: https://img.shields.io/npm/dm/@jswork/qs
[download-url]: https://www.npmjs.com/package/@jswork/qs
npm package: @jswork/raf-interval
Description: Behaves the same as setInterval except uses requestAnimationFrame() where possible for better performance.
Latest version: 1.0.5

# raf-interval
> Behaves the same as setInterval except uses requestAnimationFrame() where possible for better performance.

[![version][version-image]][version-url]
[![license][license-image]][license-url]
[![size][size-image]][size-url]
[![download][download-image]][download-url]

## installation
```shell
npm install @jswork/raf-interval
```

## usage
```js
import rafInterval from '@jswork/raf-interval';

// setup a timer
const res = rafInterval(()=>{
  console.log('task');
},1000);

// destroy
res.destroy();
```

## license
Code released under [the MIT license](https://github.com/afeiship/raf-interval/blob/master/LICENSE.txt).

[version-image]: https://img.shields.io/npm/v/@jswork/raf-interval
[version-url]: https://npmjs.org/package/@jswork/raf-interval

[license-image]: https://img.shields.io/npm/l/@jswork/raf-interval
[license-url]: https://github.com/afeiship/raf-interval/blob/master/LICENSE.txt

[size-image]: https://img.shields.io/bundlephobia/minzip/@jswork/raf-interval
[size-url]: https://github.com/afeiship/raf-interval/blob/master/dist/raf-interval.min.js

[download-image]: https://img.shields.io/npm/dm/@jswork/raf-interval
[download-url]: https://www.npmjs.com/package/@jswork/raf-interval
npm package: @jswork/raf-timeout
Description: Behaves the same as setTimeout except uses requestAnimationFrame() where possible for better performance.
Latest version: 1.0.5

# raf-timeout
> Behaves the same as setTimeout except uses requestAnimationFrame() where possible for better performance.

[![version][version-image]][version-url]
[![license][license-image]][license-url]
[![size][size-image]][size-url]
[![download][download-image]][download-url]

## installation
```shell
npm install @jswork/raf-timeout
```

## usage
```js
import rafTimeout from '@jswork/raf-timeout';

const timer = rafTimeout(() => {
  console.log('1s, task started.');
}, 1000);
```

## license
Code released under [the MIT license](https://github.com/afeiship/raf-timeout/blob/master/LICENSE.txt).

[version-image]: https://img.shields.io/npm/v/@jswork/raf-timeout
[version-url]: https://npmjs.org/package/@jswork/raf-timeout

[license-image]: https://img.shields.io/npm/l/@jswork/raf-timeout
[license-url]: https://github.com/afeiship/raf-timeout/blob/master/LICENSE.txt

[size-image]: https://img.shields.io/bundlephobia/minzip/@jswork/raf-timeout
[size-url]: https://github.com/afeiship/raf-timeout/blob/master/dist/raf-timeout.min.js

[download-image]: https://img.shields.io/npm/dm/@jswork/raf-timeout
[download-url]: https://www.npmjs.com/package/@jswork/raf-timeout
npm package: @jswork/rake-abcft-esbi
Description: Rake tools for esbi.
Author: afei
Latest version: 1.0.0

# rake-abcft-esbi
> Rake tools for esbi.

## installation
```bash
npm i -D @jswork/rake-abcft-esbi
```

## usage
~~~
rake app:mixin             # Create react-app:mixin
rake app:service           # Create react-app:service
rake app:view[dir,prefix]  # Create react-app:view
~~~

## todos
- [x] react-app params
npm package: @jswork/rake-ali-iconfont
Description: Task for ali iconfont.
Author: afei
Latest version: 1.0.0

# rake-ali-iconfont
> Task for ali iconfont.

## installation
```bash
# gem:
gem install fileutils
npm i -D @jswork/rake-ali-iconfont
```

## usage
```shell
$ rake -T
rake iconfont:sync[url]  # Sync styles from css fonts link

# test
rake iconfont:sync[//at.alicdn.com/t/font_1710938_xxxx.css,./__tests__]
```

## example
```bash
rake iconfont:sync_css[//at.alicdn.com/t/font_1063008_re2olqkinh.css]
```
npm package: @jswork/rake-git
Description: Rake task for git.
Author: afei
Latest version: 1.0.0

# rake-git
> Rake task for git.

## installation
```bash
npm i -D @jswork/rake-git
```

## usage
~~~
$ rake -T
rake git:branch_create[name]       # Create branch action
rake git:branch_delete[name]       # Delete branch action
rake git:branch_list[name]         # List branch action
rake git:branch_push[name]         # Push branch action
rake git:tag_create[version]       # Create tag from semver file(eg: package.json)
rake git:tag_delete[version]       # Delete tag from semver file(eg: package.json)
rake git:tag_list[version]         # List tag from semver file(eg: package.json)
rake git:tag_list_remote[version]  # List remote tag from semver file(eg: package.json)
rake git:tag_push[version]         # Push tag from semver file(eg: package.json)
rake git:tag_tagging[version]      # Tagging tag from semver file(eg: package.json)
~~~
npm package: @jswork/rake-image-favico
Description: A favico generate task.
Author: afei
Latest version: 1.0.0

# rake-image-favico
> A favico generate task.

## installation
```bash
## install imagemagick
brew install imagemagick

## install as dev-dep for cmd task:
npm i -D @jswork/rake-image-favico
```

## gem install
```bash
gem install fileutils
```

## usage
~~~
$ rake -T
rake image:favico[source,dist,sizes]  # Generate favico
~~~

## example:
```bash
rake image:favico[download.png,dist/favicos,'10 20 32 54']
```
~~~
.
├── README.md
├── Rakefile
├── dist
│   └── favicos
│       ├── favicon_10.ico
│       ├── favicon_20.ico
│       ├── favicon_32.ico
│       └── favicon_54.ico
├── download.png
├── index.rake
└── package.json
~~~


## other solution based on ruby:
```rb
require "favicon_maker"


FaviconMaker.generate do
  setup do
    template_dir "."
    output_dir "."
  end

  from "miaotu_rect.png" do
    icon "favicon.ico", size: "64x64,32x32,24x24,16x16"
  end

  each_icon do |filepath|
    puts filepath # verbose example
  end
end

# https://www.imagemagick.org/script/convert.php
# convert -resize x64 miaotu_rect.png dist/favicon.ico
```
npm package: @jswork/rake-weapp-cli
Description: Rake for weapp cli.
Author: afei
Latest version: 1.0.0

# rake-weapp-cli
> Rake for weapp cli.

## installation
```bash
npm i -S @jswork/rake-weapp-cli
```

## usage
~~~
$ rake -T
rake weapp:publish[desc,cli,root]  # Cli publish to preview version
~~~
npm package: @jswork/rasf-checkbox
Description: Search filters for checkbox.
Latest version: 1.0.4

# rasf-checkbox
> Search filters for checkbox.

[![version][version-image]][version-url]
[![license][license-image]][license-url]
[![size][size-image]][size-url]
[![download][download-image]][download-url]

## installation
```shell
npm install -S @jswork/rasf-checkbox
```

## properties
| Name      | Type   | Required | Default | Description                           |
| --------- | ------ | -------- | ------- | ------------------------------------- |
| className | string | false    | -       | The extended className for component. |
| value     | object | false    | null    | Default value.                        |
| onChange  | func   | false    | noop    | The change handler.                   |


## usage
1. import css
  ```scss
  @import "~@jswork/boilerplate-react-component/dist/style.css";

  // or use sass
  @import "~@jswork/boilerplate-react-component/dist/style.scss";

  // customize your styles:
  $boilerplate-react-component-options: ()
  ```
2. import js
  ```js
  import React from 'react';
  import RasfCheckbox from '../@jswork/boilerplate-react-component';
  import styled from 'styled-components';

  const Container = styled.div`
    width: 80%;
    margin: 30px auto 0;
  `;

  export default (props: any) => {
    return (
      <Container>
        <RasfCheckbox />
      </Container>
    );
  };

  ```

## license
Code released under [the MIT license](https://github.com/afeiship/rasf-checkbox/blob/master/LICENSE.txt).

[version-image]: https://img.shields.io/npm/v/@jswork/rasf-checkbox
[version-url]: https://npmjs.org/package/@jswork/rasf-checkbox

[license-image]: https://img.shields.io/npm/l/@jswork/rasf-checkbox
[license-url]: https://github.com/afeiship/rasf-checkbox/blob/master/LICENSE.txt

[size-image]: https://img.shields.io/bundlephobia/minzip/@jswork/rasf-checkbox
[size-url]: https://github.com/afeiship/rasf-checkbox/blob/master/dist/rasf-checkbox.min.js

[download-image]: https://img.shields.io/npm/dm/@jswork/rasf-checkbox
[download-url]: https://www.npmjs.com/package/@jswork/rasf-checkbox
npm package: @jswork/ratio-selector
Description: A lightweight JavaScript utility for weighted random selection based on ratios.
Latest version: 1.0.2

# ratio-selector
> A lightweight JavaScript utility for weighted random selection based on ratios.

[![version][version-image]][version-url]
[![license][license-image]][license-url]
[![size][size-image]][size-url]
[![download][download-image]][download-url]

## Features
- 🎯 Weighted random selection based on probability ratios
- 🎲 Precise probability distribution
- 💪 Type safe with TypeScript support
- 🧪 Well tested with comprehensive test cases

## Installation
```shell
yarn add @jswork/ratio-selector
```

## Usage
```js
import ratioSelector from '@jswork/ratio-selector';

// Basic usage - items with probability ratios
const items = [
  { name: 'A', value: 0.5 }, // 50% chance
  { name: 'B', value: 0.3 }, // 30% chance
  { name: 'C', value: 0.2 }  // 20% chance
];

const result = ratioSelector(items);
// Returns: 'A' or 'B' or 'C' based on their probabilities

// Example: Reward distribution
const rewards = [
  { name: 'Common', value: 0.7 },
  { name: 'Rare', value: 0.25 },
  { name: 'Epic', value: 0.05 }
];

const reward = ratioSelector(rewards);
// Returns a reward type based on rarity
```

## Notes
- The sum of all values must be approximately 1
- Each item must have a `name` (string) and `value` (number) property
- Values represent probability ratios (e.g., 0.3 = 30% chance)

## License
Code released under [the MIT license](https://github.com/afeiship/ratio-selector/blob/master/LICENSE.txt).

[version-image]: https://img.shields.io/npm/v/@jswork/ratio-selector
[version-url]: https://npmjs.org/package/@jswork/ratio-selector

[license-image]: https://img.shields.io/npm/l/@jswork/ratio-selector
[license-url]: https://github.com/afeiship/ratio-selector/blob/master/LICENSE.txt

[size-image]: https://img.shields.io/bundlephobia/minzip/@jswork/ratio-selector
[size-url]: https://github.com/afeiship/ratio-selector/blob/master/dist/ratio-selector.min.js

[download-image]: https://img.shields.io/npm/dm/@jswork/ratio-selector
[download-url]: https://www.npmjs.com/package/@jswork/ratio-selector
npm package: @jswork/rctpl-ant-checkbox
Description: React template for antd checkbox.
Latest version: 1.0.1

# rctpl-ant-checkbox
> React template for antd checkbox.

[![version][version-image]][version-url]
[![license][license-image]][license-url]
[![size][size-image]][size-url]
[![download][download-image]][download-url]

## installation
```shell
npm install -S @jswork/rctpl-ant-checkbox
```

## properties
| Name      | Type   | Required | Default | Description                           |
| --------- | ------ | -------- | ------- | ------------------------------------- |
| className | string | false    | -       | The extended className for component. |
| value     | object | false    | null    | Default value.                        |
| onChange  | func   | false    | noop    | The change handler.                   |


## usage
1. import css
  ```scss
  @import "~@jswork/boilerplate-react-component/dist/style.css";

  // or use sass
  @import "~@jswork/boilerplate-react-component/dist/style.scss";

  // customize your styles:
  $boilerplate-react-component-options: ()
  ```
2. import js
  ```js
  import React from 'react';
  import RctplAntCheckbox from '../@jswork/boilerplate-react-component';
  import styled from 'styled-components';

  const Container = styled.div`
    width: 80%;
    margin: 30px auto 0;
  `;

  export default (props: any) => {
    return (
      <Container>
        <RctplAntCheckbox />
      </Container>
    );
  };

  ```

## license
Code released under [the MIT license](https://github.com/afeiship/rctpl-ant-checkbox/blob/master/LICENSE.txt).

[version-image]: https://img.shields.io/npm/v/@jswork/rctpl-ant-checkbox
[version-url]: https://npmjs.org/package/@jswork/rctpl-ant-checkbox

[license-image]: https://img.shields.io/npm/l/@jswork/rctpl-ant-checkbox
[license-url]: https://github.com/afeiship/rctpl-ant-checkbox/blob/master/LICENSE.txt

[size-image]: https://img.shields.io/bundlephobia/minzip/@jswork/rctpl-ant-checkbox
[size-url]: https://github.com/afeiship/rctpl-ant-checkbox/blob/master/dist/rctpl-ant-checkbox.min.js

[download-image]: https://img.shields.io/npm/dm/@jswork/rctpl-ant-checkbox
[download-url]: https://www.npmjs.com/package/@jswork/rctpl-ant-checkbox
npm package: @jswork/rctpl-ant-radio
Description: Antd radio tempalte.
Latest version: 1.0.3

# rctpl-ant-radio
> Antd radio tempalte.

[![version][version-image]][version-url]
[![license][license-image]][license-url]
[![size][size-image]][size-url]
[![download][download-image]][download-url]

## installation
```shell
npm install -S @jswork/rctpl-ant-radio
```

## properties
| Name      | Type   | Required | Default | Description                           |
| --------- | ------ | -------- | ------- | ------------------------------------- |
| className | string | false    | -       | The extended className for component. |
| value     | object | false    | null    | Default value.                        |
| onChange  | func   | false    | noop    | The change handler.                   |


## usage
1. import css
  ```scss
  @import "~@jswork/boilerplate-react-component/dist/style.css";

  // or use sass
  @import "~@jswork/boilerplate-react-component/dist/style.scss";

  // customize your styles:
  $boilerplate-react-component-options: ()
  ```
2. import js
  ```js
  import React from 'react';
  import RctplAntRadio from '../@jswork/boilerplate-react-component';
  import styled from 'styled-components';

  const Container = styled.div`
    width: 80%;
    margin: 30px auto 0;
  `;

  export default (props: any) => {
    return (
      <Container>
        <RctplAntRadio />
      </Container>
    );
  };

  ```

## license
Code released under [the MIT license](https://github.com/afeiship/rctpl-ant-radio/blob/master/LICENSE.txt).

[version-image]: https://img.shields.io/npm/v/@jswork/rctpl-ant-radio
[version-url]: https://npmjs.org/package/@jswork/rctpl-ant-radio

[license-image]: https://img.shields.io/npm/l/@jswork/rctpl-ant-radio
[license-url]: https://github.com/afeiship/rctpl-ant-radio/blob/master/LICENSE.txt

[size-image]: https://img.shields.io/bundlephobia/minzip/@jswork/rctpl-ant-radio
[size-url]: https://github.com/afeiship/rctpl-ant-radio/blob/master/dist/rctpl-ant-radio.min.js

[download-image]: https://img.shields.io/npm/dm/@jswork/rctpl-ant-radio
[download-url]: https://www.npmjs.com/package/@jswork/rctpl-ant-radio
npm package: @jswork/rctpl-ant-radio-button
Description: Antd radio button template.
Latest version: 1.0.3

# rctpl-ant-radio-button
> Antd radio button template.

[![version][version-image]][version-url]
[![license][license-image]][license-url]
[![size][size-image]][size-url]
[![download][download-image]][download-url]

## installation
```shell
npm install -S @jswork/rctpl-ant-radio-button
```

## properties
| Name      | Type   | Required | Default | Description                           |
| --------- | ------ | -------- | ------- | ------------------------------------- |
| className | string | false    | -       | The extended className for component. |
| value     | object | false    | null    | Default value.                        |
| onChange  | func   | false    | noop    | The change handler.                   |


## usage
1. import css
  ```scss
  @import "~@jswork/boilerplate-react-component/dist/style.css";

  // or use sass
  @import "~@jswork/boilerplate-react-component/dist/style.scss";

  // customize your styles:
  $boilerplate-react-component-options: ()
  ```
2. import js
  ```js
  import React from 'react';
  import RctplAntRadioButton from '../@jswork/boilerplate-react-component';
  import styled from 'styled-components';

  const Container = styled.div`
    width: 80%;
    margin: 30px auto 0;
  `;

  export default (props: any) => {
    return (
      <Container>
        <RctplAntRadioButton />
      </Container>
    );
  };

  ```

## license
Code released under [the MIT license](https://github.com/afeiship/rctpl-ant-radio-button/blob/master/LICENSE.txt).

[version-image]: https://img.shields.io/npm/v/@jswork/rctpl-ant-radio-button
[version-url]: https://npmjs.org/package/@jswork/rctpl-ant-radio-button

[license-image]: https://img.shields.io/npm/l/@jswork/rctpl-ant-radio-button
[license-url]: https://github.com/afeiship/rctpl-ant-radio-button/blob/master/LICENSE.txt

[size-image]: https://img.shields.io/bundlephobia/minzip/@jswork/rctpl-ant-radio-button
[size-url]: https://github.com/afeiship/rctpl-ant-radio-button/blob/master/dist/rctpl-ant-radio-button.min.js

[download-image]: https://img.shields.io/npm/dm/@jswork/rctpl-ant-radio-button
[download-url]: https://www.npmjs.com/package/@jswork/rctpl-ant-radio-button
npm package: @jswork/rctpl-ant-select-cname
Description: React teamplate for ant select code/name.
Latest version: 1.0.3

# rctpl-ant-select-cname
> React teamplate for ant select code/name.

[![version][version-image]][version-url]
[![license][license-image]][license-url]
[![size][size-image]][size-url]
[![download][download-image]][download-url]

## installation
```shell
npm install -S @jswork/rctpl-ant-select-cname
```

## properties
| Name      | Type   | Required | Default | Description                           |
| --------- | ------ | -------- | ------- | ------------------------------------- |
| className | string | false    | -       | The extended className for component. |
| value     | object | false    | null    | Default value.                        |
| onChange  | func   | false    | noop    | The change handler.                   |


## usage
1. import css
  ```scss
  @import "~@jswork/boilerplate-react-component/dist/style.css";

  // or use sass
  @import "~@jswork/boilerplate-react-component/dist/style.scss";

  // customize your styles:
  $boilerplate-react-component-options: ()
  ```
2. import js
  ```js
  import React from 'react';
  import RctplAntSelectCname from '../@jswork/boilerplate-react-component';
  import styled from 'styled-components';

  const Container = styled.div`
    width: 80%;
    margin: 30px auto 0;
  `;

  export default (props: any) => {
    return (
      <Container>
        <RctplAntSelectCname />
      </Container>
    );
  };

  ```

## license
Code released under [the MIT license](https://github.com/afeiship/rctpl-ant-select-cname/blob/master/LICENSE.txt).

[version-image]: https://img.shields.io/npm/v/@jswork/rctpl-ant-select-cname
[version-url]: https://npmjs.org/package/@jswork/rctpl-ant-select-cname

[license-image]: https://img.shields.io/npm/l/@jswork/rctpl-ant-select-cname
[license-url]: https://github.com/afeiship/rctpl-ant-select-cname/blob/master/LICENSE.txt

[size-image]: https://img.shields.io/bundlephobia/minzip/@jswork/rctpl-ant-select-cname
[size-url]: https://github.com/afeiship/rctpl-ant-select-cname/blob/master/dist/rctpl-ant-select-cname.min.js

[download-image]: https://img.shields.io/npm/dm/@jswork/rctpl-ant-select-cname
[download-url]: https://www.npmjs.com/package/@jswork/rctpl-ant-select-cname