open-index/open-npm huggingface dataset:
npm package: @move-elevator/eslint-config-typescript
Description: Configuration for Eslint using TypeScript.
Author: move elevator GmbH
Latest version: 2.0.0

# @move-elevator/eslint-config-typescript

A shareable Eslint configuration for TypeScript projects.

## Installation

```bash
npm i -D @move-elevator/eslint-config-typescript
```

### Peer Dependencies

This package requires the following peer dependencies:

```bash
npm i -D eslint eslint-plugin-perfectionist eslint-plugin-prefer-arrow-functions typescript-eslint
```

## Usage

Create an Eslint config file  like `eslint.config.mjs` in your project root and extend this configuration:

```javascript
import config from '@move-elevator/eslint-config-typescript'

export default [
  ...config,
  {
    // your custom rules
  }
]
```

## What's Included

This configuration extends:

- `@eslint/js` recommended rules
- `typescript-eslint` recommended rules
- `eslint-plugin-perfectionist` alphabetical sorting rules

Additional rules:

- `no-undef`: error
- `prefer-arrow-functions/prefer-arrow-functions`: error
- `quotes`: single quotes required
- `semi`: no semicolons

## License

[MIT](LICENSE.md)
npm package: @move-elevator/stylelint-config-scss
Description: Configuration for Stylelint using SCSS (Sass).
Author: move elevator GmbH
Latest version: 2.0.0

# @move-elevator/stylelint-config-scss

A shareable Stylelint configuration for SCSS (Sass) projects.

## Installation

```bash
npm i -D @move-elevator/stylelint-config-scss
```

### Peer Dependencies

This package requires the following peer dependencies:

```bash
npm i -D postcss-scss stylelint stylelint-order stylelint-scss @stylistic/stylelint-plugin
```

## Usage

Create a stylelint config file like `.stylelintrc.json` in your project root and extend this configuration:

```json
{
  "extends": "@move-elevator/stylelint-config-scss/.stylelintrc.json"
}
```

## What's Included

This configuration uses `postcss-scss` as the custom syntax and includes the following plugins:

- **@stylistic/stylelint-plugin** - Stylistic rules for formatting
- **stylelint-order** - Property ordering rules
- **stylelint-scss** - SCSS-specific linting rules

### Key Rules

| Rule                    | Setting                   |
|-------------------------|---------------------------|
| Block opening brace     | Space before              |
| Color hex case          | Lowercase                 |
| Color hex length        | Long format (`#ffffff`)   |
| Leading zero            | Required (`0.5` not `.5`) |
| Max nesting depth       | 4 levels                  |
| Named colors            | Not allowed               |
| Properties order        | Alphabetical              |
| Pseudo-element notation | Double colon (`::before`) |
| Selector class pattern  | BEM or kebab-case         |
| String quotes           | Double quotes             |
| Trailing semicolon      | Required                  |

## License

[MIT](LICENSE.md)
npm package: @move-lab/shippify-node
Description: This library allows you to quickly use Shippify API with NodeJS
Author: pablo.barrales@movelab.cl
Latest version: 0.0.11

Shippify for Node.JS
===
This library allows you to quickly use Shippify API with NodeJS

---
## Usage
### Installing
`npm install @move-lab/shippify-node -S`

### Initialize
Initialize the library:
```javascript
import shippify from '@move-lab/shippify-node'

shippify.initialize('api_key', 'api_secret')
```

