open-index/open-npm huggingface dataset:
npm package: @jswork/next-rc
Description: React components quick path for next.
Author: afei
Latest version: 1.0.0

# next-rc
> React components quick path for next.

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

## installation
```bash
npm install -S @jswork/next-rc
```

## usage

```scss
@import "~@jswork/react-layout-trbla/dist/style.scss";
@import "~@jswork/react-blank/dist/style.scss";
```

```js
import '@jswork/next-rc';

// inejct to nx.$rc
nx.rc(null);
```

```jsx
<nx.$rc.layout value="lr">
  <aside>
  Sidebar
  </aside>
  <div>
    <p>Main Content.</p>
    <nx.$rc.blank value={10} />
    <p>Sub content.</p>
  </div>
</nx.$rc.layout>
```

## preset
- @jswork/react-blank 
- @jswork/react-status-manager 
- @jswork/react-condition-manager 
- @jswork/react-if-else
- @jswork/react-layout-trbla

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

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

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

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

[download-image]: https://img.shields.io/npm/dm/@jswork/next-rc
[download-url]: https://www.npmjs.com/package/@jswork/next-rc
npm package: @jswork/next-rc-components
Description: Global react components for next.
Author: afei
Latest version: 1.0.15

# next-rc-components
> Global react components for next.

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

## installation
```bash
yarn add @jswork/next-rc-components
```

## usage
```js
// src/bootstrap.ts
import '@jswork/next-rc-components';

// src/pages/index.tsx
<nx.$rc.ife only value={ife} as="div" asProps={{ className: 'abc' }}>
  <div className="debug-red p-5.5 text-center">
    <h4>Debug info for $rc.ife</h4>
    <a href="https://vitejs.dev" target="_blank">
      <img src={reactLogo} className="logo" alt="Vite logo" />
    </a>
  </div>
</nx.$rc.ife>

<nx.$rc.list
  items={['a', 'b', 'c']}
  as="ul"
  template={({ item }) => {
    return <li key={item}>{item}</li>;
  }}
/>
```

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

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

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

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

[download-image]: https://img.shields.io/npm/dm/@jswork/next-rc-components
[download-url]: https://www.npmjs.com/package/@jswork/next-rc-components
npm package: @jswork/next-react-active-state
Description: Active state special for react based on next-active-state.
Author: afei
Latest version: 1.0.15

# next-react-active-state
> Active state special for react based on next-active-state.

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

## installation
```bash
npm install -S @jswork/next-react-active-state
```

## apis
| api   | params | description                       |
| ----- | ------ | --------------------------------- |
| build | -      | Get state and sync event handler. |

## usage
```js
import NxReactActiveState from '@jswork/next-react-active-state';
import useForceUpdate from '@jswork/use-force-update';

const forceUpdate = useForceUpdate();
const {
  current: { state, sync },
} = useRef(
  NxReactActiveState.build({}, () => {
    console.log('changed main:', state);
    forceUpdate();
  })
);


<form>
  <div className="row">
    <label htmlFor="username"> username: </label>
    <input type="text" name="username" onChange={sync('username')} />
  </div>
  <div className="row">
    <label htmlFor="email"> email: </label>
    <input type="text" name="email" onChange={sync('email')}/>
  </div>
  <div className="row">
    <label htmlFor="address"> email: </label>
    <input type="text" name="formData[address]" onChange={sync()}/>
  </div>
</form>
```

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

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

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

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

[download-image]: https://img.shields.io/npm/dm/@jswork/next-react-active-state
[download-url]: https://www.npmjs.com/package/@jswork/next-react-active-state
npm package: @jswork/next-react-mobx
Description: Next toolkit for mobx app.
Author: afei
Latest version: 1.0.0

# next-react-mobx
> Next toolkit for mobx app.

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

## installation
```bash
npm install -S @jswork/next-react-mobx
```

## apis
| api       | params | description     |
| --------- | ------ | --------------- |
| bootstrap | -      | Add $app/$store |

## usage
```js
import NxReactMobx from '@jswork/next-react-mobx';
```

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

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

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

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

