open-index/open-npm huggingface dataset:
npm package: @pluesenpai/ngx-translate-po-http-loader
Description: Load po files for use with ngx-translate. Fork from https://github.com/coolstuffit/ngx-translate-po-http-loader
Author: Plue Senpai
Latest version: 1.1.4

# Description
Load po files for use with `ngx-translate`

## Installation:

 ```
npm i @ngx-translate/core --save
npm i @biesbjerg/ngx-translate-po-http-loader --save
 ```

## Usage:
```ts
import { HttpClient, HttpClientModule } from '@angular/common/http';

import { TranslateModule, TranslateLoader } from '@ngx-translate/core';
import { TranslatePoHttpLoader } from '@biesbjerg/ngx-translate-po-http-loader';

export function createTranslateLoader(http: HttpClient) {
	return new TranslatePoHttpLoader(http, 'assets/i18n', '.po');
}

@NgModule({
	imports: [
		BrowserModule,
		HttpClientModule,
		TranslateModule.forRoot({
			loader: {
				provide: TranslateLoader,
				useFactory: createTranslateLoader,
				deps: [HttpClient]
			}
		})
	],
	bootstrap: [AppComponent]
})
export class AppModule { }
```
npm package: @pluewallet/plue
Description: Javascript sdk for plue APIs
Author: plue
Latest version: 1.2.1

# Plue Javascript SDK

### About

This is the Javascript SDK for the Plue API.

## Installation

via NPM:

`npm install @pluewallet/plue`

via CDN:
`https://cdn.jsdelivr.net/npm/@pluewallet/plue@{version_number}/build/plue.min.js`

or use the minified file in the `build` folder

## Getting started

### Client Side 

Initialize the SDK with: 

`window.plue = new Plue(config);` 

or 

`const plue = new Plue(config);`(NodeJS)

Your `config` object should contain:

* `storageMethod` - Options are `session` for `sessionStorage` and `local` for `localStorage`

* `apiVersion` - Default is `3` (Version 3 is the only currently supported version)

* `apiToken` - Your Plue API token

Example:

```
	var config = {
		apiVersion: 3, 
		storageMethod: "local",
		apiToken: "authenticationTokenHere"
	}

```

### Server Side (NodeJS)

Initialize the sdk with: 
`const plue = new Plue(config);`

Your `config` object should contain:

* `apiVersion` - Default is `3` (Version 3 is the only currently supported version)

* `apiToken` - Your Plue API token

Example:

```
	var config = {
		apiVersion: 3, 
		apiToken: "authenticationTokenHere"
	}

```

### Custom API url

To use this SDK with a custom API url, your `config` object should contain `customAPIURL`

Example:

```
	var config = {
		...,
		customAPIURL: "https://whatever.stuff/
	}

```



### Documentation and usage

