open-index/open-npm huggingface dataset:
npm package: @fiction/elements
Description: Reusable Vue 3 UI components with TypeScript
Author: Fiction
Latest version: 0.1.5

# @fiction/elements

Reusable Vue 3 UI components with TypeScript and Tailwind CSS.

## Features

- 🚀 Vue 3 + TypeScript
- 🎨 Tailwind CSS theming
- 📦 ESM only, tree-shakeable
- 🔒 Schema-driven with Zod
- 📚 Documented with Astro Starlight
- ✅ Tested with Vitest

## Installation

```bash
npm install @fiction/elements
```

## Usage

```vue
<script setup>
import { FButton } from '@fiction/elements'
import '@fiction/elements/styles'
</script>

<template>
  <FButton>Click me</FButton>
</template>
```

## Development

```bash
# Install dependencies
pnpm install

# Start development
pnpm dev

# Run tests
pnpm test

# Build library
pnpm build

# Start docs
pnpm docs:dev
```

## Requirements

- Node.js >= 22
- Vue 3.4+

## License

MIT
npm package: @fiction/widget
Description: Zero-config contextual digital self that auto-adapts to any page
Author: Fiction.com
Latest version: 1.0.125

# Fiction Widget

Zero-config contextual digital self. One-line integration: `<fiction-self handle="user"></fiction-self>`

## Development

```bash
pnpm dev:widget  # Hot reload SDK + widget + app (use from root)
pnpm dev         # Standalone widget dev server (from src/widget)
pnpm build       # Production IIFE bundle for CDN
```

## Testing

Playground (`/playground/widget`) tests **built packages**. Run `pnpm sdk:build && pnpm widget:build` first.

**See `.ai/spec-widget.md` for architecture and CDN usage.**
npm package: @fictionking/n8n-nodes-hybrid-retriever
Description: Advanced Hybrid Retriever node for n8n with Rerank support and Metadata passthrough
Author: fictionking
Latest version: 0.4.0

# n8n-nodes-hybrid-retriever

这个 n8n 社区节点包提供了混合检索器功能，允许你组合多个检索器并优化文档检索过程。

## 功能特性

- **多检索器集成**：将多个检索器（如向量检索器、关键词检索器）合并为一个统一的混合检索器
- **可选的重排序**：支持连接重排序模型以进一步优化检索结果
- **元数据文本提取**：自动从文档元数据中提取文本内容，确保检索质量
- **灵活的字段映射**：可配置从哪些元数据字段提取文本内容
- **三种使用模式**：
  - 直接执行搜索并返回文档（Hybrid Search 节点）
  - 创建检索器对象供后续节点使用（Hybrid Retriever 节点）
  - 创建 AI Agent 工具，将混合检索功能集成到 AI 代理工作流中（Hybrid Retriever Tool 节点）

## 包含的节点

### 1. Hybrid Search

**功能**：直接执行混合搜索并返回检索到的文档。

**输入**：
- Main 输入：包含查询数据
- Retrievers 输入：连接一个或多个检索器节点
- Rerank Model 输入（可选）：连接重排序模型节点

**参数**：
- Query：搜索查询文本
- Text Field Mapping：用于从元数据提取文本的字段列表（逗号分隔）

**输出**：
- Documents 输出：检索到的文档列表，每个文档包含 pageContent 和 metadata

### 2. Hybrid Retriever

**功能**：创建一个混合检索器对象，可用于AI节点的Retrieve输入。

**输入**：
- Retrievers 输入：连接一个或多个检索器节点
- Rerank Model 输入（可选）：连接重排序模型节点

**参数**：
- Text Field Mapping：用于从元数据提取文本的字段列表（逗号分隔）

**输出**：
- Retriever Object 输出：创建的混合检索器对象

### 3. Hybrid Retriever Tool

**功能**：将混合检索器包装为 AI Agent 工具，使 AI 代理能够使用混合检索功能。

**输入**：
- Retrievers 输入：连接一个或多个检索器节点
- Rerank Model 输入（可选）：连接重排序模型节点

**参数**：
- Tool Name：工具名称，在代理中必须唯一，使用下划线代替空格
- Tool Description：工具描述，AI 代理使用此描述决定何时使用该工具
- Text Field Mapping：用于从元数据提取文本的字段列表（逗号分隔）

**输出**：
- Tool 输出：创建的 AI 工具对象，可连接到 AI Agent 节点

## 核心工作原理

该节点包的核心功能是构建混合检索系统，主要包括以下步骤：

1. **检索器集成**：使用 `EnsembleRetriever` 将多个检索器合并，默认采用等权重策略
2. **元数据处理**：通过 `MetadataFixingRetriever` 自动从元数据中提取文本内容
3. **重排序优化**：可选地使用 `ContextualCompressionRetriever` 应用重排序模型

### 元数据文本提取功能

当文档的主内容（pageContent）为空时，系统会自动尝试从配置的元数据字段中提取文本，并将其作为主内容。这解决了某些检索器返回空内容文档的问题。

## 安装

### 方法 1：直接安装（推荐）

在 n8n 中，转到 "Settings > Community Nodes"，搜索并安装 `@fictionking/n8n-nodes-hybrid-retriever` 包。

### 方法 2：手动安装

1. 克隆此仓库
```bash
git clone https://github.com/fictionking/n8n-nodes-hybrid-retriever.git
cd n8n-nodes-hybrid-retriever
```

2. 安装依赖
```bash
npm install
```

3. 构建项目
```bash
npm run build
```

4. 链接到 n8n
```bash
npm link
```

5. 在 n8n 中启用开发模式
```bash
n8n start --dev
```

## 使用示例

### 示例 1：直接搜索

1. 添加一个或多个检索器节点（如向量数据库检索器）
2. 添加 Hybrid Search 节点
3. 连接检索器节点到 Hybrid Search 节点的 Retrievers 输入
4. 设置查询文本和字段映射
5. 执行工作流，获取检索结果

### 示例 2：创建检索器对象

1. 添加一个或多个检索器节点
2. 添加一个可选的重排序节点
3. 添加 Hybrid Retriever 节点
4. 连接检索器和重排序节点
5. 将 Hybrid Retriever 的输出连接到使用检索器的节点（如 AI Agent）

### 示例 3：创建 AI Agent 工具

1. 添加一个或多个检索器节点
2. 添加一个可选的重排序节点
3. 添加 Hybrid Retriever Tool 节点
4. 配置工具名称和描述
5. 连接检索器和重排序节点
6. 将 Hybrid Retriever Tool 的输出连接到 AI Agent 节点的 Tools 输入端口
7. AI 代理将能够根据需要使用该工具进行知识检索

## 配置字段说明

### Text Field Mapping

这个配置允许你指定从哪些元数据字段中提取文本内容。默认值为 `"text, page_content, body, content"`，表示按此顺序尝试从这些字段中提取文本。