[download-image]: https://img.shields.io/npm/dm/@jswork/next-react-mobx
[download-url]: https://www.npmjs.com/package/@jswork/next-react-mobx
npm package: @jswork/next-react-redux
Description: React redux enhanced version based on next toolkit.
Author: jswork
Latest version: 1.0.3

# next-react-redux
> React redux enhanced version based on next toolkit.

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

## installation
```shell
npm i @jswork/next-react-redux
```

## options
| name        | type   | value | description                           |
| :---------- | :----- | :---- | :------------------------------------ |
| nx.$memory  | Object | {}    | Application memory data storage       |
| nx.$local   | Object | null  | Application localStoarage             |
| nx.$session | Object | {}    | Application sessionStoreage           |
| nx.$global  | Object | {}    | Application set/get global properties |
| nx.$app     | Object | {}    | Application instance                  |


## get-started
+ HTML
```html
<main id="app"></main>
```

+ index.js
```javascript
import  { $api, $config, $store } from '#';
import { HashRouter as Router, Switch } from 'react-router-dom';
import { renderRoutes } from 'react-router-config';
import routes from './routes';
import { ReduxAppBase, ReduxBoot, reduxRender } from '@jswork/next-react-redux';
import 'assets/styles/index.scss';

// DO NOT USE `@hotable`
@reduxRender('app', { prefix: 'react-spa', loadable: false })
export default class extends ReduxAppBase {
  static initialState(inStore) {
    const { login } = inStore.local;
    return {
      local: {
        login: login || null
      },
      memory: {
        modalUser: false,
        modalUserQuery: false
      }
    };
  }

  componentDidMount() {
    const { history } = this.root;
    nx.$global = { 'abc.test': 123 };
    nx.$memory = { history };
  }

  eventBus(inName, inData) {
    console.log('*, I am - global event bus center:->', inName, inData);
  }

  render() {
    return (
      <Router ref={(root) => (this.root = root)}>
        <Switch>{renderRoutes(routes)}</Switch>
      </Router>
    );
  }
}
```

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

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

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

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

[download-image]: https://img.shields.io/npm/dm/@jswork/next-react-redux
[download-url]: https://www.npmjs.com/package/@jswork/next-react-redux
npm package: @jswork/next-react-umi
Description: For umi application.
Author: afei
Latest version: 1.0.0

# next-react-umi
> For umi application.

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

## installation
```bash
npm install -S @jswork/next-react-umi
```

## apis
| api       | params | description     |
| --------- | ------ | --------------- |
| bootstrap | -      | Add $app/$store |


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

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

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

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

[download-image]: https://img.shields.io/npm/dm/@jswork/next-react-umi
[download-url]: https://www.npmjs.com/package/@jswork/next-react-umi
npm package: @jswork/next-react-valtio
Description: Valtio for react.
Author: afei
Latest version: 1.1.5

# next-react-valtio
> Valtio for react.

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

## installation
```bash
yarn add valtio derive-valtio
yarn add @jswork/create-valtio-state
yarn add @jswork/next-react-valtio
```

## usage
```js
import '@jswork/next-react-valtio';
```

```jsx
const InteractiveList = () => {
  const getters = {
    size: (state) => state.length
  };
  const { state, store, computed } = nx.$valtio<number[]>([1, 2, 3, 4], getters);
  return (
    <div className="bg-slate-100 p-2">
      <h1>Vite + React</h1>
      <nav className="mt-4 flex gap-1 border border-solid p-1">
        <button onClick={() => store.push(state.length + 1)}>添加</button>
        <button
          onClick={() => {
            store.splice(0, state.length, ...['a', 'b', 'c', 'd', 'e']);
          }}>
          Reset
        </button>
      </nav>
      {state.map((item, index) => (
        <div className="m-2 block border" key={index}>
          <span className="bold mr-1">{item}</span>
          <button onClick={() => store.splice(index, 1)}>删除</button>
        </div>
      ))}
      {state.length === 0 && <div className="m-2 block border">暂无数据</div>}
    </div>
  );
};

export default InteractiveList;
```

