open-index/open-npm huggingface dataset:
npm package: @retanaar/vi-calendar
Description: Fork of v-calendar 3.1.2 with Vue 3.5 fix
Author: Ruslan Khorovinkin aka Retanaar with Nathan Reyes
Latest version: 1.0.0

# VCalendar Plugin for Vue 3

A calendar and date picker plugin for [Vue.js](https://vuejs.org).

[Vue.js](https://vuejs.org) 3.2+, [Popper.js](https://popper.js.org/docs/v2/) 2.0+ are required.

## Install Plugin

### NPM

```shell
npm install v-calendar@next @popperjs/core
```

### Yarn

```shell
yarn add v-calendar@next @popperjs/core
```

## Use Plugin

:warning: **As of `v3.0.0-alpha.7`, all installation methods require manual import of component styles. This is due to Vite build restrictions in libary mode.**

```js
import 'v-calendar/style.css';
```

### Method 1: Use Globally

```js
import VCalendar from 'v-calendar';
import 'v-calendar/style.css';

// Use plugin with optional defaults
app.use(VCalendar, {})
```

```html
<!-- MyComponent.vue -->
<template>
  <VCalendar />
  <VDatePicker v-model="date" />
</template>
```

### Method 2: Use Components Globally

```js
// main.js
import { setupCalendar, Calendar, DatePicker } from 'v-calendar';
import 'v-calendar/style.css';

// Use plugin defaults (optional)
app.use(setupCalendar, {})

// Use the components
app.component('VCalendar', Calendar)
app.component('VDatePicker', DatePicker)
```

```html
<!-- MyComponent.vue -->
<template>
  <VCalendar />
  <VDatePicker v-model="date" />
</template>
```

### Method 3: Use Components As Needed

```js
// main.js
import { setupCalendar } from 'v-calendar';

// Use calendar defaults (optional)
app.use(setupCalendar, {})
```

```vue
<!-- MyComponent.vue -->
<template>
  <Calendar />
  <DatePicker v-model="date">
</template>

<script>
import { Calendar, DatePicker } from 'v-calendar';
import 'v-calendar/style.css';

export default {
  components: {
    Calendar,
    DatePicker,
  },
  data() {
    return {
      date: new Date(),
    };
  },
}
</script>
```

## Source setup

Please follow below mentioned steps to clone and build this project:

### Clone the repo

```sh
git clone https://github.com/nathanreyes/v-calendar

# Move to directory
cd v-calendar
```

### Install dependencies

```sh
yarn
```

### Build library

```sh
# Types, ES, ESM, CommonJS, IIFE
yarn build
```

### Lint and fix files

```sh
yarn lint
```

### Test library

```sh
# Types, ES, ESM, CommonJS, IIFE
yarn test
```
npm package: @retarus/sms
Description: Offical SMS SDK to contact the sms service offered by retarus GmbH.
Author: Retarus GmbH
Latest version: 1.0.0

## Retarus Sms Node SDK
The official SMS SDK implemented in typescript for (node, deno and bun) to use the retarus service with ease.

## Installation

yarn:
```bash
yarn add @retarus/sms
```
npm:
```bash
npm i @retarus/sms
```

## Usage
The Node SDK provides a client implementation to contact our sms services. To offer a fast and simple way to integrate our services into your applications without having to write a lot of code. The examples can be found in the examples directory sorted by each service. Furthermore, you can check out our OpenAPI documents on the interfaces here: https://developers.retarus.com
 
### Configuring the SDK
First, you need to configure the SDK with your details.
```typescript
import { Configuration, Region } from '@retarus/sms'

Configuration.getInstance().setRegion(Region.Europe);
Configuration.getInstance().setAuth(process.env["retarus_userid"]!, process.env["retarus_sms_password"]!)
```
Each service implementes a client which contains all the functions to contact and work with the messaging services. As you can see we globally set our region for the SDK, where your data should be processed and also your credentials are needed to authorize your requests.


```typescript
import { SmsClient } from '@retarus/sms'

const smsClient = new SmsClient();
```

### Send a SMS
To send a sms, first set up the SDK like described above. For your credentials, we recommend setting up an .env file.
> **Please note:** Using the API will only work with valid credentials.

After that, you can execute the examples "01.send_sms.ts" with Typescript. As a result, you should get a message that reports back the ID of the created job, it will also show how to request the according report for the job.
npm package: @retayn/openclaw-plugin
Description: Retayn memory plugin for OpenClaw — zero-knowledge encrypted AI agent memory
Author: Retayn
Latest version: 0.1.0

# Retayn — OpenClaw Memory Plugin

Zero-knowledge encrypted memory for AI agents. Every conversation, code edit, and command is encrypted client-side and stored for semantic search — your AI remembers everything, and only you can read it.

## Install

```bash
openclaw plugins install retayn
```

## Setup

1. **Get an API key** at [retayn.ai/dashboard](https://retayn.ai/dashboard) (free tier: 10K messages)
2. **Configure** in OpenClaw:

```bash
openclaw plugins enable retayn
```

Then add to your OpenClaw config (`~/.openclaw/openclaw.json`):

```json
{
  "plugins": {
    "slots": { "memory": "retayn" },
    "entries": {
      "retayn": {
        "enabled": true,
        "config": {
          "apiKey": "eng_your_key_here",
          "passphrase": "your-secret-passphrase"
        }
      }
    }
  }
}
```

3. **Restart** OpenClaw — memory capture starts automatically.

## What It Captures

| Data | How | Stored As |
|------|-----|-----------|
| Conversations | `agent_end` hook | episodes |
| Code edits (Edit/Write) | `after_tool_call` hook | artifacts |
| Command results | `after_tool_call` hook | artifacts |
| Subagent work | `agent_end` with agent id | episodes |

Before each prompt, relevant memories are automatically retrieved and injected as context.

## Configuration

| Field | Default | Description |
|-------|---------|-------------|
| `apiKey` | *required* | API key from retayn.ai/dashboard |
| `passphrase` | *required* | Encryption passphrase (never sent to server) |
| `endpoint` | `https://api.retayn.ai` | API endpoint |
| `codeMemory` | `true` | Auto-capture code edits and exec results |
| `contextRetrieval` | `true` | Auto-retrieve relevant context before prompts |
| `contextBudgetTokens` | `1500` | Token budget for context retrieval |

## Zero-Knowledge Architecture

- **PBKDF2** key derivation (100K iterations) from your passphrase
- **AES-GCM** encryption — all text encrypted before leaving your machine
- **HMAC blind terms** — search without exposing plaintext
- **384-dim embeddings** generated client-side for semantic search
- Server stores only ciphertext + vectors — never sees your data

## Pricing

- **Free**: 10,000 messages, 30-day retention
- **Pro** ($19/mo): 100,000 messages, forever retention
- **Ultra** ($49/mo): 1,000,000 messages

## Tools

The plugin registers these tools for direct use:

- `retayn_search` — Semantic search across memories
- `retayn_context` — Retrieve context fitted to a token budget
- `retayn_store` — Manually store a memory
- `retayn_stats` — Memory statistics
- `retayn_ingest_session` — Ingest OpenClaw session JSONL files

## License

MIT
npm package: @retconned/kick-js
Description: A typescript bot interface for kick.com
Author: retconned
Latest version: 0.5.4

![Version](https://img.shields.io/npm/v/@retconned/kick-js?label=Version)
![License](https://img.shields.io/npm/l/@retconned/kick-js?label=License)

❇️ **@retconned/kick-js**

## **What is kick-js**

**kick-js** is a TypeScript-based library for [kick.com](https://kick.com)'s chat system. It provides a simple interface that allows developers to build chat bots and other chat-related applications.

### :construction: This library is still active for now as a selfbot library for Kick, but it will be fully updated to match their official documentation once they implement WebSocket support for messages. :construction:

## Features :rocket:

-   Supports reading & writing to Kick.com chat.
-   Moderation actions (ban, slowmode).
-   Written in TypeScript.

## Installation :package:

Install the @retconned/kick-js package using the following command:

```sh
npm install @retconned/kick-js
```

## Example code :computer:

```ts
import { createClient } from "@retconned/kick-js";
import "dotenv/config";

const client = createClient("xqc", { logger: true, readOnly: true });
// readOnly: true will make the client only read messages from the chat, and disable all other authenticated actions.

client.login({
    type: "login",
    credentials: {
        username: "xqc",
        password: "bigschnozer420",
        otp_secret: "your-2fa-secret",
    },
});
// to get your OTP secret, you need to go to https://kick.com/settings/security and enable Two-Factor Authentication and copy the secret from there

// you can also authenticate using tokens obtained from the kick website directly by switching the type to 'tokens'
client.login({
    type: "tokens",
    credentials: {
        bearerToken: process.env.BEARER_TOKEN,
        cookies: process.env.COOKIES,
    },
});

client.on("ready", () => {
    console.log(`Bot ready & logged into ${client.user?.tag}!`);
});

client.on("ChatMessage", async (message) => {
    console.log(`${message.sender.username}: ${message.content}`);
});

// get information about a vod
// your-video-id = vod uuid
const { title, duration, thumbnail, views } = await client.vod("your-video-id");

// get leaderboards for a channel
const leaderboards = await client.getLeaderboards();
// you can also pass in a kick-channel-name to get leaderboards for a different channel
// example: const leaderboards = await client.getLeaderboards("xqc");

// get polls for a channel
const polls = await client.getPolls();
// you can also pass in a kick-channel-name to get polls for a different channel
// example: const polls = await client.getPolls("xqc");
```

## Disclaimer :warning:

@retconned/kick-js is not affiliated with or endorsed by [Kick.com](https://kick.com). It is an independent tool created to facilitate making moderation bots & other chat-related applications.
npm package: @retejs/lit-plugin
Description: Rete.js Lit plugin ==== [![Made in Ukraine](https://img.shields.io/badge/made_in-ukraine-ffd700.svg?labelColor=0057b7)](https://stand-with-ukraine.pp.ua) [![Discord](https://img.shields.io/discord/1081223198055604244?color=%237289da&label=Discord)](https:
Author: Vitaliy Stoliarov
Latest version: 2.0.7

Rete.js Lit plugin
====
[![Made in Ukraine](https://img.shields.io/badge/made_in-ukraine-ffd700.svg?labelColor=0057b7)](https://stand-with-ukraine.pp.ua)
[![Discord](https://img.shields.io/discord/1081223198055604244?color=%237289da&label=Discord)](https://discord.gg/cxSFkPZdsV)

**Rete.js plugin**

## Key features

- **Render elements**: visualize an elements such as nodes and connections using Lit components
- **Customization**: modify appearance and behavior for a personalized workflow
- **Presets**: predefined Lit components for different types of features
  -  **[Classic](https://retejs.org/docs/guides/renderers/lit#connect-plugin)**: provides a classic visualization of nodes, connections, and controls
  -  **[Context menu](https://retejs.org/docs/guides/context-menu#render-context-menu)**: provides a classic appearance for `rete-context-menu-plugin`
  -  **[Minimap](https://retejs.org/docs/guides/minimap#render)**: provides a classic appearance for `rete-minimap-plugin`
  -  **[Reroute](https://retejs.org/docs/guides/reroute#rendering)**: provides a classic appearance for `rete-connection-reroute-plugin`

## Getting Started

Please refer to the [guide](https://retejs.org/docs/guides/renderers/lit) and [example](https://retejs.org/examples/lit) using this plugin

## Contribution

Please refer to the [Contribution](https://retejs.org/docs/contribution) guide

## License

[MIT](https://github.com/retejs/lit-plugin/blob/main/LICENSE)
npm package: @retell/ghost
Description: ## Setup
Latest version: 3.1.0

# Ghost Integration

## Setup

1. Log into your Ghost admin dashboard
2. Go to `Settings`
3. Select `Code injection`
4. Paste the audio player script in `Site Header` then click `Save`

```jsx
<script src="https://unpkg.com/@retell/ghost@latest/dist/ghost-helper.js"></script>
```

Player should appear on every generated article
npm package: @retell/player-js
Description: ## **Installation**
Latest version: 3.1.5

# JavaScript SDK

## **Installation**

You can install Retell Player through NPM

```bash
npm install --save @retell/player-js
yarn add @retell/player-js
```

Or, you can use CDN

```html
<script src="https://unpkg.com/@retell/player-js@latest/dist/common.min.js"></script>
```

## Initialize the Retell player

To initialize Retell Player, use the following:

```html
<script data-voiced="player">
 Retell.init({ url: "..." })
</script>
```

if you install player through NPM you should import the package

```jsx
import { Retell } from '@retell/player-js'
```

### Player parameters

| Name | Type | Default | Description |
| --- | --- | --- | --- |
| url | `String` | Current page URL | Article URL |
| rate | `Number` | 1 | Player playback rate |
| widget | `String` | default | Player widget |

## Player Callbacks

You can run custom functions by registering Player callbacks:

```jsx
Retell.registerCallback(eventName, callback, options)
```

### Events

| Event | Description |
| --- | --- |
| opened | This event fires when the player is successfully initialized |
| start | This event fires when the player start playing audio (first play) |
| resume | This event fires on audio resume |
| pause | This event fires on audio pause |
| end | This event fires when the audio is complete playing |
| progress | This event fires on audio playing progress multiples by 5. |

### **Examples:**

```jsx
Retell.registerCallback('opened', function(event)){
  reachGoal('your-goal');
});
```

```jsx
Retell.registerCallback('progress', function(event){
 if ([25, 50, 75, 100].includes(event.data.progress)) {
   console.log(event.data.progress);
 }
});
```
npm package: @retell/player-react
Description: ## Install
Latest version: 2.2.1

# React Integration

## Install

---

```bash
npm install @retell/player-react
yarn add @retell/player-react
```

## Usage

---

### **Class Components**

```jsx
import React, { Component } from 'react'
import { RetellPlayer } from '@retell/player-react'

class Example extends Component {
  render() {
    return <RetellPlayer />
  }
}
```

### **Functional Components**

```jsx
import React, { Component } from 'react'
import { RetellPlayer } from '@retell/player-react'

const Example = () => {
  return <RetellPlayer />
}
```

### Props

| Name | Type | Default | Description |
| --- | --- | --- | --- |
| articleUrl | `String` | Current page URL | Article URL |
| rate | `Number` | 1 | Player playback rate |
| widget | `String`| default | Player widget |
| callbacks | `Object` | {} | Player Callbacks |

### Callbacks

| Event | Description |
| --- | --- |
| onOpened | This event fires when the player is successfully initialized |
| onStart | This event fires when the player start playing audio (first play) |
| onResume | This event fires on audio pause |
| onPause | This event fires on audio pause |
| onEnd | This event fires when the audio is complete playing |
| onProgress | This event fires on audio playing progress multiples by 5. |

## Examples

```jsx
<RetellPlayer
  articleUrl={url}
  callbacks={{
    onOpened(event) { console.log(event) },
    onStart(event) { console.log(event) },
    onResume(event) { console.log(event) },
    onPause(event) { console.log(event) },
    onProgress(event) { console.log(event) },
    onEnd(event) { console.log(event) },
  }}
/>
```
npm package: @retell/player-vue
Description: ## Install
Latest version: 2.2.1

# Vue Integration

## Install

---

```bash
npm install @retell/player-vue
yarn add @retell/player-vue
```

Install the plugin into Vue:

```jsx
import Vue from 'vue'
import RetellPlayer from '@retell/player-react'

Vue.use(RetellPlayer)
```

## Usage

---

```html
<template>
 <div>
  <retell-player />
 </div>
</template>
```

You can specify the `articleUrl` to create a player with the custom article at any place, if `articleUrl` is not specified, by default will be used a current page URL

```html
<template>
 <div>
   <retell-player articleUrl="ABSOLUTE_LINK_TO_THE_ARTICLE" />
 </div>
</template>
```

### Nuxt SSR Example

```html
<template>
 <client-only>
   <retell-player />
 </client-only>
</template>
```

### Props

| Name | Type | Default | Description |
| --- | --- | --- | --- |
| articleUrl | `String` | Current page URL | Article URL |
| rate | `Number` | 1 | Player playback rate |
| widget | `String` | default | Player widget |

### Events

| Event | Description |
| --- | --- |
| opened | This event fires when the player is successfully initialized |
| start | This event fires when the player start playing audio (first play) |
| resume | This event fires on audio pause |
| pause | This event fires on audio pause |
| end | This event fires when the audio is complete playing |
| progress | This event fires on audio playing progress multiples by 5. |

## Examples

```html
<template>
 <retell-player
   @opened="onOpened"
   @progress="onProgress"
 />
</template>
```

```jsx
<script>
export default {
 methods: {
  onOpened () {
   console.log('Player opened')
  },
  onProgress (event) {
   if ([25, 50, 75, 100].includes(event.data.progress)) {
    console.log('Player progress:', event.data.progress)
   }
  }
 }
}
</script>
```
npm package: @retellai/n8n-nodes-retellai
Description: Official n8n node for RetellAI API integration
Author: RetellAI
Latest version: 0.2.3

# n8n-nodes-retellai

This is the official n8n node for RetellAI. It provides nodes to interact with the RetellAI API for creating and managing voice AI agents.

[RetellAI](https://retell.ai) provides APIs for creating conversational AI agents with natural-sounding voices.

## Installation

Follow the [installation guide](https://docs.n8n.io/integrations/community-nodes/installation/) in the n8n community nodes documentation.

## Operations

### Agent
* Create Agent
* Update Agent
* Delete Agent
* Get Agent
* Get Many Agents

### Call
* Create Call
* End Call
* Get Call
* Get Many Calls
* Watch Call (Trigger)

### Concurrency
* Get Concurrency

### Knowledge Base
* Create Knowledge Base
* Get Knowledge Base
* Get Many Knowledge Bases
* Delete Knowledge Bases

### LLM
* Create LLM
* Update LLM
* Delete LLM
* Get LLM
* Get Many LLMs

### Phone Number
* Create Phone Number
* Update Phone Number
* Delete Phone Number
* Get Phone Number
* Get Many Phone Numbers

### Voice
* Get Voice
* Get Many Voices

## Resources

* [n8n community nodes documentation](https://docs.n8n.io/integrations/community-nodes/)
* [RetellAI API Documentation](https://docs.retellai.com)

## Support

For support with this integration, please contact RetellAI support at support@retell.ai or visit our [documentation](https://docs.retellai.com).
npm package: @retemper/lodestar
Description: Declare your architecture. Enforce it. Project-level rule engine for TypeScript.
Latest version: 0.0.0

# lodestar

Umbrella package for Lodestar — re-exports the core public API.

## Installation

```sh
npm install -D lodestar
```

## Usage

```ts
import { defineConfig, run, loadConfigFile, resolveConfig } from '@retemper/lodestar';

const written = await loadConfigFile(process.cwd());
const config = resolveConfig(written, process.cwd());
const summary = await run({ config });
```

## Exports

| Export            | From               | Description             |
| ----------------- | ------------------ | ----------------------- |
| `defineConfig`    | `@retemper/lodestar-types`  | Config 타입 추론 헬퍼   |
| `definePlugin`    | `@retemper/lodestar-types`  | 플러그인 정의           |
| `defineRule`      | `@retemper/lodestar-types`  | 규칙 정의               |
| `loadConfigFile`  | `@retemper/lodestar-config` | lodestar.config.ts 로딩 |
| `resolveConfig`   | `@retemper/lodestar-config` | Config 정규화           |
| `mergeConfigs`    | `@retemper/lodestar-config` | Config 병합             |
| `run`             | `@retemper/lodestar-core`   | 규칙 실행               |
| `createProviders` | `@retemper/lodestar-core`   | 프로바이더 생성         |
| `runWorkspace`    | `@retemper/lodestar-core`   | 모노레포 모드 실행      |

All types from `@retemper/lodestar-types` and `@retemper/lodestar-core` are re-exported.
npm package: @retemper/lodestar-cli
Description: CLI for Lodestar architecture rule engine
Latest version: 0.0.0

# @retemper/lodestar-cli

Command-line interface for the Lodestar architecture rule engine.

## Installation

```sh
pnpm add -D @retemper/lodestar-cli
```

Or run directly:

```sh
npx lodestar check
```

## Commands

### `lodestar check`

Run architecture rule checks against the current project.

```sh
# Basic check
lodestar check

# JSON output (for CI integration)
lodestar check --format json

# Explicit workspace mode (auto-detected by default)
lodestar check --workspace
```

**Options:**

| Flag          | Default   | Description                                        |
| ------------- | --------- | -------------------------------------------------- |
| `--format`    | `console` | Output format: `console` or `json`                 |
| `--workspace` | auto      | Run in workspace mode across all monorepo packages |

### `lodestar init`

Scaffold a `lodestar.config.ts` file in the current directory.

```sh
lodestar init
```

## Programmatic API

```ts
import {
  checkCommand,
  initCommand,
  createConsoleReporter,
  createJsonReporter,
} from '@retemper/lodestar-cli';
```

| Export                  | Description                            |
| ----------------------- | -------------------------------------- |
| `createCli`             | Create the full yargs CLI instance     |
| `checkCommand`          | Handler for the `check` command        |
| `initCommand`           | Handler for the `init` command         |
| `createConsoleReporter` | Human-readable console output reporter |
| `createJsonReporter`    | Machine-readable JSON output reporter  |
npm package: @retenshun/js
Description: Official Retenshun JavaScript SDK for event tracking, user identification, and e-commerce analytics.
Author: Retenshun
Latest version: 1.1.0

# @retenshun/js

Official JavaScript SDK for [Retenshun](https://retenshun.com) — AI-powered retention analytics.

## Install

```bash
npm install @retenshun/js
```

Or via CDN:

```html
<script src="https://cdn.retenshun.com/js/v1/retenshun.min.js"></script>
```

## Quick Start

```js
import Retenshun from '@retenshun/js'

// Initialize
Retenshun.init({
  projectId: 'proj_abc123',
  apiKey: 'pk_live_your_key',
})

// Identify user
Retenshun.identify('user_123', {
  email: 'john@example.com',
  name: 'John Doe',
  plan: 'pro',
})

// Track event
Retenshun.track('button_clicked', {
  button: 'cta',
  screen: 'home',
})
```

## API

### `Retenshun.init(config)`

| Option | Default | Description |
|---|---|---|
| `projectId` | required | Your Retenshun project ID |
| `apiKey` | required | Your public API key |
| `apiUrl` | `https://api.retenshun.com/v1` | Custom API base URL |
| `debug` | `false` | Enable debug logging |
| `autoTrack.pageViews` | `true` | Auto-track page views (SPA-aware) |
| `autoTrack.clicks` | `false` | Auto-track button/link clicks |
| `autoTrack.forms` | `false` | Auto-track form submissions |

### `Retenshun.identify(userId, properties?)`

Identify a user. Call on login or registration.

### `Retenshun.track(eventName, properties?)`

Track a custom event.

### `Retenshun.page(pageName?, properties?)`

Track a page view. Automatically captures URL, path, and referrer.

### `Retenshun.setUserProperties(properties)`

Update user properties without re-identifying.

### `Retenshun.reset()`

Reset the user identity (call on logout).

### E-commerce

```js
Retenshun.ecommerce.productViewed({ product_id: 'prod_1', price: 79.99 })
Retenshun.ecommerce.addedToCart({ product_id: 'prod_1', quantity: 1 })
Retenshun.ecommerce.checkoutStarted({ total: 79.99 })
Retenshun.ecommerce.orderCompleted({ order_id: 'ord_1', total: 79.99 })
```

## For React

Use [@retenshun/react](https://www.npmjs.com/package/@retenshun/react) for React hooks and components.

## Links

- [Documentation](https://retenshun.com/docs/sdk/javascript)
- [Dashboard](https://retenshun.com/dashboard)
- [Issues](https://github.com/retenshun/js-sdk/issues)
npm package: @retenshun/react
Description: Official Retenshun React SDK — hooks and components for event tracking, user identification, and e-commerce analytics.
Author: Retenshun
Latest version: 1.1.0

# @retenshun/react

Official React SDK for [Retenshun](https://retenshun.com) — AI-powered retention analytics. Provides hooks and components for event tracking, user identification, and e-commerce analytics.

## Install

```bash
npm install @retenshun/react @retenshun/js
```

## Quick Start

### 1. Wrap your app

```tsx
import { RetenshunProvider } from '@retenshun/react'

function App() {
  return (
    <RetenshunProvider projectId="proj_abc123" apiKey="pk_live_your_key">
      <YourApp />
    </RetenshunProvider>
  )
}
```

### 2. Track events

```tsx
import { useRetenshun } from '@retenshun/react'

function CheckoutButton() {
  const { track } = useRetenshun()

  return (
    <button onClick={() => track('purchase', { amount: 99.99 })}>
      Buy Now
    </button>
  )
}
```

### 3. Identify users

```tsx
import { useRetenshun } from '@retenshun/react'

function LoginForm() {
  const { identify } = useRetenshun()

  const onLogin = (user) => {
    identify(user.id, {
      email: user.email,
      name: user.name,
      plan: user.plan,
    })
  }

  return <form onSubmit={onLogin}>...</form>
}
```

## Hooks

### `useRetenshun()`

Full access to the SDK: `identify`, `track`, `page`, `setUserProperties`, `reset`, `getUserId`, `ecommerce`, `isReady`.

### `useTrack()`

```tsx
const { track, isReady } = useTrack()
```

### `useIdentify()`

```tsx
const { identify, isReady } = useIdentify()
```

### `useEcommerce()`

```tsx
const { ecommerce, isReady } = useEcommerce()
ecommerce.productViewed({ product_id: 'prod_1', price: 79.99 })
```

## Components

### `<TrackPageView />`

```tsx
<TrackPageView name="Home" properties={{ tab: 'feed' }} />
```

### `<TrackEvent />`

```tsx
<TrackEvent event="section_viewed" properties={{ section: 'hero' }} />
```

### `withTracking(Component, eventName, getProperties?)`

HOC to track component views:

```tsx
const TrackedPricing = withTracking(PricingPage, 'pricing_viewed')
```

## Provider Props

| Prop | Default | Description |
|---|---|---|
| `projectId` | required | Your Retenshun project ID |
| `apiKey` | required | Your public API key |
| `apiUrl` | `https://api.retenshun.com/v1` | Custom API base URL |
| `debug` | `false` | Enable debug logging |
| `autoTrack` | `{ pageViews: true }` | Auto-tracking options |

## Links

- [JS SDK](https://www.npmjs.com/package/@retenshun/js)
- [Documentation](https://retenshun.com/docs/sdk/react)
- [Dashboard](https://retenshun.com/dashboard)
- [Issues](https://github.com/retenshun/react-sdk/issues)