open-index/open-npm huggingface dataset:
npm package: @kevinkelchen/cordova-cookie-master
Description: This plugin enables the management of cookies in WebViews on iOS and Android as those platforms restrict the use of "document.cookie".
Author: Kevin Kelchen
Latest version: 0.1.0

Cookie Master
==============

As you may already know, WebViews on Android and iOS platforms do not support regular use of <code>document.cookie</code> for managing the cookies in your app. This plugin allows you to get and set cookie values from your WebView through a simple interface.

## Supported Platforms
* Android
* iOS

## Installing

Install with Cordova CLI

    $ cordova plugin add @kevinkelchen/cordova-plugin-cookiemaster

## Usage
### Get cookie value
```javascript
cookieMaster.getCookieValue('http://<some host>:<some port>', '<cookie name>', function(data) {
  console.log(data.cookieValue);
}, function(error) {
  if (error) {
    console.log('error: ' + error);
  }
});
```
### Set cookie value
```javascript
cookieMaster.setCookieValue('http://<some host>:<some port>', '<cookie name>', '<cookie value>',
    function() {
        console.log('A cookie has been set');
    },
    function(error) {
        console.log('Error setting cookie: '+error);
    });
```
The cookie value should be formatted just like a regular <code>document.cookie</code> value.

### Clear all cookies
```javascript
cookieMaster.clearCookies(
    function() {
    console.log('Cookies have been cleared');
    },
    function() {
        console.log('Cookies could not be cleared');
    });
```

## Limitations
* This version has been tested on Android 4.4 ~ 5.1 devices, iOS 7.1 ~ 9 devices. Experience may vary for different OS versions.


## License
This plugin is distributed under the MIT License.

## Thanks to
This plugin is a fork of Edward Gao's "cookie master" plugin which was forked from Kristian Hristov's "cookie master" plugin. This fork is adding experimental WKWebView support and **may be short-lived**.

This plugin was inspired by the great work on the CookieMonster plugin by @barrettc
npm package: @kevinkl3/react-script-loader
Description: A decorator for script lazy loading on react component
Author: leozdgao
Latest version: 0.3.0

# react-script-loader