## api
- `nx.$valtio(initialState, getters)`: create a valtio store with initialState and getters.
- `nx.$defineProxy(initialState)`: create a valtio proxy with initialState.
- `nx.$useProxy(store)`: create a valtio proxy with store.
- `nx.$useStore(initialState)`: create a valtio store with initialState.

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

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

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

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

[download-image]: https://img.shields.io/npm/dm/@jswork/next-react-valtio
[download-url]: https://www.npmjs.com/package/@jswork/next-react-valtio
npm package: @jswork/next-redirect-to
Description: Redirect to path.
Author: afei
Latest version: 1.0.0

# next-redirect-to
> Redirect to path.

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

## installation
```bash
npm install -S @jswork/next-redirect-to
```

## usage
```js
import '@jswork/next-redirect-to';

// history is required:
nx.redirectTo({ from: '/', to: '/home', replace: true, hisotry: null })
```

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

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

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

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

[download-image]: https://img.shields.io/npm/dm/@jswork/next-redirect-to
[download-url]: https://www.npmjs.com/package/@jswork/next-redirect-to
npm package: @jswork/next-redirect2url
Description: Redirect url encode/decode.
Author: afei
Latest version: 1.0.0

# next-redirect2url
> Redirect url encode/decode.

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

## installation
```bash
npm install -S @jswork/next-redirect2url
```

## apis
| api    | params | description   |
| ------ | ------ | ------------- |
| encode | -      | desc balabala |
| decode | -      | desc balabala |

## options - encode
| name   | default            | description                      |
| ------ | ------------------ | -------------------------------- |
| query  | 'rediect'          | The query key string             |
| encode | encodeURIComponent | The default value encode method. |
| source | -                  | The url.                         |
| target | -                  | The redirect url.                |


## options - decode

| name   | default            | description                      |
| ------ | ------------------ | -------------------------------- |
| query  | 'rediect'          | The query key string             |
| decode | decodeURIComponent | The default value decode method. |
| url    | -                  | The target url.                  |

## usage
```js
import NxRedirect2url from '@feizheng/next-redirect2url';

const str = NxRedirect2url.encode({
  source: 'http://192.168.50.181/login',
  target: 'https://www.mipengine.org?q1=1&q2=2',
});

//  'http://192.168.50.181/login?redirect=https%3A%2F%2Fwww.mipengine.org%3Fq1%3D1%26q2%3D2'


const res = NxRedirect2url.decode({
  url: 'http://192.168.50.181/login?redirect=https%3A%2F%2Fwww.mipengine.org%3Fq1%3D1%26q2%3D2',
});

/*
{
  target: 'https://www.mipengine.org?q1=1&q2=2',
  source: 'http://192.168.50.181/login'
}
*/
```

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

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

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

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

[download-image]: https://img.shields.io/npm/dm/@jswork/next-redirect2url
[download-url]: https://www.npmjs.com/package/@jswork/next-redirect2url
npm package: @jswork/next-redux-lite
Description: Lightweight version of the redux library.
Author: afei
Latest version: 1.0.0

# next-redux-lite
> Lightweight version of the redux library.

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

## installation
```bash
npm install -S @jswork/next-redux-lite
```

## apis
| api       | args                             | description                |
| --------- | -------------------------------- | -------------------------- |
| INIT_TYPE | -                                | @@redux/INIT_0.g5t24hclwrt |
| create    | reducers, initialState, enhancer | Create store.              |
| apply     | middleware1,middleware2...       | Apply middlewares.         |
| getState  | -                                | redux.getState             |
| subscribe | listener                         | redux.subscribe            |
| dispatch  | action                           | redux.dispatch             |

## usage
```js
import NxReduxLite from '@jswork/next-redux-lite';

// create a redux store:
const store = NxReduxLite.create(reducers, {
  test: 123
});

// subscribe the store:
store.subscribe(()=>{
  console.log('get!')
});

// dispath:
store.dispatch({
  type:'INC',
  data: 1
});

// get latest state:
store.getState();
```

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

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

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

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

[download-image]: https://img.shields.io/npm/dm/@jswork/next-redux-lite
[download-url]: https://www.npmjs.com/package/@jswork/next-redux-lite
npm package: @jswork/next-regex-index-of
Description: JavaScript's String.indexOf() that allows for regular expressions.
Author: afei
Latest version: 1.0.3