### Getting a quote from Shippify
```javascript
// Create a delivery to request a quote
const delivery = new shippify.Delivery()
delivery.addPickup({
  "contact": {
      "name": "John Doe",
      "email": "john@doe.com",
      "phonenumber": "+19209489292"
  },
  "location": {
      "address": "Central Park, New York, NY, United States",
      "instructions": "Central Park West, APT 10920"
  }
})
delivery.addDropoff({
  "contact": {
    "name": "Jane Doe",
    "email": "janedoe@domain.com",
    "phonenumber": "+1 234567890"
  },
  "location": {
      "address": "200 Eastern Pkwy, Brooklyn, NY 11238, USA",
      "instructions": "APT 2094",
      "lat": 40.6720036,
      "lng": -73.9593279
  }
})

delivery.addPackages({
  "name": "roses",
  "size": "xs",
  "qty": 1
})

// Getting the quotes
const quotes = await shippify.quotes([delivery], new Date('2019-07-31 09:00:00'))

// You can access to closest quote by closest
console.log(quotes.closest)
// You can access to all quotes
console.log(quotes.all)
```

### Creating a delivery on Shippify
With quotes we can create a delivery
```javascript
const delivery = new shippify.Delivery() // Delivery created for get quotes
const quote = quotes.closest
const deliveries = await shippify.delivery([delivery], quote.id)
// That's all
```

### Canceling a delivery
```javascript
// Simplily with the id
await shippify.delivery.cancel(id)
```
## API

---
#### TODO
* Add Webhook support
* Add Draft support
* Testing
npm package: @move.box/db-service
Description: mysql2 utils
Author: kk-vv
Latest version: 1.2.0



### Usage

- Create service 

```
const dbservice = createDBService({
    host: DBConfig.DB_HOST,
    port: DBConfig.DB_PORT,
    user: DBConfig.DB_USER,
    password: DBConfig.DB_PASSWORD,
    database: DBConfig.DB_NAME,
    waitForConnections: true,
    connectionLimit: 10
  })
```

- Check db connection or error 

```
try {
  await dbservice.checkStatusOrError()
} catch (error) {
  if (error instanceof DBError) {
    console.error('|ErrorMessage|', error.errorMessage())
    console.error('|Cause|', error.cause)
  } else {
    console.error(error)
  }
  process.exit(1)
}
```

- Query


```
try {
  const result = await dbservice.query<{ id: number, name: string }>(`select * from ${DBConfig.TABLES.table1} where id>=10 limit 10`)
  console.dir(result, { depth: 10 })
} catch (error) {
  console.error(error)
}
```

- Batch execute

```
try {
  await dbservice.batchExec([
    (connection) => {
      return dbservice.executeByConn(connection, `insert into ${DBConfig.TABLES.table1} (id, name) VALUES (10000001, "123123")`)
    },
    (connection) => {
      return dbservice.executeByConn(connection, `insert into ${DBConfig.TABLES.table2} (name, address) VALUES ('Move', 'Address online')`)
    },
  ])
} catch (error) {
  console.error(error)
}
```


##### Example

```

const DBConfig = {
  DB_HOST: "localhost",
  DB_PORT: 3306,
  DB_USER: "test",
  DB_PASSWORD: "123456",
  DB_NAME: "db_name",
  TABLES: {
    table1: "table_name_1",
    table2: "table_name_2"
  }
}

async function main() {
  const dbservice = createDBService({
    host: DBConfig.DB_HOST,
    port: DBConfig.DB_PORT,
    user: DBConfig.DB_USER,
    password: DBConfig.DB_PASSWORD,
    database: DBConfig.DB_NAME,
    waitForConnections: true,
    connectionLimit: 10
  })

  try {
    await dbservice.checkStatusOrError()
  } catch (error) {
    if (error instanceof DBError) {
      console.error('|ErrorMessage|', error.errorMessage())
      console.error('|Cause|', error.cause)
    } else {
      console.error(error)
    }
    process.exit(1)
  }

  try {
    const result = await dbservice.query<{ id: number, name: string }>(`select * from ${DBConfig.TABLES.table1} where id>=10 limit 10`)
    console.dir(result, { depth: 10 })
  } catch (error) {
    console.error(error)
  }

  try {
    await dbservice.batchExec([
      (connection) => {
        return dbservice.executeByConn(connection, `insert into ${DBConfig.TABLES.table1} (id, name) VALUES (10000001, "123123")`)
      },
      (connection) => {
        return dbservice.executeByConn(connection, `insert into ${DBConfig.TABLES.table2} (name, address) VALUES ('Move', 'Address online')`)
      },
    ])
  } catch (error) {
    console.error(error)
  }

  await dbservice.close()

}

main()
```
npm package: @move.box/redis-service
Description: redis utils
Author: kk-vv
Latest version: 1.1.0

