open-index/open-npm huggingface dataset:
npm package: @luminex/use-action-mutation
Description: Tiny React hook for server actions: mutate(), pending state, and success/error callbacks.
Author: Alireza Zahiri
Latest version: 0.1.1

# @luminex/use-action-mutation

Tiny hook around React 19's `useActionState` for ergonomic server-action "mutations".

## Install

```bash
npm i @luminex/use-action-mutation
```

## Quick Start

```ts
'use client';
import { useActionMutation } from '@luminex/use-action-mutation';
import { myAction } from './actions';

const { mutate, isPending, data } = useActionMutation(myAction, {
  onSuccess: (s) => console.log('ok', s.response),
  onError: (s, e) => console.error(e),
});
```

## API

- `useActionMutation(action, { initialState, onSuccess, onError })`

- `envelopeServerAction(() => Promise<T>) → { success, response? , error? }`

- `ServerActionState<T>`

---
npm package: @luminfire/uppy-plugin-brilliant-storage
Description: Allows Uppy to use BrilliantStorage as a destination.
Author: Marty Kokes
Latest version: 1.5.9

# Uppy BrilliantStorage

<img src="https://uppy.io/images/logos/uppy-dog-head-arrow.svg" width="120" alt="Uppy logo: a superman puppy in a pink suit" align="right">

BrilliantStorage is an [Uppy](https://uppy.io) file uploader plugin, that allows BrilliantStorage to add a unique prefix onto the files being uploaded.

:warning: This is not an official Uppy plugin, so no support is offered for it. Please use at your own risk.


## Installation

```bash
$ npm install @luminfire/uppy-plugin-brilliant-storage --save
```

## Usage

```js
const Uppy = require('@uppy/core');
const BrilliantStorage = require('@luminfire/uppy-plugin-brilliant-storage');

const uppy = Uppy();
uppy.use(BrilliantStorage);
```

## Development

### Publish a New Release

1. Commit all changes, including changelog entry
1. Run `npm version major | minor | patch --no-git-tag-version`
1. Merge to `master`
1. Tag with semantic versioning
1. Ensure the [public repo](https://github.com/LuminFire/uppy-plugin-brilliant-storage/tags) has the up-to-date code
1. Run `npm publish`
npm package: @luminocity/lemonate-engine
Description: The Lemonate Engine is the game engine that powers lemonate.io
Author: Luminocity AG
Latest version: 26.4.0

# Lemonate Engine

The **Lemonate Engine** powers [lemonate.io](https://lemonate.io) and **Lemonate Studio**, the game editor for creating projects on the platform. The engine can also run games directly from built packages in standalone web applications.

---

## Usage

To run a Lemonate game on your website:

1. **Export your game package**
    - In Lemonate Studio, right-click your published game package in the folder "published" within your project
    - Select "Download" to export the package file and save it as `data.pkg`

2. **Set up your webpage**
    - Place the package file alongside this HTML file on a web server
    - **Note**: The game must be served from a web server (e.g., Apache, Nginx, or a local dev server like `http-server`). It **will not work** when opened directly from a local disk due to browser security restrictions.

---

## Example Implementation

Here's a complete HTML template to embed your Lemonate game:

```html
<!DOCTYPE html>
<html>
<head>
    <style>
        body, html {
            margin: 0;
            background: #000;
            font-family: sans-serif;
        }
        #renderview { width: 100%; height: 100vh; }
        #progress {
            position: absolute;
            top: 50vh;
            left: 50%;
            transform: translateX(-50%);
            width: 200px;
            height: 16px;
            border: 1px solid #f4cd2d;
            border-radius: 4px;
        }
        #progress .bar {
            background: #f4cd2d;
            height: 100%;
            width: 0;
            transition: width 0.5s ease-in-out;
        }
        #error {
            position: absolute;
            top: 50vh;
            left: 10px;
            font: bold 30px sans-serif;
            color: red;
            text-shadow: 1px 1px 5px #000;
        }
        canvas:focus { outline: none; }
    </style>
</head>
<body>
<div id="renderview"></div>
<div id="progress"><div class="bar"></div></div>
<div id="error"></div>

<script src="https://cdn.jsdelivr.net/npm/@luminocity/lemonate-engine@latest/dist/lemonate.min.js" defer></script>
<script>
    window.addEventListener('load', async () => {
        const engine = new Lemonate.Engine({
            renderView: document.getElementById('renderview'),
            antialias: true
        });

        const progressBar = document.querySelector('#progress .bar');
        const errorView = document.getElementById('error');

        try {
            await engine.runPackage("./data.pkg", ({percent}) => {
                progressBar.style.width = `${percent}%`;
            });
        } catch(err) {
            errorView.textContent = err.message;
            console.error(err);
        } finally {
            document.getElementById('progress').style.display = 'none';
        }
    });
</script>
</body>
</html>
```
npm package: @luminocity/lemonate-gateway
Description: The Lemonate Gateway library manages access to Lemonate Projects
Author: Luminocity AG
Latest version: 8.2.29


Lemonate Gateway
----------------

This library handles access to Lemonate projects. It is responsible for communicating with the Lemonate ReST API, handles caching,
holds the project data model and also provides functionality for live collaboration (in development).
It will also be responsible for accessing project files on local disk in the future.

It is mainly used by the Lemonate Engine but can also be used in utility applications or websites to access Lemonate projects, 
user/team profiles, automation and maintenance tasks and many other things.