# next-regex-index-of
> JavaScript's String.indexOf() that allows for regular expressions.

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

## installation
```bash
npm install -S @jswork/next-regex-index-of
```

## usage
```js
import '@jswork/next-regex-index-of';

const str = `What's this? 这是什么？`;
const res = nx.regexIndexOf(str, /[\u4e00-\u9fa5]/);    // 13
```

## license
Code released under [the MIT license](https://github.com/afeiship/next-regex-index-of/blob/master/LICENSE.txt).

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

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

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

[download-image]: https://img.shields.io/npm/dm/@jswork/next-regex-index-of
[download-url]: https://www.npmjs.com/package/@jswork/next-regex-index-of
npm package: @jswork/next-registry-choices
Description: Yeoman registry choices based on next.
Author: afei
Latest version: 1.0.1

# next-registry-choices
> Yeoman registry choices based on next.

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

## installation
```bash
npm install -S @jswork/next-registry-choices
```

## apis
| api  | params | description      |
| ---- | ------ | ---------------- |
| gets | -      | Get the choices. |

## usage
```js
import NxRegistryChoices from '@jswork/next-registry-choices';

NxRegistryChoices.gets();

/*
[
  {
    name: 'npm',
    value: {
      publish: 'https://registry.npmjs.org',
      install: 'https://registry.npmjs.org',
      private: false,
      access: 'public'
    }
  },
  {
    name: 'github',
    value: {
   //...   
*/
```

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

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

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

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

[download-image]: https://img.shields.io/npm/dm/@jswork/next-registry-choices
[download-url]: https://www.npmjs.com/package/@jswork/next-registry-choices
npm package: @jswork/next-relative-package
Description: Get root path package.json.
Author: afei
Latest version: 1.0.0

# next-relative-package
> Get root path package.json.

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

## installation
```bash
npm install -S @jswork/next-relative-package
```

## usage
```js
import '@jswork/next-relative-package';

nx.relativePackage(); // { ...the whole package.json ... }
nx.relativePackage('publishConfig.registry'); // https://registry.npmjs.org/
```

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

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

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

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

[download-image]: https://img.shields.io/npm/dm/@jswork/next-relative-package
[download-url]: https://www.npmjs.com/package/@jswork/next-relative-package
npm package: @jswork/next-remove
Description: Remove a item from array based on next.
Author: afei
Latest version: 1.0.0

# next-remove
> Remove a item from array based on next.

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

## installation
```bash
npm install -S @jswork/next-remove
```

## usage
```js
import '@jswork/next-remove';

const ary1 = [1,2,3,4,5];
const ary2 = [
  { key: 1, value: 'value1' },
  { key: 2, value: 'value2' },
  { key: 3, value: 'value3' },
  { key: 4, value: 'value4' }
];

// 1. remove pure item:
nx.remove(ary1, [1,2,3]);
// result:
[4,5]


// 2. remove by a filter:
nx.remove(ary2, (_,item)=>{
  return item.key>2;
});

// result:
[
  { key: 1, value: 'value1' },
  { key: 2, value: 'value2' },
]
```

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

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

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

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

[download-image]: https://img.shields.io/npm/dm/@jswork/next-remove
[download-url]: https://www.npmjs.com/package/@jswork/next-remove
npm package: @jswork/next-remove-keys
Description: Remove keys from array/object.
Author: afei
Latest version: 1.0.2

# next-remove-keys
> Remove keys from array/object.

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

## installation
```bash
yarn add @jswork/next-remove-keys
```

## usage
```js
import '@jswork/next-remove-keys';

const obj = {
  name: "John Doe",
  address: {
    street: "123 Main St",
    city: "Anytown",
    state: "CA",
    zip: "12345",
  },
  phone: {
    home: "555-555-1234",
    work: "555-555-5678",
  },
};

