open-index/open-npm huggingface dataset:
npm package: @gaupa/sdk-web-wallet-iframe-provider-gaupa
Description: Signing provider for dApps: Web Wallet Iframe Provider for Gaupa Login. Forked from @multiversx/sdk-web-wallet-iframe-provider
Author: Gaupa Labs
Latest version: 0.1.3

# mx-sdk-js-web-wallet-iframe-provider

Alpha Version 0.1

Signing provider for dApps: Web Wallet Iframe Provider with support for multiple login methods including **Gaupa Login**.

Documentation is available on [docs.multiversx.com](https://docs.multiversx.com/sdk-and-tools/sdk-js/sdk-js-signing-providers), while an integration example can be found [here](https://github.com/multiversx/mx-sdk-js-examples/tree/main/signing-providers).

Note that **we recommend using [sdk-dapp](https://github.com/multiversx/mx-sdk-dapp)** instead of integrating the signing provider on your own.

## Supported Login Providers

This iframe provider supports multiple login methods:

- **MetaMask** - Traditional Web3 wallet integration
- **Passkey** - Passwordless authentication using WebAuthn
- **Gaupa Login** - Social login integration for:
  - TikTok
  - Twitter  
  - Discord
  - Google
  - Email

### Gaupa Login

Gaupa Login provides seamless social authentication integration, allowing users to connect their social media accounts or email for a frictionless login experience. Wallet management, transactions, gas fees etc... are managed in the background. Making using and building on MultiversX easier.


## Distribution

[npm](https://www.npmjs.com/package/@multiversx/mx-sdk-js-web-wallet-iframe-provider)

## Installation

`sdk-web-wallet-iframe-provider` is delivered via [npm](https://www.npmjs.com/package/@multiversx/sdk-web-wallet-iframe-provider), therefore it can be installed as follows:

```
npm install @multiversx/sdk-web-wallet-iframe-provider
```

## Usage

### Basic Setup

```typescript
import { IframeProvider, IframeLoginTypes } from '@multiversx/sdk-web-wallet-iframe-provider';

const provider = IframeProvider.getInstance();

// Set the login type (default is Google)
provider.setLoginType(IframeLoginTypes.google);

// Initialize the provider
await provider.init();

// Set wallet URL
// Metamask & Passkey
provider.setWalletUrl('https://wallet.multiversx.xyz')

// Gaupa Logins
provider.setWalletUrl('https://vibe.gaupa.xyz');

// Login
const account = await provider.login();
```

### Available Login Types

```typescript
import { IframeLoginTypes } from '@multiversx/sdk-web-wallet-iframe-provider';

// Traditional Web3
provider.setLoginType(IframeLoginTypes.metamask);

// Passwordless authentication
provider.setLoginType(IframeLoginTypes.passkey);

// Social login via Gaupa
provider.setLoginType(IframeLoginTypes.tiktok);
provider.setLoginType(IframeLoginTypes.twitter);
provider.setLoginType(IframeLoginTypes.google);
provider.setLoginType(IframeLoginTypes.mail);
provider.setLoginType(IframeLoginTypes.discord);
```

### Building the library

In order to compile the library, run the following:

```
npm install
npm run compile
```
npm package: @gaurav2026/testuilib
Description: <p align="center">   <h3 align="center">Component Library/Tailwind Starter</h3>
Author: Kenichi Okiebisu
Latest version: 1.0.9

<p align="center">
  <h3 align="center">Component Library/Tailwind Starter</h3>

  <p align="center">
     A starter template to create your own React component library using TailwindCSS
    <br />
    <br />
    <br />
    <a href="https://github.com/kokiebisu/component-library-tailwind-starter/issues">Report Bug</a>
    ·
    <a href="https://github.com/kokiebisu/component-library-tailwind-starter/issues">Request Feature</a>
  </p>
</p>



<!-- TABLE OF CONTENTS -->
<details open="open">
  <summary>Table of Contents</summary>
  <ol>
    <li>
      <a href="#motive">Motive</a>
      <ul>
        <li><a href="#built-with">Built With</a></li>
      </ul>
    </li>
    <li>
      <a href="#getting-started">Getting Started</a>
      <ul>
        <li><a href="#prerequisites">Prerequisites</a></li>
        <li><a href="#installation">Installation</a></li>
      </ul>
    </li>
    <li><a href="#usage">Usage</a></li>
  </ol>
</details>



<!-- ABOUT THE PROJECT -->
## Motive

I wasn't able to find a suitable repository that satisfied the following:
* Minimum configuration (for flexibility)
* Latest versions of Tailwind, Webpack Plugins
* Storybook integration
* Typescript support

### Built With

* [React](https://reactjs.org)
* [Webpack](https://webpack.js.org)
* [Storybook](https://storybook.js.org)
* [Typescript](https://www.typescriptlang.org)


<!-- GETTING STARTED -->
## Getting Started

This is an example of how you may give instructions on setting up your project locally.
To get a local copy up and running follow these simple example steps.

### Prerequisites

This is an example of how to list things you need to use the software and how to install them.
* npm
  ```sh
  npm install npm@latest -g
  ```

### Installation

1. Clone the repo
   ```sh
   git clone https://github.com/kokiebisu/component-library-tailwind-starter.git
   ```
2. Install NPM packages
   ```sh
   yarn
   ```



<!-- USAGE EXAMPLES -->
## Usage

1. Import the library into your project
   ```sh
   yarn add component-library-tailwind-starter
   ```
  
2. Try importing the Button component
    ```JS
    import { Button } from 'component-library-tailwind-starter';
    ```
npm package: @gaurav9576/ember-octane-blueprint
Description: The default blueprint for ember-cli addons.
Latest version: 0.1.1

ember-octane-blueprint
==============================================================================

```bash

ember new my-app -b ember-octane-blueprint

```

Included:

 - Module Unification
 - Sparkles Components (eventually Glimmer, but built in)
 - ember-decorators (eventually will be built in)
 - ember-auto-import
 - sample component and route
 - no jquery


License
------------------------------------------------------------------------------

This project is licensed under the [MIT License](LICENSE.md).
npm package: @gauravachhani/sqlite
Description: Capacitor SQLite Plugin
Author: Jean Pierre Queau
Latest version: 2.4.7


#### Electron databases location

- There are by default under `User/Databases/APP_NAME/`

Then build YOUR_APPLICATION

```
npm run build
npx cap copy
npx cap copy @capacitor-community/electron
npx cap copy web
npx cap open android
npx cap open ios
npx cap open @capacitor-community/electron
```

## Issues

Do not report anymore issues for `2.4.x` as this release is not anymore maintained.

## Configuration

No configuration required for this plugin

## Supported methods

| Name                    | Android | iOS | Electron | Web |
| :---------------------- | :------ | :-- | :------- | :-- |
| open (non-encrypted DB) | ✅      | ✅  | ✅       | ❌  |
| open (encrypted DB)     | ✅      | ✅  | ❌       | ❌  |
| close                   | ✅      | ✅  | ✅       | ❌  |
| execute                 | ✅      | ✅  | ✅       | ❌  |
| executeSet              | ✅      | ✅  | ✅       | ❌  |
| run                     | ✅      | ✅  | ✅       | ❌  |
| query                   | ✅      | ✅  | ✅       | ❌  |
| deleteDatabase          | ✅      | ✅  | ✅       | ❌  |
| importFromJson          | ✅      | ✅  | ✅       | ❌  |
| exportToJson            | ✅      | ✅  | ✅       | ❌  |
| createSyncTable         | ✅      | ✅  | ✅       | ❌  |
| setSyncDate             | ✅      | ✅  | ✅       | ❌  |
| isJsonValid             | ✅      | ✅  | ✅       | ❌  |
| isDBExists              | ✅      | ✅  | ✅       | ❌  |
| addUpgradeStatement     | ✅      | ✅  | ✅       | ❌  |
npm package: @gauravano/card
Description: A personal card for Gaurav Sachdeva (@gauravano)
Author: Gaurav Sachdeva
Latest version: 1.6.0

It's me, Tierney!

# Usage

## npm
```
npx bitandbang
```

## GitHub Package Registry
Assuming you have the GitHub registry set up, you can use via npx:
```
npx @bnb/card
```

Not including how to use it globally because I'm not sure why you'd want this as a global command. That'd be creepy.
npm package: @gauravbordoloi/escpos-adapter
Description: escpos adapter base class
Author: Lsong
Latest version: 4.0.1


## Adapter

### Constructors

You can choose your adapter type as USB, Serial, Bluetooth, Network, or Console.

### Methods

#### open(function callback[err])

Claims the current device USB (or other device type), if the printer is already in use by other process this will fail and return the error parameter.

By default, the USB adapter will set the first printer found .

Triggers the callback function when done.

#### close(function callback)

Closes the current device and releases its USB interface.

----
npm package: @gauravbordoloi/escpos-bluetooth
Description: bluetooth adapter for escpos
Author: Lsong
Latest version: 4.0.0


## escpos-bluetooth

#### Bluetooth(address, channel)
```javascript
const escpos = require('escpos');
escpos.Bluetooth = require('escpos-bluetooth');

const address = '01:23:45:67:89:AB';
const channel = 1;
const bluetoothDevice = new escpos.Bluetooth(address, channel);
```
You can scan for printers using the `escpos.Bluetooth.findPrinters()` method. Check out the examples (bt_promise and bt_find_printer) for more information.
npm package: @gauravbordoloi/escpos-network
Description: network adapter for escpos
Author: Lsong
Latest version: 4.0.0


## escpos-network

#### Network(address, port = 9100)
```javascript
const escpos = require('escpos');
escpos.Network = require('escpos-network');

const networkDevice = new escpos.Network('localhost', 3000);
```
The default port number is 9100.
npm package: @gauravbordoloi/escpos-screen
Description: Escpos Screen API
Author: Lsong
Latest version: 4.0.0


## ESCPOS Screen

## Installation

## Example

```js
```

### Constructors

#### Screen(device)

```javascript
const usbDevice = new escpos.USB();
const usbScreen = new escpos.Screen(usbDevice);

const serialDevice = new escpos.Serial('/dev/ttyUSB0');
const serialScreen = new escpos.Screen(serialDevice);

const bluetoothDevice = new escpos.Bluetooth('01:23:45:67:89:AB', 1);
const bluetoothScreen = new escpos.Screen(bluetoothDevice);

const networkDevice = new escpos.Network('localhost');
const networkScreen = new escpos.Screen(networkDevice);
```

### Methods

#### clear()

Clears all displayed characters.

#### clearLine()

Clears the line containing the cursor.

#### moveUp()

Moves the cursor up one line.

#### moveLeft()

Moves the cursor one character position to the left.

#### moveRight()

Moves the cursor one character position to the right.

#### moveDown()

Moves the cursor down one line.

#### moveHome()

Moves the cursor to the left-most position on the upper line (home position).

#### moveMaxRight()

Moves the cursor to the right-most position on the current line.

#### moveMaxLeft()

Moves the cursor to the left-most position on the current line.

#### moveBottom()

Moves the cursor to the bottom position.

#### move(n, m)

Moves the cursor to the nth position on the mth line.

#### overwrite()

Selects overwrite mode as the screen display mode.

#### verticalScroll()

Selects vertical scroll mode as the screen display mode.

#### horizontalScroll()

Selects horizontal scroll mode as the display screen mode.

#### cursor(display)

Turn cursor display mode on/off.

"display" Refers to the on/off boolean state.

#### blink(step)

Sets display screen blank interval.
"step" Refers to the blink interval. The interval [ON= step × 50 ms] / [OFF = step × 50 ms] is repeated.

#### timer(h, m)

Sets the counter time and displays it in the bottom right of the screen.
"h" Refers to hours: 0≤ h ≤ 23
"m" Refers to minutes: 0≤ m ≤ 59

#### displayTimer()

Displays the time counter at the right side of the bottom line.

#### brightness(level)

Sets the brightness of the fluorescent character display tube.
"level" Refers to brightness level: 1 ≤ level ≤ 4

#### reverse(n)

Selects or cancels reverse display of the characters received after this command.
"n" Refers selects/cancels reverse boolean state.

#### text("text", encodeType)

Prints raw text. Raises TextError exception.

For the encode type, see the [iconv-lite wiki document](https://github.com/ashtuchkin/iconv-lite/wiki/Supported-Encodings). Escpos uses `iconv-lite` for encoding.

If the type is undefined, the default type is GB18030.

#### encode("encodeType")

Sets the encoding value globally. default type is GB18030 (Chinese)

#### close(function callback)

Flush buffer and closes the current device.

----
npm package: @gauravbordoloi/escpos-serialport
Description: serialport adapter for escpos
Author: Lsong
Latest version: 4.0.0


#### Serial("port", options)
```javascript
const escpos = require('escpos');
escpos.SerialPort = require('escpos-serialport');

const serialDeviceOnWindows = new escpos.SerialPort('COM10');
const serialDeviceOnLinux = new escpos.SerialPort('/dev/usb/lp0', {
  baudRate: 14400,
  stopBit: 2
});
```
Check the [serialport package documentation](https://github.com/EmergingTechnologyAdvisors/node-serialport#serialportopenoptions--object) for more options.
npm package: @gauravbordoloi/escpos-usb
Description: usb adapter for escpos
Author: Lsong
Latest version: 4.0.3

## escpos-usb

If you use usb as an adapter :

+ On Linux, you'll need `libudev` to build libusb.
+ On Ubuntu/Debian: `sudo apt-get install build-essential libudev-dev`.
+ On Windows, Use [Zadig](http://sourceforge.net/projects/libwdi/files/zadig/) to install the WinUSB driver for your USB device.

Otherwise you will get `LIBUSB_ERROR_NOT_SUPPORTED` when attempting to open devices.


#### USB(vid, pid)
```javascript
const escpos = require('escpos');
escpos.USB = require('escpos-usb');

const usbDevice = new escpos.USB(0x01, 0xff);
```
vid(Vendor Id) and pid (Product Id) can be checked with the `lsusb` command or `escpos.USB.findPrinter()` method.
npm package: @gauravcodes/is-validator
Description: A runtime validator for JavaScript
Author: Gaurav Thakur
Latest version: 1.1.1

# is-validator
A zero dependency, light weight runtime validator and a schema generator with the final schema as a JSON object which could be easily shared and stored

## Guide
### Generate a Schema

```javascript
const PersonSchema = {
    name: is.string({ minLength: 2, maxLength: 10 }),
    email: is.string({ isEmail: true, minLength: 5 }),
    age: is.number({ moreThan: 18 }),
};
```
This will return a JSON configuration of below shape
```JSON
{
    "name": {
        "type": "string",
        "rules": {
            "minLength": 2,
            "maxLength": 10
        }
    },
    "email": {
        "type": "string",
        "rules": {
            "isEmail": true,
            "minLength": 5
        }
    },
    "age": {
        "type": "number",
        "rules": {
            "moreThan": 18
        }
    }
}
```
Now, we can share this schema with backend (with the help of NPM module) or store it in a DB.
We can also infer the type from the schema with the help of exported type `InferType`
```typescript
type Person = InferType<typeof PersonSchema>;

const person: Person = {
    name: 'Gaurav Thakur',
    email: 'gthakur581@gmail.com',
    age: 21,
};
```
![Screenshot 2022-10-31 at 1 11 33 PM](https://user-images.githubusercontent.com/25100451/198956681-8ced79fc-e517-4ae9-b99b-f11d5e3d8be5.png)

We can also validate schema against the data in runtime
```typescript
import { is, validateSchema } from 'is-validator';
import type { InferType } from 'is-validator';

const PersonSchema = {
    name: is.string({ minLength: 2, maxLength: 10 }),
    email: is.string({ isEmail: true, minLength: 5 }),
    age: is.number({ moreThan: 18 }),
};

type Person = InferType<typeof PersonSchema>;

const person: Person = {
    name: 'A',
    email: 'gthakur581@gmail.com',
    age: 10,
};

const result = validateSchema(PersonSchema, person);
console.log(result);
```
output:

![image](https://user-images.githubusercontent.com/25100451/198957755-ff43533a-43b7-406b-afd5-6d23e86ff461.png)

Instead of silently returning the error, we could also throw an error by enabling `shouldThrowError` property
```TypeScript
const result = validateSchema(PersonSchema, person, { shouldThrowError: true });
```

### Inbuild Rules:
1. is.string()
    - minLength
    - maxLength
    - isEmail
    - isURL
    - regex
    - endsWith
    - startsWith

2. is.number()
    - isPositive
    - isNegative
    - lessThan
    - moreThan

3. is.boolean()
    - isTruly
    - isFalsy
    
### Todo
- [ ] Add support for more data type e.g. boolean, enums etc
- [ ] Add support for more rules
  - [ ] Add support for making properties optional
- [ ] Add support for initializing the schema object when received schema from another source
npm package: @gauravnumber/h.js
Description: Minimal hyperscript-style DOM helper
Author: Gaurav
Latest version: 1.0.3

# @gauravnumber/h.js


[![npm version](https://img.shields.io/npm/v/@gauravnumber/h.js)](https://www.npmjs.com/package/@gauravnumber/h.js)
[![license](https://img.shields.io/npm/l/@gauravnumber/h.js)](https://github.com/gauravnumber/h.js/blob/main/LICENSE)

A tiny, zero-dependency DOM helper that mimics JSX/hyperscript-style syntax using plain JavaScript. Great for building UI components without any frameworks.

## ✨ Features

- Lightweight and framework-free
- Works seamlessly with functions as components
- Supports event listeners, styles, and children

## 📦 Installation

```bash
npm install @gauravnumber/h.js
```

## 🚀 Usage

```js
import { h } from "@gauravnumber/h.js";

const Hello = ({ name }) => {
  return h("span", {}, `Hello, ${name}!`);
};

const App = () =>
  h(
    "div",
    {},
    h("h1", {}, "h.js"),
    h(Hello, { name: "Gaurav" }),
    h("p", {}, "Built from scratch using vanilla JS!")
  );

document.body.appendChild(App());
```

# Support my work
<img src="support.jpg" alt="support" width="310" height="366"/>
npm package: @gauravnumber/move
Description: mv replacement that renames the file if it already exists.
Author: Gaurav Singh
Latest version: 0.3.0

# move

![GitHub tag (latest SemVer)](https://img.shields.io/npm/v/%40gauravnumber%2Fmove)
[![Twitter Follow](https://img.shields.io/twitter/follow/gauravnumber)](https://x.com/gauravnumber)

A Node.js utility that enhances file and directory moving capabilities with smart conflict resolution. Unlike the standard `mv` command, `move` automatically handles naming conflicts by appending indices to filenames.

## Features

- 🚀 Zero dependencies
- 📦 Simple installation
- 🔄 Smart conflict resolution
- 📁 Supports both files and directories
- 🔢 Handles multiple sources
- ⚡ Fast and efficient

## Installation

```bash
npm install -g @gauravnumber/move
```

## Usage

```bash
# Basic usage
move <source_path> <destination_path>

# Move multiple files to a directory
move <file1> <file2> ... <directory>
```

## Examples

### 1. Moving a Single File

Initial structure:

```
.
├── 1.txt
├── 2.txt
├── 3.txt
├── 4.txt
├── 5.txt
└── 6.txt
```

Command:

```bash
move 1.txt 2.txt
```

Result:

```
.
├── 2_1.txt  # 1.txt was moved and renamed to avoid conflict
├── 2.txt
├── 3.txt
├── 4.txt
├── 5.txt
└── 6.txt
```

### 2. Moving Multiple Files

Command:

```bash
move 1.txt 2.txt 3.txt destination_folder/
```

### 3. Moving Directories

Command:

```bash
move source_directory/ destination_directory/
```

## Supported Operations

- `move filename1 filename2` - Move/rename a single file
- `move onefile twofile threefile andManyMoreFile directoryName` - Move multiple files to a directory
- `move directory1 directory2` - Move a directory to another directory

## How It Works

When a naming conflict occurs, `move` automatically:

1. Detects the existing file/directory
2. Appends an incremental index to the filename
3. Ensures no data is lost during the move operation

## License

MIT
npm package: @gauravsaini/ajv-napi-darwin-arm64
Description: High-performance JSON Schema validator using NAPI-RS and Rust
Author: gauravsaini
Latest version: 0.2.8

# `@gauravsaini/ajv-napi-darwin-arm64`

This is the **aarch64-apple-darwin** binary for `@gauravsaini/ajv-napi`
npm package: @gauravsaini/ajv-napi-darwin-x64
Description: High-performance JSON Schema validator using NAPI-RS and Rust
Author: gauravsaini
Latest version: 0.2.8

# `@gauravsaini/ajv-napi-darwin-x64`

This is the **x86_64-apple-darwin** binary for `@gauravsaini/ajv-napi`
npm package: @gauravsaini/ajv-napi-win32-arm64-msvc
Description: High-performance JSON Schema validator using NAPI-RS and Rust
Author: gauravsaini
Latest version: 0.2.8

# `@gauravsaini/ajv-napi-win32-arm64-msvc`

This is the **aarch64-pc-windows-msvc** binary for `@gauravsaini/ajv-napi`
npm package: @gauravsaini/ajv-napi-win32-x64-msvc
Description: High-performance JSON Schema validator using NAPI-RS and Rust
Author: gauravsaini
Latest version: 0.2.8

# `@gauravsaini/ajv-napi-win32-x64-msvc`

This is the **x86_64-pc-windows-msvc** binary for `@gauravsaini/ajv-napi`
npm package: @gauravumrani/nglogin
Description: Angular 2+ Simple and minimal login component ![N|Solid](http://i63.tinypic.com/rkxx7d.png) ## Installation
Latest version: 1.0.0

# ngLogin

Angular 2+ Simple and minimal login component
![N|Solid](http://i63.tinypic.com/rkxx7d.png)
## Installation

1. Install it from `npm`
`npm install ngLogin`

2. Include NgLoginModule into your application.
```
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';`
import { NgLoginModule } from './modules/login/login.module';
```
``` 
@NgModule({
  imports: [
    BrowserModule,
    NgLoginModule
  ],
  declarations: [ AppComponent ],
  exports: [ AppComponent ]
})
export class AppModule {}
```
## Example

`<app-login [ngLoginSettings]="settings" (ngLoginResponse)="checkOutput($event)"> </app-login>`

## Attributes
> Note:- These Attributes are compulsory, there is no default values

| Name | Type | 
| ------ | ------ |
| ngLoginSettings | Input |
| ngLoginResponse | Output |

#### ngLoginSettings

This contains an object and has follwing keys
```
settings={
    passwordOptions:{
      regex: /^\w{3,20}$/,
      errorMsg: "The password must be between 3 to 20 characters"
    },
    emailOptions: {
      regex: /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/,
      errorMsg: "Please Provide a valid email"
    },
    bgImage:""
  }
  ```
  and then pass this **settings** object to **ngLoginSettings** input
npm package: @gaurswap-dev-libs/sdk
Description: 🛠 An SDK for building applications on top of guarswap.
Latest version: 0.0.1

# gaurswap SDK

[![code style: prettier](https://img.shields.io/badge/code_style-prettier-ff69b4.svg?style=flat-square)](https://github.com/prettier/prettier)
[![Actions Status](https://github.com/pancakeswap/pancakeswap-sdk/workflows/CI/badge.svg)](https://github.com/pancakeswap/pancakeswap-sdk)
[![npm version](https://img.shields.io/npm/v/@pancakeswap-lib/sdk/latest.svg)](https://www.npmjs.com/package/@pancakeswap-lib/sdk/v/latest)

## Running tests

To run the tests, follow these steps. You must have at least node v10 and [yarn](https://yarnpkg.com/) installed.

First clone the repository:

```sh

```

Move into the pancakeswap-sdk working directory

```sh

```

Install dependencies

```sh
yarn install
```

Run tests

```sh
yarn test
```

You should see output like the following:

```sh
yarn run v1.22.4
$ tsdx test
 PASS  test/constants.test.ts
 PASS  test/pair.test.ts
 PASS  test/fraction.test.ts
 PASS  test/miscellaneous.test.ts
 PASS  test/entities.test.ts
 PASS  test/trade.test.ts

Test Suites: 1 skipped, 6 passed, 6 of 7 total
Tests:       3 skipped, 82 passed, 85 total
Snapshots:   0 total
Time:        5.091s
Ran all test suites.
✨  Done in 6.61s.
```
npm package: @gauseen/keyboard-for-vue
Description: virtual keyboard for vue
Author: gauseen
Latest version: 0.3.0

## virtual keyboard for vue

### 预览
[Demo Live](https://gauseen.github.io/keyboard-for-vue/#/)

### 特性
- 轻量、无其他依赖
- 支持电脑原生键盘和 `virtual keyboard` 同时使用
- 自定义布局、样式

### 使用
```sh
# 安装
yarn add @gauseen/keyboard-for-vue
# OR
npm i -S @gauseen/keyboard-for-vue
```

#### ESM 引入
```js
// main.js
import Vue from 'vue'
import KeyboardForVue from '@gauseen/keyboard-for-vue'

Vue.use(KeyboardForVue)
```

#### 浏览器脚本引入
```html
<link rel="stylesheet" href="https://unpkg.com/@gauseen/keyboard-for-vue/dist/keyboardForVue.css">

<script src="https://unpkg.com/@gauseen/keyboard-for-vue"></script>
```

#### Demo
```html
<template>
  <div class="demo">
    <form>
      <fieldset>
        <legend>keyboard for vue:</legend>
        Name: <input v-model="name" @focus="onFocus" autofocus type="text">
        <p>{{name}}</p>

        Email: <input v-model="email" @focus="onFocus" type="text"><br>
        <p>{{email}}</p>

        Money: <input v-model="money" @focus="onFocus" type="text"><br>
        <p>{{money}}</p>

        <div>
          Switch style:
          <input type="radio" id="normal" value="normal" v-model="keyboardStyle">
          <label for="normal">normal</label>
          <input type="radio" id="number" value="number" v-model="keyboardStyle">
          <label for="number">number</label> &nbsp;
          <button @click.prevent="handleClear"> Clear </button>
        </div>
      </fieldset>
    </form>
    <keyboard-for-vue
      :input="input"
      :is-show.sync="isShow"
      :keyboard-style="keyboardStyle"
      @on-close="handleClosed"
    >
    </keyboard-for-vue>
  </div>
</template>
```
```html
<script>
export default {
  name: 'Demo',
  data () {
    return {
      keyboardStyle: 'normal',
      isShow: false,
      input: null,
      name: 'gauseen',
      email: '',
      money: ''
    }
  },
  methods: {
    onFocus (e) {
      this.input = e.target
      this.isShow = true
    },
    handleClear (e) {
      this.name = ''
      this.email = ''
      this.money = ''
      this.isShow = false
    },
    handleClosed (value) {
      window.alert(value)
    }
  }
}
</script>
```


### 属性
| 属性 | 类型 | 说明 | 默认参数 | 可选值 | 必填？ |
|-------|-------|---------|-------|-------|-------|
| `input` | `HTMLInputElement` | 键盘将要输入的 `input DOM` 对象 | - | `input DOM` | 否 |
| `is-show.sync` | `Boolean` | 虚拟键盘是否显示 | `false` | `true、false` | 否 |
| `keyboard-style` | `String` | 虚拟键盘是否显示 | `normal` | `normal、number` | 否 |
| `font-color` | `String` | 键盘字体颜色 | `#fff` | - | 否 |
| `line-style-height` | `String` | 每个键的高度 | `60px` | - | 否 |
| `key-style-bg-color` | `String` | 每个键背景色 | `#5b6878` | - | 否 |

### 方法
| 方法 | 说明 | 回调参数 |
|-------|-------|---------|
| `on-close` | 键盘消失时回调 | `function(inputValue)` |
npm package: @gauseen/tools
Description: js 常用方法工具库
Author: gauseen
Latest version: 0.0.5

### js 常用工具方法

[![Build Status](https://travis-ci.org/gauseen/tools.svg?branch=prod)](https://travis-ci.org/gauseen/tools)

### 安装
```sh
yarn add @gauseen/tools
```

### 使用
```js
import { typer } from '@gauseen/tools'

typer(66)  // number
```

### 脚本引入
```js
<script src="https://unpkg.com/@gauseen/tools"></script>

<script>
  window.tools.typer(66)  // number
</script>
```

| 方法名 | 调用 | 参数类型 | 默认参数 | 说明 |
|-------|-------|---------|-------|-------|
| `typer` | `typer(value)` | `any` | - | 获取数据具体类型 |
| `isEmpty` | `isEmpty(value)` | `any` | - | 判断所有数据类型是否为空 |
| `forbidBodyScroll` | `forbidBodyScroll().actionForbid(isShowMask)` | `Boolean` | - | 禁止body滚动，解决弹出蒙层滑动穿透问题 |
| `setTitle` | `setTitle(title)` | `String` | - | 设置页面 title，单页面应用，兼容 title 问题 |
| `parseUrl` | ` parseUrl (url)` | `String or null` | `current url` | 解析链接中的数据 `http://example/api?name=hello&msg=world => { name: 'hello', msg: 'world' }` |
| `obj2Params` | ` obj2Params (obj)` | `Object or null` | - | 对象转 form 数据 `{ name: 'hello', msg: 'world' } => name=hello&msg=world` |
| `regTips` | ` regTips.verify('mobile', '17688888888')` | `type, value` | - | 正则判断 |
| `getVariableByDomain` | ` getVariableByDomain(options)` | `Object` | - | 根据不同域名，获取不同变量 |
| `Timejs` | ` Timejs(date).format()` | - | `new Date()&YYYY-MM-DD HH:mm:ss` | 日期格式化 |
| `throttle` | ` let fnThro = throttle(fun, delay)` | - | - | 节流函数(初始执行一次，一定时间内必定执行一次) |
| `debounce` | ` let fnDebo = debounce(fun, delay)` | - | - | 防抖函数(一定时间内不再次调用，执行一次) |
| `threshold` | ` let fnThre = threshold(fun, delay)` | - | - | 禁止频繁操作函数(第一次立即执行，delay 毫秒之后执行一次) |
| `mergerOfSimilarItems` | ` mergerOfSimilarItems (arr, standardProps, mergeProps)` | - | - | 合并同类项 |