# RedisService 

## Usage 

- setString
- getString
- setNumber
- getNumber
- setBigInt
- getBigInt
- setJSONObject
- getJSONObject
- batchSet
- batchGet
- batchSetJSONObject
- batchGetJSONObject
- batchUpdateTTL
- deleteByKeys
- deleteKeysByPattern
- isExist

#### Example

```
export async function main() {
  const redisService = new RedisService('redis://localhost:6379', 7)
  try {
    await redisService.connectOrThrow()
  } catch (error) {
    console.error(error)
  }

  try {
    const model = {
      name: 'Move',
      address: 'Online',
      balance: 12345678914789464989755456555556566n
    }
    await redisService.setJSONObject('aKeY', model, 20, false)   // expired at 20 seconds, if none would never expired
    await redisService.setJSONObject('bKeY', model, 20, true)   // expired at 20 seconds, if none would never expired
    const jsonObjectNull = await redisService.getJSONObject('akey', false) // null
    const jsonObject1 = await redisService.getJSONObject('akey', true) // null
    const jsonObject2 = await redisService.getJSONObject('aKeY', false) // model

    const jsonObjectNullB = await redisService.getJSONObject('bKeY', false) // null
    const jsonObjectB1 = await redisService.getJSONObject('bKeY', true) // model
    const jsonObjectB2 = await redisService.getJSONObject('bkey', false) // model
    const jsonObjectB3 = await redisService.getJSONObject('bKeY', false) // null

    await redisService.batchUpdateTTL(['bKeY'], 100, true) // update new expired time to 100 seconds

    console.dir(jsonObjectNull, { depth: 10 })
    console.dir(jsonObject1, { depth: 10 })
    console.dir(jsonObject2, { depth: 10 })

    console.dir(jsonObjectNullB, { depth: 10 })
    console.dir(jsonObjectB1, { depth: 10 })
    console.dir(jsonObjectB2, { depth: 10 })
    console.dir(jsonObjectB3, { depth: 10 })

    //
    const item1 = 12345
    const item2 = 'abcdef'
    const item3 = 123456789213456789123456789123456789123456789456123456789456123456789456123456789456123456789n
    const item4 = {
      'title': 'Box',
      'items': [
        '1',
        '2',
        '3',
        '4',
        '5',
      ]
    }

    await redisService.batchSetJSONObject({ 'key1': item1, 'kEy2': item2, 'Key3': item3, 'keY4': item4 })
    const records = await redisService.batchGetJSONObject(['key1', 'key2', 'key3', 'key4', 'key5'])
    console.log(records['key1'])//12345
    console.log(records['key2'])//abcdef
    console.log(records['key3'])//123456789213456789123456789123456789123456789456123456789456123456789456123456789456123456789n
    console.log(records['key4'])//{ title: 'Box', items: [ '1', '2', '3', '4', '5' ] }
    console.log(records['key5'])//null

    await redisService.deleteByKeys(['key1', 'key2', 'Key3', 'key4', 'key5'], false)// delete key1 key2 key4
  } catch (error) {
    console.error(error)
  }

  await redisService.disconnectOrThrow()
}

main()
```
npm package: @move.box/ts-gc
Description: - npx @move.box/ts-gc@latest create
Author: kk-vv
Latest version: 1.3.0

### Create

- npx @move.box/ts-gc@latest create

### Common Utils

- DataService

```
APIRequest.jsonRequest()
APIService.fetch<T>()
```

- FormatUtils