nx.removeKeys(obj, {
  keys: ["address.zip", "work"],
});
```

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

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

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

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

[download-image]: https://img.shields.io/npm/dm/@jswork/next-remove-keys
[download-url]: https://www.npmjs.com/package/@jswork/next-remove-keys
npm package: @jswork/next-repeat
Description: Repeat for next.
Author: afei
Latest version: 1.0.2

# next-repeat
> Repeat for next.

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

## installation
```bash
npm install -S @jswork/next-repeat
```

## usage
```js
import '@jswork/next-repeat';

nx.repeat('abc', 2);
// => 'abcabc'
```

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

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

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

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

[download-image]: https://img.shields.io/npm/dm/@jswork/next-repeat
[download-url]: https://www.npmjs.com/package/@jswork/next-repeat
npm package: @jswork/next-repeat-by
Description: Repeat by for next.
Author: afei
Latest version: 1.0.0

# next-repeat-by
> Repeat by for next.

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

## installation
```bash
npm install -S @jswork/next-repeat-by
```

## usage
```js
import '@jswork/next-repeat-by';

nx.repeatBy('a', 3);  // ['a','a','a']
```

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

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

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

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

[download-image]: https://img.shields.io/npm/dm/@jswork/next-repeat-by
[download-url]: https://www.npmjs.com/package/@jswork/next-repeat-by
npm package: @jswork/next-require
Description: Require multiple package.
Author: afei
Latest version: 1.0.5

# next-require
> Require multiple package.

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

## installation
```bash
npm install -S @jswork/next-require
```

## usage
```js
import '@jswork/next-require';

//DOCS here!
```

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

[version-image]: https://img.shields.io/npm/v/@boilerplate-scope/next-boilerplate-package
[version-url]: https://npmjs.org/package/@boilerplate-scope/next-boilerplate-package

[license-image]: https://img.shields.io/npm/l/@boilerplate-scope/next-boilerplate-package
[license-url]: https://github.com/afeiship/next-boilerplate-package/blob/master/LICENSE.txt

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

[download-image]: https://img.shields.io/npm/dm/@boilerplate-scope/next-boilerplate-package
[download-url]: https://www.npmjs.com/package/@boilerplate-scope/next-boilerplate-package
npm package: @jswork/next-rgba
Description: Rgba function like sass.
Author: afei
Latest version: 1.0.0

# next-rgba
> Rgba function like sass.

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

## installation
```bash
npm install -S @jswork/next-rgba
```

## usage
```js
import '@jswork/next-rgba';

nx.rgba('red');       //'rgba(255,0,0,1)'
```

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

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

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

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

[download-image]: https://img.shields.io/npm/dm/@jswork/next-rgba
[download-url]: https://www.npmjs.com/package/@jswork/next-rgba
npm package: @jswork/next-root-dispatch
Description: Shortcut for window.dispatchEvent.
Author: afei
Latest version: 1.0.3

# next-root-dispatch
> Shortcut for window.dispatchEvent.

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

## installation
```bash
yarn add @jswork/next-root-dispatch
```

## usage
```js
import '@jswork/next-root-dispatch';

// original usage
window.dispatchEvent(new CustomEvent('resize'));
window.dispatchEvent(new CustomEvent('my-event', { detail: { foo: 'bar' } }));

// shortcut usage
nx.rootDispatch('resize');
nx.rootDispatch('my-event', { foo: 'bar' });
```

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

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

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

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

[download-image]: https://img.shields.io/npm/dm/@jswork/next-root-dispatch
[download-url]: https://www.npmjs.com/package/@jswork/next-root-dispatch
npm package: @jswork/next-router-path
Description: Router path template for next.
Author: afei
Latest version: 1.0.0

# next-router-path
> Router path template for next.

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

## installation
```bash
npm install -S @jswork/next-router-path
```


## usage
```js
import '@jswork/next-router-path';