For more detailed documentation and usage [Docs](https://docs.plue.io/).

License
-------------
<a href=/LICENSE target="_blank">MIT</a> license.
npm package: @plug-checkout-full/vue
Description: Vue specific wrapper for Plug Checkout Full core components
Author: Leonardo Pinheiro
Latest version: 1.6.2
Deprecated: WARNING: This project has been renamed to @malga-checkout-full/vue. Install using @malga-checkout-full/vue instead.

# Plug Checkout - Vue

A simple, fast and customizable way of integrating with Plug, with no need to stop using your favorite front-end framework.

## Introduction

First you need to choose the Vue version.

- [Click here](https://github.com/plughacker/plug-checkout/blob/main/packages/vue/VUE2.md) to see Vue2 settings.
- [Click here](https://github.com/plughacker/plug-checkout/blob/main/packages/vue/VUE3.md) to see Vue3 settings.

## Contributing

Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.

Please make sure to update tests as appropriate.
npm package: @plug-checkout/vue
Description: Vue specific wrapper for Plug Checkout core components
Author: Leonardo Pinheiro
Latest version: 1.6.2
Deprecated: WARNING: This project has been renamed to @malga-checkout/vue. Install using @malga-checkout/vue instead.

# Plug Checkout - Vue

A simple, fast and customizable way of integrating with Plug, with no need to stop using your favorite front-end framework.

## Introduction

First you need to choose the Vue version.

- [Click here](https://github.com/plughacker/plug-checkout/blob/main/packages/vue/VUE2.md) to see Vue2 settings.
- [Click here](https://github.com/plughacker/plug-checkout/blob/main/packages/vue/VUE3.md) to see Vue3 settings.

## Contributing

Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.

Please make sure to update tests as appropriate.
npm package: @plug-ui/plugui
Description: PLUG UI is a collection of CSS only Pluggable & Lightweight UI Elements
Author: Pulkit
Latest version: 0.1.1

# PLUG UI
PLUG UI is a collection of CSS only Pluggable & Lightweight UI Elements

## Contribution Guide

```bash
# Install dependencies
$ npm install

# Preview docs with hot reload at localhost:3000
$ npm run dev
```
npm package: @plug.cool/sense
Description: A tiny library for easily getting Ethereum ENS data using Javascript
Author: https://plug.cool
Latest version: 0.0.11

# sense (eth)
## ENS Data, Simple

sense is a simple Javascript library that aims to make it easier to get data about ENS (ethereum) names like vitalik.eth.

It is used internally at <https://plug.cool> when dealing with ENS names.

It is meant for use on front-end projects. We use it with React.

## Dependencies
- ethers.js

## Installation
Go to your project directory and run:
```
npm install @plug.cool/sense
// or if using yarn:
yarn add @plug.cool/sense
```
## Usage
### Import
```
import sense from '@plug.cool/sense';
```
## Functions
### setProvider({apiType: STRING, network: STRING, apiKey: STRING})
```
// sense currently supports Infura, Etherscan, Alchemy, and Cloudflare providers

// setting an Infura provider
/* 
first, create a provider object with the provider inputs you want to use. These are currently not optional. Not providing each input is untested as currently written
*/
const providerObj = {
    apiType: 'infura',
    network: 'homestead',
    apiKey: 'your-infura-api-key'
}

// now make the following call:
const provider = sense.setProvider(providerObj)

// you can use provider to make further calls like you would in ethers
```

### async getENSTextRecord(ensName: STRING, provider: object)
```
// first, set the provider
const provider = sense.setProvider(providerObj);

// then, provide the name you want to query and provider object
const ensTextRecord = await sense.getENSTextRecord('vitalik.eth', provider);
console.log(ensTextRecord);

/* 
NOTE: this call returns an object with key-value pairs of any data present in the ENS Text Record. If there is no data, it returns false.
*/
```

That's it for now. We will be adding more functions on an as-needed basis. Feel free to open a PR and expand, or fork it.
npm package: @plugandwork/atlas
Description: ## Developpement
Author: plugandwork
Latest version: 1.0.5

# Application pour plugandwork-atlas

## Developpement

Vous pouvez lancer l'application en mode développement pour éviter d'avoir à l'installer dans core et à la mettre à jour à chaque modification.
En mode dev, le live reload est activé mais il n'y a pas le contexte des vues qui est rendu par core.
Core-ui a besoin de connaitre le point d'api sur lequel exécuter les requetes. Par défaut, celui-ci est http://localhost:3000. Cependant, si vous lancez core sur
une autre adresse, il vous faudra modifier la constante REACT_APP_PAW_HOST dans `scripts.start` du fichier package.json.

### Lancer le serveur de développement

```
cd dev
npm install
npm start
```

## Publier l'application

Pour installer l'application sur core, celle-ci doit etre publiée sur le store de npm.
Avant de publier votre application, vérifiez que tout fonctionne car cette étape _correspond à la mise en production_.

```
npm install
npm run build
npm publish
```

## Resources

- _UI kit_ : https://tailwindcss.com
- _Icones_ : https://fontawesome.com/v5.15/icons?d=gallery&p=1
- _Logo_ : https://www.gnome-look.org/s/Gnome/p/1012430
npm package: @plugandwork/contracts
Description: ## Developpement
Author: plugandwork
Latest version: 1.3.1

# Application d'exemple pour plugandwork/frontend

## Developpement

Vous pouvez lancer l'application en mode développement pour éviter d'avoir à l'installer dans core et à la mettre à jour à chaque modification.
En mode dev, le live reload est activé mais il n'y a pas le contexte des vues qui est rendu par core.
Core-ui a besoin de connaitre le point d'api sur lequel exécuter les requetes. Par défaut, celui-ci est http://localhost:3000. Cependant, si vous lancez core sur
une autre adresse, il vous faudra modifier la constante REACT_APP_PAW_HOST dans `scripts.dev` du fichier package.json.

### Lancer le serveur de développement

```
npm install
npm run dev
```

## Publier l'application

Pour installer l'application sur core, celle-ci doit etre publiée sur le store de npm.
Avant de publier votre application, vérifiez que tout fonctionne car cette étape *correspond à la mise en production*.

```
npm install
npm run build
npm publish
```

## Resources

- *UX inspiration* : http://skote-v-light.react.themesbrand.com/dashboard
- *UI kit* : https://tailwindcss.com
- *Icones* : https://fontawesome.com/v5.15/icons?d=gallery&p=1
- *Logo* : https://www.gnome-look.org/s/Gnome/p/1012430
npm package: @plugandwork/core-ui
Description: plugandwork core-ui module
Author: pierrecabriere
Latest version: 0.7.8

# core-ui

Core-ui est une librairie javascript permettant d'intégrer l'api plugandwork à une application javascript sur les environnements browser ou node

## Pour commencer, configurez le client

```js
import { Client } from "@plugandwork/core-ui";
const coreUiClient = new Client({ host: "https://rec.plugandwork.fr" })
```

Une fois le client créé, ce dernier met à disposition des outils séparés en plusieurs objets : `utils`, `lib` et `models`.

### utils

```js
const { utils } = coreUiClient;
const { axios, authmanager, cable, useSettings, ReactEntry, connectModel, ContextualizedComponent, createModelStore, privateGuard, publicGuard } = utils;
```

#### utils.axios

[https://github.com/axios/axios](https://github.com/axios/axios)

#### utils.authmanager

[https://github.com/pierrecabriere/rxjs-auth]()

#### utils.cable

[https://github.com/rails/rails/tree/main/actioncable]()

```js
const {
  getClient,
  syncUsersAll,
  unsyncUsersAll,
  syncUsersPrivate,
  unsyncUsersPrivate,
} = coreUiClient.utils.cable;
```

###### utils.cable.getClient
###### utils.cable.syncUsersAll
###### utils.cable.unsyncUsersAll
###### utils.cable.syncUsersPrivate
###### utils.cable.unsyncUsersPrivate

#### utils.useSettings

useSettings est un hook React qui permet d'enregistrer des données dans les paramètres de l'utilisateur, avec le même fonctionnement que `React.useState`.
useSettings utilise rxjs pour fonctionner.

```js
function ReactComponent() {
    const [setting, setSetting] = utils.useSettings("keySetting", "defaultValue");

    return <input type="text" value={setting} onChange={e => setSetting(e.currentTarget.value)} />
}
```

#### utils.ReactEntry

Composant React qui prend une app plugandwork (`lib.PlugandworkApp`) en prop pour l'afficher en simulant un contexte de core/frontend

#### utils.connectModel

### lib

```js
const { lib } = coreUiClient;
const { PlugandworkModel, PlugandworkApp, SettingsField, PlugandworkList } = utils;
```

#### lib.PlugandworkModel

```js
class CustomDocModel extends lib.PlugandworkModel {
    static apiType = "docs";

    ping() {
        console.log("pong", this.id);
    }
}

CustomDocModel.get("the_document_id", true).then((doc) => doc.ping());
```

#### lib.PlugandworkApp

#### lib.SettingsField

#### lib.PlugandworkList

### models

```js
const { models } = coreUiClient;
const { App, Bloc, Context, Doc, Folder, Group, Space, User, Batch, Dataset, View, Notification, Favorite, Message, Task } = models;
```

#### models.App
#### models.Bloc
#### models.Context
#### models.Doc

##### Upload a file in a new document

```js
// or get a file with a html input (type file)
const file = new File([buffer], "toto.txt");
const doc = await models.Doc.create({ file });
```

#### models.Folder
#### models.Group
#### models.Space
#### models.User
#### models.Batch
#### models.Dataset
#### models.View
#### models.Notification
#### models.Favorite
#### models.Message
#### models.Task
npm package: @plugandwork/courrier-entrant
Description: ## Developpement
Author: plugandwork
Latest version: 1.0.13

# Application pour plugandwork/courrier-entrant

## Developpement

Vous pouvez lancer l'application en mode développement pour éviter d'avoir à l'installer dans core et à la mettre à jour à chaque modification.
En mode dev, le live reload est activé mais il n'y a pas le contexte des vues qui est rendu par core.
Core-ui a besoin de connaitre le point d'api sur lequel exécuter les requetes. Par défaut, celui-ci est http://localhost:3000. Cependant, si vous lancez core sur
une autre adresse, il vous faudra modifier la constante REACT_APP_PAW_HOST dans `scripts.start` du fichier package.json.

### Lancer le serveur de développement

```
cd dev
npm install
npm start
```

## Publier l'application

Pour installer l'application sur core, celle-ci doit etre publiée sur le store de npm.
Avant de publier votre application, vérifiez que tout fonctionne car cette étape _correspond à la mise en production_.

```
npm install
npm run build
npm publish
```

## Resources

- _UI kit_ : https://tailwindcss.com
- _Icones_ : https://fontawesome.com/v5.15/icons?d=gallery&p=1
- _Logo_ : https://www.gnome-look.org/s/Gnome/p/1012430
npm package: @plugandwork/dossier-assure
Description: Gestion du dossier assuré
Author: plugandwork
Latest version: 0.8.9

# Application d'exemple pour plugandwork/frontend

## Developpement

Vous pouvez lancer l'application en mode développement pour éviter d'avoir à l'installer dans core et à la mettre à jour à chaque modification.
En mode dev, le live reload est activé mais il n'y a pas le contexte des vues qui est rendu par core.
Core-ui a besoin de connaitre le point d'api sur lequel exécuter les requetes. Par défaut, celui-ci est http://localhost:3000. Cependant, si vous lancez core sur
une autre adresse, il vous faudra modifier la constante REACT_APP_PAW_HOST dans `scripts.dev` du fichier package.json.

### Lancer le serveur de développement

```
npm install
npm run dev
```

## Publier l'application

Pour installer l'application sur core, celle-ci doit etre publiée sur le store de npm.
Avant de publier votre application, vérifiez que tout fonctionne car cette étape *correspond à la mise en production*.

```
npm install
npm run build
npm publish
```

## Resources

- *UX inspiration* : http://skote-v-light.react.themesbrand.com/dashboard
- *UI kit* : https://tailwindcss.com
- *Icones* : https://fontawesome.com/v5.15/icons?d=gallery&p=1
- *Logo* : https://www.gnome-look.org/s/Gnome/p/1012430
npm package: @plugandwork/ecm
Description: ## Developpement
Author: plugandwork
Latest version: 1.1.1

# Application d'exemple pour plugandwork/frontend

## Developpement

Vous pouvez lancer l'application en mode développement pour éviter d'avoir à l'installer dans core et à la mettre à jour à chaque modification.
En mode dev, le live reload est activé mais il n'y a pas le contexte des vues qui est rendu par core.
Core-ui a besoin de connaitre le point d'api sur lequel exécuter les requetes. Par défaut, celui-ci est http://localhost:3000. Cependant, si vous lancez core sur
une autre adresse, il vous faudra modifier la constante REACT_APP_PAW_HOST dans `scripts.start` du fichier package.json.

### Lancer le serveur de développement

```
cd dev
npm install
npm start
```

## Publier l'application

Pour installer l'application sur core, celle-ci doit etre publiée sur le store de npm.
Avant de publier votre application, vérifiez que tout fonctionne car cette étape *correspond à la mise en production*.

```
npm install
npm run build
npm publish
```

## Resources

- *UI kit* : https://tailwindcss.com
- *Icones* : https://fontawesome.com/v5.15/icons?d=gallery&p=1
- *Logo* : https://www.gnome-look.org/s/Gnome/p/1012430
npm package: @plugandwork/example-app
Description: ![logo](logo.png)
Author: plugandwork
Latest version: 1.0.8

# Examples app
![logo](logo.png)

Paw application example.

# Development
## Node app setup

**Clone it outside core application to avoid build conflicts**

```shell
git clone git@code.plugandwork.net:plugandwork.app/example_app.git
cd example_app
npm install
npm run-script build
```

## Rails app setup

⚠️⚠️⚠️ When app is zipped go to core server and start it with `rails s` ⚠️⚠️⚠️

Then push your app to the backend like this

```shell
curl --location --request POST 'https://localhost:3000/api/d2/apps/publish' \
--header 'Authorization: Bearer token_value' \
--form 'file=@"/path/to/example_app/bundle.zip"'
```


## Live reload
After installed app on core server, you can replace as follow inside [package.json of core](https://code.plugandwork.net/plugandwork/core/-/blob/develop/frontend/package.json)

```diff
{
  "dependencies": {
    - "example": "file:view_app_modules/example_app",
    + "example": "file:../../relative_path/to/example_app",
  }
}
```

Then run `npm install`

Now, you can run `npm start` into example app folder to watch changes, then frontend autorefesh !

# Publish app
To publish app on paw store, run following request

```shell
curl --location --request POST 'https://store.plugandwork.fr/api/d2/apps/publish' \
--header 'Authorization: Bearer token_value' \
--form 'file=@"/path/to/example_app/bundle.zip"'
```
npm package: @plugandwork/files
Description: plugandwork files browser
Author: plugandwork
Latest version: 2.0.5

# Application d'exemple pour plugandwork/frontend

## Developpement

Vous pouvez lancer l'application en mode développement pour éviter d'avoir à l'installer dans core et à la mettre à jour à chaque modification.
En mode dev, le live reload est activé mais il n'y a pas le contexte des vues qui est rendu par core.
Core-ui a besoin de connaitre le point d'api sur lequel exécuter les requetes. Par défaut, celui-ci est http://localhost:3000. Cependant, si vous lancez core sur
une autre adresse, il vous faudra modifier les variables d'environnement REACT_APP_PAW_HOST et REACT_APP_CABLE_HOST dans `scripts.start` du fichier package.json.

### Lancer le serveur de développement

```
npm install
npm start
```

## Publier l'application

Pour installer l'application sur core, celle-ci doit etre publiée sur le store de npm.
Avant de publier votre application, vérifiez que tout fonctionne car cette étape *correspond à la mise en production*.

### Publier sur npm

```
npm install
npm run build
npm publish
```

### Installer sur core

La seconde étape pour installer l'application sur core est d'accéder à l'interface d'administration des applications sur core (https://instance-core.fr/admin/apps) et d'ajouter l'application en question.
Depuis cette même interface, vous pourrez également mettre à jour la version de l'application une fois que celle-ci aura été publiée sur npm.
**L'installation ou la mise à jour de la version d'une application relance le build de frontend. Si une erreur survient lors de cette étape, il est possible de débugger le build en le lancant manuellement depuis le dossier core/frontend**

## Resources

- *UI kit* : https://tailwindcss.com
- *Icones* : https://fontawesome.com/v5.15/icons?d=gallery&p=1
npm package: @plugandwork/habilitations
Description: Application Habilitations
Author: plugandwork
Latest version: 1.3.5

# Application pour Habilitations

## Developpement

Vous pouvez lancer l'application en mode développement pour éviter d'avoir à l'installer dans core et à la mettre à jour à chaque modification.
En mode dev, le live reload est activé mais il n'y a pas le contexte des vues qui est rendu par core.
Core-ui a besoin de connaitre le point d'api sur lequel exécuter les requetes. Par défaut, celui-ci est http://localhost:3000. Cependant, si vous lancez core sur
une autre adresse, il vous faudra modifier la constante REACT_APP_PAW_HOST dans `scripts.dev` du fichier package.json.

### Lancer le serveur de développement

```
npm install
npm run dev
```

## Publier l'application

Pour installer l'application sur core, celle-ci doit etre publiée sur le store de npm.
Avant de publier votre application, vérifiez que tout fonctionne car cette étape _correspond à la mise en production_.

```
npm install
npm run build
npm publish
```

## Resources

- _UX inspiration_ : http://skote-v-light.react.themesbrand.com/dashboard
- _UI kit_ : https://tailwindcss.com
- _Icones_ : https://fontawesome.com/v5.15/icons?d=gallery&p=1
- _Logo_ : https://www.gnome-look.org/s/Gnome/p/1012430
npm package: @plugandwork/mails
Description: Manage your plugandwork emails
Author: plugandwork
Latest version: 1.4.1

# Application emails plugandwork

Cette application vous permet de gérer vos mails plugandwork, vous pouvez envoyer, transferer des mails.
Vous pouvez aussi créer des dossiers et surtout partager ces dossiers avec d'autres utilisateurs
npm package: @plugandwork/plugndwork-todolist
Description: ## Developpement
Author: plugandwork
Latest version: 1.0.3

# Application d'exemple pour plugandwork/frontend

## Developpement

Vous pouvez lancer l'application en mode développement pour éviter d'avoir à l'installer dans core et à la mettre à jour à chaque modification.
En mode dev, le live reload est activé mais il n'y a pas le contexte des vues qui est rendu par core.
Core-ui a besoin de connaitre le point d'api sur lequel exécuter les requetes. Par défaut, celui-ci est http://localhost:3000. Cependant, si vous lancez core sur
une autre adresse, il vous faudra modifier la constante REACT_APP_PAW_HOST dans `scripts.dev` du fichier package.json.

### Lancer le serveur de développement

```
npm install
npm run dev
```

## Publier l'application

Pour installer l'application sur core, celle-ci doit etre publiée sur le store de npm.
Avant de publier votre application, vérifiez que tout fonctionne car cette étape *correspond à la mise en production*.

```
npm install
npm run build
npm publish
```

## Resources

- *UX inspiration* : http://skote-v-light.react.themesbrand.com/dashboard
- *UI kit* : https://tailwindcss.com
- *Icones* : https://fontawesome.com/v5.15/icons?d=gallery&p=1
- *Logo* : https://www.gnome-look.org/s/Gnome/p/1012430
npm package: @plugandwork/streo-crm
Description: ## Developpement
Author: plugandwork
Latest version: 0.0.3

# Application d'exemple pour streo-crm

## Developpement

Vous pouvez lancer l'application en mode développement pour éviter d'avoir à l'installer dans core et à la mettre à jour à chaque modification.
En mode dev, le live reload est activé mais il n'y a pas le contexte des vues qui est rendu par core.
Core-ui a besoin de connaitre le point d'api sur lequel exécuter les requetes. Par défaut, celui-ci est http://localhost:3000. Cependant, si vous lancez core sur
une autre adresse, il vous faudra modifier la constante REACT_APP_PAW_HOST dans `scripts.dev` du fichier package.json.

### Lancer le serveur de développement

```
npm install
npm run dev
```

## Publier l'application

Pour installer l'application sur core, celle-ci doit etre publiée sur le store de npm.
Avant de publier votre application, vérifiez que tout fonctionne car cette étape *correspond à la mise en production*.

```
npm install
npm run build
npm publish
```

## Resources

- *UX inspiration* : http://skote-v-light.react.themesbrand.com/dashboard
- *UI kit* : https://tailwindcss.com
- *Icones* : https://fontawesome.com/v5.15/icons?d=gallery&p=1
- *Logo* : https://www.gnome-look.org/s/Gnome/p/1012430
npm package: @plugandwork/streo-pgm
Description: ## Developpement
Author: plugandwork
Latest version: 0.0.3

# Application d'exemple pour streo-pgm

## Developpement

Vous pouvez lancer l'application en mode développement pour éviter d'avoir à l'installer dans core et à la mettre à jour à chaque modification.
En mode dev, le live reload est activé mais il n'y a pas le contexte des vues qui est rendu par core.
Core-ui a besoin de connaitre le point d'api sur lequel exécuter les requetes. Par défaut, celui-ci est http://localhost:3000. Cependant, si vous lancez core sur
une autre adresse, il vous faudra modifier la constante REACT_APP_PAW_HOST dans `scripts.dev` du fichier package.json.

### Lancer le serveur de développement

```
npm install
npm run dev
```

## Publier l'application

Pour installer l'application sur core, celle-ci doit etre publiée sur le store de npm.
Avant de publier votre application, vérifiez que tout fonctionne car cette étape *correspond à la mise en production*.

```
npm install
npm run build
npm publish
```

## Resources

- *UX inspiration* : http://skote-v-light.react.themesbrand.com/dashboard
- *UI kit* : https://tailwindcss.com
- *Icones* : https://fontawesome.com/v5.15/icons?d=gallery&p=1
- *Logo* : https://www.gnome-look.org/s/Gnome/p/1012430
npm package: @plugboard/core
Description: 以插件为中心按需配置解决复杂业务
Latest version: 0.5.2

## PlugBoard

以插件为中心按需配置解决复杂业务

[在线文档](https://mlib.wang/plugboard/)

### 特点

- 插件化: 以预定的生命周期开发插件，像乐高积木一样组合，降低耦合
- 可配置: 无论是本地、测试还是生产等环境，通过不同的环境配置，构建特定业务
- 易使用: 无论是看文档还是阅读基础源码，都能让使用者很快上，以此开发出复杂的业务
npm package: @plugdash/readtime
Description: Estimated reading time and word count for EmDash posts
Latest version: 0.2.0

# @plugdash/readtime

Word count and reading time for EmDash content.
Writes `readingTimeMinutes` and `wordCount` to post metadata on publish.
The EmDash equivalent of [Reading Time WP](https://wordpress.org/plugins/reading-time-wp/).

## Install

```bash
pnpm add @plugdash/readtime
```

## Register

```js
// astro.config.mjs
import { defineConfig } from "astro/config";
import emdash from "emdash";
import { readtimePlugin } from "@plugdash/readtime";

export default defineConfig({
  integrations: [
    emdash({
      plugins: [readtimePlugin()],
      // or sandboxed: [readtimePlugin()]
    }),
  ],
});
```

## Configuration

### Admin dashboard

After installing, open the EmDash admin and go to Plugins - Reading Time
- Settings. All configuration options are available there. Changes take
effect on the next publish - no code changes required.

### astro.config.mjs

Pass config at register time. Values are seeded into KV on install and
reseeded automatically when the config in code changes.

```js
readtimePlugin({
  wordsPerMinute: 250,
  collections: ["blog", "articles"],
});
```

| Option           | Type       | Default | Description                                       |
| ---------------- | ---------- | ------- | ------------------------------------------------- |
| wordsPerMinute   | `number`   | `238`   | Average reading speed used for the calculation    |
| collections      | `string[]` | all     | Limit processing to specific collection slugs     |

**Set `collections` whenever your site has collections without a
`metadata` field** (e.g. EmDash's built-in `plugins` collection).
Without an allowlist, readtime tries to write metadata on every content
save and will log (but not throw) a "no such column: metadata" error
when the target collection lacks one.

## Astro theme usage

Access reading time values from the content metadata in your Astro templates:

```astro
---
const post = await emdash.content.get("posts", Astro.params.id);
const { wordCount, readingTimeMinutes } = post.data.metadata ?? {};
---

{readingTimeMinutes && <span>{readingTimeMinutes} min read</span>}
{wordCount && <span>{wordCount.toLocaleString()} words</span>}
```

## What it does

- Ships `ReadingTime.astro` - drop-in companion component with four variants
- Fires on `content:afterSave` when status is `published`
- Extracts plain text from Portable Text body blocks
- Counts words (splits on whitespace)
- Calculates reading time with a configurable WPM rate
- Writes `wordCount` and `readingTimeMinutes` to content metadata
- Preserves existing metadata keys from other plugins

## What it does not do

- Does not calculate reading time for drafts, archived, or scheduled content
- Does not count words in images, embeds, or other non-text block types
- Does not provide server-side rendering of the component - it is a client Astro component
- Does not support per-post WPM overrides
- Does not account for code blocks or block quotes differently
npm package: @plugfn/cli
Description: CLI tool for PlugFn SDK
Author: 21n
Latest version: 0.0.1

# PlugFn CLI

Command-line interface for the PlugFn SDK.

## Installation

```bash
npm install -g @superfunctions/plugfn-cli
```

## Commands

### `plugfn init`

Initialize a new PlugFn project.

```bash
plugfn init
plugfn init --directory ./my-project
```

Creates:
- Project structure
- Configuration file (`plugfn.config.ts`)
- Environment template (`.env.example`)
- Example code

### `plugfn generate-types`

Generate TypeScript types for providers.

```bash
# Generate types for a specific provider
plugfn generate-types --provider github --output ./types

# Generate types for all providers
plugfn generate-types --all --output ./types
```

### `plugfn add-provider`

Create a new provider from template.

```bash
plugfn add-provider --name custom-api --auth api-key
plugfn add-provider --name oauth-service --auth oauth2
```

Options:
- `--name`: Provider name (required)
- `--auth`: Auth type (oauth2, api-key, jwt, basic)
- `--output`: Output directory (default: `./src/providers`)

### `plugfn test`

Test connections and actions.

```bash
plugfn test --provider github
plugfn test --provider github --action issues.create
plugfn test --provider github --connection conn-123
```

## Examples

### Initialize a new project

```bash
mkdir my-integration-app
cd my-integration-app
plugfn init
npm install
```

### Create a custom provider

```bash
plugfn add-provider --name shopify --auth api-key
```

This creates a provider template at `src/providers/shopify/index.ts`.

### Generate types

```bash
plugfn generate-types --all
```

## License

Apache-2.0