open-index/open-npm huggingface dataset:
npm package: @slickteam/components-vuetify3
Description: Components for Vuetify 3 / Vue 3
Author: Ronan MOREL
Latest version: 1.0.0

# Slick Components for Vuetify 3 / Vue 3

Available on npmjs.org : [@slickteam/components-vuetify3](https://www.npmjs.com/package/@slickteam/components-vuetify3)

## How to install

```bash
npm i -S @slickteam/components-vuetify3
```

- In `main.ts`, add this line for style

```js
//...
import { VuetifyLibrary } from '@slickteam/components-vuetify3';
import '@slickteam/components-vuetify3/style.css';

// options are optional
const options = {
  theme: {
    // theme are same option of library vuetify, see https://vuetifyjs.com/en/features/theme/#javascript for more informations
    themes: {
      light: {
        dark: false,
        colors: {
          background: '#RRGGBB',
          surface: '#RRGGBB',
          primary: '#RRGGBB',
          secondary: '#RRGGBB',
          success: '#RRGGBB',
          warning: '#RRGGBB',
          error: '#RRGGBB',
          info: '#RRGGBB',
        },
      },
    },
  },
};

createApp(app).use(VuetifyLibrary, options);
//...
```

- In your file where you want use a component, add this line for style

```js
import { SlickteamIconButton } from '@slickteam/components-vuetify3';
```

## Molecules

### Button components

- [slickteam-clipboard-button](./docs/components/molecules/button/SlickteamClipboardButton.md)
- [slickteam-icon-button](./docs/components/molecules/button/SlickteamIconButton.md)
- [slickteam-text-icon-button](./docs/components/molecules/button/SlickteamTextIconButton.md)

### Picker components

- [slickteam-color-picker](./docs/components/molecules/picker/SlickteamColorPicker.md)
- [slickteam-icon-picker](./docs/components/molecules/picker/SlickteamIconPicker.md)

## Organisms

- [slickteam-container](./docs/components/organisms/SlickteamContainer.md)
- [slickteam-toolbar](./docs/components/organisms/SlickteamToolbar.md)
- [slickteam-sidebar-icon](./docs/components/organisms/SlickteamSidebarIcon.md)
- [slickteam-sidebar](./docs/components/organisms/SlickteamSidebar.md)
- [slickteam-data-table](./docs/components/organisms/SlickteamDataTable.md)
npm package: @slickteam/prettier
Description: Prettier configuration for slickteam's project
Author: Ronan MOREL
Latest version: 2.0.5

# Slick Prettier

[![npm version](https://img.shields.io/npm/v/@slickteam/prettier.svg)](https://www.npmjs.com/package/@slickteam/prettier)
[![license](https://img.shields.io/npm/l/@slickteam/prettier.svg)](https://github.com/Slickteam/slick-prettier/blob/main/LICENSE)

Configuration Prettier partageable pour les projets Slickteam.

Cette bibliothèque permet d'utiliser Prettier avec une configuration prédéfinie, sans avoir à créer de fichier `.prettierrc` dans chaque projet.

## Installation

```bash
npm install -D @slickteam/prettier
```

Ou avec pnpm :

```bash
pnpm add -D @slickteam/prettier
```

## Configuration

Dans votre `package.json`, ajoutez :

```json
{
  "prettier": "@slickteam/prettier"
}
```

Puis ajoutez les scripts de formatage :

```json
{
  "scripts": {
    "prettier": "slick-prettier --cache --check .",
    "prettier:fix": "slick-prettier --cache --write ."
  }
}
```

> **Note** : La commande `slick-prettier` est un wrapper autour de `prettier` qui utilise automatiquement le fichier `.prettierignore` du package (ignorant `dist`, `build`, `node_modules` et les fichiers lock).

## Options de formatage

Cette configuration applique les règles suivantes :

| Option          | Valeur | Description                    |
| --------------- | ------ | ------------------------------ |
| `singleQuote`   | `true` | Utilise les guillemets simples |
| `trailingComma` | `all`  | Virgule finale partout         |
| `semi`          | `true` | Point-virgule en fin de ligne  |
| `tabWidth`      | `2`    | Indentation de 2 espaces       |
| `printWidth`    | `140`  | Largeur maximale de ligne      |
| `endOfLine`     | `auto` | Fin de ligne automatique       |

### Tri des imports

Le plugin `@trivago/prettier-plugin-sort-imports` est inclus et configuré pour trier automatiquement les imports dans cet ordre :

1. Imports absolus avec alias `@/`
2. Imports relatifs parents (`../`)
3. Imports relatifs locaux (`./`)

## Personnalisation

Pour étendre ou surcharger la configuration, créez un fichier `.prettierrc.mjs` :

```js
import slickPrettier from '@slickteam/prettier';

export default {
  ...slickPrettier,
  printWidth: 100,
};
```

## Licence

[MIT](LICENSE) © [Slickteam](https://slickteam.fr)
npm package: @slickteam/ts-utils
Description: Utils functions and classes for typescript
Author: Ronan MOREL
Latest version: 1.1.3

# Slick TS Utils

[![npm version](https://img.shields.io/npm/v/@slickteam/ts-utils.svg)](https://www.npmjs.com/package/@slickteam/ts-utils)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)

Collection de fonctions utilitaires TypeScript sans dépendances externes.

## Installation

```bash
# npm
npm install @slickteam/ts-utils

# pnpm
pnpm add @slickteam/ts-utils

# yarn
yarn add @slickteam/ts-utils
```

## Utilisation

```ts
import { isBoolean, isNumber, roundNumber, sleep } from '@slickteam/ts-utils';
```

## API

### `roundNumber(input, precision?)`

Arrondit un nombre avec une précision donnée.

| Parametre   | Type     | Default | Description                    |
| ----------- | -------- | ------- | ------------------------------ |
| `input`     | `number` | -       | Le nombre a arrondir           |
| `precision` | `number` | `2`     | Nombre de decimales souhaitees |

```ts
roundNumber(516.528, 2); // 516.53
roundNumber(516.528, 1); // 516.5
roundNumber(516.528); // 516.53
```

### `sleep(duration)`

Retourne une Promise qui se resout apres un delai donne.

| Parametre  | Type     | Description            |
| ---------- | -------- | ---------------------- |
| `duration` | `number` | Duree en millisecondes |

```ts
await sleep(1000); // attend 1 seconde
```

### `isBoolean(value)`

Verifie si une chaine de caracteres represente un booleen (`"true"` ou `"false"`).

| Parametre | Type     | Description          |
| --------- | -------- | -------------------- |
| `value`   | `string` | La chaine a verifier |

```ts
isBoolean('true'); // true
isBoolean('false'); // true
isBoolean('yes'); // false
isBoolean('1'); // false
```

### `isNumber(value)`

Verifie si une valeur peut etre convertie en nombre valide.

| Parametre | Type                                               | Description          |
| --------- | -------------------------------------------------- | -------------------- |
| `value`   | `number \| string \| boolean \| undefined \| null` | La valeur a verifier |

```ts
isNumber(42); // true
isNumber('42'); // true
isNumber('3.14'); // true
isNumber(''); // false
isNumber(null); // false
isNumber(undefined); // false
isNumber(NaN); // false
```

## Developpement

```bash
# Installation des dependances
pnpm install

# Build
pnpm build

# Formatage du code
pnpm prettier:fix
```

## Licence

[MIT](https://opensource.org/licenses/MIT)
npm package: @slicky/ast-query-selector
Description: CSS AST selectors parser
Author: David Kudera
Latest version: 1.2.0

[![NPM version](https://img.shields.io/npm/v/@slicky/ast-query-selector.svg?style=flat-square)](https://www.npmjs.com/package/@slicky/ast-query-selector)
[![Build Status](https://img.shields.io/travis/SlickyJS/ASTQuerySelector.svg?style=flat-square)](https://travis-ci.org/SlickyJS/ASTQuerySelector)

# Slicky/ASTQuerySelector

CSS selectors AST parser.

## Installation

```
$ npm install @slicky/ast-query-selector
```
npm package: @slicky/di
Description: Dependency injection for typescript
Author: David Kudera
Latest version: 1.1.1

[![NPM version](https://img.shields.io/npm/v/@slicky/di.svg?style=flat-square)](https://www.npmjs.com/package/@slicky/di)

# Slicky/DI

Dependency injection for typescript

## Installation

```
$ npm install @slicky/di
```

Import this code in your bootstrap file:

```typescript
import 'reflect-metadata';
```

## Basic usage

Every service in DI container is ordinary typescript class with `@Injectable()` annotation.

```typescript
import {Container, Injectable} from '@slicky/di';

@Injectable()
class MyService
{
	
	hello()
	{
		console.log('hello');
	}
	
}

let container = new Container;
container.addService(MyService);

let service: MyService = container.get(MyService);
service.hello();
```

If your service depends on another service, it will be automatically autowired.

```typescript
import {Container, Injectable} from '@slicky/di';

@Injectable()
class Logger
{
	
	log(message: string)
	{
		console.log(message);
	}
	
}

@Injectable()
class MyService
{
	
	constructor(private logger: Logger) {}
	
	hello()
	{
		this.logger.log('hello');
	}
	
}

let container = new Container;
container.addService(Logger);
container.addService(MyService);

let service: MyService = container.get(MyService);
service.hello();
```

## Create instance without registering service

Next code will always create new instance of `MyService`.

```typescript
import {Container, Injectable, Inject} from '@slicky/di';

@Injectable()
class Logger
{
	
	log(message: string)
	{
		console.log(message);
	}
	
}

class MyService
{
	
	constructor(@Inject() private logger: Logger) {}
	
	hello()
	{
		this.logger.log('hello');
	}
	
}

let container = new Container;
container.addService(Logger);

let service: MyService = container.create(MyService);
service.hello();
```

## Value service

Useful for configuration options.

```typescript
import {Container, Inject} from '@slicky/di';

class ValueService {}

class Application
{
	
	constructor(@Inject(ValueService) value: string)
	{
		console.log(value);		// output: "some value"
	}
	
}

let container = new Container;
container.addService(ValueService, {
	useValue: 'some value',
});
```

## Factories

```typescript
import {Container} from '@slicky/di';

class MyService {}

let container = new Container;
container.addService(MyService, {
	useFactory: () => new MyService,
});
```

## Aliases

```typescript
import {Container, Injectable} from '@slicky/di';

@Injectable()
class OldService {}
class MyService {}

let container = new Container;
container.addService(OldService);
container.addService(MyService, {
	useExisting: OldService,
});
```

## Using different class

```typescript
import {Container, Injectable} from '@slicky/di';

class MyService {}
class MyBetterService {}

let container = new Container;
container.addService(MyService, {
	useClass: MyBetterService,
});
```

## Forking containers

You can simply create fork of current container with for example some overwritten services.

```typescript
import {Container} from '@slicky/di';

let container = new Container;
let fork = container.fork();
```
npm package: @slicky/event-emitter
Description: EventEmitter based on rxjs
Author: David Kudera
Latest version: 1.0.2

[![NPM version](https://img.shields.io/npm/v/@slicky/event-emitter.svg?style=flat-square)](https://www.npmjs.com/package/@slicky/event-emitter)

# Slicky/EventEmitter

EventEmitter based on rxjs

## Installation

```
$ npm install @slicky/event-emitter
```

## Usage

```typescript
import {EventEmitter} from '@slicky/event-emitter';

let event = new EventEmitter<string>();

event.subscribe((value: string) => {
	console.log(value);		// output: "hello"
});

event.emit('hello');
```
npm package: @slicky/extension-translator
Description: Translator integration for slicky framework
Author: David Kudera
Latest version: 0.1.14

# Slicky/ExtensionTranslator

Slicky extension for localization.

## Installation

```bash
$ npm install --add-prod @slicky/extension-translator
```

Now add it into your `application.ts` file:

```typescript
import {TranslatorExtension} from '@slicky/extension-translator';

// ... create app

app.addExtension(new TranslatorExtension('en'));
```

**You need to provide default language.**

## Documentation

Complete documentation for translator could be found [here](https://github.com/SlickyJS/Translator/blob/master/README.md).

After registering the `TranslatorExtension` you'll be able to use translator in templates or in components:

```typescript
import {Component} from '@slicky/core';
import {ComponentTranslator} from '@slicky/extension-translator';

@Component({
	selector: 'home',
	template: '{{ "home.headline" | translate }}',
	translations: {
		en: {
			home: {
				headline: 'Home headline',
			},
		},
	},
})
class HomeComponent
{
	
	
	constructor(translator: ComponentTranslator)
	{
		console.log(translator.translate('home.headline'));		// "Home headline"
	}
	
}
```

*It's a good idea to put translations for components into their own files.*
npm package: @slicky/http
Description: Simple ajax reactive library
Author: David Kudera
Latest version: 0.0.5

[![NPM version](https://img.shields.io/npm/v/@slicky/http.svg?style=flat-square)](https://www.npmjs.com/package/@slicky/http)

# Slicky/HTTP

Super simple (but advanced) ajax reactive library. Using [RxJS](https://github.com/Reactive-Extensions/RxJS).
Supports sending files.

## Installation

```
$ npm install @slicky/http
```

## Usage

```typescript
import {Http} from '@slicky/http';

const http = new Http;
const data = {number: 5};
const options = {};

http.request('/users', 'GET', data, options).subscribe((response) => {
	console.log(response.json());
});
```

### Shortcuts

```typescript
http.get('/api', data, options).subscribe((response) => {});
http.post('/api', data, options).subscribe((response) => {});
http.files('/api', filesList, data, options).subscribe((response) => {});
```

### Options

* `jsonp`: name of callback for jsonp requests, when `true` is given callback name is used. Default is `false`
* `jsonPrefix`: prefix for json requests. Read more [here](http://stackoverflow.com/questions/2669690/why-does-google-prepend-while1-to-their-json-responses). Default is `null`
* `mimeType`: Default is `null`
* `headers`: List of headers to be send to server. Default is `{}`
* `files`: List of files to be send to server. Default is `[]`

## Queue

By default all your requests are called from queue one by one, so there is always just one request running (or zero).
Inspiration is from this article [http://blog.alexmaccaw.com/queuing-ajax-requests](http://blog.alexmaccaw.com/queuing-ajax-requests).

You can disable this feature with `ImmediateQueue`:

```typescript
import {Http, ImmediateQueue} from '@slicky/http';

const http = new Http({
	queue: new ImmediateQueue
});
```

## Known limitations

* All non ASCII chars (eg. letters with diacritics) in file names are converted to ASCII chars before uploading.
npm package: @slicky/realm
Description: Zone.js wrapper
Author: David Kudera
Latest version: 1.1.0

[![NPM version](https://img.shields.io/npm/v/@slicky/realm.svg?style=flat-square)](https://www.npmjs.com/package/@slicky/realm)

# Slicky/Realm

Zone.js wrapper

## Installation

```
$ npm install @slicky/realm
```

Include [zone.js](https://github.com/angular/zone.js) into your application.

## Usage

```typescript
import 'zone.js';
import {Realm} from '@slicky/realm';

const parent = new Realm(
	() => {
		console.log('entering call...');
	},
	() => {
		console.log('leaving call...');
	}
);

const child = parent.fork(
	() => {
		console.log('entering child call...');
	},
	() => {
		console.log('leaving child call...');
	}
);
```
npm package: @slicky/reflection
Description: Helpers for working with typescript's reflection
Author: David Kudera
Latest version: 1.0.5

[![NPM version](https://img.shields.io/npm/v/@slicky/reflection.svg?style=flat-square)](https://www.npmjs.com/package/@slicky/reflection)
[![Build Status](https://img.shields.io/travis/SlickyJS/Reflection.svg?style=flat-square)](https://travis-ci.org/SlickyJS/Reflection)

# Slicky/Reflection

Helpers for working with typescript's reflection.

## Installation

```
$ npm install @slicky/reflection
```

## Class annotations

**Annotation definition:**

```typescript
import {makeClassDecorator} from '@slicky/reflection';

class NamedClassDefinition
{
	
	constructor(name: string) { ... }
	
}

let NamedClass = makeClassDecorator(NamedClassDefinition);
```

**Usage:**

```typescript
import {getAnnotations, findAnnotation} from '@slicky/reflection';

@NamedClass('Test')
class TestClass { ... }

// get all annotations on class:
getAnnotations(TestClass);

// finding annotation for class:
findAnnotation(TestClass, NamedClassDefinition);
```

##Properties metadata

Properties metadata can be used also for methods and accessors.

**Metadata definition:**

```typescript
import {makePropertyDecorator} from '@slicky/reflection';

class NamedPropertyDefinition
{
	
	constructor(name: string) { ... }
	
}

let NamedProperty = makePropertyDecorator(NamedPropertyDefinition);
```

**Usage:**

```typescript
import {getPropertiesMetadata, getPropertyMetadata, findPropertyMetadata} from '@slicky/reflection';

class TestClass
{
	
	@NamedProperty('test')
	prop;
	
}

// get all properties on class:
getPropertiesMetadata(TestClass);

// get all metadata for property "prop":
getPropertyMetadata(TestClass, 'prop');

// finding metadata for property "prop":
findPropertyMetadata(TestClass, NamedPropertyDefinition, 'prop');
```

## Parameters metadata

**Metadata definition:**

```typescript
import {makeParameterDecorator} from '@slicky/reflection';

class NamedParameterDefinition
{
	
	constructor(name: string) { ... }
	
}

let NamedParameter = makeParameterDecorator(NamedParameterDefinition);
```

**Usage:**

```typescript
import {getParametersMetadata, findParameterMetadata} from '@slicky/reflection';

class TestClass
{
	
	constructor(@NamedParameter('param') arg) { ... }
	
	method(arg1, @NamedParameter('param2') arg2) { ... }
	
}

// get all parameters in constructor:
getParametersMetadata(TestClass);

// get all parameters in method "method":
getParametersMetadata(TestClass, 'method');

// finding metadata for first argument in constructor:
findParameterMetadata(TestClass, NamedParameterDefinition, 0);

// finding metadata for second argument in method "method":
findParameterMetadata(TestClass, NamedParameterDefinition, 1, 'method');
```
npm package: @slicky/tester
Description: Tester utils for simple slicky tests
Author: David Kudera
Latest version: 0.0.21

[![NPM version](https://img.shields.io/npm/v/@slicky/tiny-js.svg?style=flat-square)](https://www.npmjs.com/package/@slicky/tiny-js)

# Slicky/Tokenizer

Base classes for custom tokenizers and parsers

## Installation

```
$ npm install @slicky/tokenizer
```
npm package: @slicky/tiny-js
Description: One line javascript-like language compiler
Author: David Kudera
Latest version: 1.1.3

[![NPM version](https://img.shields.io/npm/v/@slicky/tiny-js.svg?style=flat-square)](https://www.npmjs.com/package/@slicky/tiny-js)

# Slicky/TinyJS

TinyJS parser.

TinyJS is **one line only** javascript-like language with some syntax sugar on top of it.
This makes it a good option for example for templates' expressions.

**See tests for examples**

## Installation

```
$ npm install @slicky/tiny-js
```
npm package: @slicky/tokenizer
Description: Base classes for custom tokenizers and parsers
Author: David Kudera
Latest version: 1.0.9

[![NPM version](https://img.shields.io/npm/v/@slicky/tiny-js.svg?style=flat-square)](https://www.npmjs.com/package/@slicky/tiny-js)

# Slicky/Tokenizer

Base classes for custom tokenizers and parsers

## Installation

```
$ npm install @slicky/tokenizer
```
npm package: @slicky/translator
Description: Typescript translator
Author: David Kudera
Latest version: 1.0.2

[![NPM version](https://img.shields.io/npm/v/@slicky/translator.svg?style=flat-square)](https://www.npmjs.com/package/@slicky/translator)
[![Build Status](https://img.shields.io/travis/SlickyJS/Translator.svg?style=flat-square)](https://travis-ci.org/SlickyJS/Translator)

[![Donate](https://img.shields.io/badge/donate-PayPal-brightgreen.svg?style=flat-square)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=AC6F2WJ9ZRAWJ)

# Slicky/Translator

Typescript translator

## Installation

```
$ npm install @slicky/translator
```

## Usage

```typescript
import {Translator} from '@slicky/translator';

let currentLocale = 'en';		// todo

let translator = new Translator(currentLocale);

translator.addMessages({
	en: {
		homepage: {
			content: {
				headline: 'Hello world',
			},
		},
	},
	cs: {
		homepage: {
			content: {
				headline: 'Ahoj světe',
			},
		},
	},
});

console.log(translator.translate('homepage.content.headline'));	// output: "Hello world"
```

## Plural forms

```typescript
translator.addMessages({
	en: {
		car: [
			'One car',
			'%count% cars',
		],
	},
});

console.log(translator.translate('car'));		// output: "One car"
console.log(translator.translate('car', 5));	// output: "5 cars"
```

## Parameters

```typescript
translator.addMessages({
	en: {
		paintedCar: '%color% car',
	},
});

console.log(translator.translate('paintedCar', null, {color: 'blue'}));	// output: "blue car"
```

You can also omit the `null` in translate method:

```typescript
translator.translate('paintedCar', {color: 'blue'});
```
npm package: @slicky/typescript-api-utils
Description: Utilities for typescript API
Author: David Kudera
Latest version: 0.0.1

[![NPM version](https://img.shields.io/npm/v/@slicky/typescript-api-utils.svg?style=flat-square)](https://www.npmjs.com/package/@slicky/typescript-api-utils)

# Slicky/TypescriptAPIUtils

## Installation

```
$ npm install @slicky/typescript-api-utils
```
npm package: @slicky/utils
Description: Helpers and utilities
Author: David Kudera
Latest version: 1.3.1

[![NPM version](https://img.shields.io/npm/v/@slicky/tiny-js.svg?style=flat-square)](https://www.npmjs.com/package/@slicky/tiny-js)

# Slicky/Tokenizer

Base classes for custom tokenizers and parsers

## Installation

```
$ npm install @slicky/tokenizer
```
npm package: @slicky/webpack-loader
Description: Webpack loader for slicky framework
Author: David Kudera
Latest version: 0.1.9

[![NPM version](https://img.shields.io/npm/v/@slicky/webpack-loader.svg?style=flat-square)](https://www.npmjs.com/package/@slicky/webpack-loader)

# Slicky/WebpackLoader

Custom webpack loader for optimal AOT.

## Installation

```
$ npm install @slicky/webpack-loader
```
npm package: @slicr97/partialize
Description: Simple input validation
Author: Nico Loos
Latest version: 1.0.1

# Partialize

## Description

Provides a simple function that partializes functions with up to 10 parameters.

## Installation

### Using npm:

```
npm install @slicr97/partialize
```

### Using yarn:

```
yarn add @slicr97/partialize
```

## Usage

To give you an example of how this library works, look at the following code snippet:

```typescript
import { partialize } from '@slicr97/partialize'

const _add = (x: number, y: number) => x + y
const add = partialize(_add)

const result = add(2)(2) // 4
```

## Globalizing

If you want to globalize the `partialize` function, you can do so by adding the following line to your code at the top of your entrypoint:

```typescript
import '@slicr97/partialize/globalize'
```
npm package: @slicr97/pipe
Description: Left-To-Right function composition
Author: Nico Loos
Latest version: 1.1.0

# Pipe

## Description

Small library providing a `pipe` function to compose functions from left to right.

## Installation

### Using npm:

```
npm install @slicr97/pipe
```

### Using yarn:

```
yarn add @slicr97/pipe
```

## Usage

To give you an example of how this library works, look at the following code snippet:

```typescript
import { pipe } from '@slicr97/pipe'

const addOne = (x: number) => x + 1
const multiplyByTwo = (x: number) => x * 2

const addOneAndMultiplyByTwo = pipe(addOne, multiplyByTwo)

const result = addOneAndMultiplyByTwo(2) // 6
```

## Globalizing

If you want to globalize the `pipe` function, you can do so by adding the following line to your code at the top of your entrypoint:

```typescript
import '@slicr97/pipe/globalize'
```
npm package: @slicr97/simple-rules
Description: Simple input validation
Author: Nico Loos
Latest version: 1.1.0

# simple-rules
Simple input validation

## Installation
Using npm:
```
npm install simple-rules
```

Using yarn:
```
yarn add simple-rules
```

## Usage Example
To give you an example of how this library works, look at the following code snippet:
```typescript
import { rules, Rules } from 'simple-rules';

type RegistrationInput = {
  email: string;
  password: string;
  passwordConfirmation: string;
};

const registrationInputRules = rules<RegistrationInput>(
  ['email', Rules.notEmpty],
  ['password', Rules.notEmpty],
  ['password', Rules.minLength({ threshold: 8 })],
  ['password', (password, input) => password === input.passwordConfirmation, 'PASSWORDS_DONT_MATCH'],
  ['passwordConfirmation', Rules.notEmpty],
  ['passwordConfirmation', Rules.minLength({ threshold: 8 })]
);

const input: RegistrationInput = {
  email: 'test@abc.com',
  password: 'superSecretPassword',
  passwordConfirmation: 'anotherSecretPassword'
};

const ruleViolations = registrationInputRules(input);

/**
 * RuleViolations:
 * {
 *   password: {
 *     errorCodes: [ 'PASSWORDS_DONT_MATCH' ],
 *     propertyValue: 'superSecretPassword'
 *   }
 * }
 */
```

As we see, there are 4 steps to perform a validation with `simple-rules`:
1. Define the type that should be validated
2. Define your validations by using the `rules` function and passing it the tuples / triples you need for the validation
3. Get an actual input object (this could for example be the body of a POST request)
4. Apply the input object to your validation function and evaluate the results

## Types of rules
As for now, there are three different types of rules you can use to validate your objects:

### Normal rules
Normal rules are the simplest ones. They simply take the property you want to validate and return a `RuleViolation` if the validation fails or `undefined` if it succeeds. This library provides many predefined normal rules out of the box.

### Nested rules
Nested rules are used when the validated property is in itself a complex object. That way, you can validate objects that are nested as deeply as you need them to be.

### Codependent rules
Codependent rules are used when the validity of a property depends on the state of another. For example, in the code snippet above, we needed to check if the two passwords entered by the user actually match.

### Combining the rule types
As a general rule of thumb, you should always be able to apply as many rules as needed to a given property. The same goes for codependent rules. Nested rules are the exception here, because you cannot apply nested rules to a property that is being validated with normal or codependent rules, nor can you apply two sets of nested rules to the same property.

### Further information
For further information, I have to direct you to the unit tests for now. I will continue this documentation once I find the time necessary to do so. You can also check out this repository and play around with the code in the `sample` directory.
npm package: @slide-computer/signer
Description: JavaScript and TypeScript library to interact with signers on the Internet Computer
Author: Slide
Latest version: 4.2.2
Deprecated: This package has been replaced by @icp-sdk/signer

# @slide-computer/signer

JavaScript and TypeScript library to interact with signers on the Internet Computer.

---

## Installation

Using Signer:

```
npm i --save @slide-computer/signer
```

## In the browser:

```
import { Signer } from "@slide-computer/signer";
```

To get started with the signer, run

```js
// Create transport with e.g. "@slide-computer/signer-web"
const signer = new Signer({transport});
```

Make sure to connect before using signer if the transport requires a connection

```js
if (transport.connection && !transport.connection.connected) {
    await transport.connection.connect();
}
```

The signer can for example get accounts with

```js
const accounts = await signer.accounts();
```

Optionally, the permission can be requested beforehand to get accounts

```js
const permissions = await signer.requestPermissions([createAccountsPermissionScope()]);
```

### Making canister calls

The `@slide-computer/signer-agent` package offers `SignerAgent` as drop in replacement of `HttpAgent`.

Besides making canister calls through signers that need to be approved by users, calls can also be made after requesting
a delegation from the signer with the `delegation()` method. This delegation can then be used to create
a `DelegationIdentity` which in turn can be used with the `HttpAgent`.

## List of available transports

Efforts are made to standardize the transports, for example ICRC-29 and ICRC-94. For wallets that do not implement a
standardized transport method, additional polyfill packages are available.

| Standardized packages              | Supported signers |
|------------------------------------|-------------------|
| `@slide-computer/signer-web`       | NFID, Oisy, Slide |
| `@slide-computer/signer-extension` | PrimeVault        |

| Polyfill packages                              | Supported signers |
|------------------------------------------------|-------------------|
| `@slide-computer/signer-transport-plug`        | Plug              |
| `@slide-computer/signer-transport-stoic`       | Stoic             |
| `@slide-computer/signer-transport-auth-client` | Internet Identity |
npm package: @slide-computer/signer-agent
Description: Initiate transactions with signers on the Internet Computer
Author: Slide
Latest version: 4.2.2
Deprecated: This package has been replaced by @icp-sdk/signer

# @slide-computer/signer-agent

Initiate transactions with signers on the Internet Computer.

---

## Installation

Using SignerAgent:

```
npm i --save @slide-computer/signer-agent
```

## In the browser:

```
import { SignerAgent } from "@slide-computer/signer-agent";
```

To get started with the signerAgent, run

```js
const accounts = await signer.accounts();
const agent = await SignerAgent.create({
    signer,
    account: accounts[0].owner
});
```

The signerAgent can initiate a transaction with

```js
import {IcrcLedgerCanister} from "@dfinity/ledger-icrc";

const icpLedger = IcrcLedgerCanister.create({
    agent,
    canisterId: ICP_LEDGER_CANISTER_ID,
});
const blockIndex = await icpLedger.transfer({
    to: TARGET_ACCOUNT,
    amount: 100_000_000
});
```

The signerAgent can automatically batch calls with

```js
import {IcrcLedgerCanister} from "@dfinity/ledger-icrc";

const icpLedger = IcrcLedgerCanister.create({
    agent,
    canisterId: ICP_LEDGER_CANISTER_ID,
});
const ckBtcLedger = IcrcLedgerCanister.create({
    agent,
    canisterId: CK_BTC_LEDGER_CANISTER_ID,
});

// If a signer does not support batch calls, signerAgent will 
// automatically fallback to executing the calls one by one.
const [icpBlockIndex, ckBtcBlockIndex] = await Promise.all([
    icpLedger.approve({
        spender: TARGET_ACCOUNT,
        amount: 70_000_000
    }),
    ckBtcLedger.approve({
        spender: TARGET_ACCOUNT,
        amount: 1_000_000
    })
]);
```

For more advanced use cases, the signerAgent can also manually batch calls with

```js
import {IcrcLedgerCanister} from "@dfinity/ledger-icrc";

const icpLedger = IcrcLedgerCanister.create({
    agent,
    canisterId: ICP_LEDGER_CANISTER_ID,
});
const ckBtcLedger = IcrcLedgerCanister.create({
    agent,
    canisterId: CK_BTC_LEDGER_CANISTER_ID,
});

agent.batch(); // Below execution of calls needs to be triggered manually

const icpBlockIndexPromise = icpLedger.approve({
    spender: TARGET_ACCOUNT,
    amount: 70_000_000
});
const ckBtcBlockIndexPromise = ckBtcLedger.approve({
    spender: TARGET_ACCOUNT,
    amount: 1_000_000
});

agent.batch() // Indicate that below calls should be executed by the signer after the above

const swapResultPromise = backendActor.swapTokens(swapId);

// Trigger execution of all the above scheduled calls
// 
// If a signer does not support batch calls, signerAgent will 
// automatically fallback to executing the calls one by one.
await agent.execute();

// Get individual results
const icpBlockIndex = await icpBlockIndexPromise;
const ckBtcBlockIndex = await ckBtcBlockIndexPromise;
const swapResult = await swapResultPromise;
```
npm package: @slide-computer/signer-client
Description: Authenticate with signers on the Internet Computer
Author: Slide
Latest version: 3.20.0

# @slide-computer/signer-client

Authenticate with signers on the Internet Computer.

---

## Installation

Using SignerClient:

```
npm i --save @slide-computer/signer
```

## In the browser:

```
import { SignerClient } from "@slide-computer/signer-client";
```

To get started with the signerClient, run

```js
const signerClient = await SignerClient.create({signer});
```

The signerClient can log in with

```js
signerClient.login({
  // 7 days in nanoseconds
  maxTimeToLive: BigInt(7 * 24 * 60 * 60 * 1000 * 1000 * 1000),
  onSuccess: async () => {
    handleAuthenticated(signerClient);
  },
});
```
npm package: @slide-computer/signer-extension
Description: JavaScript and TypeScript library to communicate with browser extension signers on the Internet Computer
Author: Slide
Latest version: 4.2.2
Deprecated: This package has been replaced by @icp-sdk/signer

# @slide-computer/signer-extension

JavaScript and TypeScript library to communicate with browser extension signers on the Internet Computer.

---

## Installation

Using signer extension:

```
npm i --save @slide-computer/signer-extension
```

## In the browser:

```
import { BrowserExtensionTransport } from "@slide-computer/signer-extension";
```

To create an ICRC-94 browser extension transport, run

```js
const transport = await BrowserExtensionTransport.findTransport({
    // Globally unique identifier of the browser extension wallet you want to connect with
    uuid: 'b5ec333c-8854-47bd-be77-74059e0c64d6'
});
```

Either use with `@slide-computer/signer`

```js
const signer = new Signer({transport});
```

Or directly in your custom implementation

```js
const channel = await transport.establishChannel();
const listener = channel.registerListener((response) => {
    // Process incoming responses
});
// Send outgoing requests
channel.send(JSON_RPC_REQUEST);
```

To discover all available installed browser extension signers for a user to choose from, run

```js
const providerDetails = await BrowserExtensionTransport.discover();
const providerDetail = await askUserToChoose(providerDetails);
const transport = new BrowserExtensionTransport({providerDetail});
```
npm package: @slide-computer/signer-storage
Description: Storage implementation for signer library on the Internet Computer
Author: Slide
Latest version: 4.2.2

# @slide-computer/signer-storage

Storage implementation for signer library on the Internet Computer.

---

## Installation

Using SignerStorage:

```
npm i --save @slide-computer/signer-storage
```

## Note

Supports storing both `ECDSAKeyIdentity` and `Ed25519KeyIdentity`. The `ECDSAKeyIdentity` is highly recommended over
the `Ed25519KeyIdentity` due to insecure plain text storage of the latter. Additionally, this library also supports
storing a `DelegationChain`.

There are two storage implementations `IdbStorage` and legacy `LocalStorage`, the `ECDSAKeyIdentity` can only be stored
in `IdbStorage` implementation.
npm package: @slide-computer/signer-test
Description: JavaScript and TypeScript library for signer tests on the Internet Computer
Author: Slide
Latest version: 3.20.0

# @slide-computer/signer-test

JavaScript and TypeScript library for signer tests on the Internet Computer.

---

## Installation

Using Agent transport:

```
npm i --save @slide-computer/signer-test
```

## In the browser:

```
import { AgentTransport } from "@slide-computer/signer-test";
```

To create an Agent transport, run

```js
const transport = await AgentTransport.create();
```

Either use with `@slide-computer/signer`

```js
const signer = new Signer({transport});
```

Or directly in your custom implementation

```js
const channel = await transport.establishChannel();
const listener = channel.registerListener((response) => {
  // Process incoming responses
});
// Send outgoing requests
channel.send(JSON_RPC_REQUEST);
```
npm package: @slide-computer/signer-transport-auth-client
Description: JavaScript and TypeScript library to communicate with Internet Identity on the Internet Computer
Author: Slide
Latest version: 4.2.2

# @slide-computer/signer-transport-auth-client

JavaScript and TypeScript library to communicate with Internet Identity on the Internet Computer.

---

## Installation

Using AuthClientTransport:

```
npm i --save @slide-computer/signer-transport-auth-client
```

## In the browser:

```
import { AuthClientTransport } from "@slide-computer/signer-transport-auth-client";
```

To create an AuthClient transport, run

```js
const transport = await AuthClientTransport.create();
```

Either use with `@slide-computer/signer`

```js
const signer = new Signer({transport});
```

Or directly in your custom implementation

```js
const channel = await transport.establishChannel();
const listener = channel.registerListener((response) => {
  // Process incoming responses
});
// Send outgoing requests
channel.send(JSON_RPC_REQUEST);
```
npm package: @slide-computer/signer-transport-plug
Description: JavaScript and TypeScript library to communicate with Plug Wallet on the Internet Computer
Author: Slide
Latest version: 3.16.0
Deprecated: Use @slide-computer/signer-extension with UUID 71edc834-bab2-4d59-8860-c36a01fee7b8 instead.

> This package will be deprecated and replaced with `@slide-computer/signer-extension` once ICRC-94 is available.


# @slide-computer/signer-transport-plug

JavaScript and TypeScript library to communicate with Plug Wallet on the Internet Computer.

---

## Installation

Using Plug transport:

```
npm i --save @slide-computer/signer-transport-plug
```

## In the browser:

```
import { PlugTransport } from "@slide-computer/signer-transport-plug";
```

To create a Plug transport, run

```js
const transport = new PlugTransport();
```

Either use with `@slide-computer/signer`

```js
const signer = new Signer({transport});
```

Or directly in your custom implementation

```js
const channel = await transport.establishChannel();
const listener = channel.registerListener((response) => {
  // Process incoming responses
});
// Send outgoing requests
channel.send(JSON_RPC_REQUEST);
```
npm package: @slide-computer/signer-transport-stoic
Description: JavaScript and TypeScript library to communicate with Stoic Wallet on the Internet Computer
Author: Slide
Latest version: 4.2.2

# @slide-computer/signer-transport-auth-client

JavaScript and TypeScript library to communicate with Stoic Wallet on the Internet Computer.

---

## Installation

Using Stoic transport:

```
npm i --save @slide-computer/signer-transport-stoic
```

## In the browser:

```
import { StoicTransport } from "@slide-computer/signer-transport-stoic";
```

To create a Stoic transport, run

```js
const transport = await StoicTransport.create();
```

Either use with `@slide-computer/signer`

```js
const signer = new Signer({transport});
```

Or directly in your custom implementation

```js
const channel = await transport.establishChannel();
const listener = channel.registerListener((response) => {
  // Process incoming responses
});
// Send outgoing requests
channel.send(JSON_RPC_REQUEST);
```
npm package: @slide-computer/tokens-dip20
Description: JavaScript and TypeScript library to interact with tokens on the Internet Computer
Author: Slide
Latest version: 2.2.1

# @slide-computer/tokens-dip20

JavaScript and TypeScript library to interact with DIP-20 tokens on the Internet Computer.

---

## Installation

```
npm i --save @slide-computer/tokens-dip20
```

## Usage

See instructions at the `@slide-computer/tokens` package.
npm package: @slide-computer/tokens-dip721-v1
Description: JavaScript and TypeScript library to interact with tokens on the Internet Computer
Author: Slide
Latest version: 2.2.1

# @slide-computer/tokens-dip721-v1

JavaScript and TypeScript library to interact with DIP-721 V1 tokens on the Internet Computer.

---

## Installation

```
npm i --save @slide-computer/tokens-dip721-v1
```

## Usage

See instructions at the `@slide-computer/tokens` package.
npm package: @slide-computer/tokens-dip721-v2
Description: JavaScript and TypeScript library to interact with tokens on the Internet Computer
Author: Slide
Latest version: 2.2.1

# @slide-computer/tokens-dip721-v2

JavaScript and TypeScript library to interact with DIP-721 V2 tokens on the Internet Computer.

---

## Installation

```
npm i --save @slide-computer/tokens-dip721-v2
```

## Usage

See instructions at the `@slide-computer/tokens` package.
npm package: @slide-computer/tokens-dip721-v2-approval
Description: JavaScript and TypeScript library to interact with tokens on the Internet Computer
Author: Slide
Latest version: 2.2.1

# @slide-computer/tokens-dip721-v2-approval

JavaScript and TypeScript library to interact with DIP-721 V2 (Approval) tokens on the Internet Computer.

---

## Installation

```
npm i --save @slide-computer/tokens-dip721-v2-approval
```

## Usage

See instructions at the `@slide-computer/tokens` package.
npm package: @slide-computer/tokens-ext
Description: JavaScript and TypeScript library to interact with tokens on the Internet Computer
Author: Slide
Latest version: 2.2.1

# @slide-computer/tokens-ext

JavaScript and TypeScript library to interact with EXT tokens on the Internet Computer.

---

## Installation

```
npm i --save @slide-computer/tokens-ext
```

## Usage

See instructions at the `@slide-computer/tokens` package.
npm package: @slide-computer/tokens-icrc1
Description: JavaScript and TypeScript library to interact with tokens on the Internet Computer
Author: Slide
Latest version: 2.2.1

# @slide-computer/tokens-icrc2

JavaScript and TypeScript library to interact with ICRC-2 tokens on the Internet Computer.

---

## Installation

```
npm i --save @slide-computer/tokens-icrc2
```

## Usage

See instructions at the `@slide-computer/tokens` package.
npm package: @slide-computer/tokens-icrc10
Description: JavaScript and TypeScript library to interact with tokens on the Internet Computer
Author: Slide
Latest version: 2.2.1

# @slide-computer/tokens-icrc10

JavaScript and TypeScript library to interact with ICRC-10 tokens on the Internet Computer.

---

## Installation

```
npm i --save @slide-computer/tokens-icrc10
```

## Usage

See instructions at the `@slide-computer/tokens` package.
npm package: @slide-computer/tokens-icrc2
Description: JavaScript and TypeScript library to interact with tokens on the Internet Computer
Author: Slide
Latest version: 2.2.1

# @slide-computer/tokens-icrc1

JavaScript and TypeScript library to interact with ICRC-1 tokens on the Internet Computer.

---

## Installation

```
npm i --save @slide-computer/tokens-icrc1
```

## Usage

See instructions at the `@slide-computer/tokens` package.
npm package: @slide-computer/tokens-icrc4
Description: JavaScript and TypeScript library to interact with tokens on the Internet Computer
Author: Slide
Latest version: 2.2.1

# @slide-computer/tokens-icrc4

JavaScript and TypeScript library to interact with ICRC-4 tokens on the Internet Computer.

---

## Installation

```
npm i --save @slide-computer/tokens-icrc4
```

## Usage

See instructions at the `@slide-computer/tokens` package.
npm package: @slide-computer/tokens-icrc7
Description: JavaScript and TypeScript library to interact with tokens on the Internet Computer
Author: Slide
Latest version: 2.2.1

# @slide-computer/tokens-icrc7

JavaScript and TypeScript library to interact with ICRC-7 tokens on the Internet Computer.

---

## Installation

```
npm i --save @slide-computer/tokens-icrc7
```

## Usage

See instructions at the `@slide-computer/tokens` package.
npm package: @slide/ticketing-common
Description: ```sh yarn install ```
Author: enxtur.mon@gmail.com
Latest version: 1.3.7

<h1 align="center">Welcome to @slide/ticketing-common 👋</h1>
<p>
  <a href="https://www.npmjs.com/package/@slide/ticketing-common" target="_blank">
    <img alt="Version" src="https://img.shields.io/npm/v/@slide/ticketing-common.svg">
  </a>
  <a href="#" target="_blank">
    <img alt="License: MIT" src="https://img.shields.io/badge/License-MIT-yellow.svg" />
  </a>
  <a href="https://twitter.com/enxtur" target="_blank">
    <img alt="Twitter: enxtur" src="https://img.shields.io/twitter/follow/enxtur.svg?style=social" />
  </a>
</p>

> Some shared functions for private organization usage. Latest versions can break your system. There is no secret logic. Feel free to use.

## Install

```sh
yarn install
```

## Run tests

```sh
yarn run test
```

## Middlewares

```js
import {
  currentUser,
  errorHandler,
  requestValidator,
  requireAuth,
} from '@slide/ticketing-common';
```

## Custom Errors

```js
import {
  BadRequestError,
  CustomError,
  DatabaseConnectionError,
  NotFoundError,
  RequestValidationError,
  UnauthorizedError,
} from '@slide/ticketing-common';
```

## Author

👤 **enxtur.mon@gmail.com**

- Website: http://enxtur.github.io
- Twitter: [@enxtur](https://twitter.com/enxtur)
- Github: [@enxtur](https://github.com/enxtur)
- LinkedIn: [@enxtur](https://linkedin.com/in/enxtur)

---

_This README was generated with ❤️ by [readme-md-generator](https://github.com/kefranabg/readme-md-generator)_
npm package: @slidejs/dsl
Description: Slide DSL 语法解析器和编译器
Latest version: 0.1.8

# @slidejs/dsl

Slide DSL 语法解析器和编译器。

## 特性

- 基于 [Peggy](https://peggyjs.org/) 的语法解析器
- 类型安全的 AST 定义
- 支持表达式计算和 for 循环
- 完整的错误处理

## 使用示例

### 解析 DSL

```typescript
import { parseSlideDSL } from '@slidejs/dsl';

const source = `
present quiz "my-quiz" {
  rules {
    rule start "intro" {
      slide {
        content text {
          "Welcome to the quiz!"
        }
        behavior {
          transition zoom {
            duration: 500
          }
        }
      }
    }

    rule content "questions" {
      for section in quiz.sections {
        for question in section.questions {
          slide {
            content dynamic {
              name: "wsx-quiz-question"
              attrs {
                title: section.title
                question: question.text
              }
            }
          }
        }
      }
    }

    rule end "thanks" {
      slide {
        content text {
          "Thank you!"
        }
      }
    }
  }
}
`;

const ast = await parseSlideDSL(source);
console.log(ast);
```

### 编译为可执行的 SlideDSL

```typescript
import { compile } from '@slidejs/dsl';
import { SlideEngine } from '@slidejs/core';
import { quizToSlideContext } from '@slidejs/dsl';

// 解析 DSL
const ast = await parseSlideDSL(source);

// 编译为 SlideDSL 对象
const slideDSL = compile(ast);

// 创建 Context
const context = quizToSlideContext(quizDSL);

// 生成 Slides
const engine = new SlideEngine(slideDSL);
const slides = engine.generate(context);
```

## 语法参考

### Presentation

```
present <type> "<name>" {
  rules {
    // 规则定义
  }
}
```

### Rules

```
rule start "<name>" {
  // slides
}

rule content "<name>" {
  // for 循环或 slides
}

rule end "<name>" {
  // slides
}
```

### Slide

```
slide {
  content <type> {
    // 内容
  }
  behavior {
    // 行为
  }
}
```

### Content

```
// 动态内容（组件）
content dynamic {
  name: "<component-name>"
  attrs {
    key: value
  }
}

// 静态文本
content text {
  "line 1"
  "line 2"
}
```

### Behavior

```
behavior {
  transition <type> {
    option: value
  }
}
```

### For Loop

```
for item in collection {
  // slides
}

// 嵌套 for 循环
for outer in collection1 {
  for inner in outer.collection2 {
    // slides
  }
}
```

## 开发

### 生成 Parser

```bash
pnpm generate:parser
```

### 构建

```bash
pnpm build
```

### 测试

```bash
pnpm test
```

## License

MIT
npm package: @slidelabs/socialfi
Description: The official socialfi. Create vaults, trade Tokens and NFTs, arbitrage and create market maker on the Solana blockchain. on top of Drift Protocol and Solana DEX's
Author: dannpl
Latest version: 0.0.34

# Slide SocialFI

## SocialFI Trade Protocol

The official socialfi. Create vaults, trade Tokens and NFTs, arbitrage and create market maker on the Solana blockchain. on top of Drift Protocol and Solana DEX's