nx.routerPath('/user/:id', { id: 123 });
// result: /user/123
```

## resources
- https://github.com/ThijsTyZ/router-path/blob/master/src/createPath.ts
- https://github.com/lukeed/regexparam
- https://github.com/pillarjs/path-to-regexp

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

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

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

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

[download-image]: https://img.shields.io/npm/dm/@jswork/next-router-path
[download-url]: https://www.npmjs.com/package/@jswork/next-router-path
npm package: @jswork/next-runner
Description: Task runnter for next.
Author: afei
Latest version: 1.0.0

# next-runner
> Task runnter for next.

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

## installation
```bash
npm install -S @jswork/next-runner
```

## apis
| api      | params | description   |
| -------- | ------ | ------------- |
| parallel | -      | desc balabala |
| serial   | -      | desc balabala |

## usage
```js
import NxRunner from '@jswork/next-runner';
```

## resources
- https://github.com/nuxt-contrib/items-promise/blob/master/lib/index.js

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

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

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

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

[download-image]: https://img.shields.io/npm/dm/@jswork/next-runner
[download-url]: https://www.npmjs.com/package/@jswork/next-runner
npm package: @jswork/next-rw-json
Description: Read and write json file.
Author: afei
Latest version: 1.0.3

# next-rw-json
> Read and write json file.

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

## installation
```bash
yarn add @jswork/next-rw-json
```

## usage
```js
import '@jswork/next-rw-json';

const filepath = './testconfigrc';
// read
const data = nx.RwJson.read(filepath);
// write
nx.RwJson.write('./testpath/test.json', { data: 123 });
```

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

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

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

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

[download-image]: https://img.shields.io/npm/dm/@jswork/next-rw-json
[download-url]: https://www.npmjs.com/package/@jswork/next-rw-json
npm package: @jswork/next-s3-helper
Description: Aws s3 helper for next.
Author: afei
Latest version: 1.0.2

# next-s3-helper
> Aws s3 helper for next.

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

## installation
```bash
npm install -S @jswork/next-s3-helper
```

## apis
| api  | params | description        |
| ---- | ------ | ------------------ |
| puts | -      | s3 put objects.    |
| dels | -      | s3 delete objects. |
| list | -      | s3 list objects.   |

## usage
```js
import NxS3Helper from '@jswork/next-s3-helper';

const options = {
  signatureVersion: 'v4',
  region: 'cn-north-1',
  endpoint: 'https://s3.cn-north-1.amazonaws.com.cn',
  accessKeyId: process.env['AWS_ACCESS_KEY_ID'],
  secretAccessKey: process.env['AWS_SECRET_ACCESS_KEY']
};

const s3helper = new NxS3Helper(options);


// puts
s3helper
  .puts(['./dist/**'], {
    ACL: 'public-read',
    Bucket: 'course-assets.saybot.net',
    context: {
      local: 'dist',
      remote: 'courseware-preview'
    }
  })
  .then((res) => {
    console.log(res);
  });

// dels
s3helper
  .dels({
    Bucket: 'course-assets.saybot.net',
    Prefix: 'courseware-preview'
  }).then(res=>{
    console.log(res);
  })
```

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

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

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

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

[download-image]: https://img.shields.io/npm/dm/@jswork/next-s3-helper
[download-url]: https://www.npmjs.com/package/@jswork/next-s3-helper
npm package: @jswork/next-safe-assign
Description: Safe assign for next.
Author: afei
Latest version: 1.0.0

# next-safe-assign
> Safe assign for next.

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

## installation
```bash
npm install -S @jswork/next-safe-assign
```

## usage
```js
import '@jswork/next-safe-assign';

const res = safeAssign(
  { a: 1, b: 2 },
  { c: 2, a: '' },
  (key, value) => {
    // you can customize your ignore function
    return value == null;
  }
);

// { a: '', b: 2, c: 2 }
```

## resources
- https://github.com/zmen/safe-assign

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

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

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

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

[download-image]: https://img.shields.io/npm/dm/@jswork/next-safe-assign
[download-url]: https://www.npmjs.com/package/@jswork/next-safe-assign
npm package: @jswork/next-sample
Description: Get an/some element from array like target.
Author: afei
Latest version: 1.0.1

# next-sample
> Get an/some element from array like target.

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

## installation
```bash
npm install -S @jswork/next-sample
```

## usage
```js
import '@jswork/next-sample';

const arr = [1,2,3,4,5,6,7];

nx.sample(arr); // 2
nx.sample(arr); // 5