```

FormatUtils.shitNumber('0.000000000000123') //0.0{12}123
FormatUtils.toTradingViewNumber('0.000000000000123') //0.0₁₂123
```

- ObjectExt

```
JSONSerialize     with bigint
JSONDeserialize   with bigint
...
```
npm package: @move.box/ts-gc-express
Description: - npx @move.box/ts-gc-express@latest create
Author: kk-vv
Latest version: 1.5.0

### Create

- npx @move.box/ts-gc-express@latest create

### Start

#### Dev

- Run dev 

```
npm install
npm run dev
```

- [view status](http://localhost:8899)
- [view todo list](http://localhost:8899/todo/list)


- Use APIService check

```
import { RequestMethod } from './src/DataService/APIRequest'
import { APIService, APIServiceError } from './src/DataService/APIService'
import { TodoItem } from './src/Main/BizModels/TodoModel'
import { LogPrefix } from './src/Utils/LogPrefix'

async function test() {
  try {
    const list = await APIService.fetch<TodoItem[]>({
      url: 'http://localhost:8899/todo/all',
      method: RequestMethod.GET
    })
    console.log(list)

    const filterList = await APIService.fetch<TodoItem[]>({
      url: 'http://localhost:8899/todo/filter',
      method: RequestMethod.POST,
      params: {
        name: 'ing'
      }
    })
    console.log(filterList)

    const filterList2 = await APIService.fetch<TodoItem[]>({
      url: 'http://localhost:8899/todo/filter',
      method: RequestMethod.POST,
      params: {
        name: 'ing',
        completed: true
      }
    })
    console.log(filterList2)

  } catch (error) {
    if (error instanceof APIServiceError) {
      console.log(`${LogPrefix.error}Response error`, error.code, error.message)
    } else {
      console.error(error)
    }
  }
}

test()
```

#### Pro

- npm run start

#### Deploy with docker


```
docker-compose build
docker-compose up -d
```
npm package: @move.box/ts-gc-viem
Description: - npx @move.box/ts-gc-viem@latest create
Author: kk-vv
Latest version: 1.2.0

### Create

- npx @move.box/ts-gc-viem@latest create

### Start

#### Dev

- Run dev 

```
npm install
npm run dev
```

- [view status](http://localhost:8899)
- [view latest block](http://localhost:8899/eth/latest_block)

### Demo API

- /eth/batch/metadata

```
POST
tokens: string[]
```

- /eth/batch/iscontract

```
POST
addresses: string[]
```

- /eth/tx/status

```
POST
hash: string
```

- ... more in EVMRPC


#### Prod

- npm run start

#### Deploy with docker


```
docker-compose build
docker-compose up -d
```
npm package: @moveable/matrix
Description: Matrix for moveable
Author: Daybrush
Latest version: 0.3.1


<h2 align="middle">@moveable/matrix</h2>
<p align="middle">
<a href="https://www.npmjs.com/package/@moveable/matrix" target="_blank"><img src="https://img.shields.io/npm/v/@moveable/matrix.svg?style=flat-square&color=007acc&label=version" alt="npm version" /></a>
<img src="https://img.shields.io/badge/language-typescript-blue.svg?style=flat-square"/>
<a href="https://github.com/daybrush/moveable/blob/master/LICENSE" target="_blank"><img src="https://img.shields.io/github/license/daybrush/moveable.svg?style=flat-square&label=license&color=08CE5D"/></a>
</p>
<p align="middle">Matrix for moveable</p>

## ⚙️ Installation
### npm
```bash
$ npm install @moveable/matrix
```

## ⭐️ Show Your Support
Please give a ⭐️ if this project helped you!

## 👏 Contributing

If you have any questions or requests or want to contribute to `@moveable/matrix` or other packages, please write the [issue](https://github.com/daybrush/moveable/issues) or give me a Pull Request freely.

## 🐞 Bug Report

If you find a bug, please report to us opening a new [Issue](https://github.com/daybrush/moveable/issues) on GitHub.


## 📝 License

This project is [MIT](https://github.com/daybrush/moveable/blob/master/LICENSE) licensed.

```
MIT License

Copyright (c) 2019 Daybrush

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
```
npm package: @moveaxlab/env-validation
Description: Validate env variables
Author: Michelle Laurenti
Latest version: 0.1.3


# Env validation library

This started as a shameless ripoff of [env-var][env-var-repo], then took its own way.

This library exploits the moveax validation library to 
validate environment variables.

## Installation

```bash
yarn add @moveaxlab/env-validation
```

## Usage

Values can be retrieved from the environment specifying the type and, optionally, some rules, according to chainside validation library.

```js
import { envValidation } from '@moveax/env-validation';

const my_var = envValidation.get('VARIABLE_NAME').asString();

const my_var_with_default = envValidation.get('VARIABLE_NAME', 'DEFAULT_VALUE').asString();
```

All variables are required by default.
If you want to make a variable optional, add the `nullable` rule.

```js
const my_var_possibly_null = envValidation.get('VARIABLE_NAME').asString('nullable');
```

If no value is given, no default value is specified, and the `nullable` rule is present, the value returned will be `undefined`.
String types, if given the `nullable` rule, will return an empty string (`''`) if no value is given for the variable.

Rules can be passed as an array of string or as a `|` (pipe) separated string of rules.

The library throws an error in your face if the environment variable does not match the type.


[env-var-repo]: https://github.com/evanshortiss/env-var
npm package: @moveaxlab/eslint-config
Description: ESLint Configuration for Typescript Projects
Latest version: 0.5.1


# Moveax ESLint configuration

![Travis (.com)](https://img.shields.io/travis/com/moveaxlab/eslint-config)
![npm (scoped)](https://img.shields.io/npm/v/@moveaxlab/eslint-config)

This repo contains the default ESLint configuration for Moveax TypeScript projects.

## Installation

This package depends on `eslint` and `typescript`.

Install the package:

```bash
yarn add @moveax/eslint-config
```

## Setup

Create a `.eslintrc.js` file with the following contents:

```js
module.exports = {
  "extends": ["@moveax"]
}
```

You can override some rules by adding a `rules` key to the `.eslintrc.js` file.

To lint the project, run the following command in your project root folder:

```bash
yarn eslint --ext .js,.ts .
```

To fix errors that are fixable, run the following command in your project root folder:

```bash
yarn eslint --ext .js,.ts --fix .
```

### WebStorm integration

To enable eslint in your WebStorm project, go to `Settings > Languages & Frameworks > JavaScript > Code Quality Tools > ESLint`
and select `Automatic ESLint configuration`.
npm package: @moveaxlab/grpc-gen
Description: ![NPM License](https://img.shields.io/npm/l/%40moveaxlab%2Fgrpc-gen) ![NPM Version](https://img.shields.io/npm/v/%40moveaxlab%2Fgrpc-gen)
Latest version: 1.0.2

# gRPC gen

![NPM License](https://img.shields.io/npm/l/%40moveaxlab%2Fgrpc-gen)
![NPM Version](https://img.shields.io/npm/v/%40moveaxlab%2Fgrpc-gen)

This package contains some opinionated utility functions to generate TypeScript types
from protobuf files, to interact with gRPC services and protobuf in general.

The goal of this package is to avoid the code bloat caused by generating JS code:
we prefer to rely on packages like `@grpc/proto-loader` to generate code
at runtime from raw `.proto` files.
For this reason we want to generate only TypeScript types,
and let other packages generate the code needed to parse protobuf messages.

## Installation

```bash
yarn add --dev @moveaxlab/grpc-gen
```

## Usage

This tool comes with opinionated defaults on how protobuf files must be structured
and how code will be generated.

The expected directory structure is the following:

```
protobuf/
  common/
    file1.proto
    file2.proto
  service1/
    file1.proto
    file2.proto
  service2/
    file1.proto
    file2.proto
```

To generate code:

```bash
yarn grpc-gen -i <protobuf directory> -o <output directory> [services ...]
```

Omitting the `services` positional argument will generate code for all services
contained in the `protobuf directory` option.

The output directory will contain an index file with types for all packages,
and a `Parser.ts` file that allows you to manually decode and encode
protobuf messages in a type safe way.

To use the parser:

```typescript
import { Parser } from "./__generated__/Parser";

// obtain a parser for a generated package
const packageParser = Parser.forPackage("mypackage");

// use the parser to encode and decode protobuf data
const encodedBuffer = packageParser.encode("myType", {
  /* data */
});
const decodedValue = packageParser.decode("myType", encodedBuffer);
```

The parser relies on `@grpc/proto-loader` to load protobuf definitions at runtime,
and must be configured before usage to know where protobuf models are:

```typescript
import { join, dirname } from "path";
import { setModelsFolder, addIncludeDir } from "./__generated__/Parser";

setModelsFolder(
  process.env.NODE_ENV === "production" ? "/app/protobuf" : "../../protobuf",
);

addIncludeDIr(
  process.env.NODE_ENV == "production"
    ? "/app/node_modules/grpc-tools/bin"
    : join(dirname(require.resolve("grpc-tools")), "bin"),
);
```

Generated types are compatible with [`@moveaxlab/nestjs-grpc-client`](https://github.com/moveaxlab/nestjs-grpc-client).
npm package: @movecall/claw-esp-expert
Description: ESP-IDF expert skill for OpenClaw with workspace-first installation and hardware-aware build tooling.
Author: Movecall
Latest version: 0.0.4

# 🦞 Claw-ESP-Expert

> **The definitive AI Agent Skill for ESP-IDF Developers.**  
> 懂硬件、懂网络、懂工程的专业级 ESP32 开发助理。

[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
[![Platform: OpenClaw](https://img.shields.io/badge/Platform-OpenClaw.ai-blue)](https://openclaw.ai)
[![Framework: ESP-IDF](https://img.shields.io/badge/Framework-ESP--IDF%20v5.x-red)](https://github.com/espressif/esp-idf)

Claw-ESP-Expert is a diagnostic-first skill for ESP32 + ESP-IDF workflows. It focuses on the highest-value pain points in embedded development: component lookup, pin safety, build failures, partition overflow, and panic decoding.

## Install

```bash
npx @movecall/claw-esp-expert
```

Default behavior:
- installs to `~/.openclaw/workspace/skills/claw-esp-expert`
- copies a self-contained `skill/` bundle
- does not silently edit `SOUL.md`
- does not silently modify project files or system permissions

## MVP highlights

- Component guidance: query the official ESP Component Registry and generate `idf_component.yml` suggestions
- Hardware-aware safety: audit risky GPIO assignments across multiple ESP32 chip families
- Build diagnostics: classify common ESP-IDF build failures such as missing headers, component issues, partition overflow, and memory overflow
- Runtime debugging: analyze monitor logs, decode panic backtraces with `addr2line`, and support a minimal `flash + monitor` loop

## Current scope

Primary tools:
- `safe_build`
- `resolve_component`
- `analyze_partitions`
- `decode_panic` / `analyze_monitor`

Supporting tools:
- `manage_env`
- `explore_demo`
- `flash_and_monitor`
- `execute_project`

Supported chip families:
- `esp32`
- `esp32s3`
- `esp32c3`
- `esp32c5`
- `esp32c6`
- `esp32h2`
- `esp32p4`

Common SKU names are normalized to family rules, for example:
- `ESP32-S3-PICO-1-N8R2` -> `esp32s3`
- `ESP32-C6FH4` -> `esp32c6`
- `ESP32-P4NRW32X` -> `esp32p4`

## Local development

```bash
git clone https://github.com/movecall/claw-esp-expert.git
cd claw-esp-expert
npm install
npm run build
npm test
```

## Repo layout

```text
claw-esp-expert/
├── bin/          # npx installer
├── skill/        # publishable skill bundle
├── src/          # runtime source
├── scripts/      # build helpers
├── tests/        # smoke tests
├── package.json
└── README.md
```

## Notes

- This is a usable MVP, not a full automation platform
- It returns suggestions, diagnostics, and patch-style drafts before attempting deeper automation
- HIL automation and full self-healing workflows are intentionally out of scope for the first release
npm package: @moveflow/widget
Description: > ⚠️ **This is a testnet version** of the MoveFlow Checkout Widget. It is intended for development and testing purposes only. Do not use for mainnet payments.
Latest version: 0.6.7

# 🚀 MoveFlow Checkout Widget (Testnet)

> ⚠️ **This is a testnet version** of the MoveFlow Checkout Widget. It is intended for development and testing purposes only. Do not use for mainnet payments.

Easily embed a beautiful, multi-chain crypto checkout widget into your React application. This testnet version supports subscription-based payments on Aptos, Goerli, Pharos, and LightLink testnets.

---

## 📦 Installation

Install the widget from npm:

```bash
npm install --save @moveflow/widget
```

Or with yarn:

```bash
yarn add @moveflow/widget
```

---

## 🛠️ Quick Start

### 1. Import the Widget

```tsx
import Widget, { WidgetProps } from "@moveflow/widget";
```

### 2. Create Your Testnet Config

```tsx
const props: WidgetProps = {
  ui: {
    container_border_radius: 10,
    field_border_radius: 5,
    button_border_radius: 5,
    primary_color: "#F143E2",
    secondary_color: "#ffffff",
    font_family: "Noto Sans, sans-serif",
  },
  basic_info: {
    name: "Subscription Sample",
    description: "This is a subscription sample",
  },
  payment: [
    {
      network: NetworkType.Aptos,
      coinType: "APT",
      amountType: "fixed",
      streamRate: 1,
      rateType: "month",
      receiver: "0xBF95dC3888dE3Bc8Ccd55465b3435f75699ee4A8",
      startTime: 1745645716000,
      endTime: 1748237716000,
      fixedRate: 1,
      depositAmount: 0,
    },
    {
      network: NetworkType.Goerli,
      coinType: "USDT",
      amountType: "fixed",
      streamRate: 1,
      rateType: "month",
      receiver: "0x96041C6cc8d52BF1B95A9aA3F7E1B7165D4e9Aa3",
      startTime: 1745645716000,
      endTime: 1748237716000,
      fixedRate: 1,
      depositAmount: 0,
    },
    {
      network: NetworkType.Pharos,
      coinType: "USDC",
      amountType: "fixed",
      streamRate: 1,
      rateType: "month",
      receiver: "0x96041C6cc8d52BF1B95A9aA3F7E1B7165D4e9Aa3",
      startTime: 1745645716000,
      endTime: 1748237716000,
      fixedRate: 1,
      depositAmount: 0,
    },
    {
      network: NetworkType.LightLink,
      coinType: "USDC",
      amountType: "fixed",
      streamRate: 1,
      rateType: "month",
      receiver: "0x96041C6cc8d52BF1B95A9aA3F7E1B7165D4e9Aa3",
      startTime: 1745645716000,
      endTime: 1748237716000,
      fixedRate: 1,
      depositAmount: 0,
    },
  ],
};

<Widget {...props} />;
```

---

## 🌐 Supported Testnet Networks

- **Aptos Testnet**
- **Ethereum Goerli**
- **Pharos Testnet**
- **LightLink Testnet**

Make sure you have the correct wallets installed (e.g., Petra for Aptos, MetaMask for EVMs).

---

## 🧪 Testnet-Only Notice

This widget is not connected to any mainnet infrastructure. All token transfers and payments will be simulated using testnet funds.

Do **not** use real assets — no mainnet coins or tokens will be accepted or processed.

---

## 🪪 License

MIT License
npm package: @movei/tree-sitter-move
Description: move grammar in tree-sitter
Author: nonsense1984
Latest version: 0.2.4

## tree-sitter-move

[tree-sitter][1] grammar for Libra's Move language.


### Move Grammar

The grammar is based on the origin Move language [syntax parser][2].
Once Move is stablized, the grammar will also be stable.

I'd like to use this grammar to do syntax hightlighting for Move in vscode, and maybe atom.

### Develop

1. Install tree-sitter-cli first.
2. then run `tree-sitter generate`.
4. parse a exmaple file: `tree-sitter parse examples/libra-std/libra_account.move`.


### Try

```
tree-sitter build-wasm
tree-sitter web-ui
```

### Test

Run:

```
tree-sitter test
# or parse whole libra std module
tree-sitter parse -q -t examples/libra-std/*.move
```


[1]: https://tree-sitter.github.io
[2]: https://github.com/libra/libra/blob/master/language/move-lang/src/parser/syntax.rs
npm package: @moveideas/alpine-product-360
Description: Loop a series of images in a 360 rotatation carousel with this component for alpine.js
Author: Jean-Baptiste Fournot
Latest version: 1.1.1

# 🎆 Alpine Product 360
Loop a series of images in a 360 rotatation carousel with this plugin for Vue.js

### 🙋🏼‍♂️ Vue.js user ? Check the plugin [Vue Product 360](https://github.com/moveideas/vue-product-360)

![Demo Screenshot](./screenshot.png)

## Demo

[▶️ Try the demo](https://nsfpk.csb.app/) or [▶️ View the sandbox](https://codesandbox.io/s/charming-black-nsfpk?file=/index.html)

## Installation

Quick start guide for installing and configuring the plugin

### Install via npm

```sh
# Using npm
npm install @moveideas/alpine-product-360
```

```javascript
import alpineCarousel from '@moveideas/alpine-product-360';
// Make available to fill the x-data directive
window.alpineCarousel = alpineCarousel;
```

### Using via CDN 

To pull the plugin for quick demos, grab the latest build via CDN:

```html
<script type="module" src="https://cdn.jsdelivr.net/gh/moveideas/alpine-product-360@1.1.0/dist/index.js"></script>
```

## Usage

The plugin injects for you in the window object a function called `alpineCarousel`. Use this function creating a new component with the `x-data` directive, and initialize it with the `start` function. The `alpineCarousel` function takes two parameters:

- **images (required)**: An array of images to be looped
- **parameters** (optional): If you would like customize the plugin — [view parameters available](##Parameters)

```html
<div x-data="alpineCarousel(['URL1', 'URL2', 'URL3', {infinite: true}])" x-init="start()">
    <img
        :src="carousel.currentPath"
        @mouseup="handleMouseUp"
        @mousedown="handleMouseDown"
        @mousemove="handleMouseMove"
        @mouseleave="handleMouseLeave" 
        draggable="false"
    >
</div>
```

## Parameters

| Name | Type | Default Value | Description |
|-|-|-|-|-|
| speed | `Number` | `10` | Rotation speed |
| reverse | `Boolean` | `false` | Change the rotation direction |
| infinite | `Boolean` | `true` | Infinite loop |
| keep-position | `Boolean` | `true` | When the images prop change, the plugin keep the current position. Otherwhise, the carousel slide to the first image |

## Functions includes
`alpineCarousel` returns an object including the following functions. You could use it inside the component scope. 

### slideToRight() 
Slide the carousel to the right. If the loop is complete and if the `infinite` props is set to `true`, the carousel slide to the first images.

### slideToLeft()
Slide the carousel to the left. If the loop is complete and if the `infinite` props is set to `true`, the carousel slide to the last images.

### slideTo(position)
Slide the carousel to a specific position 

### setImages(images)
Use this function to load images