open-index/open-npm huggingface dataset:
npm package: @jojoxd/activeuser-mqtt
Description: Add a binary_switch to your Home Assistant to see if you're using your linux computer
Author: Joey Vos
Latest version: 1.0.3

# @jojoxd/activeuser-mqtt

Add a binary_switch to your home assistant to see if you're using your linux computer!

## How to use?

```bash
docker run --device=/dev/input/mice:/dev/input/mice:r docker.jojoxd.nl:5005/jojoxd-npm/activeuser-mqtt:latest
# OR
sudo npm run @jojoxd/activeuser-mqtt
```

> Note: When running bare-metal, you WILL need to run this with root permissions, 
> as we're opening an input device to poll.

See `example.env` for how to configure your environment.  
You can use a `.env` file or push those variables directly into your environment
npm package: @jojoxd/barrels
Description: Generate barrels
Author: Joey Vos
Latest version: 0.0.1-alpha.0

# @jojoxd/barrels

Create barrels, using cli, or programmatically.

```shell
yarn install -D @jojoxd/barrels
```

## Usage

```shell
barrels -c barrels.json
# OR
barrels TODO: Add Options here
```

### Programmatic

```typescript
import { Barrels } from "@jojoxd/barrels";

const barrels = new Barrels();

await barrels.generate({
    ...options,
});
```

## Configuration

config file, or CLI options
npm package: @jojoxd/barrels-nx
Description: Barrels NX Plugin
Author: Joey Vos
Latest version: 0.0.1-alpha.0

# @jojoxd/barrels-nx