你可以根据你的文档结构自定义这个列表，使用逗号分隔不同的字段名。

## 开发

如果你想为此项目做贡献或修改代码：

1. 启动开发模式
```bash
npm run dev
```

2. 代码检查
```bash
npm run lint
```

3. 自动修复代码问题
```bash
npm run lint:fix
```

## 技术栈

- TypeScript
- n8n-workflow
- langchain

## License

[MIT](LICENSE.md)
npm package: @fictionking/n8n-nodes-jieba
Description: n8n节点插件：基于jieba-wasm的中文分词功能
Author: fictionking
Latest version: 1.1.0

![Jieba Tokenizer](jieba.svg)
# @fictionking/n8n-nodes-jieba

一个基于jieba-wasm的中文分词n8n节点插件，用于在n8n自动化工作流中进行中文文本分词处理。

## 功能特点

- 支持多种分词模式：
  - 精确模式：最适合文本分析
  - 全模式：扫描出文本中所有可能的词语
  - 搜索引擎模式：在精确模式基础上，对长词再次切分
  - 词性分词模式：不仅分词，还标注每个词语的词性
- 支持自定义词典：
  - 文本输入：直接在界面中输入词典内容
  - 文件加载：从文件系统加载词典文件
- 高级词典支持：支持设置词语词频和词性标签
- 智能词典管理：词典只在配置变更时重新加载，提高执行效率
- 简单易用的界面配置
- 完整的错误处理
- 详细的输出结果

## 安装方法

### 方法一：通过n8n社区节点管理

在n8n的Web界面中，通过"设置" > "社区节点" > "安装"，搜索并安装`@fictionking/n8n-nodes-jieba`。

### 方法二：手动安装

```bash
# 在n8n安装目录下执行
npm install @fictionking/n8n-nodes-jieba

# 或者全局安装
npm install -g @fictionking/n8n-nodes-jieba
```

安装后，重启n8n服务，节点将会出现在节点面板的"转换"类别中。

## 使用示例

1. 在n8n工作流中添加"Jieba 分词器"节点
2. 配置输入文本（可以是静态文本或动态字段）
3. 选择分词模式
4. 连接其他节点处理分词结果

## 输出结果

节点执行后，输出数据将包含以下字段：

- `originalText`: 原始输入文本
- `tokens`: 分词结果数组（普通分词模式下）或词性标记数组（词性分词模式下）
- `tokenCount`: 分词数量
- `mode`: 使用的分词模式

### 词性分词模式输出格式

在词性分词模式下，`tokens`字段将包含词性标记的结果，格式为数组中的每个元素都是一个包含词语和词性的对象：

```json
[
  {"word": "张三", "flag": "nr"},
  {"word": "是", "flag": "v"},
  {"word": "北京大学", "flag": "nt"},
  {"word": "的", "flag": "u"},
  {"word": "学生", "flag": "n"}
]
```

其中：
- `word`: 分词后的词语
- `flag`: 词语的词性标签

## 自定义词典使用

### 词典格式支持

节点支持两种词典配置方式，均支持以下词条格式：

1. **基本格式**：仅包含词语
   ```
   张三
   李四
   五道口
   ```

2. **带词频格式**：词语后空格分隔词频
   ```
   张三 10
   李四 5
   五道口 15
   ```

3. **带词频和词性格式**：词语、词频、词性空格分隔（使用词性时必须提供词频）
   ```
   张三 10 nr
   李四 5 nr
   五道口 15 ns
   ```

### 使用文本输入词典

1. 在节点配置中选择"使用文本输入"作为词典来源
2. 在文本框中输入词条，每行一个词条
3. 可以使用以上三种格式的任意一种

### 使用文件词典

1. 在节点配置中选择"使用文件路径"作为词典来源
2. 输入词典文件的完整路径
3. 确保文件格式符合要求：每行一个词条，换行符分隔
4. 注意：确保n8n有权限读取指定的文件路径

## 开发说明

### 安装依赖

```bash
npm install
```

### 开发模式

```bash
npm run dev
```

### 构建项目

```bash
npm run build
```

### 运行测试

```bash
npm run test
```

## 许可证

MIT License
npm package: @fictiv/gravatar-api
Description: module to build image and profile urls for gravatar
Author: Layton Whiteley
Latest version: 1.5.0

gravatar-api
===============

