open-index/open-npm huggingface dataset:
npm package: @okmtyuta/amatelas-react-markdown
Description: This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules.
Author: okmtyuta
Latest version: 0.0.10

# React + TypeScript + Vite

This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules.

Currently, two official plugins are available:

- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/README.md) uses [Babel](https://babeljs.io/) for Fast Refresh
- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh

## Expanding the ESLint configuration

If you are developing a production application, we recommend updating the configuration to enable type aware lint rules:

- Configure the top-level `parserOptions` property like this:

```js
   parserOptions: {
    ecmaVersion: 'latest',
    sourceType: 'module',
    project: ['./tsconfig.json', './tsconfig.node.json'],
    tsconfigRootDir: __dirname,
   },
```

- Replace `plugin:@typescript-eslint/recommended` to `plugin:@typescript-eslint/recommended-type-checked` or `plugin:@typescript-eslint/strict-type-checked`
- Optionally add `plugin:@typescript-eslint/stylistic-type-checked`
- Install [eslint-plugin-react](https://github.com/jsx-eslint/eslint-plugin-react) and add `plugin:react/recommended` & `plugin:react/jsx-runtime` to the `extends` list
npm package: @oknesar/re-test
Description: Like recompose for end-to-end tests
Author: V.Rasenko
Latest version: 0.1.2

## Retest
#### Like recompose for end-to-end tests

#####Examples:

Simply test:

````$xslt
const retest = require('@oknesar/re-test')
const { action, rescue, othewise } = retest.operators

const context = {
    // ...some object than will be passed to each cycle callback
}

// suite it's function combiner
// you can pass different chunks(operators) into a suite
// and you can merge different suites
const suite = retest(context)

it('Open modal and check title', suite(
    action(async ctx => { // main test logic
        await ctx.openModal()
        await ctx.checkTitle()
    }),
    rescue((ctx, error) => ctx.screenshot()), // if action failed
    othewise(ctx => ctx.closeModal()) // run anyway
))
````

You can save common chunks in variables and use later.
Between, you can combine different chunks thought suite.

````$xslt
const screenshot = rescue(ctx => ctx.screenshot())
const logError = rescue((ctx, err) => ctx.log(err))

it('Test', suite(
    action(/* ... */),
    screenshot,
    logError
))

const shotAndLog = suite(
    screenshot,
    logError
)

it('Test', suite(
    action(/* ... */),
    shotAndLog
))
````

You can describe dependencies between suits

````$xslt
const retest = require('@oknesar/re-test')
const { action, depends, id } = retest.operators

const context = {
    // ...some object than will be passed to each cycle callback
}

const suite = retest(context)

it('Open modal', suite(
    id('openModel'),
    action(async ctx => {
        await ctx.checkTitle()
    })
))

it('Check modal title', suite(
    // if the suite with id 'openModel' will be failed
    // suits that depents on it will be passed
    depends(['openModel']),
    action(async ctx => { 
        await ctx.checkTitle()
    })
))
````

````$xslt
const retest = require('@oknesar/re-test')
const { action, skipTo, id } = retest.operators

const context = {
    // ...some object than will be passed to each cycle callback
}

const suite = retest(context)

it('Open modal', suite(
    action(async ctx => {
        await ctx.checkTitle()
    }),
    skipTo('someTest'),
))

// if 'Open modal' test will be failed
// all tests above suite with id 'Some new test' will be failed

it('Some new test', suite(
    id('someTest'),
    action(async ctx => { 
        // ...
    })
))
````

####Operators
***
`action(Context => any)`

Suite body
***
`depends([string])`

suite IDs that the current depends on
***
`rescue((Context, Error) => any)`

run on action throw error
***
`id(string)`

define suite id
***
`otherwise(Context => any)`

run anyway on suite not skipped
***
`recovery(Context => any)`

run if suite before was failed
***
`skipIds([string])`

if suite will failed, will skip passed ids
***
`skipTo(string)`

if suite will failed, will skip all before passed id
***
`skipAll()`
***
npm package: @oko-agent/ui
Description: Embeddable React components for the OKO protocol — ticker, market table, swap, and AI chat
Latest version: 0.1.0

# @oko-agent/ui

Embeddable React components for the OKO protocol.

| Component | Description |
|-----------|-------------|
| `<OkoProvider>` | Config context — wraps your app |
| `<OkoTicker>` | Live scrolling price marquee (SSE-powered, zero re-renders) |
| `<OkoMarketTable>` | Top 20 coins table with sparklines |
| `<OkoChat>` | AI chat widget with preset commands |

## Installation

```bash
npm install @oko-agent/ui
```

## Quick Start

```tsx
import { OkoProvider, OkoTicker, OkoMarketTable, OkoChat } from '@oko-agent/ui'
import '@oko-agent/ui/styles.css'

function App() {
  return (
    <OkoProvider config={{ apiBaseUrl: 'https://api.oko-agent.io', theme: 'dark' }}>
      <OkoTicker />
      <OkoMarketTable onCoinClick={(coin) => console.log(coin.symbol)} />
      <OkoChat height="500px" />
    </OkoProvider>
  )
}
```

## Components

### `<OkoProvider config={...}>`

Required parent wrapper. Provides config to all child components.

| Prop | Type | Description |
|------|------|-------------|
| `config.apiBaseUrl` | `string` | OKO backend URL |
| `config.theme` | `'dark' \| 'light'` | Color theme (default: `'dark'`) |

### `<OkoTicker>`

Live price ticker bar. Uses direct DOM updates for zero React overhead.

| Prop | Type | Description |
|------|------|-------------|
| `symbols` | `string[]` | Symbols to display (default: 25 top coins) |
| `speed` | `number` | Scroll duration in seconds (default: `60`) |
| `onSymbolClick` | `(sym: string) => void` | Click handler |
| `className` | `string` | Extra CSS class |

### `<OkoMarketTable>`

| Prop | Type | Description |
|------|------|-------------|
| `limit` | `number` | Number of coins (default: `20`) |
| `onCoinClick` | `(coin: CoinRow) => void` | Row click handler |
| `className` | `string` | Extra CSS class |

### `<OkoChat>`

| Prop | Type | Description |
|------|------|-------------|
| `walletAddress` | `string` | Enable wallet analysis mode |
| `onSwapIntent` | `(intent: SwapIntent) => void` | Called when AI suggests a swap |
| `placeholder` | `string` | Input placeholder text |
| `height` | `string` | Widget height (default: `'500px'`) |
| `className` | `string` | Extra CSS class |

## Theming

Import the base styles once, then override CSS variables:

```css
/* Override any token */
:root {
  --oko-accent: #your-brand-color;
  --oko-bg: #your-bg;
  --oko-radius: 8px;
}
```

## Running the Example

```bash
cd examples/basic
cp .env.example .env  # set your API base URL
npm install
npm run dev
```

## License

MIT