open-index/open-npm huggingface dataset:
npm package: @roothub/rh-chat
Description: 客服IM
Author: hujin
Latest version: 0.0.4

# RH-CHAT

RhChat 项目是由 React + Ant Design 组件构建的网页 IM 框架，所有功能都均由插件的形式装载进框架中，方便、易容、快速扩展是框架的特性。

## 文档

[文档](https://rp.bighome360.com/devops-project-rp/file/rh-chat/UI/20210426182145/docs/index.html#/)
npm package: @rootpush/cli
Description: CLI tool for bundling and uploading React Native updates to RootPush
Author: RootPush
Latest version: 1.5.6

# RootPush CLI

A CLI tool for bundling and uploading React Native updates. It also supports Expo projects.

## Installation

```bash
npm i -g @rootpush/cli
```

## Authentication

You have two options to authenticate with RootPush:

### Option 1: Login Command (Recommended)

```bash
rootpush login
```

This will:
1. Guide you to https://rootpush.com/org/account/ to generate a token
2. Securely store your credentials
3. Validate your authentication

To logout:
```bash
rootpush logout
```

### Option 2: Environment Variable

You can also use an environment variable if you prefer:
```bash
export ROOTPUSH_AUTH_TOKEN=your_token_here
```

## Usage

1. Install RootPush Updates in your project:
```bash
rootpush install --product updates
```

2. Deploy an update:
```bash
rootpush updates --app 0194793c-fca2-71f0-af50-6075edd3c1c9
```

## Commands

### login
Log in to RootPush and store your credentials securely.

### logout
Log out and remove stored credentials.

### install
Install and configure RootPush products in your React Native project.

Options:
- `--product <name>` (required): Product name

### updates
Bundle and upload a new update of your React Native app.

Options:
- `--app <id>` (required): Your app identifier (available in app settings)
- `--target <version>`: Target binary version (will auto-detect if not provided)
- `--branch <branch>`: Target branch (will use current git branch if not provided)
- `--hermesEnabled`: Enable/disable Hermes (defaults to true)

Run `rootpush updates -h` to see all available options.

## Project Structure

The CLI tool supports both Expo and bare React Native projects. It automatically:
- Detects project type (Expo or bare)
- Detects current branch
- Detects target version
- Handles Hermes compilation when enabled

## Security

When using the login command, your authentication token is stored securely using:
- Keychain on macOS
- Credential Manager on Windows
- Encrypted configuration on Linux

## Contributing

See CONTRIBUTING.md for guidelines on contributing to this project.
npm package: @rootpush/updates-expo-plugin
Description: A config plugin for Expo that enables Over-The-Air (OTA) updates in your application using @rootpush/updates.
Author: RootPush
Latest version: 1.1.0

# @rootpush/expo-updates-plugin

A config plugin for Expo that enables Over-The-Air (OTA) updates in your application using @rootpush/updates.

## Overview

This plugin modifies your native Android and iOS projects to integrate with the @rootpush/updates package, enabling you to deliver OTA updates to your Expo application. It handles the necessary native code modifications to override the default JavaScript bundle loading behavior.

## Prerequisites

- Expo SDK 48 or newer
- @rootpush/updates package installed in your project

## Installation

```bash
# Install the required packages
npm install @rootpush/updates @rootpush/expo-updates-plugin

# If you're using yarn
yarn add @rootpush/updates @rootpush/expo-updates-plugin
```

## Configuration

Add the plugin to your `app.json` or `app.config.js`:

```json
{
  "expo": {
    "plugins": [
      "@rootpush/expo-updates-plugin"
    ]
  }
}
```

## What This Plugin Does

This plugin makes the following modifications to your native projects:

### Android Changes

1. Adds `UpdatesPreferences` import to your `MainApplication.java`
2. Overrides `getJSBundleFile()` to use the bundle path from `UpdatesPreferences`

### iOS Changes

#### For Objective-C Projects:
1. Imports `UpdatesPreferences.h`
2. Modifies the `getJSBundleURLForBundleRoot` implementation to use `UpdatesPreferences`

#### For Swift Projects:
1. Imports `UpdatesPreferences`
2. Modifies the bundle URL retrieval to use `UpdatesPreferences`

## Usage with @rootpush/updates

This plugin is designed to work in conjunction with the @rootpush/updates package. After setting up this plugin, you'll need to configure @rootpush/updates according to its documentation to handle the OTA update lifecycle.

## Building Your Application

After installing the plugin, rebuild your native projects:

```bash
# Clear the native build folders
expo prebuild --clean

# Rebuild the native projects
expo prebuild
```

## Troubleshooting

If you encounter any issues:

1. Ensure all prerequisites are installed
2. Check that the plugin is properly listed in your Expo config
3. Try cleaning and rebuilding your project
4. Verify that @rootpush/updates is properly configured

## Requirements

- Expo SDK: ≥ 48
- Platform: iOS and Android
- @rootpush/updates: Compatible version

## License

This project is licensed under the MIT License.
npm package: @rootrender/easy-email-editor
Description: Email editor
Author: m-Ryan
Latest version: 4.16.3

# Easy-email-editor

## Introduction

Email render and preview container.

## usage

```sh
$ npm install --save easy-email-editor
```

or

```sh
$ yarn add easy-email-editor
```

```js
import React from 'react';
import { BlockManager } from 'easy-email-core';
import { EmailEditor, EmailEditorProvider } from 'easy-email-editor';
import 'easy-email-editor/lib/style.css';

const initialValues = {
  subject: 'Welcome to Easy-email',
  subTitle: 'Nice to meet you!',
  content: BlockManager.getBlockByType(BasicType.PAGE).create({}),
};

export function App() {
  return (
    <EmailEditorProvider
      data={initialValues}
      height={'calc(100vh - 72px)'}
    >
      {({ values }) => {
        return <EmailEditor />;
      }}
    </EmailEditorProvider>
  );
}
```
npm package: @rootrender/easy-email-extensions
Description: Email editor
Author: m-Ryan
Latest version: 4.16.16

# Easy-email-extensions

## usage

```sh
$ npm install --save easy-email-extensions
```

or

```sh
$ yarn add easy-email-extensions
```

```js
import React from 'react';
import { BlockManager, BasicType, AdvancedType } from 'easy-email-core';
import { EmailEditor, EmailEditorProvider } from 'easy-email-editor';
import { ExtensionProps, StandardLayout } from 'easy-email-extensions';

import 'easy-email-editor/lib/style.css';
import 'easy-email-extensions/lib/style.css';

const categories: ExtensionProps['categories'] = [
  {
    label: 'Content',
    active: true,
    blocks: [
      {
        type: AdvancedType.TEXT,
      },
      {
        type: AdvancedType.IMAGE,
        payload: { attributes: { padding: '0px 0px 0px 0px' } },
      },
      {
        type: AdvancedType.BUTTON,
      },
      {
        type: AdvancedType.SOCIAL,
      },
      {
        type: AdvancedType.DIVIDER,
      },
      {
        type: AdvancedType.SPACER,
      },
      {
        type: AdvancedType.HERO,
      },
      {
        type: AdvancedType.WRAPPER,
      },
    ],
  },
  {
    label: 'Layout',
    active: true,
    displayType: 'column',
    blocks: [
      {
        title: '2 columns',
        payload: [
          ['50%', '50%'],
          ['33%', '67%'],
          ['67%', '33%'],
          ['25%', '75%'],
          ['75%', '25%'],
        ],
      },
      {
        title: '3 columns',
        payload: [
          ['33.33%', '33.33%', '33.33%'],
          ['25%', '25%', '50%'],
          ['50%', '25%', '25%'],
        ],
      },
      {
        title: '4 columns',
        payload: [['25%', '25%', '25%', '25%']],
      },
    ],
  },
];

const initialValues = {
  subject: 'Welcome to Easy-email',
  subTitle: 'Nice to meet you!',
  content: BlockManager.getBlockByType(BasicType.PAGE)!.create({}),
};

export default function App() {

  return (
    <EmailEditorProvider
      data={initialValues}
      height={'calc(100vh - 72px)'}
      autoComplete
      dashed={false}
    >
      {({ values }) => {
        return (
          <StandardLayout
            categories={categories}
            showSourceCode={true}
          >
            <EmailEditor />
          </StandardLayout>
        );
      }}
    </EmailEditorProvider>
  );
}

```