Run [@jojoxd/barrels](https://npmjs.com/package/@jojoxd/barrels) using NX.

```shell
yarn install -D @jojoxd/barrels @jojoxd/barrels-nx
```

## Generators

### @jojoxd/barrels:configuration

Configure @jojoxd/barrels for a project, including barrels target

```shell
nx generate @jojoxd/barrels:configuration <project>
```

Or use it in your own generator:

```typescript
// generator.ts
import { configurationGenerator, ConfigurationGeneratorSchema } from "@jojoxd/barrels-nx";
import { Schema } from "./schema";

export default async function(tree: Tree, schema: Schema & ConfigurationGeneratorSchema): Promise<void>
{
    await configurationGenerator(tree, schema);
}
```

## Executors

### @jojoxd/barrels:generate

Execute barrels

```json
{
  "targets": {
    "barrels": {
      "executor": "@jojoxd/barrels:generate",
      
      "options": {
        "TODO": "Options reference"
      }
    }
  }
}
```
npm package: @jojoxd/batch
Description: Generic Async Batch Executor
Author: Joey Vos
Latest version: 1.2.0

# batch

[![pipeline status](https://gitlab.jojoxd.nl/jojoxd-npm/batch/badges/master/pipeline.svg)](https://gitlab.jojoxd.nl/jojoxd-npm/batch/-/commits/master)
[![coverage report](https://gitlab.jojoxd.nl/jojoxd-npm/batch/badges/master/coverage.svg)](https://gitlab.jojoxd.nl/jojoxd-npm/batch/-/commits/master)
[![Latest Release](https://gitlab.jojoxd.nl/jojoxd-npm/batch/-/badges/release.svg)](https://gitlab.jojoxd.nl/jojoxd-npm/batch/-/releases)

Asynchronous Batch Executor.

accumulates multiple promises, executes once (or multiple times), resolves all promises.

## Example

```js
import { BatchQueue } from "@jojoxd/batch";

// Manipulates data
// Could e.g. be a large sql query, or an API request
async function executor(items)
{
    return items.map((item) => {
        return { item, value: item ** 2 };
    });
}

// Find Item from input
async function find(input, data)
{
    const obj = data.find((data) => data.item === input);

    return obj ? obj.value : undefined;
}

const queue = new BatchQueue({
    delay: 200,       // Delay in ms
    maxBatchSize: 50, // Maximum Batch Size

    executor,
    find,
});

// From multiple places in your code:
// Can for example be a HTTP route that gets hit often
queue.push(1) // Promise<1 ** 2>
queue.push(2) // Promise<2 ** 2>
queue.push(3) // Promise<3 ** 2>
```
npm package: @jojoxd/bypass
Description: PiHole Companion to bypass ad redirects
Author: Joey Vos
Latest version: 1.0.2

# @jojoxd/bypass

Adds bypasses for PiHole so you can still use ad services (without ads) if you so desire.

For example, you can bypass `adfoc.us` and `adf.ly` with this app.

This also works for HTTPS Sites, as we use SNI to auto-generate certificates. note that you need `cache/authority.pem` in your system trust store.

To disable HTTPS entirely, set environment variable `APP_HTTPS_PORT` to empty.

## Usage: 
1. Run in some way (See Running Bypass)
2. Copy CA certificate from `cache/authority.pem` into your system's trust store
   > on linux, copy that file into /etc/pki/ca-trust/anchors and run `sudo update-ca-trust`. You may need to restart your browser afterwards.
3. In PiHole, set the IP of all the apps you want to bypass (e.g. redirect services, googleads etc.) to the IP of the server.

# Running Bypass
## Docker

Note: You need to specify --dns as a public DNS server, or else we can't resolve the IP addresses.

```
docker run -d \
  -v ./cache:/app/cache \
  -p 80:80 -p 443:443 \
  -e APP_HOSTNAME=bypass.example.com \
  --dns 8.8.8.8 \
    docker.jojoxd.nl:5005/jojoxd-homelab/bypass:<version>
```

## On your system (using npx)

> NOTE: Take a look at the Dockerfile and Environment.ts for configuration reference.

You can also run this server using npx, but beware that your system DNS should allow resolving of all IP's (e.g. using a public DNS service)

```
npx @jojoxd/bypass
```
npm package: @jojoxd/connect-typeorm
Description: A TypeORM-based session store
Author: Joey Vos
Latest version: 1.2.0

# connect-typeorm

A TypeORM-based session store.

## Usage

Configure TypeORM with back end of your choice:

```bash
yarn add @types/express-session connect-typeorm express-session typeorm sqlite3
```

Implement the `Session` entity:

```typescript
// src/domain/Session/Session.ts

import { ISession } from "connect-typeorm";
import { Column, Entity, Index, PrimaryColumn } from "typeorm";
@Entity()
export class Session implements ISession {
  @Index()
  @Column("bigint")
  public expiredAt = Date.now();

  @PrimaryColumn("varchar", { length: 255 })
  public id = "";

  @Column("text")
  public json = "";
}
```

Pass repository to `TypeormStore`:

```typescript
// src/app/Api/Api.ts

import { TypeormStore } from "connect-typeorm";
import * as Express from "express";
import * as ExpressSession from "express-session";
import { Db } from "typeorm-static";
import { Session } from "../../domain/Session/Session";

export class Api {
  public sessionRepository = Db.connection.getRepository(Session);

  public express = Express().use(
    ExpressSession({
      resave: false,
      saveUninitialized: false,
      store: new TypeormStore({
        cleanupLimit: 2,
        limitSubquery: false, // If using MariaDB.
        ttl: 86400
      }).connect(this.sessionRepository),
      secret: "keyboard cat"
    })
  );
}
```

TypeORM uses `{ "bigNumberStrings": true }` option by default for node-mysql,
you can use a Transformer to fix this issue:
```typescript
import { Bigint } from "typeorm-static";
@Column("bigint", { transformer: Bigint })
````

## Options

Constructor receives an object. Following properties may be included:

- `cleanupLimit` For every new session, remove this many expired ones. Defaults to 0, in case you need to analyze sessions retrospectively.

- `limitSubquery` Select and delete expired sessions in one query. Defaults to true, you can set false to make two queries, in case you want cleanupLimit but your MariaDB version doesn't support limit in a subquery.

-	`ttl` Session time to live (expiration) in seconds. Defaults to session.maxAge (if set), or one day. This may also be set to a function of the form `(store, sess, sessionID) => number`.

-	`onError` Error handler for database exception. It is a function of the form `(store: TypeormStore, error: Error) => void`. If not set, any database error will cause the TypeormStore to be marked as "disconnected", and stop reading/writing to the database, therefore not loading sessions and causing all requests to be considered unauthenticated.

## License

MIT
npm package: @jojoxd/discogs
Description: Discogs Client
Author: Joey Vos
Latest version: 0.0.1

# @jojoxd/discogs

Discogs API Bindings

## Installation

```shell
yarn install @jojoxd/discogs @jojoxd/http-client
```

## Usage

### NodeJS / Browser

```typescript
import { ArtistRepository } from "@jojoxd/discogs";
import { HttpClient } from "@jojoxd/http-client";

const artistRepository = new ArtistRepository(new HttpClient(), {
  userAgent: 'User-Agent/1.0',
});

const artists = await artistRepository.searchArtists("Freddie Mercury");
```

### TsED

> Note: This requires `@tsed/di` to be installed.

```typescript
// Server.ts
import '@jojoxd/http-client/tsed';
import '@jojoxd/discogs/tsed';

@Configuration({
  discogs: {
    userAgent: 'User-Agent/1.0',
  },
})
export class Server {}

// service.ts
import { ArtistRepository } from '@jojoxd/discogs';

export class Service
{
  @Inject()
  protected readonly artistRepository!: ArtistRepository;

  async searchArtist() {
    return this.artistRepository.searchArtists("Freddie Mercury");
  }
}
```
npm package: @jojoxd/http-client
Description: Just another HTTP Client
Author: Joey Vos
Latest version: 1.2.0

# @jojoxd/http-client

A Simple HTTP Client using [ky](https://npmjs.com/package/ky) and TsED [json-mapper](https://npmjs.com/package/@tsed/json-mapper)

## Installation

```shell
yarn install @jojoxd/http-client
```

## Usage

### Standalone and Browser

```typescript
import { HttpClient } from '@jojoxd/http-client';

const client = new HttpClient();

const response = await client.get('https://example.org/');
```

### TsED

> NOTE: This requires `@tsed/di` to be installed.

```typescript
// Server.ts

import '@jojoxd/http-client/tsed';

@Configuration(...)
export class Server {}

// Service.ts
import { Service, Inject } from '@tsed/common';
import { HttpClient } from '@jojoxd/http-client';

@Service()
class Service
{
    @Inject()
    protected readonly client!: HttpClient;

    async doSomething(): Promise<void>
    {
        await this.client.get('https://example.org');
    }
}
```

### Vue

```typescript
// main.ts

import { createApp } from 'vue';
import { createHttpClient } from '@jojoxd/http-client/vue';

const app = createApp(RootComponent);

app.use(createHttpClient(/* Options */));

// Component, Composition function etc.
import { HttpClient } from '@jojoxd/http-client/vue';
import { inject } from 'vue';

function composedFunction()
{
    const client = inject(HttpClient);

    client.get('https://example.org/').then((data) => {});
}
```
npm package: @jojoxd/musicbrainz
Description: Musicbrainz Client
Author: Joey Vos
Latest version: 0.0.1

# @jojoxd/musicbrainz

Musicbrainz API Bindings

## Installation

```shell
yarn install @jojoxd/musicbrainz @jojoxd/http-client
```

## Usage

### NodeJS / Browser

```typescript
import { ArtistRepository } from "@jojoxd/musicbrainz";
import { HttpClient } from "@jojoxd/http-client";

const artistRepository = new ArtistRepository(new HttpClient(), {
  userAgent: 'User-Agent/1.0',
});

const artists = await artistRepository.searchArtists("Freddie Mercury");
```

### TsED

> Note: This requires `@tsed/di` to be installed.

```typescript
// Server.ts
import '@jojoxd/http-client/tsed';
import '@jojoxd/musicbrainz/tsed';

@Configuration({
  musicbrainz: {
    userAgent: 'User-Agent/1.0',
  },
})
export class Server {}

// service.ts
import { ArtistRepository } from '@jojoxd/musicbrainz';

export class Service
{
  @Inject()
  protected readonly artistRepository!: ArtistRepository;

  async searchArtist() {
    return this.artistRepository.searchArtists("Freddie Mercury");
  }
}
```
npm package: @jojoxd/simple-di
Description: Simple DI
Author: Joey Vos
Latest version: 2.0.1

# @jojoxd/simple-di

![status](https://gitlab.jojoxd.nl/jojoxd-npm/simple-di/badges/main/pipeline.svg) ![coverage](https://gitlab.jojoxd.nl/jojoxd-npm/simple-di/badges/main/coverage.svg) ![Latest Release](https://gitlab.jojoxd.nl/jojoxd-npm/simple-di/-/badges/release.svg)

[See on NPM](https://www.npmjs.com/package/@jojoxd/simple-di)

Simple, Extensible Dependency Injection.


## Installation

You can get the latest release and the type definitions using npm:

```
$ npm install @jojoxd/simple-di
```

The type definitions are included in the @jojoxd/simple-di npm package.

> ⚠️ Important: If you want to use `@Inject()` without specifying the ProviderToken,  
> you need to `npm install reflect-metadata` and `import 'reflect-metadata'` in your entrypoint.  
> You also want to enable `experimentalDecorators` and `emitDecoratorMetadata` in your `tsconfig.json` file.

## Examples

### Creating an Injectable and injecting it into another class

The basis of any DI library:

```typescript
import { container, Inject, Injectable } from "@jojoxd/simple-di";

class MyService {}

// Explicit declaration
container.addProvider(MyService, new ClassProvider(MyService));

// Implicit decorator service declaration
@Injectable()
class MyOtherService {}

class MyInjectionService
{
    @Inject() // Note: if not using reflect-metadata, you need to use @Inject(MyService)
    public myService!: MyService;

    @Inject()
    public myOtherService!: MyOtherService;
}

const myInjectionService = new MyInjectionService();
myInjectionService.myService; // => MyService instance
```

### Using Factories

Factories are big in `@jojoxd/simple-di`. They allow you to use "scoped" injections,   
caching (bring-your-own-caching-layer), and possibly more (you think of it!).

```typescript
import {
    container,
    Inject, Injectable,
    BaseFactoryProvider, FactoryProvider, IFactoryProvider
} from "@jojoxd/simple-di";

class MyService {
    constructor(public scope: any, public name: string) {}
}

// Explicit declaration
// Note: name is an additional argument, it is not needed.
container.addProvider(MyService, new BaseFactoryProvider((scope, name) => new MyService(scope, name)));

// Implicit creation of a Factory Provider
@FactoryProvider(MyService)
class MyFactoryProvider implements IFactoryProvider<MyService>
{
    public provide(scope: any, name: string): T
    {
        return new MyService(scope, name);
    }
}

// From Root Scope
const rootScopeMyService = container.get<MyService>(MyService, "some-name");

// From other scope
const otherScopeMyService = container.scoped({ test: true }).get<MyService>(MyService, "some-other-name");
```

### Using Tags to fetch a collection

```typescript
import { container, WithTags, Injectable } from "@jojoxd/simple-di";

@Inject()
@WithTags("my-tag")
class Test {}

@Inject()
@WithTags("my-tag", "other-tag")
class Test2 {}

container.getAllTagged("my-tag") // > [ Test {}, Test2 {} ]
```
npm package: @jojoxd/tsconfig
Description: JojoXD's general tsconfigs
Author: Joey Vos
Latest version: 1.1.3

# JojoXD's tsconfig files

<a href='https://ko-fi.com/G2G1543NG' target='_blank'><img height='36' style='border:0px;height:36px;' src='https://cdn.ko-fi.com/cdn/kofi1.png?v=2' border='0' alt='Buy Me a Coffee at ko-fi.com' /></a>
npm package: @jojoxd/tsed-entity-mapper
Description: Map objects using mapper classes and decorators
Author: Joey Vos
Latest version: 1.0.0

# @jojoxd/tsed-entity-mapper

![status](https://gitlab.jojoxd.nl/jojoxd-npm/tsed/tsed-entity-mapper/badges/main/pipeline.svg) ![coverage](https://gitlab.jojoxd.nl/jojoxd-npm/tsed/tsed-entity-mapper/badges/main/coverage.svg) ![Latest Release](https://gitlab.jojoxd.nl/jojoxd-npm/tsed/tsed-entity-mapper/-/badges/release.svg)

[See on NPM](https://www.npmjs.com/package/@jojoxd/tsed-entity-mapper)

Map Ts.ED request parameters to any object!


## Installation

You can get the latest release and the type definitions using npm:

```
$ npm install @jojoxd/tsed-entity-mapper reflect-metadata
```

```typescript
// Server.ts
import "reflect-metadata";
import "@jojoxd/tsed-entity-mapper";

// <snip>

@Configuration({
    // No configuration required
})
export class Server {}
```

> ⚠️ Important: Don't skip the reflect-metadata package. It is required to extract the types from your controller methods.  
> You also need [`"emitDecoratorMetadata": true`](https://www.typescriptlang.org/tsconfig#emitDecoratorMetadata) in your tsconfig.

## Examples

### Creating a Mapper

The Entity Mapper is the core of translating parameters to an object.

```typescript
import { Inject } from "@tsed/di";
import { EntityMapper } from "@jojoxd/tsed-entity-mapper";
import { MyEntity } from "../entity/my-entity";
import { MyEntityRepository } from "../entity/repository/my-entity-repository";

@EntityMapper(MyEntity)
export class MyEntityMapper implements EntityMapperMethods<MyEntity>
{
    // EntityMapper is an injectable, so Inject works here

    @Inject()
    protected entityRepository: MyEntityRepository;

    async map(value: unknown, ctx: EntityMapperMapContext<MyEntity>): Promise<MyEntity>
    {
        return this.entityRepository.find({ id: value });
    }
}
```

### Using an Entity Mapper in a controller

Entity mappers are used when you specify a parameter decorator:

```typescript
// Using the above defined Entity Mapper

import { Get, Post } from "@tsed/schema";
import { Controller } from "@tsed/common";
import { BodyParamEntity, QueryParamEntity, PathParamEntity } from "@jojoxd/tsed-entity-mapper";
import { MyEntity } from "../entity/my-entity";

@Controller('/')
export class MyController
{
    @Get('/test')
    getMyEntity(@QueryParamEntity('id') entity: MyEntity)
    {
        // entity will be resolved as a MyEntity
    }

    @Post('/test')
    async postMyEntity(@BodyParamEntity() entity: MyEntity)
    {
        // entity will be resolved as a MyEntity
    }
    
    @Get('/by-id/:id')
    async getById(@PathParamEntity('id') entity: MyEntity)
    {
        // entity will be resolved as a MyEntity
    }
}
```

### Using the Entity Mapper itself:

It currently is not possible to use the Entity Mapper by itself.

## Roadmap

- [ ] Better Exception Handling
- [ ] Extract mapping functionality from EntityMapperPipe into a usable service
npm package: @jojoxd/vgmdb
Description: VGMDB Client
Author: Joey Vos
Latest version: 0.0.1

# @jojoxd/vgmdb

VGMDB API Bindings

## Installation

```shell
yarn install @jojoxd/vgmdb @jojoxd/http-client
```

## Usage

### NodeJS / Browser

```typescript
import { ArtistRepository } from "@jojoxd/vgmdb";
import { HttpClient } from "@jojoxd/http-client";

const artistRepository = new ArtistRepository(new HttpClient(), {
  apiUrl: 'https://vgmdb.info', // or your own instance
});

const artists = await artistRepository.searchArtists("Freddie Mercury");
```

### TsED

> Note: This requires `@tsed/di` to be installed.

```typescript
// Server.ts
import '@jojoxd/http-client/tsed';
import '@jojoxd/vgmdb/tsed';

@Configuration({
  vgmdb: {
    apiUrl: 'https://vgmdb.info', // or your own instance
  },
})
export class Server {}

// service.ts
import { ArtistRepository } from '@jojoxd/vgmdb';

export class Service
{
  @Inject()
  protected readonly artistRepository!: ArtistRepository;

  async searchArtist() {
    return this.artistRepository.searchArtists("Freddie Mercury");
  }
}
```
npm package: @jojoxd/vue-grid-layout
Description: A draggable and resizable grid layout, as a Vue component.
Author: Gustavo Santos
Latest version: 1.1.1

<p align="center"><a href="https://jbaysolutions.github.io/vue-grid-layout/" target="_blank" rel="noopener noreferrer"><img width="100" src="https://jbaysolutions.github.io/vue-grid-layout/assets/img/logo.png" alt="Vue Grid Layout"></a></p>

<h1 align="center">vue-grid-layout</h1>

<p align="center">
	<a href="https://www.npmjs.com/package/@jojoxd/vue-grid-layout">
			<img src="https://img.shields.io/npm/v/@jojoxd/vue-grid-layout.svg"/> 
			<img src="https://img.shields.io/npm/dm/@jojoxd/vue-grid-layout.svg"/>
	</a> 
	<a href="https://gitlab.jojoxd.nl/jojoxd-npm/vendored/vue-grid-layout/releases">
			<img src="https://img.shields.io/bundlephobia/min/@jojoxd/vue-grid-layout"/>
	</a>
</p>

## What is Vue Grid Layout?

vue-grid-layout is a grid layout system, like [Gridster](http://dsmorse.github.io/gridster.js/), for Vue.js. **Heavily inspired by [React-Grid-Layout](https://github.com/STRML/react-grid-layout)**

> NOTE: This is not the original version!  
> What we do have, is first-class support for typescript, and esm targets. This package is for vue 3.x only.
> No support for vue2 will be given.

## Installation

```shell
npm install @jojoxd/vue-grid-layout
# or:
yarn add @jojoxd/vue-grid-layout
```

## Features

* Draggable widgets
* Resizable widgets
* Static widgets
* Bounds checking for dragging and resizing
* Widgets may be added or removed without rebuilding grid
* Layout can be serialized and restored
* Automatic RTL support (resizing not working with RTL on 2.2.0)
* Responsive

> Use the original [vue-grid-layout](https://www.npmjs.com/package/vue-grid-layout):
> - **For legacy browsers**, like IE11, use version [2.3.12-legacy](https://github.com/jbaysolutions/vue-grid-layout/tree/legacy)  
> - **For Vue 2.1.10 and below use version [2.1.3](https://github.com/jbaysolutions/vue-grid-layout/tree/2.1.3)**  
> - **For Vue 1 use version [1.0.3](https://github.com/jbaysolutions/vue-grid-layout/tree/1.0.3)**  

<!--
## Documentation

Check out the <a href="https://jbaysolutions.github.io/vue-grid-layout/" target="_blank">Documentation Website</a>

-->

### Original version by [jbaysolutions](https://github.com/jbaysolutions).

I've just ts-ified the project (and most likely will update to composition api later)
npm package: @jojoxd/vue-progressbar
Description: <img align="right" width="200" src="https://user-images.githubusercontent.com/29236058/101346079-a21fd600-38ba-11eb-9501-ff17ab71364b.png" />
Author: Joey Vos
Latest version: 1.0.0

<img align="right" width="200" src="https://user-images.githubusercontent.com/29236058/101346079-a21fd600-38ba-11eb-9501-ff17ab71364b.png" />

# Vue Progressbar

Previously, we would like to first thank for the developers who have been willing to help developers around the world, especially those who contribute to [hilongjw/vue-progressbar](https://github.com/hilongjw/vue-progressbar).  
Also, I'd like to thank aacassandra for continuing the project for vue3 [aacassandra/vue3-progressbar](https://github.com/aacassandra/vue3-progressbar).  
Here I continue from the previous development to provide support for Vue v2 and v3 using vue-demi.

> Note: This readme might not have all usage details available.

> Note: I've removed the route meta call options. Please send a request for them back if you need them on the [BugTracker (GitHub)](https://github.com/jojoxd/BugTracker)

<a href='https://ko-fi.com/G2G1543NG' target='_blank'><img height='36' style='border:0px;height:36px;' src='https://cdn.ko-fi.com/cdn/kofi1.png?v=2' border='0' alt='Buy Me a Coffee at ko-fi.com' /></a>

# Table of Contents

- [**_Requirements_**](#requirements)
- [**_Installation_**](#installation)
- [**_Usage_**](#usage)

# Requirements

- Vue ([v2.x](https://www.npmjs.com/package/vue) with [@vue/composition-api](https://www.npmjs.com/package/@vue/composition-api), or [next (v3)](https://www.npmjs.com/package/vue/v/next))

# Installation

```bash
# npm
$ npm install @jojoxd/vue-progressbar

```

# Usage

main.js

```javascript
import { createApp } from "vue";
import App from "./App.vue";
import router from "./router";
import VueProgressBar from "@aacassandra/vue3-progressbar";

const options = {
  color: "#bffaf3",
  failedColor: "#874b4b",
  thickness: "5px",
  transition: {
    speed: "0.2s",
    opacity: "0.6s",
    termination: 300,
  },
  autoRevert: true,
  location: "left",
  inverse: false,
};

createApp(App)
  .use(VueProgressBar, options)
  .use(router)
  .mount("#app");


// In your component
import { injectKey as VueProgressBar } from '@jojoxd/vue-progressbar';

const controller = inject(VueProgressBar);

controller.start();
```
npm package: @jojoxd/vuetify-extensions
Description: Collection of Vuetify Extensions
Author: Joey Vos
Latest version: 0.0.1-alpha.1

# vuetify-extensions

This library was generated with [Nx](https://nx.dev).

## Building

Run `nx build vuetify-extensions` to build the library.

## Running unit tests

Run `nx test vuetify-extensions` to execute the unit tests via [Jest](https://jestjs.io).
npm package: @jojoxd/vuetify-extensions-snackbar
Description: Vuetify Snackbar Controller
Author: Joey Vos
Latest version: 0.0.1-alpha.3

# snackbar

This library was generated with [Nx](https://nx.dev).

## Building

Run `nx build snackbar` to build the library.

## Running unit tests

Run `nx test snackbar` to execute the unit tests via [Jest](https://jestjs.io).
npm package: @jojoxd/vuetify-labs-component-resolver
Description: unplugin-vue-components Vuetify Labs resolver
Author: Joey Vos
Latest version: 1.2.3

# @jojoxd/vuetify-labs-component-resolver

Resolve Vuetify Labs components using [unplugin-vue-components](https://www.npmjs.com/package/unplugin-vue-components).

```commandline
> npm install -D @jojoxd/vuetify-labs-component-resolver
```

## Usage

```typescript
import Components from "unplugin-vue-components/<some-loader>";
import { Vuetify3LabsResolver } from "@jojoxd/vuetify-labs-component-resolver";

// <snip>
Components({
	resolvers: [
		Vuetify3LabsResolver(),
	],
})
```