A HOC for script lazy loading on react component.
Forked from [leozdgao/react-async-script-loader](https://github.com/leozdgao/react-async-script-loader)
## Description

Some component may depend on other vendors which you may not want to load them until you really need them. So here it is, use **High Order Component** to decorate your component and it will handle lazy loading for you, it support parallel and sequential loading.

## Installation

```bash
npm install --save @kevinkl3/react-script-loader
```

## API

```javascript
scriptLoader(...scriptSrc)([WrappedComponent])
```

`scriptSrc` can be a string of source or an array of source. `scriptSrc` will be loaded sequentially, but array of source will be loaded parallelly. It also cache the loaded script to avoid duplicated loading. More lively description see use case below.

## Properties

Decorated component will receive following properties:

|Name|Type|Description|
|----|----|-----------|
|isScriptLoaded|Boolean|Represent scripts loading process is over or not, maybe part of scripts load failed.|
|isScriptLoadSucceed|Boolean|Represent all scripts load successfully or not.|
|onScriptLoaded|Function|Triggered when all scripts load successfully.|

## How to use

You can use it to decorate your component.

```javascript
import React, { Component } from 'react'
import scriptLoader from '@kevinkl3/react-script-loader'

class Editor extends Component {
  ...

  componentWillReceiveProps ({ isScriptLoaded, isScriptLoadSucceed }) {
    if (isScriptLoaded && !this.props.isScriptLoaded) { // load finished
      if (isScriptLoadSucceed) {
        this.initEditor()
      }
      else this.props.onError()
    }
  }

  componentDidMount () {
    const { isScriptLoaded, isScriptLoadSucceed } = this.props
    if (isScriptLoaded && isScriptLoadSucceed) {
      this.initEditor()
    }
  }

  ...
}

export default scriptLoader(
  [
    'https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.4/jquery.min.js',
    'https://cdnjs.cloudflare.com/ajax/libs/marked/0.3.5/marked.min.js'
  ],
  '/assets/bootstrap-markdown.js'
)(Editor)
```

The example above means that the `jquery` and `marked` will be loading parallelly, and after loaded these 2 vendors, load `bootstrap-markdown` sequentially.

It is possible that some script will be failed to load. ScriptLoader will cache the script that load successfully and will remove the script node which fail to load before.

*Currently, if you try to reload scripts, you have to remount your component.*

And it's cooler if you use decorator syntax. (ES7)

```javascript
@scriptLoader(
  [
    'https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.4/jquery.min.js',
    'https://cdnjs.cloudflare.com/ajax/libs/marked/0.3.5/marked.min.js'
  ],
  '/assets/bootstrap-markdown.js'
)
class Editor extends Component {

}
```

## license

MIT
npm package: @kevinkosterr/vue3-form-generator
Description: A schema-based form generator component for Vue 3, based on the original  [`vue-form-generator`](https://github.com/vue-generators/vue-form-generator) library.
Author: Kevin Koster
Latest version: 2.7.0

# <img width="50" src="https://github.com/user-attachments/assets/1b793612-8ee9-46bf-bcd3-b233fec4b338">  Vue 3 Form Generator
A schema-based form generator component for Vue 3, based on the original 
[`vue-form-generator`](https://github.com/vue-generators/vue-form-generator) library.

[![GitHub last commit](https://img.shields.io/github/last-commit/kevinkosterr/vue3-form-generator?logo=github)](https://github.com/kevinkosterr/vue3-form-generator/commits/main/)
[![semantic-release: angular](https://img.shields.io/badge/semantic--release-angular-e10079?logo=semantic-release)](https://github.com/semantic-release/semantic-release)
[![Static Badge](https://img.shields.io/badge/Vue%20version-3.x.x-green?logo=vue.js)](https://vuejs.org)
[![NPM Version](https://img.shields.io/npm/v/%40kevinkosterr%2Fvue3-form-generator?logo=npm)](https://www.npmjs.com/package/@kevinkosterr/vue3-form-generator)
[![GitHub License](https://img.shields.io/github/license/kevinkosterr/vue3-form-generator)](https://github.com/kevinkosterr/vue3-form-generator?tab=MIT-1-ov-file)

You can find documentation on the [documentation page](https://kevinkosterr.github.io/vue3-form-generator).

## Building for development
1. Install the dependencies
```bash
pnpm install
```
2. Create a schema inside the playground folder, for this you can copy `schema.example.js`.
```bash
cp playground/schema.example.js playground/schema.js
```
3. Run the development playground
```bash
pnpm run dev 
```
npm package: @kevinldonnelly/firebase-signin
Description: Webcomponent firebase-signin following open-wc recommendations
Author: firebase-signin
Latest version: 0.0.3

# \<firebase-signin>

This webcomponent follows the [open-wc](https://github.com/open-wc/open-wc) recommendation.

## Installation
```bash
npm i firebase-signin
```

## Usage
```html
<script type="module">
  import 'firebase-signin/firebase-signin.js';
</script>

<firebase-signin></firebase-signin>
```



## Tooling configs

For most of the tools, the configuration is in the `package.json` to reduce the amount of files in your project.

If you customize the configuration a lot, you can consider moving them to individual files.

## Local Demo with `web-dev-server`
```bash
npm start
```
To run a local development server that serves the basic demo located in `demo/index.html`
npm package: @kevinldonnelly/hello-world
Description: Webcomponent hello-world following open-wc recommendations
Author: hello-world
Latest version: 0.0.0

# \<hello-world>

This webcomponent follows the [open-wc](https://github.com/open-wc/open-wc) recommendation.

## Installation
```bash
npm i hello-world
```

## Usage
```html
<script type="module">
  import 'hello-world/hello-world.js';
</script>

<hello-world></hello-world>
```



## Tooling configs

For most of the tools, the configuration is in the `package.json` to reduce the amount of files in your project.

If you customize the configuration a lot, you can consider moving them to individual files.

## Local Demo with `web-dev-server`
```bash
npm start
```
To run a local development server that serves the basic demo located in `demo/index.html`
npm package: @kevinli1108/lookin-mcp
Description: MCP server for iOS UI debugging - inspect view hierarchy, diagnose layout issues via AI
Author: renektonli
Latest version: 1.1.0

# Lookin MCP

通过 AI 助手调试 iOS App 的 UI 视图层级。

```
AI 助手 ◄──MCP──► lookin-mcp (Node.js) ◄──USB/WiFi──► iOS App (LookinMCPBridge)
```

## 快速开始（3 步）

### Step 1: iOS 项目集成

将 `ios-bridge/` 目录下的两个文件拖入你的 Xcode 项目：

```
ios-bridge/LookinMCPBridge.h
ios-bridge/LookinMCPBridge.m
```

> **零代码接入** — 自动在 DEBUG 模式下启动，Release 不会包含。

### Step 2: 配置 MCP 服务

**Continue（推荐）** — 在 `~/.continue/config.yaml` 中添加：

```yaml
mcpServers:
  - name: lookin-mcp
    command: npx
    args:
      - -y
      - lookin-mcp
```

**Cursor** — 在 `.cursor/mcp.json` 中添加：

```json
{
  "mcpServers": {
    "lookin-mcp": {
      "command": "npx",
      "args": ["-y", "lookin-mcp"]
    }
  }
}
```

**VSCode Copilot** — 在 `.vscode/mcp.json` 中添加：

```json
{
  "servers": {
    "lookin-mcp": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "lookin-mcp"]
    }
  }
}
```

### Step 3: 开始使用

1. Xcode 运行 App（模拟器或 USB 真机）
2. 在 AI 助手中直接对话：

> "获取当前页面的视图层级"
> "找到所有 UILabel 并告诉我文本内容"
> "诊断一下地址 0x... 的视图为什么不显示"

**就这么简单。** USB 真机会自动连接，无需手动配置。

---

## 环境变量（可选）

| 变量 | 默认值 | 说明 |
|------|--------|------|
| `LOOKIN_HOST` | `127.0.0.1` | iOS 设备 IP（WiFi 直连时使用） |
| `LOOKIN_PORT` | `56780` | HTTP Server 端口 |
| `LOOKIN_USB` | `true` | 自动 USB 转发（设为 `false` 关闭） |

WiFi 直连示例：
```yaml
mcpServers:
  - name: lookin-mcp
    command: npx
    args: ["-y", "lookin-mcp"]
    env:
      LOOKIN_HOST: "192.168.1.100"
      LOOKIN_USB: "false"
```

## 提供的工具（10 个）

| 工具 | 说明 |
|------|------|
| `get_view_hierarchy` | 获取完整视图层级树 |
| `inspect_view` | 查看视图详细属性 |
| `find_views` | 按类名搜索视图 |
| `get_constraints` | 获取 Auto Layout 约束 |
| `diagnose_view` | 自动诊断视图问题 |
| `get_vc_hierarchy` | 获取 ViewController 层级 |
| `check_connection` | 检查连接状态 |
| `start_usb_proxy` | 启动 USB 端口转发 |
| `stop_usb_proxy` | 停止 USB 端口转发 |
| `list_usb_devices` | 列出 USB 连接的设备 |

## 前置依赖

- **Node.js** >= 18
- **真机 USB 调试**需要 `iproxy`：`brew install libimobiledevice`

## 工作原理

1. iOS 端的 `LookinMCPBridge` 在 DEBUG 模式下启动一个轻量 HTTP Server（端口 56780）
2. MCP Server 通过 HTTP 请求获取视图数据，转换为 AI 友好的文本格式
3. 真机通过 `iproxy` 将 USB 连接映射为本地端口，无需 WiFi

## License

MIT
npm package: @kevinmarques/capacitor-barometer
Description: A Capacitor plugin that allows you to access barometric pressure data from the device's sensors. This plugin provides real-time updates on atmospheric pressure and enables your app to make weather predictions, track altitude changes, or create pressure-ba
Author: Kevin Marques
Latest version: 0.1.1

# capacitor-barometer

A Capacitor plugin that allows you to access barometric pressure data from the device's sensors. This plugin provides real-time updates on atmospheric pressure and enables your app to make weather predictions, track altitude changes, or create pressure-based triggers.

## Install

```bash
npm install capacitor-barometer
npx cap sync
```

## API

<docgen-index>

* [`isAvailable()`](#isavailable)
* [`getPressure()`](#getpressure)
* [`addListener('onPressureChange', ...)`](#addlisteneronpressurechange-)
* [Interfaces](#interfaces)

</docgen-index>

<docgen-api>
<!--Update the source file JSDoc comments and rerun docgen to update the docs below-->

### isAvailable()

```typescript
isAvailable() => Promise<{ available: boolean; }>
```

Checks if the barometer sensor is available.

**Returns:** <code>Promise&lt;{ available: boolean; }&gt;</code>

**Since:** 0.1.0

--------------------


### getPressure()

```typescript
getPressure() => Promise<{ pressure: number; }>
```

Gets the current pressure.

**Returns:** <code>Promise&lt;{ pressure: number; }&gt;</code>

**Since:** 0.1.0

--------------------


### addListener('onPressureChange', ...)

```typescript
addListener(eventName: 'onPressureChange', listenerFunc: (event: PressureChangeEvent) => void) => Promise<PluginListenerHandle> & PluginListenerHandle
```

Adds a listener for the pressure change event.
This event is emitted whenever the barometric pressure changes.

| Param              | Type                                                                                    | Description                                               |
| ------------------ | --------------------------------------------------------------------------------------- | --------------------------------------------------------- |
| **`eventName`**    | <code>'onPressureChange'</code>                                                         | - Name of the event to listen for (`"onPressureChange"`). |
| **`listenerFunc`** | <code>(event: <a href="#pressurechangeevent">PressureChangeEvent</a>) =&gt; void</code> | - Callback function that receives the pressure data.      |

**Returns:** <code>Promise&lt;<a href="#pluginlistenerhandle">PluginListenerHandle</a>&gt; & <a href="#pluginlistenerhandle">PluginListenerHandle</a></code>

--------------------


### Interfaces


#### PluginListenerHandle

| Prop         | Type                                      |
| ------------ | ----------------------------------------- |
| **`remove`** | <code>() =&gt; Promise&lt;void&gt;</code> |


#### PressureChangeEvent

| Prop           | Type                |
| -------------- | ------------------- |
| **`pressure`** | <code>number</code> |

</docgen-api>
npm package: @kevinmarrec/cloudstack-eslint-config
Description: Opinionated ESLint config.
Author: Kevin Marrec
Latest version: 1.0.0-rc.15

# @kevinmarrec/cloudstack-eslint-config

## Description

Opinionated [ESLint](https://eslint.org) config.

## Opinions

- Extends [@antfu/eslint-config](https://github.com/antfu/eslint-config) with [formatters](https://github.com/antfu/eslint-config?tab=readme-ov-file#formatters) & [UnoCSS](https://github.com/antfu/eslint-config?tab=readme-ov-file#unocss) support (`uno.config.ts` detection)

  - with quite minor rule overrides:
    - [import/consistent-type-specifier-style](https://github.com/import-js/eslint-plugin-import/blob/main/docs/rules/consistent-type-specifier-style.md) is disabled
    - [import/no-duplicates](https://github.com/import-js/eslint-plugin-import/blob/main/docs/rules/no-duplicates.md) is overridden to prefer inline type imports
    - [perfectionist/sort-imports](https://perfectionist.dev/rules/sort-imports.html) is overridden with custom groups order and enforced new lines between groups
  - and some additional rules:
    - [vue/no-unused-properties](https://eslint.vuejs.org/rules/no-unused-properties) is enabled

- Disables [unsupported TypeScript version warning](https://typescript-eslint.io/packages/parser/#warnonunsupportedtypescriptversion)

- Opinionated, but [very customizable](https://github.com/antfu/eslint-config?tab=readme-ov-file#customization)

## Usage

> Requires [ESLint](https://eslint.org) v9 _or later_.

### Default

```ts
// eslint.config.ts
export { default } from '@kevinmarrec/cloudstack-eslint-config'
```

### Extended

```ts
// eslint.config.ts
import { useConfig } from '@kevinmarrec/cloudstack-eslint-config'

export default useConfig({ /* options */ })
```
npm package: @kevinmarrec/cloudstack-knip-config
Description: Opinionated Knip config.
Author: Kevin Marrec
Latest version: 1.0.0-rc.15

# @kevinmarrec/cloudstack-knip-config

## Description

Opinionated [Knip](https://knip.dev) config.

## Opinions

- Disables [Stylelint plugin](https://knip.dev/reference/plugins/stylelint) to prevent false positives

- Provides default root entries when using workspaces: `*.config.ts`

- Supports all [Knip config](https://knip.dev/reference/configuration) options

## Usage

> Requires [Knip](https://knip.dev) v5 _or later_.

### Default

```ts
// knip.config.ts
export { default } from '@kevinmarrec/cloudstack-knip-config'
```

### Extended

```ts
// knip.config.ts
import { useConfig } from '@kevinmarrec/cloudstack-knip-config'

export default useConfig({ /* options */ })
```
npm package: @kevinmarrec/cloudstack-stylelint-config
Description: Opinionated Stylelint config.
Author: Kevin Marrec
Latest version: 1.0.0-rc.15

# @kevinmarrec/cloudstack-stylelint-config

## Description

Opinionated [Stylelint](https://stylelint.io) config.

## Opinions

- Extends the following configs:

  - [stylelint-config-recommended-scss](https://github.com/stylelint-scss/stylelint-config-recommended-scss)
  - [stylelint-config-html](https://github.com/ota-meshi/stylelint-config-html)
  - [stylelint-config-recess-order](https://github.com/stormwarning/stylelint-config-recess-order)

- Adds the following plugins:

  - [stylelint-plugin-use-baseline](https://github.com/ryo-manba/stylelint-plugin-use-baseline)

- Enforces the following rules:

  - [declaration-block-no-duplicate-properties](https://stylelint.io/user-guide/rules/list/declaration-block-no-duplicate-properties)
  - [length-zero-no-unit](https://stylelint.io/user-guide/rules/list/length-zero-no-unit)

- Supports all [Stylelint config](https://stylelint.io/user-guide/configure) options

## Usage

> Requires [Stylelint](https://stylelint.io) v16 _or later_.

### Default

```ts
// stylelint.config.ts
export { default } from '@kevinmarrec/cloudstack-stylelint-config'
```

### Extended

```ts
// stylelint.config.ts
import { useConfig } from '@kevinmarrec/cloudstack-stylelint-config'

export default useConfig({ /* options */ })
```
npm package: @kevinmarrec/cloudstack-taze-config
Description: Opinionated Taze config.
Author: Kevin Marrec
Latest version: 1.0.0-rc.15

# @kevinmarrec/cloudstack-taze-config

## Description

Opinionated [Taze](https://github.com/antfu-collective/taze) config.

## Opinions

- Enables interactive mode (`interactive: true`)

- Enables recursive bumping (`recursive: true`)

- Installs dependencies after bumping versions (`install: true`)

- Updates `package.json` files (`write: true`)

- Supports all [Taze config](https://github.com/antfu-collective/taze?tab=readme-ov-file#config-file) options

## Usage

> Requires [Taze](https://github.com/antfu-collective/taze) v18 _or later_.

### Default

```ts
// taze.config.ts
export { default } from '@kevinmarrec/cloudstack-taze-config'
```

### Extended

```ts
// taze.config.ts
import { useConfig } from '@kevinmarrec/cloudstack-taze-config'

export default useConfig({ /* options */ })
```
npm package: @kevinmarrec/cloudstack-tsconfig
Description: Opinionated TypeScript config.
Author: Kevin Marrec
Latest version: 1.0.0-rc.15

# @kevinmarrec/cloudstack-tsconfig

## Description

Opinionated [TypeScript](https://www.typescriptlang.org) config.

## Opinions

Have a direct look at the [source (tsconfig.json)](https://github.com/kevinmarrec/cloudstack/blob/main/packages/tsconfig/tsconfig.json).

## Usage

> Requires [TypeScript](https://www.typescriptlang.org) v5.7 _or later_.

```json
{
  "extends": "@kevinmarrec/cloudstack-tsconfig"
}
```
npm package: @kevinmarrec/cloudstack-unocss-config
Description: Opinionated UnoCSS config.
Author: Kevin Marrec
Latest version: 1.0.0-rc.15

# @kevinmarrec/cloudstack-unocss-config

## Description

Opinionated [UnoCSS](https://unocss.dev) [config](https://unocss.dev/config).

## Opinions

- Uses [Cloudstack UnoCSS preset](https://github.com/kevinmarrec/cloudstack/tree/main/packages/unocss-preset#readme) by default

  - Hoists `fonts` and `icons` preset options to the config level

- Supports all [UnoCSS config](https://unocss.dev/config) options

## Usage

> Requires [UnoCSS](https://unocss.dev) v66 _or later_.

### Default

```ts
// uno.config.ts
export { default } from '@kevinmarrec/cloudstack-unocss-config'
```

### Extended

```ts
// uno.config.ts
import { useConfig } from '@kevinmarrec/cloudstack-unocss-config'

export default useConfig({ /* options */ })
```
npm package: @kevinmarrec/cloudstack-unocss-preset
Description: Opinionated UnoCSS preset.
Author: Kevin Marrec
Latest version: 1.0.0-rc.15

# @kevinmarrec/cloudstack-unocss-preset

## Description

Opinionated [UnoCSS](https://unocss.dev) [preset](https://unocss.dev/config/presets).

## Opinions

- Extends the following official presets:

  - [UnoCSS Wind preset](https://unocss.dev/presets/wind)
  - [UnoCSS Icons preset](https://unocss.dev/presets/icons)
  - [UnoCSS Web Fonts preset](https://unocss.dev/presets/web-fonts)

- Extends the following official transformers:

  - [UnoCSS Directives transformer](https://unocss.dev/transformers/directives)
  - [UnoCSS Variant group transformer](https://unocss.dev/transformers/variant-group)

- Adds a custom layer to enforce full height on top-level elements:

  ```css
  /* layer: default */
  html,
  body,
  #app {
    height: 100%;
  }
  ```

- Flattens preflight layer root to:

  ```ts
  ['*,::before,::after,::backdrop']
  ```

## Usage

> Requires [UnoCSS](https://unocss.dev) v66 _or later_.

```ts
// uno.config.ts
import preset from '@kevinmarrec/cloudstack-unocss-preset'
import { defineConfig } from 'unocss'

export default defineConfig({
  presets: [
    preset({ /* options */ }),
  ],
})
```
npm package: @kevinmarrec/cloudstack-vite-config
Description: Opinionated Vite config.
Author: Kevin Marrec
Latest version: 1.0.0-rc.15

# @kevinmarrec/cloudstack-vite-config

## Description

Opinionated [Vite](https://vite.dev) [config](https://vite.dev/config).

## Opinions

- Uses [Cloudstack Vite plugin](https://github.com/kevinmarrec/cloudstack/tree/main/packages/vite-plugin#readme) by default

  - Hoists plugin options to the `cloudstack` config key

- Supports all [Vite config](https://vite.dev/config) options

## Usage

> Requires [Vite](https://vite.dev) v6 _or later_.

### Default

```ts
// vite.config.ts
export { default } from '@kevinmarrec/cloudstack-vite-config'
```

### Extended

```ts
// vite.config.ts
import { useConfig } from '@kevinmarrec/cloudstack-vite-config'

export default useConfig({ /* options */ })
```
npm package: @kevinmarrec/cloudstack-vite-plugin
Description: Opinionated Vite plugin.
Author: Kevin Marrec
Latest version: 1.0.0-rc.15

# @kevinmarrec/cloudstack-vite-plugin

## Description

Opinionated [Vite](https://vite.dev) [plugin](https://vite.dev/guide/using-plugins).

## Opinions

- Built-in integrations (through [Vite](https://vite.dev) [plugins](https://vite.dev/guide/using-plugins)):

  - [Vue](https://vuejs.org)
  - [Vue Router](https://router.vuejs.org)
  - [Vue DevTools](https://devtools.vuejs.org)
  - [Vite PWA](https://vite-plugin-pwa.netlify.app)
  - [UnoCSS](https://unocss.dev)
  - [Bundle Visualizer](https://github.com/btd/rollup-plugin-visualizer)
  - [TypeScript config paths](https://github.com/aleclarson/vite-tsconfig-paths)
  - [YAML](https://github.com/Modyfi/vite-plugin-yaml)

  > All integrations can be customized through options.

- [Module preload](https://vite.dev/config/build-options.html#build-modulepreload) polyfill disabled

- Browser Dark mode detection (can be toggled with [VueUse](https://vueuse.org))

- Static site generation (SSG) with [Vite SSG](https://github.com/antfu-collective/vite-ssg)

## Usage

> Requires [Vite](https://vite.dev) v6 _or later_.

```ts
// vite.config.ts
import Cloudstack from '@kevinmarrec/cloudstack-vite-plugin'
import { defineConfig } from 'vite'

export default defineConfig({
  plugins: [
    Cloudstack({ /* options */ }),
  ],
})
```

```ts
// src/main.ts
import { Cloudstack } from 'virtual:cloudstack'

import App from './App.vue'

export const createApp = Cloudstack(App)
```
npm package: @kevinmarrec/cloudstack-vue
Description: Opinionated Collection of Vue Components and Composition Utilities.
Author: Kevin Marrec
Latest version: 1.0.0-rc.15

# @kevinmarrec/cloudstack-vue

## Description

Opinionated [Vue](https://vuejs.org) [Components](https://vuejs.org/guide/essentials/component-basics) & [Composition](https://vuejs.org/guide/reusability/composables.html#composables) Utilities.

## Opinions

- Export every composable from [Cloudstack Vue I18n](https://github.com/kevinmarrec/cloudstack/tree/main/packages/vue-i18n)
- Export every composable from [Cloudstack Vue PWA](https://github.com/kevinmarrec/cloudstack/tree/main/packages/vue-pwa)
- Export every composable and utility from [@unhead/vue](https://unhead.unjs.io)
- Export every composable and utility from [@vueuse/core](https://vueuse.org)
- Export every composable and utility from [vue-router](https://github.com/vuejs/router)
- Export every component from [@vueuse/components](https://vueuse.org/guide/components)

## Usage

```ts
import { useFocus } from '@kevinmarrec/cloudstack-vue'
import { OnClickOutside } from '@kevinmarrec/cloudstack-vue/components'
import { useHead } from '@kevinmarrec/cloudstack-vue/head'
import { useI18n } from '@kevinmarrec/cloudstack-vue/i18n'
import { usePWA } from '@kevinmarrec/cloudstack-vue/pwa'
import { useRouter } from '@kevinmarrec/cloudstack-vue/router'
```
npm package: @kevinmarrec/cloudstack-vue-i18n
Description: Opinionated Internationalization (i18n) Vue plugin.
Author: Kevin Marrec
Latest version: 1.0.0-rc.15

# @kevinmarrec/cloudstack-vue-i18n

## Description

Opinionated [Internationalization (i18n)](https://developer.mozilla.org/en-US/docs/Glossary/Internationalization) [Vue](https://vuejs.org) [plugin](https://vuejs.org/guide/reusability/plugins).

## Opinions

- Lazy loading of locales

  - Supports JSON
  - Supports YAML (with optional requirement: [vite-plugin-yaml](https://github.com/Modyfi/vite-plugin-yaml))

- Fallbacking

  - Configure which locale to use when your preferred language lacks a translation
  - If the fallback locale also lacks the translation, the key will be returned as is

- Message Format features

  - Standard & nested keys

    - `t('foo')` resolves `foo`
    - `t('foo.bar')` resolves `foo` ➡️ `bar`
    - `t('foo.bar.baz')` resolves `foo` ➡️ `bar` ➡️ `baz`

  - Named interpolation

    - `Hello {name}` + `t('key', { name: 'John' })` = `Hello John`

  - List interpolation

    - `Hello {0} {1}` + `t('key', ['John', 'Doe'])` = `Hello John Doe`

  - Pluralization

    - `car | cars` + `t('key', 0)` = `cars`
    - `car | cars` + `t('key', 1)` = `car`
    - `car | cars` + `t('key', 2)` = `cars`
    - `no apples | one apple | {count} apples` + `t('key', 0)` = `no apples`
    - `no apples | one apple | {count} apples` + `t('key', 1)` = `one apple`
    - `no apples | one apple | {count} apples` + `t('key', 2)` = `2 apples`

- Supports Server-Side Rendering (SSR) & Static Site Generation (SSG)

## Usage

> This package is mainly meant to be internally used by [Cloudstack Vite](https://github.com/kevinmarrec/cloudstack/tree/main/packages/vite-plugin).
>
> The `createI18n` function returns a `Promise` that resolves to the i18n plugin, so you must asynchronously use it in your app.
>
> This is required to ensure the following behaviors:
>
> - Client-side rendering (CSR) _lazy_ loads the base & fallback locales **when** rendering the app.
> - Server-side rendering (SSR) loads the base & fallback locales **before** rendering the app.

```vue
<script setup lang="ts">
import { useI18n } from '@kevinmarrec/cloudstack-vue-i18n'

const { t } = useI18n()
</script>

<template>
  <div>{{ t('welcome') }}</div>
</template>
```
npm package: @kevinmarrec/cloudstack-vue-pwa
Description: Opinionated PWA Vue integration.
Author: Kevin Marrec
Latest version: 1.0.0-rc.15

# @kevinmarrec/cloudstack-vue-pwa

## Description

Opinionated [PWA](https://developer.mozilla.org/en-US/docs/Web/Progressive_web_apps) [Vue](https://vuejs.org) integration.

## Usage

> This package is mainly meant to be internally used by [Cloudstack Vite](https://github.com/kevinmarrec/cloudstack/tree/main/packages/vite-plugin).

```vue
<script setup lang="ts">
import { usePWA } from '@kevinmarrec/cloudstack-vue-pwa'

const {
  needRefresh,
  offlineReady,
  register, // not needed if you use Cloudstack Vite, it will be called automatically
  updateServiceWorker,
} = usePWA()
</script>
```
npm package: @kevinmarrec/create-app
Description: CLI that scaffolds an opinionated Bun & Vue fullstack application.
Author: Kevin Marrec
Latest version: 0.19.0

# @kevinmarrec/create-app

## Description

CLI that scaffolds an opinionated [Bun](https://bun.sh/) & [Vue](https://vuejs.org/) fullstack application.

## Opinions

### Core Stack

- [Bun](https://bun.sh/) as package manager & runtime
- [TypeScript](https://www.typescriptlang.org/) as the language
- [Vue 3](https://vuejs.org/) as frontend framework
- [Vite](https://vitejs.dev/) as build tool
- [Vite SSG](https://github.com/antfu-collective/vite-ssg) for static site generation
- [UnoCSS](https://unocss.dev/) for styling
- [Unhead](https://unhead.unjs.io/) for head management
- [Vue I18n](https://github.com/kevinmarrec/vue-i18n) for internationalization
- [oRPC](https://orpc.dev/) for API layer
- [Better Auth](https://www.better-auth.com/) for authentication
- [Pinia Colada](https://pinia-colada.esm.dev/) for data fetching & state management
- [Pino](https://getpino.io/) for logging
- [Drizzle ORM](https://orm.drizzle.team/) as SQL-first TypeScript ORM
- [Valibot](https://valibot.dev/) for validation
- [PostgreSQL](https://www.postgresql.org/) as database
- [Docker Compose](https://docs.docker.com/compose/) & [Traefik](https://traefik.io/) for infrastructure

### Development Tools

- [ESLint](https://eslint.org/) & [Stylelint](https://stylelint.io/) for linting
- [Knip](https://knip.dev/) for detecting unused dependencies, exports, and files
- [Metabase](https://www.metabase.com/) for Business Intelligence (BI)
- [Drizzle Studio](https://gateway.drizzle.team/) for database management (web GUI)
- [Umami](https://umami.is/) for web analytics
- [Mailpit](https://mailpit.axllent.org/) for email testing

## Usage

> Requires [Bun](https://bun.sh/) v1.3 _or later_.

By default, the CLI scaffolds from its built-in opinionated template:

```sh
bun create @kevinmarrec/app
# OR
bunx @kevinmarrec/create-app
```

After scaffolding, see the generated `README.md` in your project root for detailed setup instructions, including environment configuration, Docker setup, and development workflows.

### Custom Template

You can use the `--template` (`-t`) option to scaffold from any external git repository instead of the default template:

```sh
# GitHub shorthand
bun create @kevinmarrec/app -t user/repo

# HTTPS URL
bun create @kevinmarrec/app -t https://github.com/user/repo.git

# SSH URL
bun create @kevinmarrec/app -t git@github.com:user/repo.git

# Subdirectory of a repository
bun create @kevinmarrec/app -t user/repo#path/to/template
```

The repository is cloned with `--depth 1` (shallow clone) and its contents are copied into the target directory.

Use `#subdir` to scaffold from a specific subdirectory within the repository.
npm package: @kevinmarrec/create-cloudstack-app
Description: CLI that scaffolds an opinionated Bun & Vue fullstack application.
Author: Kevin Marrec
Latest version: 1.0.0-rc.15

# @kevinmarrec/create-cloudstack-app

## Description

CLI that scaffolds an opinionated [Bun](https://bun.sh) & [Vue](https://vuejs.org) fullstack application.

## Opinions

- [Bun](https://bun.sh) as package manager & runtime

- [Vue](https://vuejs.org) as frontend framework

- Uses all other [Cloudstack](https://github.com/kevinmarrec/cloudstack) packages

  - Check their respective documentation for more details

## Usage

> Requires [Bun](https://bun.sh) v1.2 _or later_.

```sh
bun create @kevinmarrec/cloudstack-app
```
npm package: @kevinmarrec/eslint-config
Description: Opinionated ESLint config.
Author: Kevin Marrec
Latest version: 1.16.0

# @kevinmarrec/eslint-config

## Description

Opinionated [ESLint](https://eslint.org) config.

## Opinions

- Extends [@antfu/eslint-config](https://github.com/antfu/eslint-config) with [formatters](https://github.com/antfu/eslint-config?tab=readme-ov-file#formatters) & [UnoCSS](https://github.com/antfu/eslint-config?tab=readme-ov-file#unocss) support (`uno.config.ts` detection)
  - with quite minor rule overrides:
    - [antfu/if-newline](https://github.com/antfu/eslint-plugin-antfu/blob/main/src/rules/if-newline.ts) is disabled
    - [import/consistent-type-specifier-style](https://github.com/import-js/eslint-plugin-import/blob/main/docs/rules/consistent-type-specifier-style.md) is disabled
    - [import/no-duplicates](https://github.com/import-js/eslint-plugin-import/blob/main/docs/rules/no-duplicates.md) is overridden to prefer inline type imports
    - [perfectionist/sort-imports](https://perfectionist.dev/rules/sort-imports.html) is overridden with custom groups order and enforced new lines between groups
  - and some additional rules:
    - [vue/no-unused-properties](https://eslint.vuejs.org/rules/no-unused-properties) is enabled

- Disables [unsupported TypeScript version warning](https://typescript-eslint.io/packages/parser/#warnonunsupportedtypescriptversion)

- Opinionated, but [very customizable](https://github.com/antfu/eslint-config?tab=readme-ov-file#customization)

## Usage

> Requires [ESLint](https://eslint.org) v9 _or later_.

### Default

```ts
// eslint.config.ts
export { default } from '@kevinmarrec/eslint-config'
```

### Extended

```ts
// eslint.config.ts
import { useConfig } from '@kevinmarrec/eslint-config'

export default useConfig({ /* options */ })
```
npm package: @kevinmarrec/stylelint-config
Description: Opinionated Stylelint config.
Author: Kevin Marrec
Latest version: 1.16.0

# @kevinmarrec/stylelint-config

## Description

Opinionated [Stylelint](https://stylelint.io) config.

## Opinions

- Extends the following configs:
  - [stylelint-config-recommended-scss](https://github.com/stylelint-scss/stylelint-config-recommended-scss)
  - [stylelint-config-html](https://github.com/ota-meshi/stylelint-config-html)
  - [stylelint-config-recess-order](https://github.com/stormwarning/stylelint-config-recess-order)

- Adds the following plugins:
  - [stylelint-plugin-use-baseline](https://github.com/ryo-manba/stylelint-plugin-use-baseline)

- Enforces the following rules:
  - [declaration-block-no-duplicate-properties](https://stylelint.io/user-guide/rules/list/declaration-block-no-duplicate-properties)
  - [length-zero-no-unit](https://stylelint.io/user-guide/rules/list/length-zero-no-unit)

- Supports all [Stylelint config](https://stylelint.io/user-guide/configure) options

## Usage

> Requires [Stylelint](https://stylelint.io) v16 _or later_.

### Default

```ts
// stylelint.config.ts
export { default } from '@kevinmarrec/stylelint-config'
```

### Extended

```ts
// stylelint.config.ts
import { useConfig } from '@kevinmarrec/stylelint-config'

export default useConfig({ /* options */ })
```
npm package: @kevinmarrec/tsconfig
Description: Opinionated TypeScript config.
Author: Kevin Marrec
Latest version: 1.16.0

# @kevinmarrec/tsconfig

## Description

Opinionated [TypeScript](https://www.typescriptlang.org) config.

## Opinions

Have a direct look at the [source (tsconfig.json)](https://github.com/kevinmarrec/config/blob/main/packages/typescript/tsconfig.json).

## Usage

> Requires [TypeScript](https://www.typescriptlang.org) v5.7 _or later_.

```json
{
  "extends": "@kevinmarrec/tsconfig"
}
```
npm package: @kevinmarrec/unocss-config
Description: Opinionated UnoCSS config.
Author: Kevin Marrec
Latest version: 1.16.0

# @kevinmarrec/unocss-config

## Description

Opinionated [UnoCSS](https://unocss.dev) [config](https://unocss.dev/config).

## Opinions

- Supports all [UnoCSS config](https://unocss.dev/config) options

- Uses the following opinionated config by default:
  - Extends the following official presets:
    - [UnoCSS Wind preset](https://unocss.dev/presets/wind)
    - [UnoCSS Icons preset](https://unocss.dev/presets/icons)
    - [UnoCSS Web Fonts preset](https://unocss.dev/presets/web-fonts) (with [local fonts](https://unocss.dev/presets/web-fonts#serve-fonts-locally) enabled)

  - Extends the following official transformers:
    - [UnoCSS Directives transformer](https://unocss.dev/transformers/directives)
    - [UnoCSS Variant group transformer](https://unocss.dev/transformers/variant-group)

- Hoists `fonts` and `icons` preset options to the config level

## Usage

> Requires [UnoCSS](https://unocss.dev) v66 _or later_.

### Default

```ts
// uno.config.ts
export { default } from '@kevinmarrec/unocss-config'
```

### Extended

```ts
// uno.config.ts
import { useConfig } from '@kevinmarrec/unocss-config'

export default useConfig({ /* options */ })
```
npm package: @kevinmarrec/vite-plugin-dark-mode
Description: Vite plugin to set initial color scheme based on user preferences.
Author: Kevin Marrec
Latest version: 1.4.0

# @kevinmarrec/vite-plugin-dark-mode

## Description

Vite plugin to inject a script to set initial color scheme based on user preferences.

Meant to be used with [VueUse](https://vueuse.org/core/useDark/) to toggle the dark mode.

## Opinions

- Use `dark` as the class name for the dark mode.

- Use [prefers-color-scheme](https://developer.mozilla.org/en-US/docs/Web/CSS/@media/prefers-color-scheme) CSS media feature to get operating system (or user agent) preferences.

- Use [vueuse-color-scheme](https://vueuse.org/core/useDark/#behavior) local storage key to get user preferences.
npm package: @kevinmarrec/vue-i18n
Description: Opinionated Internationalization (i18n) Vue plugin.
Author: Kevin Marrec
Latest version: 1.5.0

# @kevinmarrec/vue-i18n

## Description

Opinionated [Internationalization (i18n)](https://developer.mozilla.org/en-US/docs/Glossary/Internationalization) [Vue](https://vuejs.org) [plugin](https://vuejs.org/guide/reusability/plugins).

## Opinions

- Lazy loading of locales
  - Supports JSON
  - Supports YAML (with optional requirement: [vite-plugin-yaml](https://github.com/Modyfi/vite-plugin-yaml))

- Fallbacking
  - Configure which locale to use when your preferred language lacks a translation
  - If the fallback locale also lacks the translation, the key will be returned as is

- Message Format features
  - Standard & nested keys
    - `t('foo')` resolves `foo`
    - `t('foo.bar')` resolves `foo` ➡️ `bar`
    - `t('foo.bar.baz')` resolves `foo` ➡️ `bar` ➡️ `baz`

  - Named interpolation
    - `Hello {name}` + `t('key', { name: 'John' })` = `Hello John`

  - List interpolation
    - `Hello {0} {1}` + `t('key', ['John', 'Doe'])` = `Hello John Doe`

  - Pluralization
    - `car | cars` + `t('key', 0)` = `cars`
    - `car | cars` + `t('key', 1)` = `car`
    - `car | cars` + `t('key', 2)` = `cars`
    - `no apples | one apple | {count} apples` + `t('key', 0)` = `no apples`
    - `no apples | one apple | {count} apples` + `t('key', 1)` = `one apple`
    - `no apples | one apple | {count} apples` + `t('key', 2)` = `2 apples`

- Supports Server-Side Rendering (SSR) & Static Site Generation (SSG)

## Usage

This package is mainly meant to be used with [Vite SSG](https://github.com/antfu-collective/vite-ssg).

The `createI18n` function returns a `Promise` that resolves to the i18n plugin, so you must asynchronously use it in your app.

This is required to ensure the following behaviors:

- Client-side rendering (CSR) _lazy_ loads the base & fallback locales **when** rendering the app.
- Server-side rendering (SSR) loads the base & fallback locales **before** rendering the app.

```ts
import { createI18n } from '@kevinmarrec/vue-i18n'
import { ViteSSG } from 'vite-ssg/single-page'

import App from './App.vue'

export const createApp = ViteSSG(App, ({ app }) => {
  const i18n = await createI18n({
    messages: import.meta.glob('./locales/*.{json,yaml,yml}')
  })

  app.use(i18n)
})
```

```vue
<script setup lang="ts">
import { useI18n } from '@kevinmarrec/vue-i18n'

const { t } = useI18n()
</script>

<template>
  <div>{{ t('welcome') }}</div>
</template>
```