[![Build Status](https://travis-ci.org/lwhiteley/gravatar-api.svg?branch=master)](https://travis-ci.org/lwhiteley/gravatar-api)
[![Dependencies](https://david-dm.org/lwhiteley/gravatar-api.svg)](https://david-dm.org/lwhiteley/gravatar-api)

Node module to build image and profile urls for gravatar.

gravatar-api makes it easy to build gravatar image and profile urls.


To Install
----------

Using node package manager

#### Example
```javascript
npm install --save gravatar-api
```

To Use
------

Simply add the following require statement to import the module and then call the imageUrl method with the relevant options.

#### Example
```javascript
var gravatar = require('gravatar-api');
var options = {
    email: 'test@gmail.com'
}
var avatar = gravatar.imageUrl(options);
```


You can also specify the size of the image with the following (or any valid gravatar image option)

#### Example
```javascript
var options = {
    email: 'test@gmail.com',
    parameters: { "size": "200" }
}
var avatar = gravatar.imageUrl(options);
```

A valid size is between 1 - 2048.

For more options, see [gravatar documentation](https://en.gravatar.com/site/implement/images/)

### Secure Endpoint

You can specify retrieving the secure version of the URL by setting the `secure` property to `true`  

#### Example
```javascript
var options = {
    email: 'test@gmail.com',
    parameters: { "size": "200", "d": "mm" },
    secure: true
}
var avatar = gravatar.imageUrl(options);
```

### Gravatar Profile URLs

You can retrieve a user's gravatar profile url.

see the [gravatar docs](https://en.gravatar.com/site/implement/profiles/) for more information on what parameters can be used
for each type.

#### Example
```javascript
var options = {
    email: 'test@gmail.com',
    type: 'json', // Default: json,
                  // Available Types: 'json', 'xml', 'qr', 'php', 'vcf'
    parameters: {'callback': 'doSomething' }, //optional
    secure: true
}
var gravatarProfileUrl = gravatar.getProfileUrl(options);
```

### Notes
- All values in parameters will be url encoded
- compatible with react-native
npm package: @fictiv/jwks-rsa
Description: Library to retrieve RSA public keys from a JWKS endpoint
Author: Auth0
Latest version: 1.2.0

# jwks-rsa

A library to retrieve RSA signing keys from a JWKS (JSON Web Key Set) endpoint.

> npm install --save jwks-rsa

## Usage

You'll provide the client with the JWKS endpoint which exposes your signing keys. Using the `getSigningKey` you can then get the signing key that matches a specific `kid`.

```js
const jwksClient = require('jwks-rsa');

const client = jwksClient({
  strictSsl: true, // Default value
  jwksUri: 'https://sandrino.auth0.com/.well-known/jwks.json'
});

const kid = 'RkI5MjI5OUY5ODc1N0Q4QzM0OUYzNkVGMTJDOUEzQkFCOTU3NjE2Rg';
client.getSigningKey(kid, (err, key) => {
  const signingKey = key.publicKey || key.rsaPublicKey;

  // Now I can use this to configure my Express or Hapi middleware
});
```

Integrations are also provided with:

 - [express/express-jwt](examples/express-demo)
 - [hapi/hapi-auth-jwt2](examples/hapi-demo)
 - [koa/koa-jwt](examples/koa-demo)

### Caching

In order to prevent a call to be made each time a signing key needs to be retrieved you can also configure a cache as follows. If a signing key matching the `kid` is found, this will be cached and the next time this `kid` is requested the signing key will be served from the cache instead of calling back to the JWKS endpoint.

```js
const jwksClient = require('jwks-rsa');

const client = jwksClient({
  cache: true,
  cacheMaxEntries: 5, // Default value
  cacheMaxAge: ms('10h'), // Default value
  jwksUri: 'https://sandrino.auth0.com/.well-known/jwks.json'
});

const kid = 'RkI5MjI5OUY5ODc1N0Q4QzM0OUYzNkVGMTJDOUEzQkFCOTU3NjE2Rg';
client.getSigningKey(kid, (err, key) => {
  const signingKey = key.publicKey || key.rsaPublicKey;

  // Now I can use this to configure my Express or Hapi middleware
});
```

### Rate Limiting

Even if caching is enabled the library will call the JWKS endpoint if the `kid` is not available in the cache, because a key rotation could have taken place. To prevent attackers to send many random `kid`s you can also configure rate limiting. This will allow you to limit the number of calls that are made to the JWKS endpoint per minute (because it would be highly unlikely that signing keys are rotated multiple times per minute).

```js
const jwksClient = require('jwks-rsa');

const client = jwksClient({
  cache: true,
  rateLimit: true,
  jwksRequestsPerMinute: 10, // Default value
  jwksUri: 'https://sandrino.auth0.com/.well-known/jwks.json'
});

const kid = 'RkI5MjI5OUY5ODc1N0Q4QzM0OUYzNkVGMTJDOUEzQkFCOTU3NjE2Rg';
client.getSigningKey(kid, (err, key) => {
  const signingKey = key.publicKey || key.rsaPublicKey;

  // Now I can use this to configure my Express or Hapi middleware
});
```

## Running Tests

```
npm run test
```

## Showing Trace Logs

To show trace logs you can set the following environment variable:

```
DEBUG=jwks
```

Output:

```
jwks Retrieving keys from http://my-authz-server/.well-known/jwks.json +5ms
jwks Keys: +8ms [ { alg: 'RS256',
  kty: 'RSA',
  use: 'sig',
  x5c: [ 'pk1' ],
  kid: 'ABC' },
{ alg: 'RS256', kty: 'RSA', use: 'sig', x5c: [], kid: '123' } ]
```
npm package: @fictiv/prettier-eslint-webpack-plugin
Description: Webpack plugin that formats your JavaScript using prettier followed by eslint --fix
Author: Daniël Terwiel
Latest version: 1.0.0

# Prettier Eslint Webpack Plugin

Webpack 2.* plugin for [prettier-eslint](https://github.com/kentcdodds/prettier-eslint)

## Installation
```
yarn add prettier-eslint-webpack-plugin --dev
```

### Options

#### encoding (?String)
Encoding to use when reading / writing files

*Default:* 'utf-8'

#### extensions (?Array)
Only process these file extensions

*Default:* ['.js', '.jsx']

... Furthermore the entire [prettier-eslint](https://github.com/kentcdodds/prettier-eslint#options) API is exposed:

#### filePath (?String)
The path of the file being formatted can be used to override eslintConfig (eslint will be used to find the relevant config for the file).

*Default:* `undefined`

#### eslintConfig (?Object)
The config to use for formatting with ESLint. Can be overridden with filePath.

*Default:* [Fictiv Style](https://github.com/fictiv/eslint-config-fictiv)

#### prettierOptions (?Object)
The options to pass for formatting with prettier. If not provided, `prettier-eslint` will attempt to create the options based on the `eslintConfig` (whether that's provided or derived via `filePath`). You can also provide some of the options and have the remaining options derived via your eslint config. This is useful for options like `parser`.

*Default:* `undefined`

#### logLevel (?Enum: ['trace', 'debug', 'info', 'warn', 'error', 'silent'])
prettier-eslint does quite a bit of logging if you want it to. Pass this to set the amount of logs you want to see.

*Default: `process.env.LOG_LEVEL`

#### eslintPath (?String)
By default, prettier-eslint will try to find the relevant eslint (and prettier) module based on the filePath. If it cannot find one, then it will use the version that prettier-eslint has installed locally. If you'd like to specify a path to the eslint module you would like to have prettier-eslint use, then you can provide the full path to it with the eslintPath option.

*Default:* `undefined`

### Example

Your `webpack.dev.js` file:

```javascript
import { PrettierEslintPlugin } from 'prettier-eslint-webpack-plugin'
import fs from 'fs'

...

const eslintConfig = fs.readFileSync('path/to/.eslintrc')

module.exports = {
  ...
  plugins: {
    ...
    new PrettierEslintPlugin({
      encoding: ['utf-16'],
      extensions: '.jsf00',
      eslintConfig: eslintConfig,
      logLevel: 'trace',
      prettierOptions: {
        singleQuote: false,
      }
    })
    ...
  }
  ...
}
```

## Pull requests
Welcome

## Roadmap
* More tests
* Possibility to use a pre-enforced webpack 2 loader to prevent multiple builds
* Add Flow support

### Inspiration
* [prettier-eslint](https://github.com/kentcdodds/prettier-eslint)
* [prettier-webpack-plugin](https://github.com/hawkins/prettier-webpack-plugin)
* [eslint-config-standard](https://github.com/feross/eslint-config-standard)

### Licence

MIT
npm package: @fictiv/redux-form
Description: TEMPORARY FORK
Author: Erik Rasmussen
Latest version: 6.2.0

# redux-form
---
[<img src="http://npm.packagequality.com/badge/redux-form.png" align="right"/>](http://packagequality.com/#?package=redux-form)

[![NPM Version](https://img.shields.io/npm/v/redux-form.svg?style=flat)](https://www.npmjs.com/package/redux-form) 
[![NPM Downloads](https://img.shields.io/npm/dm/redux-form.svg?style=flat)](https://www.npmjs.com/package/redux-form)
[![Build Status](https://img.shields.io/travis/erikras/redux-form/v6.svg?style=flat)](https://travis-ci.org/erikras/redux-form)
[![codecov.io](https://codecov.io/gh/erikras/redux-form/branch/master/graph/badge.svg)](https://codecov.io/gh/erikras/redux-form)
[![PayPal donate button](http://img.shields.io/paypal/donate.png?color=yellowgreen)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=3QQPTMLGV6GU2)
[![Twitter URL](https://img.shields.io/twitter/url/https/github.com/erikras/redux-form.svg?style=social)](https://twitter.com/intent/tweet?text=With%20@ReduxForm,%20I%20can%20keep%20all%20my%20form%20state%20in%20Redux!%20Thanks,%20@erikras!)
[![Patreon](https://img.shields.io/badge/patreon-support%20the%20author-blue.svg)](https://www.patreon.com/erikras)

`redux-form` works with [React Redux](https://github.com/rackt/react-redux) to enable an html form in
[React](https://github.com/facebook/react) to use [Redux](https://github.com/rackt/redux) to store all of its state.

[<img src="logo.png" align="right" class="logo" height="151" width="250"/>](http://erikras.github.io/redux-form/)

## Installation
```npm install --save redux-form```

## Documentation

* [Getting Started](https://redux-form.com/6.2.0/docs/GettingStarted.md/)
* [Examples](https://redux-form.com/6.2.0/examples/)
* [API](https://redux-form.com/6.2.0/docs/api/)
* [FAQ](https://redux-form.com/6.2.0/docs/faq/)
* [Release Notes](https://github.com/erikras/redux-form/releases)
* [Older Documentation](https://redux-form.com/6.2.0/docs/DocumentationVersions.md/)

## Videos

- [Abstracting Form State with Redux Form at JS Channel - Bengaluru 2016](https://youtu.be/eDTi7lYR1VU)
[![Abstracting Form State with Redux Form at JS Channel - Bengaluru 2016](docs/video-thumb.jpg)](https://youtu.be/eDTi7lYR1VU)
npm package: @fictiv/three
Description: JavaScript 3D library
Author: mrdoob
Latest version: 0.87.1

three.js
========

[![Gitter][gitter-badge]][gitter-badge-url]
[![Latest NPM release][npm-badge]][npm-badge-url]
[![License][license-badge]][license-badge-url]
[![Dependencies][dependencies-badge]][dependencies-badge-url]
[![Dev Dependencies][devDependencies-badge]][devDependencies-badge-url]

#### JavaScript 3D library ####

The aim of the project is to create an easy to use, lightweight, 3D library. The library provides &lt;canvas&gt;, &lt;svg&gt;, CSS3D and WebGL renderers.

[Examples](http://threejs.org/examples/) &mdash;
[Documentation](http://threejs.org/docs/) &mdash;
[Wiki](https://github.com/mrdoob/three.js/wiki) &mdash;
[Migrating](https://github.com/mrdoob/three.js/wiki/Migration-Guide) &mdash;
[Help](http://stackoverflow.com/questions/tagged/three.js)

### Usage ###

Download the [minified library](http://threejs.org/build/three.min.js) and include it in your html, or install and import it as a [module](http://threejs.org/docs/#manual/introduction/Import-via-modules),
Alternatively see [how to build the library yourself](https://github.com/mrdoob/three.js/wiki/Build-instructions).

```html
<script src="js/three.min.js"></script>
```

This code creates a scene, a camera, and a geometric cube, and it adds the cube to the scene. It then creates a `WebGL` renderer for the scene and camera, and it adds that viewport to the document.body element. Finally it animates the cube within the scene for the camera.

```javascript
var scene, camera, renderer;
var geometry, material, mesh;

init();
animate();

function init() {

	scene = new THREE.Scene();

	camera = new THREE.PerspectiveCamera( 75, window.innerWidth / window.innerHeight, 1, 10000 );
	camera.position.z = 1000;

	geometry = new THREE.BoxGeometry( 200, 200, 200 );
	material = new THREE.MeshBasicMaterial( { color: 0xff0000, wireframe: true } );

	mesh = new THREE.Mesh( geometry, material );
	scene.add( mesh );

	renderer = new THREE.WebGLRenderer();
	renderer.setSize( window.innerWidth, window.innerHeight );

	document.body.appendChild( renderer.domElement );

}

function animate() {

	requestAnimationFrame( animate );

	mesh.rotation.x += 0.01;
	mesh.rotation.y += 0.02;

	renderer.render( scene, camera );

}
```

If everything went well you should see [this](https://jsfiddle.net/hfj7gm6t/).

### Change log ###

[releases](https://github.com/mrdoob/three.js/releases)


[gitter-badge]: https://badges.gitter.im/mrdoob/three.js.svg
[gitter-badge-url]: https://gitter.im/mrdoob/three.js
[npm-badge]: https://img.shields.io/npm/v/three.svg
[npm-badge-url]: https://www.npmjs.com/package/three
[license-badge]: https://img.shields.io/npm/l/three.svg
[license-badge-url]: ./LICENSE
[dependencies-badge]: https://img.shields.io/david/mrdoob/three.js.svg
[dependencies-badge-url]: https://david-dm.org/mrdoob/three.js
[devDependencies-badge]: https://img.shields.io/david/dev/mrdoob/three.js.svg
[devDependencies-badge-url]: https://david-dm.org/mrdoob/three.js#info=devDependencies
npm package: @fictivekin/browserslist-config-fk
Description: Fictive Kin sharable browserslist configuration
Author: Fictive Kin
Latest version: 1.0.1

# browserslist-config-fk
Fictive Kin sharable browserslist configuration

## usage

Run the following in your project directory to install:

```
yarn add @fictivekin/browserslist-config-fk --dev
```

In your package.json file, add:

```
"browserslist": [
    "extends @fictivekin/browserslist-config-fk"
]
```
npm package: @fictivekin/eslint-config-fk
Description: Fictive Kin sharable eslint configuration
Author: Fictive Kin
Latest version: 3.0.0

# eslint-config-fk
Fictive Kin sharable eslint configuration

## Usage

Run the following in your project directory to install:

```
yarn add eslint @fictivekin/eslint-config-fk --dev
```

In your package.json file, add:

```
"eslintConfig": {
    "extends": "@fictivekin/eslint-config-fk"
}
```

## Development

Use the `dev` branch for on-going development. Merge PRs against `dev`.

`master` branch is for the latest production release.

We need to be careful with changes to our lint config, as our linting rules directly affect project workflows, possibly breaking builds when new errors are introduced. Every so often, we will evaluate the changes to `dev` and cut a new release. Changes that introduce new errors are considered a breaking change and will constitute a new major version. So, we want to batch those changes together in bigger releases, rather that smaller incremental releases.

## Notes

### Quiet warnings with --quiet

Add the `--quiet` option to suppress warnings and show only errors.

``` sh
# yarn
yarn lint:js --quiet

# npm
npm run lint:js -- --quiet
```

### JSDoc

Writing JSDocs for functions can feel like a chore, but we've eased on some rules to make it easier. Parameter descriptions and return descriptions are not required. If your variable names are self-documenting, you can omit descriptions and document just the types.

``` js
/**
 * @param {Object} post
 * @param {String} attr
 * @return {String}
 */
function getTitle(post, attr) {
  return post[attr]; // contrived example, but you get the idea
}
```

### no-used-vars error in destructured Array

You may encounter this error:

```
error  'key' is defined but never used  no-unused-vars
```

The linter is likely catching an unused argument variable within a destructured Array. Prefix the argument with an underscore `_` to make the linter ignore it. See [no-unused-vars destructuredArrayIgnorePattern](https://eslint.org/docs/latest/rules/no-unused-vars#destructuredarrayignorepattern).

``` js
Object.entries(items, (_key, value) => {})
```
npm package: @fictivekin/growable-uint8-array
Description: A wrapper around Uint8Array that simplifies buffer management when appending data (growing the array)
Author: Evan Haas
Latest version: 1.2.0

# growable-uint8-array

![](https://img.shields.io/circleci/build/gh/fictivekin/fknpm-growable-uint8-array?logo=circleci&style=for-the-badge)

GrowableUint8Array is simple wrapper around Uint8Array that manages resizing the buffer when appending new data.

Adds a new method `extend` which can be used to append data to an array. `GrowableUint8Array` will manage the
underlying buffer, automatically allocating a larger `Uint8Array` when necessary using a simple exponential
growth algorithm.

`getElement(n)` and `setElement(n, value)` can be used to get and set the value, respectively, at a specific index. When setting, index values less than zero or greater than the length of the array are silently ignored.

All `TypedArray` prototype methods are delegated to the underlying `Uint8Array`. If the prototype method returns an instance of
`Uint8Array` it will be wrapped in a `GrowableUint8Array`.

Use `growableUint8Array.unwrap()` to return a `Uint8Array` view of the underlying data, with proper bounds. By default this will not copy the data, for performance reasons. Pass `true` as the first argument to unwrap to return a copy of the data.


## Usage
```js
import GrowableUint8Array from '@fictivekin/growable-uint8-array';

const arr = new GrowableUint8Array(new Uint8Array([1, 2, 3]));
console.log(arr.length); // 3
arr.extend([4, 5, 6]);   // GrowableUint8Array [ 1, 2, 3, 4, 5, 6 ]
console.log(arr.length); // 6
arr.map((x) => x * 2);   // GrowableUint8Array [ 2, 4, 6, 8, 10, 12 ]
console.log(arr);        // GrowableUint8Array [ 1, 2, 3, 4, 5, 6 ]
arr.unwrap()             // Uint8Array [ 1, 2, 3, 4, 5, 6 ]
```

## Array-like access
If your environment supports ES6 proxies, you can use `arr.accessProxy()` to get a proxy object which allows for Array-like attribute access.

```js
import GrowableUint8Array from '@fictivekin/growable-uint8-array';

const proxy = new GrowableUint8Array(new Uint8Array([1, 2, 42])).accessProxy();
proxy[2];          // 42
proxy[0] = 7;      // 7
proxy.extend([3, 2, 1]);

proxy.unwrap()    // Uint8Array [ 7, 2, 42, 3, 2, 1 ]

```

## Install
`npm install @fictivekin/growable-uint8-array`

## Contribute
Clone repo, then install dev dependencies:
`npm install --only=dev`

## Run tests
`npm run test`

## Build
`npm run build`
npm package: @fictivekin/stylelint-config-fk
Description: Fictive Kin sharable stylelint configuration
Author: Fictive Kin
Latest version: 2.0.2

# stylelint-config-fk
Fictive Kin sharable stylelint configuration

## usage

Run the following in your project directory to install:

```
yarn add stylelint stylelint-actions-formatters stylelint-config-standard-scss stylelint-order stylelint-scss @fictivekin/stylelint-config-fk --dev
```

In your package.json file, add:

```
"stylelint": {
    "extends": "@fictivekin/stylelint-config-fk"
}
```
npm package: @fictjs/adapter-node
Description: Node adapter for Fict Kit
Author: unadlib
Latest version: 0.1.0

# @fictjs/adapter-node

[![CI](https://github.com/fictjs/kit/actions/workflows/ci.yml/badge.svg)](https://github.com/fictjs/kit/actions/workflows/ci.yml)
[![npm](https://img.shields.io/npm/v/@fictjs/adapter-node.svg)](https://www.npmjs.com/package/@fictjs/adapter-node)
![license](https://img.shields.io/npm/l/@fictjs/adapter-node)

Node.js deployment adapter for [Fict Kit](https://github.com/fictjs/kit). Generates a standalone HTTP server entry file that serves your Fict Kit application.

## Installation

```bash
npm install @fictjs/adapter-node
# or
pnpm add @fictjs/adapter-node
```

## Usage

```ts
// fict.config.ts
import node from '@fictjs/adapter-node'
import { defineConfig } from '@fictjs/kit/config'

export default defineConfig({
  adapter: node(),
})
```

Build and run:

```bash
fict-kit build
node dist/index.js
```

## Options

```ts
node({
  outFile: 'dist/index.js', // Output file path (default: 'dist/index.js')
  host: '0.0.0.0', // Host to bind (default: '0.0.0.0')
  port: 3000, // Port to listen on (default: 3000)
  serverEntry: undefined, // Custom server entry path (auto-detected by default)
})
```

## Environment Variables

The generated server respects the following environment variables at runtime:

| Variable | Description       | Default                         |
| -------- | ----------------- | ------------------------------- |
| `PORT`   | Port to listen on | `3000` (or configured value)    |
| `HOST`   | Host to bind to   | `0.0.0.0` (or configured value) |

## What It Generates

The adapter produces a single `dist/index.js` file that:

1. Imports the server entry module (SSR render function + route definitions)
2. Sets up a Node.js `http.createServer`
3. Serves static assets from the client build directory
4. Handles SSR, data loading, actions, and API routes via `createRequestHandler`
5. Supports server hooks (`handle`, `handleError`) from `hooks.server.ts`

## License

[MIT](../../LICENSE)
npm package: @fictjs/adapter-static
Description: Static adapter for Fict Kit
Author: unadlib
Latest version: 0.1.0

# @fictjs/adapter-static

[![CI](https://github.com/fictjs/kit/actions/workflows/ci.yml/badge.svg)](https://github.com/fictjs/kit/actions/workflows/ci.yml)
[![npm](https://img.shields.io/npm/v/@fictjs/adapter-static.svg)](https://www.npmjs.com/package/@fictjs/adapter-static)
![license](https://img.shields.io/npm/l/@fictjs/adapter-static)

Static site generation adapter for [Fict Kit](https://github.com/fictjs/kit). Copies client assets to a static output directory, prerenders static routes, and generates a fallback page for SPA navigation.

## Installation

```bash
npm install @fictjs/adapter-static
# or
pnpm add @fictjs/adapter-static
```

## Usage

```ts
// fict.config.ts
import staticAdapter from '@fictjs/adapter-static'
import { defineConfig } from '@fictjs/kit/config'

export default defineConfig({
  adapter: staticAdapter(),
})
```

Build and deploy:

```bash
fict-kit build
# Deploy dist/static/ to any static hosting provider
```

## Options

```ts
staticAdapter({
  outDir: 'dist/static', // Output directory (default: 'dist/static')
  fallback: '404.html', // Fallback HTML file name (default: '404.html')
  prerender: true, // Prerender static routes (default: true)
  serverEntry: undefined, // Custom server entry path (auto-detected by default)
})
```

## Prerendering

When `prerender` is enabled (the default), the adapter automatically prerenders all static routes -- routes without dynamic parameters (`:id`), optional parameters (`:lang?`), or catch-all segments (`*slug`).

You can opt individual routes out of prerendering:

```tsx
// src/routes/dashboard.tsx
export const route = {
  prerender: false,
}
```

## What It Produces

```
dist/static/
  index.html          # Prerendered home page
  about/
    index.html        # Prerendered /about
  404.html            # Fallback for client-side routing
  assets/             # Vite-built static assets (JS, CSS, images)
  .fict-adapter-static.json  # Build metadata
```

## Deployment

The output directory can be deployed to any static hosting provider:

- Netlify, Vercel, Cloudflare Pages
- GitHub Pages
- AWS S3 + CloudFront
- nginx, Apache, or any file server

Configure your hosting provider to serve `404.html` as the fallback for unknown routes to enable client-side routing.

## License

[MIT](../../LICENSE)
npm package: @fictjs/babel-preset
Description: Babel preset for Fict - includes TypeScript, JSX, and Fict compiler
Author: unadlib
Latest version: 0.17.1

# @fictjs/babel-preset

![Node CI](https://github.com/fictjs/fict/workflows/CI/badge.svg)
![npm](https://img.shields.io/npm/v/fict.svg)
![license](https://img.shields.io/npm/l/fict)

Babel preset for Fict - includes TypeScript, JSX, and Fict compiler

## Usage

```bash
npm install fict
npm install -D @fictjs/babel-preset
# or
yarn add fict
yarn add -D @fictjs/babel-preset
```

You can visit [Fict](https://github.com/fictjs/fict) for more documentation.

For standard apps, `fict` is the runtime dependency that pairs with this preset. Direct `@fictjs/runtime` usage remains supported for lower-level integrations, but your source imports should stay on one package family.

## Configuration

`@fictjs/babel-preset` includes:

- `@babel/preset-typescript` (enabled by default)
- `@babel/plugin-syntax-jsx`
- `@fictjs/compiler`

All compiler options are forwarded through this preset.

```js
// babel.config.js
module.exports = {
  presets: [
    [
      '@fictjs/babel-preset',
      {
        // Preset-level options
        typescript: true,
        typescriptOptions: {
          isTSX: true,
          allExtensions: true,
          allowNamespaces: true,
        },
        // Compiler options (forwarded)
        strictGuarantee: true,
        emitModuleMetadata: 'auto',
      },
    ],
  ],
}
```

Recommended profiles:

```js
// Strict default app/CI profile
module.exports = {
  presets: [['@fictjs/babel-preset', { strictGuarantee: true }]],
}

// Migration / benchmark profile
module.exports = {
  presets: [
    ['@fictjs/babel-preset', { strictGuarantee: false, emitModuleMetadata: false, dev: false }],
  ],
}
```

Key defaults:

- compiler `strictGuarantee`: `true`
- compiler `emitModuleMetadata`: `'auto'`
- preset `typescript`: `true`
npm package: @fictjs/devtools
Description: Developer tools for Fict applications
Author: unadlib
Latest version: 0.3.0

# @fictjs/devtools

Fict DevTools for Vite development. This package provides:

- A Vite plugin that serves a standalone DevTools UI at `/_ _fict-devtools__/`
- Auto-injection of the DevTools hook (best-effort)

## Vite usage

```ts
// vite.config.ts
import { defineConfig } from 'vite'
import { fictDevTools } from '@fictjs/devtools'

export default defineConfig({
  plugins: [fictDevTools()],
})
```

## Auto-injection (best-effort)

The plugin tries to auto-inject the DevTools hook into your entry file.
This is heuristic-based and may not match every project structure.

If auto-injection doesn't happen, add this line to your entry file:

```ts
import 'virtual:fict-devtools'
```

The dev server logs a warning when it sees render calls but can't
confidently find a DOM mount reference.
npm package: @fictjs/eslint-plugin
Description: ESLint plugin for Fict
Author: unadlib
Latest version: 0.17.1

# @fictjs/eslint-plugin

![Node CI](https://github.com/fictjs/fict/workflows/CI/badge.svg)
![npm](https://img.shields.io/npm/v/fict.svg)
![license](https://img.shields.io/npm/l/fict)

ESLint plugin for Fict

## Usage

```bash
npm install -D @fictjs/eslint-plugin
# or
yarn add -D @fictjs/eslint-plugin
```

You can visit [Fict](https://github.com/fictjs/fict) for more documentation.
npm package: @fictjs/router
Description: Reactive router for Fict applications
Author: unadlib
Latest version: 0.17.1

# @fictjs/router

![Node CI](https://github.com/fictjs/fict/workflows/CI/badge.svg)
![npm](https://img.shields.io/npm/v/fict.svg)
![license](https://img.shields.io/npm/l/fict)

Router for Fict

## Usage

```bash
npm install @fictjs/router
# or
yarn add @fictjs/router
```

You can visit [Fict](https://github.com/fictjs/fict) for more documentation.
npm package: @fictjs/runtime
Description: Fict reactive runtime
Author: unadlib
Latest version: 0.17.1

# @fictjs/runtime

![Node CI](https://github.com/fictjs/fict/workflows/CI/badge.svg)
![npm](https://img.shields.io/npm/v/fict.svg)
![license](https://img.shields.io/npm/l/fict)

Fict reactive runtime

## Usage

```bash
npm install @fictjs/runtime
# or
yarn add @fictjs/runtime
```

You can visit [Fict](https://github.com/fictjs/fict) for more documentation.

## Dev/Prod Mode Contract (`__DEV__`)

Runtime dev-only branches use this precedence:

1. `__DEV__` (recommended, compile-time constant)
2. Fallback: `process.env.NODE_ENV !== 'production'` when `process` exists

For browser builds, define `__DEV__` explicitly in your bundler for predictable
DX and dead-code elimination:

- development: `__DEV__ = true`
- production: `__DEV__ = false`

## Multi-Document Contract (iframe / foreign `Document`)

`@fictjs/runtime` supports rendering into containers owned by non-global documents
(for example, elements from an iframe document). Runtime-created nodes, markers,
and fragments are created from the active `ownerDocument`.

Supported contract:

- `render()` into a container from another `Document`
- list/conditional/suspense marker creation in that container's `ownerDocument`
- node insertion paths that rely on runtime-created nodes

Important caveat:

- If user code manually returns nodes created from a different document and inserts
  them into another document tree, runtime may fall back to `adoptNode()` or
  `importNode()` during insertion/reordering. `importNode()` clones DOM nodes and
  does not preserve JS-side expando state or imperative listeners attached outside
  of Fict's binding flow.

Recommendation:

- Create DOM nodes using the target container's `ownerDocument` (or let Fict create
  nodes) when working across iframe/foreign-document boundaries.

## Runtime Stability Stress

Run stress scenarios for runtime correctness and reliability:

```bash
pnpm --dir packages/runtime test:stress
```

Long profile:

```bash
pnpm --dir packages/runtime test:stress:long
```

Root aliases are also available:

```bash
pnpm stress:runtime
pnpm stress:runtime:long
```

Environment knobs:

- `FICT_RUNTIME_SOAK_ITERS`
- `FICT_RUNTIME_CHURN_CYCLES`
- `FICT_RUNTIME_CHURN_LIST_SIZE`
- `FICT_RUNTIME_LEAK_ROUNDS`
- `FICT_RUNTIME_LEAK_EFFECTS_PER_ROUND`
- `FICT_RUNTIME_MAX_HEAP_GROWTH_BYTES`
- `FICT_RUNTIME_BACKPRESSURE_UPDATES`
- `FICT_RUNTIME_BACKPRESSURE_TIMEOUT_MS`
- `FICT_RUNTIME_MAX_DRAIN_LATENCY_MS`
npm package: @fictjs/skill
Description: Skill library for Fict-focused coding agents
Author: unadlib
Latest version: 0.17.0

# @fictjs/skill

Production-ready skill library for Fict-focused coding agents.

## What this package provides

- A curated skill set under `skills/`
- Rule-based guidance in `skills/*/rules/`
- Generated `AGENTS.md` for one-file agent consumption
- Node API to enumerate and read bundled skill documents

## Included skills

- `fict-best-practices`
- `fict-devtools-playground`

## API

```ts
import {
  listSkills,
  hasSkill,
  readSkillDocument,
  readSkillMetadata,
  getSkillPackageInfo,
} from '@fictjs/skill'

console.log(getSkillPackageInfo())
console.log(listSkills())

if (hasSkill('fict-best-practices')) {
  const skillDoc = readSkillDocument('fict-best-practices', 'skill')
  const agentsDoc = readSkillDocument('fict-best-practices', 'agents')
  const metadata = readSkillMetadata('fict-best-practices')
  console.log(skillDoc.length, agentsDoc.length, metadata.version)
}
```

## Development workflow

```bash
pnpm --filter @fictjs/skill build:skills
pnpm --filter @fictjs/skill validate:skills
pnpm --filter @fictjs/skill build
```

## Layout

```text
packages/skill/
  src/                      # Runtime API
  scripts/                  # Build / validate tooling
  skills/
    manifest.json
    fict-best-practices/
      SKILL.md
      AGENTS.md
      metadata.json
      rules/
    fict-devtools-playground/
      SKILL.md
      AGENTS.md
      metadata.json
      rules/
```
npm package: @fictjs/vite-plugin
Description: Vite plugin for Fict
Author: unadlib
Latest version: 0.17.1

# @fictjs/vite-plugin

![Node CI](https://github.com/fictjs/fict/workflows/CI/badge.svg)
![npm](https://img.shields.io/npm/v/fict.svg)
![license](https://img.shields.io/npm/l/fict)

Vite plugin for Fict

## Usage

```bash
npm install fict
npm install -D @fictjs/vite-plugin
# or
yarn add fict
yarn add -D @fictjs/vite-plugin
```

You can visit [Fict](https://github.com/fictjs/fict) for more documentation.

Use `fict` as the runtime dependency for standard Fict apps. If you intentionally build directly on `@fictjs/runtime`, keep your source imports on that package family consistently.

## Options

```ts
import fict from '@fictjs/vite-plugin'

export default defineConfig({
  plugins: [
    fict({
      // Optional transform cache (memory + persistent disk cache)
      cache: { persistent: true },
      // Optional TypeScript project integration
      useTypeScriptProject: true,
      tsconfigPath: './tsconfig.json',
      // Optional plugin debug logs (or set FICT_VITE_PLUGIN_DEBUG=1)
      debug: false,
      // Allow $state/$effect inside reactive-scope callbacks (e.g., renderHook(() => ...))
      reactiveScopes: ['renderHook'],
    }),
  ],
})
```

Core defaults:

- `include`: `['**/*.tsx', '**/*.jsx']`
- `exclude`: `['**/node_modules/**']`
- `useTypeScriptProject`: `true`
- `cache`:
  - enabled by default
  - memory cache always on
  - persistent cache defaults to `true` during `vite build`, otherwise in-memory only

Compiler option passthrough:

- This plugin forwards compiler options directly (for example: `strictGuarantee`, `strictReactivity`, `lazyConditional`, `emitModuleMetadata`, `warningLevels`, `reactiveScopes`).
- Current compiler default is `strictGuarantee: true` (fail-closed).

Runtime dev/prod define:

- The plugin defines `__DEV__` automatically:
  - `true` in dev server
  - `false` in production build

Recommended profiles:

```ts
// Strict app/CI baseline
fict({
  strictGuarantee: true,
})

// Migration / benchmark compatibility
fict({
  strictGuarantee: false,
  emitModuleMetadata: false,
  dev: false,
})
```

Notes:

- `reactiveScopes` only applies to **direct calls** and only treats the **first argument** as the reactive callback.
- Aliased/indirect calls are not recognized (e.g., `const rh = renderHook; rh(() => ...)`).
- Cross-module metadata lookup is filesystem-based (relative/absolute/alias/ts resolution). Bare package imports require a custom `resolveModuleMetadata` hook if you need metadata propagation.
- `debug` logs are disabled by default; enable with `debug: true` or `FICT_VITE_PLUGIN_DEBUG=1`.
npm package: @fictorial/express-auth-hmac
Description: Express middleware to encode and decode user identity with tamper detection via HMAC
Author: Brian Hammond
Latest version: 1.0.0

# express-auth-hmac

Express middleware to encode and decode user identity with tamper detection via HMAC.

```sh
$ node example.js
```

```sh
$ http :3333/login username=foobar
HTTP/1.1 200 OK
Connection: keep-alive
Content-Length: 99
Content-Type: application/json; charset=utf-8
Date: Mon, 01 Apr 2019 20:22:47 GMT
ETag: W/"63-kXVzBG0RBzee64MOV5UDKiicvkM"
X-Powered-By: Express

{
    "token": "eyJ1c2VybmFtZSI6ImZvb2JhciJ9!0qzM5vxtA4uS97HMZyE+W1qAYVweIMpnoH+M9blzzCA=!1554150197905"
}
```

```sh
$ http :3333/whoami 'Authorization:bearer eyJ1c2VybmFtZSI6ImZvb2JhciJ9!0qzM5vxtA4uS97HMZyE+W1qAYVweIMpnoH+M9blzzCA=!1554150197905'
GET /whoami HTTP/1.1
Accept: */*
Accept-Encoding: gzip, deflate
Authorization: bearer eyJ1c2VybmFtZSI6ImZvb2JhciJ9!0qzM5vxtA4uS97HMZyE+W1qAYVweIMpnoH+M9blzzCA=!1554150197905
Connection: keep-alive
Host: localhost:3333
User-Agent: HTTPie/1.0.2


HTTP/1.1 200 OK
Connection: keep-alive
Content-Length: 21
Content-Type: application/json; charset=utf-8
Date: Mon, 01 Apr 2019 20:22:56 GMT
ETag: W/"15-gQRh2GiuXjM3VBzWT97UgJMjtTA"
X-Powered-By: Express

{
    "username": "foobar"
}
```
npm package: @fictorial/express-rpc
Description: Getting tired of REST and GraphQL and just want to expose some JavaScript functions to clients over HTTP?
Author: Brian Hammond
Latest version: 1.0.1

# JSON-over-HTTP RPC server for Express

Getting tired of REST and GraphQL and just want to expose some JavaScript functions to clients over HTTP?

Me too!

```sh
npm i -g @fictorial/express-rpc
```

```sh
# optional; for PORT, etc.
# $EDITOR .env

express-rpc my_rpcs.js

# or when developing
# DEBUG=express-rpc node index.js ./example/my_rpcs.js
```

```JavaScript
// ./example/my_rpcs.js

module.exports = {
  greet: ({ name }) => {
    return { greeting: `Hello, ${name || 'anon'}` }
  }
}
```

```sh
curl -H 'Content-type: application/json' --data-binary '{ "name": "Brian" }' localhost:2999/rpc/greet
```

```
{ "greeting": "Hello, Brian" }
```

## Notes

The exported RPCs can be nested and then referenced by clients using familiar dot-notation
e.g. `localhost:2999/greetings.hello`, etc.

Exported functions can be `async`.

If your RPC throws the `Error` thrown is used in the response:
- `Error.code` for the HTTP status code; default: 500

- `Error.message` for the body of the response `{ error: { message: "..." }}`

`this` inside a handler is the `req` from Express.
npm package: @ficusjs/app-shell-runtime
Description: Ficus App Shell Runtime
Author: Matt Levy
Latest version: 0.1.0

# Ficus App Shell Runtime

The app shell runtime is the runtime for the app shell. It is responsible for loading the app configuration, and then loading modules that provide the functionality of the app.

The runtime is loaded once and provides the following functionality to modules:

- Loading the app configuration
- Loading modules
- Providing features to modules
  - Application state
  - Routing
  - Event handling
  - Component creation
  - Component rendering
  - Internationalization

## Usage

The app shell runtime is loaded by the app UI components; desktop or mobile.

## Application state

The app shell runtime provides two application state stores.

- `ficus.app.shell.appConfig` - The application state store that contains methods for loading and working with modules.
- `ficus.app.shell.layout` - The application state store that is specific to layouts.

```js
// get the app config application state object
const appConfigStore = getAppState('ficus.app.shell.appConfig')

// get the layout application state object
const layoutStore = getAppState('ficus.app.shell.layout')
```
npm package: @ficusjs/components
Description: A library of UI components built for FicusJS 
Author: Matt Levy
Latest version: 1.0.0-alpha.25

# Ficus components

A library of UI components built using [FicusJS](https://github.com/ficusjs/ficusjs).

## Docs

### Dev

[https://ficusjs-components.surge.sh](https://ficusjs-components.surge.sh)

### Live

[https://components.ficusjs.org](https://components.ficusjs.org)
npm package: @ficusjs/state
Description: State functions for FicusJS
Author: Matt Levy
Latest version: 4.2.0

# FicusJS state

FicusJS state provides a set of functions for extending components to use
finite state machines and statecharts (behaviour) or stores (data) for managing application state.

Components can react to state changes and update their UI accordingly.

For documentation visit:

- [State machines](https://docs.ficusjs.org/state-machines/)
- [Stores](https://docs.ficusjs.org/app-state/)

## Installation

FicusJS state is part of [FicusJS](https://docs.ficusjs.org) but can also be installed independently in a number of ways.

### CDN

We recommend using native ES modules in the browser.

```html
<script type="module">
  import {
    XStateServiceStatus,
    addXStateService,
    assign,
    BasePersist,
    createAppState,
    createMachine,
    createPersist,
    createStateMachine,
    createXStateService,
    getAppState,
    getXStateService,
    interpret,
    Store,
    withLocalState,
    withStateMachine,
    withStore,
    withWorkerStore,
    withXStateService,
    wrapXStateService
  } from 'https://cdn.skypack.dev/@ficusjs/state'
</script>
```

FicusJS state is available on [Skypack](https://www.skypack.dev/view/@ficusjs/state).

### NPM

FicusJS state works nicely with build tools such as Snowpack, Webpack or Rollup. If you are using a NodeJS tool, you can install the NPM package.

```bash
npm install @ficusjs/state
```

### Available builds

FicusJS state only provides ES module builds. For legacy browsers or alternative modules such as CommonJS, it is recommended to use a build tool to transpile the code.

## Development

How to set-up FicusJS state for local development.

1. Clone the repository:

```bash
git clone https://github.com/ficusjs/ficusjs-state.git
```

2. Change the working directory

```bash
cd ficusjs-state
```

3. Install dependencies

```bash
npm install
```

4. Run the local development server

```bash
npm run dev
```

That's it! Now open http://localhost:8080 to see a local app.

## License

This project is licensed under the MIT License - see the [`LICENSE`](LICENSE) file for details.

## Contributing to FicusJS state

Any kind of positive contribution is welcome! Please help us to grow by contributing to the project.

If you wish to contribute, you can work on any features you think would enhance the library. After adding your code, please send us a Pull Request.

> Please read [CONTRIBUTING](CONTRIBUTING.md) for details on our [CODE OF CONDUCT](CODE_OF_CONDUCT.md), and the process for submitting pull requests to us.

## Support

We all need support and motivation. FicusJS is not an exception. Please give this project a ⭐️ to encourage and show that you liked it. Don't forget to leave a star ⭐️ before you move away.

If you found the library helpful, please consider [sponsoring us](https://github.com/sponsors/ficusjs).