nx.sample(arr, 1); // [5]
nx.sample(arr, 2); // [1, 2]
nx.sample(arr, 2); // [3, 6]
nx.sample(arr, 2); // [5, 6]
```

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

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

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

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

[download-image]: https://img.shields.io/npm/dm/@jswork/next-sample
[download-url]: https://www.npmjs.com/package/@jswork/next-sample
npm package: @jswork/next-sanitize-filename
Description: Sanitize a string to be safe for use as a filename by customize list.
Author: afei
Latest version: 1.0.1

# next-sanitize-filename
> Sanitize a string to be safe for use as a filename by customize list.

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

## installation
```bash
npm install -S @jswork/next-sanitize-filename
```

## usage
```js
import '@jswork/next-sanitize-filename';

const str = '牛津英语(牛津上海版)1A(一年级上册)(2007年08月第1版)';
nx.sanitizeFilename(str, {
  items: [
    [/\(/g, '_'],
    [/\)/g, '_'],
  ]
});
// 牛津英语_牛津上海版_1A_一年级上册__2007年08月第1版_
```

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

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

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

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

[download-image]: https://img.shields.io/npm/dm/@jswork/next-sanitize-filename
[download-url]: https://www.npmjs.com/package/@jswork/next-sanitize-filename
npm package: @jswork/next-sass-get
Description: Deep get for sass-loader based node-sass.
Author: afei
Latest version: 1.0.0

# next-sass-get
> Deep get for sass-loader based node-sass.

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

## installation
```bash
npm install -S @jswork/next-sass-get
```

## apis
| api | params | description   |
|-----|--------|---------------|
| get | -      | desc balabala |


## usage
```js
import NxSassGet from '@jswork/next-sass-get';

// code goes here:
const cssResult = sass.renderSync({
  data: sassString,
  options: {
    outputStyle: 'expanded'
  },
  functions: NxSassGet.create({
    color: {
      primary: {
        default: '#4cd964',
        dark: '#f60',
        light: '#eee'
      },
      secondary: '#999'
    }
  })
});
```

### input
```scss
$colors: (
  f: #fff,
  e: #eee,
  0: #000,
  3: #333,
  6: #666,
  8: #888,
  9: #999,
  primary: get("color.primary.default"),
  secondary: get("color.secondary")
);

.color1 {
  color: map-get($colors, primary);
}

.color2 {
  background: get("color.secondary");
}
```

### output
```css
.color1 {
  color: #4cd964; }

.color2 {
  background: #999; }
```

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

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

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

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

[download-image]: https://img.shields.io/npm/dm/@jswork/next-sass-get
[download-url]: https://www.npmjs.com/package/@jswork/next-sass-get
npm package: @jswork/next-schema-manager
Description: Database table schema manager.
Author: afei
Latest version: 1.0.0

# next-schema-manager
> Database table schema manager.

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

## installation
```bash
npm install -S @jswork/next-schema-manager
```

## apis
| api | params | description   |
|-----|--------|---------------|
| get | -      | desc balabala |

## usage
```js
import NxSchemaManager from '@jswork/next-schema-manager';

// code goes here:
```

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

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

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

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

[download-image]: https://img.shields.io/npm/dm/@jswork/next-schema-manager
[download-url]: https://www.npmjs.com/package/@jswork/next-schema-manager
npm package: @jswork/next-scroll-to
Description: Scroll to api.
Author: afei
Latest version: 1.0.2

# next-scroll-to
> Scroll to api.

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

## installation
```bash
npm install -S @jswork/next-scroll-to
```

## usage
```js
import '@jswork/next-scroll-to';

// top/bottom/number
nx.scrollTo({ el: document.querySelector('.abc'), to: 'top' });
nx.scrollTo({ el: document.querySelector('.abc'), to: 'bottom' });
nx.scrollTo({ el: document.querySelector('.abc'), to: 1000 });
```

## set `scroll-behavior: smooth;`
> Use css3 smooth-scroller.


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

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

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

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

[download-image]: https://img.shields.io/npm/dm/@jswork/next-scroll-to
[download-url]: https://www.npmjs.com/package/@jswork/next-scroll-to