open-index/open-npm huggingface dataset:
npm package: @jakesee/react-dockpanel
Description: ## Introduction React panels that can split screen and stack forms.
Author: Jake See
Latest version: 0.4.0

# React DockPanel

## Introduction
React panels that can split screen and stack forms.

## Install
`npm i @jakesee/react-dockpanel`

## Usage

```
// Basic test to render the dock manager without any content
import { DockManager, useDockManager } from '@jakesee/react-dockpanel';

const App = () > {
  const manager = useDockManager();

  return (
    <DockManager manager={manager} onRenderForm{() => {} />
  )
}
```
npm package: @jakesidsmith/jest-matcher-react-shallow-snapshot
Description: A jest matcher for shallow rendered React component snapshots
Author: Jake 'Sid' Smith
Latest version: 1.0.0

# jest-matcher-react-shallow-snapshot

**A jest matcher for shallow rendered React component snapshots**

[![CircleCI](https://circleci.com/gh/JakeSidSmith/jest-matcher-react-shallow-snapshot.svg?style=svg)](https://circleci.com/gh/JakeSidSmith/jest-matcher-react-shallow-snapshot)

## About

This is a jest matcher that allows you to easily create shallow snapshots of React components will full support for:

* React.memo
* React.forwardRef
* React.Fragment
* React.createContext (Provider and Consumer)
* ReactDOM.createPortal
* Functional components
* Component classes

The output of this matcher is far more informative than other existing solutions, providing context of memo wrapped components, fragments, etc, and does not require importing a renderer for each of your test files.

This relies on [react-shallow-renderer](https://www.npmjs.com/package/@jakesidsmith/react-shallow-renderer) under the hood, which you could use without the jest matcher if you prefer / are using another test suite.

Check out the [react-shallow-renderer](https://www.npmjs.com/package/@jakesidsmith/react-shallow-renderer) readme for some examples of the snapshot output.

## Example

```jsx
expect(<MyComponent />).toMatchReactShallowSnapshot();
```

## Install

```shell
npm i @jakesidsmith/jest-matcher-react-shallow-snapshot -S
```

## Configuration

### Jest config

This library requires you to define a `setupFilesAfterEnv` entry in your jest config (or `setupTestFrameworkScriptFile` for older versions of jest).

This should point to a file which will be used to initialize custom matchers:

```js
module.exports = {
  setupFilesAfterEnv: [
    '<rootDir>/path/to/custom-matchers.js'
  ]
};
```

If you don't already have a such a file you should create one, and then simply import this library in that file:

```js
import '@jakesidsmith/jest-matcher-react-shallow-snapshot';
```

If you are using TypeScript, importing this file from your setup file should apply the types needed to call `.toMatchReactShallowSnapshot`. If it doesn't, then make sure that the setup file is included in your tsconfig.

## Usage

Now you can simply render a react component and expect it to match your shallow snapshot:

```jsx
expect(<MyComponent />).toMatchReactShallowSnapshot();
```
npm package: @jakesidsmith/react-div
Description: Divs! Divs everywhere!
Author: Jake 'Sid' Smith
Latest version: 1.0.1

# @jakesidsmith/react-div

**Divs! Divs everywhere!**

## About

Are you sick of all that semantic markup you're generating helping search engines, accessibility tools, and your users from being able to understand and navigate your apps? This might be the solution for you!

Simply import `@jakesidsmith/react-div` in your index file and all of your markup will be converted to divs! Divs everywhere! What more could you want?!

No more need to go to the effort of writing every single element in your app as a `div` (like I know you love to do). Now you can happily write semantic markup with the knowledge that react-div will make sure that it has absolutely no use!

The whole lib is less than 1KB uncompressed! And you know what's even better? It's written in TypeScript, so you know it's type safe. 😎

## Installation

With NPM:

```shell
npm i @jakesidsmith/react-div --save-production
```

With yarn:

```shell
yarn add @jakesidsmith/react-div
```

## Usage

Simply import this library at the top of your index file and you're good to go!

```tsx
import '@jakesidsmith/react-div';
import React from 'react';
import ReactDOM from 'react-dom';

const App = () => (
  <main>
    <h1>Wow, look at this</h1>
    <p>
      None of these tags have <strong>any</strong> meaning any more!
    </p>
    <p>Open up the inspector and take a peek.</p>
  </main>
);

ReactDOM.render(<App />, document.getElementById('app'));
```

## Future features

- Parse divs with regexes
- Use divs to send email
- Store divs on the blockchain
npm package: @jakesidsmith/redux-create-reducer
Description: A utility to create redux reducers from a set of handlers
Author: Jake 'Sid' Smith
Latest version: 1.0.2

# redux-create-reducer

**A utility to create redux reducers from a set of handlers**

[![CircleCI](https://circleci.com/gh/JakeSidSmith/redux-create-reducer.svg?style=svg)](https://circleci.com/gh/JakeSidSmith/redux-create-reducer)

## About

This utility removes the need for switch statements (which can easily result in errors), and instead allows you to create a redux reducer from a set of handler functions - no more need to handle a default case, no more boilerplate.

This library is written in TypeScript and due to how the handlers are typed, allows you to limit which actions they handle, and also define different action types for different handlers without casting their types.

## Install

```shell
npm i @jakesidsmith/redux-create-reducer -S
```

## Usage

```js
import { createReducer } from '@jakesidsmith/redux-create-reducer';
import { ADD, SUBTRACT, RESET } from './action-types';

export const count = createReducer(
  {
    [ADD]: (state, action) => state + action.payload,
    [SUBTRACT]: (state, action) => state - action.payload,
    [RESET]: () => 0,
  },
  0 // Initial state (required)
);
```

## TypeScript

You can supply a generic type for the reducer state, and the actions it should handle:

```ts
interface NumberAction {
  type: string;
  payload: number;
}

export const count = createReducer<number, NumberAction>(
  // ...
);
```

You can use the action generic parameter to narrow the available handlers by setting specific `type` keys:

```ts
interface NumberAction {
  type: 'ADD' | 'SUBTRACT' | 'RESET';
  payload: number;
}

export const count = createReducer<number, NumberAction>(
  {
    // ...
    // The next line will have a type error because MULTIPLY was not defined in our type interface
    [MULTIPLY]: (state, action) => state * action.payload,
  },
  // ...
);
```
npm package: @jakesidsmith/tis
Description: Type safe variable checks
Author: Jake 'Sid' Smith
Latest version: 1.0.0

# 'tis

**Type safe variable checks**

## Install

```shell
npm i @jakesidsmith/tis -P
```

`-P` is shorthand for `--save-production` and will add this to your package `dependencies`.

Use `-D` (shorthand for `--save-dev`) if you are only using this for testing.

## Available utilities

- `isNumber`: Returns true when the input is a number
- `isString`: Returns true when the input is a string
- `isBoolean`: Returns true when the input is a boolean
- `isUndefined`: Returns true when the input is undefined
- `isDefined`: Returns true when the input is not undefined
- `isNull`: Returns true when the input is null
- `isNullish`: Returns true when the input is null or undefined
- `isArray`: Returns true when the input is an array
- `isObject`: Returns true when the input is an object (includes arrays, excludes null)
- `isFunction`: Returns true when the input is a function or class constructor

## Example usage

```ts
import { isObject, isArray, isString } from '@jakesidsmith/tis';

const example = (
  input: string | number | readonly string[] | Record<string, string>
) => {
  if (isObject(input)) {
    if (isArray(input)) {
      // Guaranteed to be a readonly string[]
    } else {
      // Guaranteed to be a Record<string, string>
    }
  } else if (isString(input)) {
    // Guaranteed to be a string
  } else {
    // Guaranteed to be a number
  }
};
```
npm package: @jakestrang1/js-tools
Description: Miscellaneous JavaScript utilities
Author: Jake Strang
Latest version: 0.0.3

# js-tools
Javascript utility functions

As long as version is `<1.0.0`, assume any version change may be breaking.

## Install

`npm install @jakestrang1/js-tools`

## Examples

```js
import jsTools from '@jakestrang1/js-tools'

const yyyymmdd = jsTools.formatTime(new Date(), "yyyy-mm-dd") // e.g. "2025-01-01"
```
npm package: @jakestrang1/react-tools
Description: Miscellaneous React utilities
Author: Jake Strang
Latest version: 0.0.1

# react-tools
React utility functions

As long as version is `<1.0.0`, assume any version change may be breaking.

## Install

`npm install @jakestrang1/react-tools`

## Examples

```js
import reactTools from '@jakestrang1/react-tools'

// ...inside your component:
useInterval(() => console.log("we're logging every 5 seconds!"), 5 * 1000)
```
npm package: @jaketb/node-fred
Description: Another nodejs wrapper for the st louis fed
Author: pastorsj
Latest version: 2.1.6


# node-fred &middot; 
[![build status](https://travis-ci.org/pastorsj/node-fred.svg?branch=master)](https://travis-ci.org/pastorsj/node-fred) [![npm version](https://img.shields.io/npm/v/node-fred.svg?style=flat)](https://www.npmjs.com/package/node-fred) [![Coverage Status](https://coveralls.io/repos/github/pastorsj/node-fred/badge.svg?branch=master)](https://coveralls.io/github/pastorsj/node-fred?branch=master) [![Greenkeeper badge](https://badges.greenkeeper.io/pastorsj/node-fred.svg)](https://greenkeeper.io/)

A Fred2 API wrapper

# The Fred API
[Official Documentation](https://research.stlouisfed.org/docs/api/fred/)

[Wrapper Documentation](https://pastorsj.github.io/node-fred-api/)

# Installation Instructions
```
npm install node-fred --save
```

# Example
## Using Promises
``` javascript
import Fred from 'node-fred'

const fred = new Fred(API_KEY);

function getCategory(categoryID) {
  fred.categories.getCategory(125)
    .then((res) => {
      console.log('Category', res);
    })
    .catch((err) => {
      console.error('Error', err);
    });
}
getCategory(125);
```
## Using async/await
``` javascript
import Fred from 'node-fred'

const fred = new Fred(API_KEY);

async function getCategory(categoryID) {
  try {
    const category = await fred.categories.getCategory(categoryID);
    console.log('Category', res);
  } catch (err) {
    console.error('Error', err);
  }
}
getCategory(125);
```
npm package: @jaketb/react-stockcharts
Description: Highly customizable stock charts with ReactJS and d3
Author: Ragu Ramaswamy
Latest version: 0.7.11

## React Stockcharts

[![Join the chat at https://gitter.im/rrag/react-stockcharts](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/rrag/react-stockcharts?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
[![npm version](https://badge.fury.io/js/react-stockcharts.svg)](https://badge.fury.io/js/react-stockcharts)


Create highly customizable stock charts

Built with [React JS](http://facebook.github.io/react/) and [d3](http://d3js.org/)

If you like this project checkout <a href="https://gocharting.com" target="_blank">gocharting.com</a>
 - integrates multiple charttypes
 - over 60 technical indicators and overlays
 - drawing objects

Multiple [quick start examples](https://github.com/rrag/react-stockcharts-examples2)

- svg and canvas for improved performance. 
- pan and zoom, on touch devices too

#### Chart types

- Scatter
- Area
- Line
- Candlestick
- OHLC
- HeikenAshi
- Renko
- Kagi
- Point & Figure

#### Indicators

- EMA, SMA, WMA, TMA
- Bollinger band
- SAR
- MACD
- RSI
- ATR
- Stochastic (fast, slow, full)
- ForceIndex
- ElderRay
- Elder Impulse

(more to come), 

and it is simple to create your own indicator too

#### Interactive Indicators

- Trendline
- Fibonacci Retracements
- Gann Fan
- Channel
- Linear regression channel

---

### Installation
```sh
npm install  --save react-stockcharts
```

### Documentation

[Documentation](http://rrag.github.io/react-stockcharts)

[Ready to use Examples](https://github.com/rrag/react-stockcharts-examples2)

### Contributing

Refer to [CONTRIBUTING.md](./CONTRIBUTING.md)

### Stability

This is alpha state software, the api will change with each minor version.

### Roadmap

[Roadmap](./docs/md/COMING-SOON.md)

### LICENSE

[MIT](./LICENSE)
npm package: @jaketracey/storybook-addon-docs-stencil
Description: Converts stencil.js JsonDoc to storybook ArgTypes
Author: Jake Tracey
Latest version: 4.0.0

# storybook-addon-docs-stencil

Converts stencil.js doc json derived from stencils output target
[`docs-json`](https://stenciljs.com/docs/docs-json) to storybook
[`ArgTypes`](https://storybook.js.org/docs/react/api/argtypes).

With this addon activated
- Storybook will render basic controls for properties [Controls](https://storybook.js.org/docs/react/essentials/controls).
- Storybook will auto generate documentation for Props, Events, Methods, Slots, Shadow Parts and Custom Properties.
- Storybook doc page will contain stencils component documentation (readme.md or inline)   

## Installation

```
npm i -D @pxtrn/storybook-addon-docs-stencil
```

## Usage

### Configure stencil to generate docs-json at build time.

```
// stencil.config.ts

import { Config } from '@stencil/core';

export const config: Config = {
  outputTargets: [
    {
      type: 'docs-json',
      file: 'path/to/docs.json'
    }
  ]
};
```

### Configure Storybook

```
//.storybook/main.js

module.exports = {
  addons: [
    '@storybook/addon-essentials',
    '@pxtrn/storybook-addon-docs-stencil'
  ]
}
```

```
//.storybook/preview.js

import { setStencilDocJson } from '@pxtrn/storybook-addon-docs-stencil';
import docJson from 'path/to/docs.json';
if(docJson) setStencilDocJson(docJson);

export const parameters = {
  controls: { hideNoControlsWarning: true }
}
```

### Component documentation

#### readme.md

If not already created by stencil create `src/components/my-component/readme.md`
If the line `<!-- Auto Generated Below -->` is not present, stencil will ignore this file.

```
Everything above this line will be included in storybook

<!-- Auto Generated Below -->
```

#### inline documentation

```
// src/components/my-component/my-component.tsx`

/**
 * Everything written here will be included, if readme.md is not present.
 */
@Component({
  tag: 'my-component',
  styleUrl: 'my-component.css',
  shadow: true,
})
```

#### Troubleshooting

##### When using @storybook/web-components

`@storybook/web-components` overrides the preset configuration of this module.
You can fix this with this preview config.

```
//.storybook/preview.js

import { extractArgTypes, extractComponentDescription, setStencilDocJson } from '@pxtrn/storybook-addon-docs-stencil';

export const parameters = {
  ...
  docs: {
    extractArgTypes,
    extractComponentDescription,
  },
};
```

##### Hint your component in your stories
```
// your-story.ts

export default {
  title: 'My Component',
  component: 'my-component',
};
```
npm package: @jakewhelan/babel-plugin-transform-constructor-self-assign
Description: Babel plugin to automagically assign ES2015 class constructor arguments to this, as seen in Typescript
Author: Jake Whelan
Latest version: 0.2.0

# @jakewhelan/babel-plugin-transform-constructor-self-assign

Babel plugin to automagically assign ES2015 class constructor arguments to `this`, as seen in Typescript

## Usage

```
$ npm i -D @jakewhelan/babel-plugin-transform-constructor-self-assign
```
```js
// babelrc.js
module.exports = {
  plugins: [
    require('@jakewhelan/babel-plugin-transform-constructor-self-assign')
  ]
}
```

## Example

Before:
```js
class Sample {
  constructor(a, $scope, bigLongName, SomeOtherWIerDCrAp) {
  }
}
```

After:
```js
class Sample {
  constructor(a, $scope, bigLongName, SomeOtherWIerDCrAp) {
    this.a = a;
    this.$scope = $scope;
    this.bigLongName = bigLongName;
    this.SomeOtherWIerDCrAp = SomeOtherWIerDCrAp;
  }
}
```
npm package: @jakezegil/smart-app-banner
Description: Smart banner for Android or iOS
Author: Jake Zegil
Latest version: 1.0.2

Smart App Banner
================

Lightweight smart app banner with no jQuery (or any other framework) requirement.

Based on 'jQuery Smart Banner' by Arnold Daniels <arnold@jasny.net> https://github.com/jasny/jquery.smartbanner

## Difference

* Standalone (no frameworks required)
* Different icons/price for iOS and Android
* Available as npm-module

## Installation

`$ npm install --save smart-app-banner`


## Usage

```html
<html>
  <head>
    <title>MyPage</title>

    <meta name="apple-itunes-app" content="app-id=502838820">
    <meta name="google-play-app" content="app-id=ru.hh.android">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <link rel="stylesheet" href="node_modules/smart-app-banner/dist/smart-app-banner.css" type="text/css" media="screen">
    <link rel="apple-touch-icon" href="apple-touch-icon.png">
    <link rel="android-touch-icon" href="android-icon.png" />
  </head>
  <body>
    ...
    <script src="node_modules/smart-app-banner/dist/smart-app-banner.js"></script>
    <script type="text/javascript">
      new SmartBanner({
          daysHidden: 15,   // days to hide banner after close button is clicked (defaults to 15)
          daysReminder: 90, // days to hide banner after "VIEW" button is clicked (defaults to 90)
          appStoreLanguage: 'us', // language code for the App Store (defaults to user's browser language)
          title: 'MyPage',
          author: 'MyCompany LLC',
          button: 'VIEW',
          store: {
              ios: 'On the App Store',
              android: 'In Google Play',
              windows: 'In Windows store'
          },
          price: {
              ios: 'FREE',
              android: 'FREE',
              windows: 'FREE'
          }
          // , theme: '' // put platform type ('ios', 'android', etc.) here to force single theme on all device
          // , icon: '' // full path to icon image if not using website icon image
          // , force: 'ios' // Uncomment for platform emulation
      });
    </script>
  </body>
</html>
```

## Development

The following commands are available for compiling the project:

| Command | Result |
| ------- | ------ |
| `npm install` | Installs the required dependencies |
| `npm run build` | Builds the application JavaScript. |

## See also

* [smartappbanner.js](https://github.com/ain/smartbanner.js) an alternative smart app banner.
npm package: @jakezneal/hola
Description: Hola is a front-end CLI tool for bootstrapping and scaffolding front-end components, stories, and tests. It aims to reduce repetitiveness, and improve consistency.
Latest version: 1.9.2

# 👋 Hola

Hola is a front-end CLI tool for bootstrapping and scaffolding front-end components, stories, and tests. It aims to reduce repetitiveness, and improve consistency.

## Installation

```bash
pnpm add --save-dev @jakezneal/hola
```

Or without installation

```bash
pnpm dlx @jakezneal/hola
```

## Commands

```txt
> jiti ./src/index.ts "--help"

👋 Hola (@jakezneal/hola v1.4.0)

USAGE @jakezneal/hola init|make:component|config

COMMANDS

            init    Initialise a new Hola config in the current directory
  make:component    Generate a component from boilerplate                
          config    Output the current Hola config                       

Use @jakezneal/hola <command> --help for more information about a command.
```
npm package: @jakguru/amqplib-oop-ratelimiter
Description: A rate-limited queue processor for ampqlib
Author: Jak Guru
Latest version: 1.0.14

# amqplib-oop-ratelimiter

Love RabbitMQ but want to be able to have more control over how quickly you consume messages? Then this library is the answer you've been waiting for! A simple, easy to use (and even easy to instrument) client for connecting to RabbitMQ (or really anything that uses amqplib under the hood) and processing messages as quickly (or as slowly) as you allow it to.

This library provides a robust and flexible solution for managing message consumption rate, allowing you to optimize your application's performance and resource usage. It offers a fine-grained control over the rate at which messages are consumed, making it an ideal choice for applications that need to handle high volumes of messages without overwhelming their processing capabilities.

Whether you're dealing with a high-traffic e-commerce platform, a real-time analytics system, or a complex microservices architecture, this library gives you the power to manage your message queues effectively. It's designed to work seamlessly with RabbitMQ and any other systems that use amqplib, providing a consistent and intuitive API that developers will find easy to use.

Moreover, this library is designed with instrumentation in mind, making it easy to integrate with monitoring and observability tools. This means you can keep a close eye on your message queues, spotting potential issues before they become problems and making informed decisions about scaling and resource allocation.

In short, if you're looking for a way to consume RabbitMQ messages at your own pace, this library provides the tools and flexibility you need. Give it a try and take control of your message consumption today!

![Doc Coverage Badge](./coverage.svg)

## Installation

```bash
npm install @jakguru/amqplib-oop-ratelimiter
```

or

```bash
yarn add @jakguru/amqplib-oop-ratelimiter
```

## Usage

### Import / Require the library

```typescript
import { RateLimitedQueueClient } from '@jakguru/amqplib-oop-ratelimiter'
```

or

```typescript
import RateLimitedQueueClient from '@jakguru/amqplib-oop-ratelimiter'
```

or

```javascript
const { RateLimitedQueueClient } = require('@jakguru/amqplib-oop-ratelimiter')
```

### Create a new instance of the client

```typescript
type MyItemType = {
  id: string
  name: string
}

const client = new RateLimitedQueueClient<MyItemType>(
  'my-queue',
  {
    connection: {}, // amqplib connection options
    queue: {
      durable: true,
    },
  },
  async (item: MyItemType) => {
    // do something with the item
  },
  {
    interval: 1000, // ms
    perInterval: 10,
  }
)
```

### Enqueue Items

```typescript
const item: MyItemType = {
  id: '123',
  name: 'My Item',
}
client.enqueue(item)
```
npm package: @jakguru/bucketqueue
Description: A simple in-memory queue that batches items together and releases them periodically. Useful for enforcing rate limits with APIs.
Author: Jak Guru
Latest version: 1.0.1

# BucketQueue
A simple queue that batches items together and releases them periodically. Useful for processing large sets of data in batches.

## Installation
To install the library using npm, run:

```bash
npm install @jakguru/bucketqueue
```

## Usage
The library can be used with both TypeScript and CommonJS. Here are some examples of how to use it:

### Typescript
```typescript
import BucketQueue from '@jakguru/bucketqueue';

const queue = new BucketQueue<string>({
  interval: 1000,
  maxBatch: 100,
  minBatch: 10,
  onSpill: (items) => {
    console.log(`Spilled ${items.length} items`);
  },
});

queue.push('item 1');
queue.push('item 2');
queue.push('item 3');
```

### Javascript
```javascript
const BucketQueue = require('@jakguru/bucketqueue').default;

const queue = new BucketQueue({
  interval: 1000,
  maxBatch: 100,
  minBatch: 10,
  onSpill: (items) => {
    console.log(`Spilled ${items.length} items`);
  },
});

queue.push('item 1');
queue.push('item 2');
queue.push('item 3');
```

## API

For full API documentation, see [TypeDoc Documentation](https://jakguru.github.io/BucketQueue/)

The following properties, methods and events are available:

### `options: BucketQueueOptions`
Returns the options object used to create the queue.

### `pressure: number`
Returns the number of items in the queue.

### `push(...items: T[])`
Adds one or more items to the queue.

### `add(...items: T[])`
Alias for `push`.

### `enqueue(...items: T[])`
Alias for `push`.

### `start(): void`
Starts the queue.

### `stop(): void`
Stops the queue.

### `pause(): void`
Pauses the queue.

### `resume(): void`
Resumes the queue.

### `remove(item: T): void`
Removes an item from the queue.

### `dequeue(item: T): void`
Alias for `remove`.

### `on(event: string, listener: Function): void`
Adds a listener to an event. The following events are available:

* `tick`
* `spill`
* `spilled`
* `drain`
* `finish`
* `error`
* `pipe`
* `unpipe`
* `corked`
* `uncorked`

## Contributing
If you would like to contribute to this project, feel free to open a pull request or an issue on the GitHub repository. All contributions are welcome!
npm package: @jakguru/phone-object
Description: An immutable data structure representing a specific phone number and accompanying methods. It contains class and instance methods of creating, parsing, validating, and formatting phone numbers. Based on google-libphonenumber, which is in turn based on Goo
Author: Jak Guru
Latest version: 1.0.0

# Phone Object

Phone Object is a comprehensive, immutable object representation of a phone number, complete with an array of properties detailing different aspects of the said phone number.

Inspired by Google's libphonenumber, our library extends its capabilities by parsing phone numbers from a diverse range of formats. This library is capable of validating phone numbers per country, identifying the type of line a phone number belongs to (like mobile, landline, etc.), and suggesting potential timezones associated with the phone number.

This project is perfect for anyone who needs robust and efficient phone number parsing and handling in their applications. Whether you're validating user-input phone numbers, normalizing phone numbers into a standard format, or simply analyzing phone number data, the Phone Object Library has got you covered.

![Doc Coverage Badge](./coverage.svg)

## Installation

```bash
npm install @jakguru/phone-object
```

or

```bash
yarn add @jakguru/phone-object
```

## Usage

### Import / Require the library

```typescript
import { Phone } from '@jakguru/phone-object'
```

or

```typescript
import Phone from '@jakguru/phone-object'
```

or

```javascript
const { Phone } = require('@jakguru/phone-object')
```

### Create a new Phone Object

```typescript
const phone = new Phone('202-456-141', 'US')
const phone = new Phone('202-456-1414', 'US')
const phone = new Phone('(202) 456-1414', 'US')
const phone = new Phone('+1 (202) 456-1414', 'US')
const phone = new Phone('202.456.1414', 'US')
const phone = new Phone('202/4561414', 'US')
const phone = new Phone('1 202 456 1414', 'US')
const phone = new Phone('+12024561414', 'US')
const phone = new Phone('1 202-456-1414' 'US')
```

### Get the phone number in different formats

```typescript
phone.raw // 2024561414
phone.national // (202) 456-1414
phone.international // +1 202-456-1414
phone.e164 // +12024561414
```

### Get the country code

```typescript
phone.country // US
```

### Get a timezone suggestion

```typescript
phone.timezone // America/New_York
```

### Get the type of line

```typescript
phone.valid // true
phone.type // FIXED_LINE_OR_MOBILE
phone.mobile // true
```

### Serialize for storage

```typescript
phone.serialize() // <base64 encoded string>
```

### Deserialize from storage

```typescript
const phone = Phone.deserialize(<base64 encoded string>)
```
npm package: @jakguru/vueprint
Description: A BluePrint for Vue 3 Projects providing much of the desired functionality in a consistent and easily configurable manner
Author: Jak Guru
Latest version: 1.6.5

# Vueprint

A BluePrint for Vue 3 Projects providing much of the desired functionality in a consistent and easily configurable manner

For more information, please see the [VuePrint Documentation](https://jakguru.github.io/vueprint/)