open-index/open-npm huggingface dataset:
npm package: @joshuabaker/lists-css
Description: Custom CSS styles for bulleted and numbered lists
Author: Joshua Baker
Latest version: 0.2.0

# Lists CSS

Simple CSS Grid/Subgrid based list styling.

## Installation

Using pnpm:

```bash
pnpm add @joshuabaker/lists-css
```

Using npm:

```bash
npm install @joshuabaker/lists-css
```

Using yarn:

```bash
yarn add @joshuabaker/lists-css
```

## Usage

1. Import the CSS into your project:

   ```css
   @import "@joshuabaker/lists-css";
   ```

   Or in HTML:

   ```html
   <link
     rel="stylesheet"
     href="path/to/node_modules/@joshuabaker/lists-css/index.css"
   />
   ```

2. Apply the classes to your lists:

   ```html
   <ul class="bulleted-list">
     <li>Item 1</li>
     <li>Item 2</li>
     <li>Item 3</li>
   </ul>

   <ol class="numbered-list">
     <li>Item 1</li>
     <li>Item 2</li>
     <li>Item 3</li>
   </ol>
   ```

## Customization

You can customize the width of the list markers using the `--list-marker-width` CSS custom property. The default width is `2ch`.

### Global customization:

```css
:root {
  --list-marker-width: 4ch;
}
```

### Per-list customization:

```css
.my-special-list {
  --list-marker-width: 3ch;
}
```

### Inline customization:

```html
<ul class="bulleted-list" style="--list-marker-width: 5ch;">
  <li>Item 1</li>
  <li>Item 2</li>
  <li>Item 3</li>
</ul>
```

## Features

- Clean, minimal styling for bulleted and numbered lists
- Customizable list marker width
- Uses CSS Grid for precise layout control
- Works with nested lists

## Browser Support

This package uses CSS Grid and CSS Custom Properties (variables). It should work in all modern browsers. For older browser support, consider using appropriate polyfills.

## Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

## License

This project is licensed under the MIT License.
npm package: @joshuaborup/peach-react-library
Description: This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules.
Author: Joshua D Borup
Latest version: 1.0.0

# React + 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
npm package: @joshuacaron/scaffold
Description: A personal project generator.
Author: Joshua Caron
Latest version: 0.1.3

# @joshuacaron/scaffold

A personal project generator. Currently only creates dotfiles. More options are on the way in the future.

To use simple run `npm install -g @joshuacaron/scaffold` and then run `scaffold` in a terminal in the folder you want the files to be created in.
npm package: @joshuacc/liquid-server
Description: Liquid Server CLI is a simple, easy-to-use command-line tool designed to serve static files and Liquid templates. This module is primarily for educational and demonstration purposes.
Latest version: 0.2.0

# Liquid Server CLI

Liquid Server CLI is a simple, easy-to-use command-line tool designed to serve static files and Liquid templates. This module is primarily for educational and demonstration purposes.

## Important Note

This tool is intended for teaching purposes only and should not be used in production environments.

## Installation
You can install Liquid Server CLI globally using npm:

```bash
npm install -g liquid-server
```

## Usage

To start serving files from a directory, navigate to your desired directory and run:

```bash
liquid-server
```

Or specify the directory directly:

```bash
liquid-server /path/to/directory
```
npm package: @joshuagardiner/typescript-component-library
Description: Improve the speed at which you can build aesthetically pleasing React applications.
Author: joshuagardiner
Latest version: 1.0.0-alpha.1.2

# Component Library

Improve the speed at which you can build aesthetically pleasing React applications.

With a simple and customizable component library to build faster, beautiful, and more accessible React applications.

## Installation

Component Library is available as an [npm package](https://www.npmjs.com/package/@joshuagardiner/typescript-component-library).

NPM:

```
npm install @joshuagardiner/typescript-component-library
```

Yarn:

```
yarn add @joshuagardiner/typescript-component-library
```

## Usage

```tsx
import { LoadingSpinner } from "@joshuagardiner/typescript-component-library";

const MyApp = () => {
  return (
    <>
      <LoadingSpinner text={"Loading.."} />
    </>
  );
};
```
npm package: @joshuajaco/get-monorepo-packages
Description: Get a list of packages from a monorepo
Author: Lucas Azzola
Latest version: 1.2.1

# `get-monorepo-packages`

[![Travis](https://img.shields.io/travis/azz/get-monorepo-packages.svg?style=flat-square)](https://travis-ci.org/azz/get-monorepo-packages)
[![Prettier](https://img.shields.io/badge/code_style-prettier-ff69b4.svg?style=flat-square)](https://github.com/prettier/prettier)
[![npm](https://img.shields.io/npm/v/get-monorepo-packages.svg?style=flat-square)](https://npmjs.org/get-monorepo-packages)
[![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg?style=flat-square)](https://github.com/semantic-release/semantic-release)
[![License](https://img.shields.io/badge/license-MIT-blue.svg?style=flat-square)](LICENSE)

Get a list of packages from a monorepo. Supports:

* [Lerna](https://github.com/lerna/lerna)
* [Yarn workspaces](https://yarnpkg.com/lang/en/docs/workspaces/)
* [Bolt](http://boltpkg.com/)

## Install

```bash
npm install --save get-monorepo-packages
```

## Usage

```js
import getPackages from 'get-monorepo-packages';
getPackages('/path/to/root');
```

Returns an array of objects containing:

* `location` - The relative path to the package.
* `package` - The `package.json` file for the package.
npm package: @joshuajc/ringapi
Description: Utility for Lord of Rings API
Author: joshua
Latest version: 1.0.8

# @joshuajc/ringapi SDK

## About


The @joshuajc/ringapi Node SDK allows you to quickly and easily integrate Lord of Ring Api effortlessly.

Rest API Documentation can be found on this [url](https://the-one-api.dev/documentation).

You have to signup on this platform to get accesskey.

#### Note

This Readme provide basic installation and usage information.

## Installation


> npm install @joshuajc/ringapi

## Usage


You can use this library based on JS/TS method chaining.

```
// get book list
import RingAPI from '@joshuajc/ringapi';

const books = await RingAPI.getBooks();

//output will be json array containing books data

```

You can insert filtering, sorting, pagination before getting specific data.

```
import RingAPI from '@joshuajc/ringapi';

const books = await RingAPI.setSorting('asc').getBooks() // set ascending order

const books = await RingAPI.setPaginationPage(2).getBooks() // set 2nd page and get result

// You can combine multile function calls by chaining

const books = await RingAPI.setPaginationOffset(12).setSorting('desc').getBooks() // set both of page offset and sorting

// You should set auth token before calling sensitve datas

const acccessTokenString = "abcdddssdf1s"; // you should replace this with real token

const movieId = 'a34d43"

const movie = await RingAPI.setAccessToken(tokenString).setPaginationPage(1).setSorting('asc').getMovie(movieId);


```
npm package: @joshuajrodrigues/makereadme
Description: Readme template provider
Latest version: 1.0.0

# makereadme

makereadme generates a vvery simple readme template


### Prerequisites

You will need node.


### Installing


```
 npx makereadme or pnpx makereadme
```


## License

This project is licensed under the MIT License - see the [LICENSE.md](LICENSE.md) file for details

## Acknowledgments

* https://gist.github.com/PurpleBooth/109311bb0361f32d87a2
npm package: @joshuaneely/amfjs
Description: A simple AMF (ActionScript Message Format) library for Node.js
Author: molenzwiebel
Latest version: 2.0.2

## AMF.js

As a simple AMF (Action Message Format) library for Node.js, AMF.js is capable of encoding and decoding most AMF0 and AMF3 types. Simply hook the AMFEncoder or AMFDecoder up to a stream and it will be able to read or write to/from the stream.

# Installation

    npm install [--save-dev] amfjs

# Usage
- __Encoding__
```
var amfjs = require("amfjs")
var encoder = new amfjs.AMFEncoder(someKindOfWritableStream)
encoder.writeObject(10, amfjs.AMF0) //Write as AMF0
encoder.writeObject(10, amfjs.AMF3) //Write as AMF3
```
- __Decoding__

```
var amfjs = require("amfjs")
var decoder = new amfjs.AMFDecoder(someKindOfReadableStream)
var value = decoder.decode(amfjs.AMF0) //Decode an AMF0 object
var value = decoder.decode(amfjs.AMF3) //Decode an AMF3 object
```
- __Encoding custom objects__  
Simply extend the Serializable class and call `writeObject` with an instance of your class. Any fields in the serializable not starting with `__` will automatically be encoded:
```
class MySerializable extends Serializable
  constructor: ->
    super "name.of.the.serializable"
```

- __Custom Externalizables__  
Simply extend the Externalizable class and register it in the decoder to allow for the custom encoding of objects. The `write` method will be called whenever an Externalizable needs to be encoded and the `this` value will be set to the encoder. The static `read` method will be called whenever an object with the Externizable's class is found. As with `write`, while invoking `read` the `this` value is set to the decoder.
```
class MyExternalizable extends Externalizable
  constructor: ->
    super "name.of.the.externalizable"
  write: ->
    //Do some writing stuff
    @write 0x10
  @read: ->
    //Do some reading stuff and return the read object
    @readByte()
    return new MyExternalizable()
    
//Register the externalizable
var amfjs = require("amfjs")
amfjs.AMFDecoder.register("name.of.the.externalizable", MyExternalizable, amfjs.AMF0) //Or AMF3  
```
npm package: @joshuanode/n8n-nodes-axcient
Description: n8n community node for Axcient x360Recover backup API
Author: Joshua Smith
Latest version: 0.0.2

# n8n-nodes-axcient

n8n community node for the [Axcient](https://axcient.com/) x360Recover and x360Cloud backup APIs.

> **Note:** Only the **x360Cloud** API has been tested and verified. x360Recover endpoints (Organization, Device, Vault) are included based on API documentation but have not been tested against a live environment. The x360Recover API requires a separate API key scope that may not be available for all accounts.

## Installation

Install from npm in your n8n instance:

```
npm install @joshuanode/n8n-nodes-axcient
```

## Credentials

1. Log in to the [Axcient x360Portal](https://portal.axcient.com/)
2. Go to **Settings > API Keys**
3. Generate a new API key and select the products it should have access to (x360Cloud, x360Recover, etc.)
4. In n8n, create an **Axcient API** credential with your API key and select the product

## Resources & Operations

### Client (x360Cloud) — Tested

| Operation | Description |
|-----------|-------------|
| Get | Get a single client by ID |
| Get Many | List all clients with seat counts |
| Get Backup Status | Get backup status history for a client |
| Get Shared Resources | List SharePoint sites and shared drives |
| Get Users | List protected users with backup details |

### Organization (x360Recover) — Untested

| Operation | Description |
|-----------|-------------|
| Get | Get a single organization by ID |
| Get Many | List all organizations |

### Device (x360Recover) — Untested

| Operation | Description |
|-----------|-------------|
| Get | Get a single device by ID |
| Get Many | List all devices |
| Get by Organization | List devices for a specific organization |

### Vault (x360Recover) — Untested

| Operation | Description |
|-----------|-------------|
| Get | Get a single vault by ID |
| Get Many | List all vaults |

## API Documentation

- [Axcient Developer Portal](https://developer.axcient.com/)
- [x360Cloud API](https://developer.axcient.com/x360cloud/)
- [x360Recover API](https://developer.axcient.com/x360recover/)

## License

MIT
npm package: @joshuanode/n8n-nodes-dandh
Description: n8n community node for D&H Business Community APIs
Author: @joshuanode
Latest version: 0.0.6

# n8n-nodes-dandh

n8n community node for D&H Business Community APIs.

## Included credentials

- `D&H API` (`dandhApi`)
  - `Base URL` (default `https://test.api.dandh.com`)
  - OAuth2 Client Credentials (`clientId`, `clientSecret`)
  - Token URL default: `https://test.auth.dandh.com/api/oauth/token`
  - `Test Account Number` used only for the n8n credential test request
  - Production cutover: update `Base URL` and `Access Token URL`; endpoint paths do not change

## Included node

- `D&H Business Community` (`dandhBusinessCommunity`)
  - Resources:
    - `Item`
    - `Carrier`
    - `Order`

## Implemented operations

### Item

- Catalog Get Items (`/catalog/v1/customers/{accountNumber}/items`)
- Get Availability (`/customerOrderManagement/v2/customers/{accountNumber}/items/{itemId}/availability`)
- Get Availability (Bulk) (`/customerOrderManagement/v2/customers/{accountNumber}/items/availability/bulk`)
- Get Price (`/customerOrderManagement/v2/customers/{accountNumber}/items/{itemId}/price`)
- Get Price (Bulk) (`/customerOrderManagement/v2/customers/{accountNumber}/items/price/bulk`)
- Get Price and Availability (`/customerOrderManagement/v2/customers/{accountNumber}/items/{itemId}/priceAndAvailability`)
- Get Price and Availability (Bulk) (`/customerOrderManagement/v2/customers/{accountNumber}/items/priceAndAvailability/bulk`)
- List Items (`/customerOrderManagement/v2/customers/{accountNumber}/items`)
- Get Item (`/customerOrderManagement/v2/customers/{accountNumber}/items/{itemId}`)

### Carrier

- Get Carriers (`/customerOrderManagement/v2/customers/{accountNumber}/carriers`)

### Order

- Get Sales Order Tracking (`/customerOrderManagement/v2/customers/{accountNumber}/salesOrders/{id}/tracking`)
- List Sales Order Tracking (`/customerOrderManagement/v2/customers/{accountNumber}/salesOrders/tracking`)
- Create Sales Order (`/customerOrderManagement/v2/customers/{accountNumber}/salesOrders`)
  - Supports `JSON` mode and `Fields` mode for common order inputs

## Build

```bash
npm install
npm run build
```
npm package: @joshuanode/n8n-nodes-duo
Description: n8n community node for Duo Security Admin API
Author: Joshua Smith
Latest version: 0.0.1

# n8n-nodes-duo

[![npm version](https://img.shields.io/npm/v/@joshuanode/n8n-nodes-duo.svg)](https://www.npmjs.com/package/@joshuanode/n8n-nodes-duo)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
[![n8n](https://img.shields.io/badge/n8n-community%20node-orange.svg)](https://n8n.io/)
[![GitHub](https://img.shields.io/badge/GitHub-repo-black.svg?logo=github)](https://github.com/ajoshuasmith/n8n-nodes-duo)

This is an n8n community node for integrating with the Duo Security Admin API.

[n8n](https://n8n.io/) is a [fair-code licensed](https://docs.n8n.io/reference/license/) workflow automation platform.

## Installation

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

## Operations

This node currently supports:

- `System > Check` - Validate Duo Admin API connectivity and credentials
- `User > Get` - Retrieve one Duo user by user ID
- `User > Get Many` - List Duo users with pagination support
- `Billing > Get Edition` - Read account edition
- `Billing > Set Edition` - Update account edition (`ENTERPRISE`, `PLATFORM`, `BEYOND`)
- `Billing > Get Telephony Credits` - Read current telephony credits
- `Billing > Set Telephony Credits` - Set telephony credits
- `Account > Get Summary` - Get account summary counts (includes `user_count` for seat count)

## Credentials

Create a **Duo Admin API** credential in n8n with:

- **API Hostname**: Your Duo API host, like `api-XXXXXXXX.duosecurity.com`
- **Integration Key**: Duo Admin API integration key (`IKEY`)
- **Secret Key**: Duo Admin API secret key (`SKEY`)

To get these values in Duo:

1. Go to **Applications** in Duo Admin Panel.
2. Create or open an **Admin API** application.
3. Copy the API hostname, integration key, and secret key.

Billing and account summary endpoints may require specific Duo plan/admin permissions. Some MSP-focused billing methods can be gated by Duo and may require enablement by Duo Support.

## Compatibility

- n8n version: 1.0+
- Node.js version: 18.17.0+

## Resources

- [Duo Admin API Documentation](https://duo.com/docs/adminapi)
- [n8n Community Nodes Documentation](https://docs.n8n.io/integrations/community-nodes/)

## Version History

### 0.0.1

Initial release with signed Duo Admin API support and core System/User operations.
npm package: @joshuanode/n8n-nodes-keepersecurity
Description: n8n community node for Keeper Security MSP account management APIs
Author: Joshua Smith
Latest version: 0.0.1

# n8n-nodes-keepersecurity

Keeper Security MSP Account Management API node for n8n.

## Included operations

- Create Trial Account (`POST /create-trial-account`)
- Convert To Paid (`POST /convert-to-paid`)
- List Accounts (`GET /accounts`)
- Current Usage (`POST /current-usage`)
- Monthly Usage (`POST /monthly-usage`)
- Cancel Paid Account (`POST /cancel-paid-account`)
- Activate Expired Account (`POST /activate-expired`)
- List MSP Products (`GET /msp-products`)
- Remove Pending/Conflict Account (`POST /remove-account`)

## Credentials

Create a `Keeper Security MSP API` credential in n8n using values provided by Keeper:

- Region
- Vendor Name (header `vendor`)
- Partner Key (JWT `iss`)
- Partner Secret (HS512 signing key)
- Token TTL in seconds

JWTs are generated per request with HS512 using `iat`, `iss`, and `exp`.

## Build

```bash
npm install
npm run build
```

## Install in n8n

For local testing in your n8n custom extensions directory:

```bash
npm install /path/to/n8n-nodes-keepersecurity
```

Then restart n8n.

## Source API docs

- https://docs.keeper.io/en/enterprise-guide/keeper-msp/account-management-apis
npm package: @joshuarileydev/mac-apps-launcher-mcp-server
Description: MCP server for launching applications on macOS
Latest version: 0.0.1

# Mac Apps Launcher MCP Server

A Model Context Protocol (MCP) server for launching and managing macOS applications.

## Features

- List all applications installed in the `/Applications` folder
- Launch applications by name
- Open files with specific applications

## Installation
Add the following to your Claude Config JSON file
```
{
  "mcpServers": {
    "simulator": {
      "command": "npx",
      "args": [
        "y",
        "@joshuarileydev/mac-apps-launcher-mcp-server"
      ]
    }
  }
}
```
npm package: @joshuarileydev/simulator-mcp-server
Description: An MCP server for controlling iOS simulators
Latest version: 0.0.1

# iOS Simulator MCP Server

A Model Context Protocol (MCP) server that provides programmatic control over iOS simulators. This server implements the MCP specification to expose simulator functionality through a standardized interface.

## Features

- List available iOS simulators
- Boot and shutdown simulators
- Install .app bundles on simulators
- Launch installed apps by bundle ID

## Installation
Add the following to your Claude Config JSON file
```
{
  "mcpServers": {
    "simulator": {
      "command": "npx",
      "args": [
        "y",
        "@joshuarileydev/simulator-mcp-server"
      ]
    }
  }
}
```
npm package: @joshuarileydev/supabase-mcp-server
Description: An MCP server for using the Supabase API
Latest version: 0.0.2

# Supabase MCP Server

A Model Context Protocol (MCP) server that provides programmatic access to the Supabase Management API. This server allows AI models and other clients to manage Supabase projects and organizations through a standardized interface.

## Features

### Project Management
- List all projects
- Get project details
- Create new projects
- Delete projects
- Retrieve project API keys

### Organization Management
- List all organizations
- Get organization details
- Create new organizations

## Installation
Add the following to your Claude Config JSON file
```
{
  "mcpServers": {
    "supabase": {
      "command": "npx",
      "args": [
        "y",
        "@joshuarileydev/supabase-mcp-server"
      ],
      "env": {
        "SUPABASE_API_KEY": "API_KEY_HERE"
      }
    }
  }
}
```
npm package: @joshuarileydev/terminal-mcp-server
Description: MCP server for running commands in the terminal
Latest version: 0.0.2

# Terminal MCP Server

A Model Context Protocol (MCP) server that provides programmatic control over the terminal. This server implements the MCP specification to expose terminal functionality through a standardized interface.

## Features

- Execute shell commands

## Installation
Add the following to your Claude Config JSON file
```
{
  "mcpServers": {
    "terminal": {
      "command": "npx",
      "args": [
        "y",
        "@joshuarileydev/terminal-mcp-server"
      ]
    }
  }
}
```
npm package: @joshuarileydev/use-poll
Description: A React hook for polling URLs and detecting changes in text or JSON responses
Author: Joshua Riley
Latest version: 1.0.1

# use-poll

A React hook for polling URLs and detecting changes in text or JSON responses.

## Installation

```bash
npm install use-poll
```

## Usage

### Text Polling

Poll a URL and detect when the text response changes:

```tsx
import { usePoll } from 'use-poll';

function MyComponent() {
  const { data, error, isLoading } = usePoll({
    url: 'https://api.example.com/status',
    outputType: 'text',
    interval: 3000, // Poll every 3 seconds
  });

  if (error) return <div>Error: {error.message}</div>;
  if (isLoading) return <div>Loading...</div>;
  
  return <div>Status: {data}</div>;
}
```

### JSON Polling

Poll a URL and monitor a specific property for changes, then return another property:

```tsx
import { usePoll } from 'use-poll';

function MyComponent() {
  const { data, error, isLoading } = usePoll({
    url: 'https://api.example.com/user/123',
    outputType: 'json',
    monitorProperty: 'user.lastModified', // Monitor this for changes
    outputProperty: 'user.profile', // Return this when changes occur
    interval: 5000,
  });

  return (
    <div>
      {data && (
        <pre>{JSON.stringify(data, null, 2)}</pre>
      )}
    </div>
  );
}
```

### Conditional Polling

Control when polling is active:

```tsx
import { usePoll } from 'use-poll';

function MyComponent() {
  const [enabled, setEnabled] = useState(false);
  
  const { data, error, isLoading } = usePoll({
    url: 'https://api.example.com/data',
    outputType: 'text',
    enabled, // Only poll when true
  });

  return (
    <div>
      <button onClick={() => setEnabled(!enabled)}>
        {enabled ? 'Stop' : 'Start'} Polling
      </button>
      <div>{data}</div>
    </div>
  );
}
```

## API

### `usePoll(options)`

#### Options

| Option | Type | Required | Description |
|--------|------|----------|-------------|
| `url` | string | Yes | The URL to poll |
| `outputType` | 'text' \| 'json' | Yes | The expected response type |
| `interval` | number | No | Polling interval in ms (default: 5000) |
| `enabled` | boolean | No | Whether polling is active (default: true) |

#### Additional options for JSON mode

| Option | Type | Required | Description |
|--------|------|----------|-------------|
| `monitorProperty` | string | Yes* | Property path to monitor for changes |
| `outputProperty` | string | Yes* | Property path to return when changes occur |

*Required when `outputType` is 'json'

#### Returns

| Property | Type | Description |
|----------|------|-------------|
| `data` | T \| null | The current data value |
| `error` | Error \| null | Any error that occurred |
| `isLoading` | boolean | Whether a request is in progress |

## Features

- ✅ TypeScript support
- ✅ Automatic change detection
- ✅ Configurable polling intervals
- ✅ Support for nested JSON properties
- ✅ Error handling
- ✅ Loading states
- ✅ Conditional polling
- ✅ Request cancellation on unmount

## License

MIT
npm package: @joshuarli98/md-wysiwyg
Description: Markdown rendering, WYSIWYG serialization, diff, merge, and syntax highlighting for browser editors
Latest version: 0.1.0

# @joshuarli98/md-wysiwyg

Zero-dependency markdown rendering, WYSIWYG DOM serialization, diff/merge, and syntax highlighting for browser-based editors.

## Features

- **`renderMarkdown(md)`** — converts Markdown to HTML. Supports headings, paragraphs, lists (ul/ol/task), blockquotes, callouts, fenced code blocks, tables, HR, and inline formatting (bold, italic, strikethrough, code, highlights, wiki-links, standard links/images).
- **`highlightCode(code, lang)`** — syntax highlighting for common languages. Returns an HTML string with `<span class="hl-*">` tokens. No external dependency.
- **`domToMarkdown(el)`** — serializes a `contenteditable` DOM tree back to Markdown. Round-trips with `renderMarkdown`.
- **`handleBlockTransform(e, el, onDirty?)`** / **`checkBlockInputTransform(e, el)`** — block-level WYSIWYG transforms on Enter/Space: typing `## ` converts to H2, `- ` to UL, ` ``` ` to code block, `---` to HR, etc.
- **`checkInlineTransform`** and related — inline formatting transforms triggered by closing delimiters (`**`, `_`, `` ` ``, `~~`, `==`).
- **`computeDiff(a, b)`** / **`renderDiff(hunks)`** — line-based diff with compact HTML rendering (like `git diff`).
- **`merge3(base, ours, theirs)`** — line-based 3-way merge. Returns merged string or `null` on conflict.
- **`escapeHtml(s)`** — escapes `&`, `<`, `>`, `"`.
- **`stemFromPath(path)`** — returns the filename stem from a path.

## Install

```sh
npm install @joshuarli98/md-wysiwyg
# or
bun add @joshuarli98/md-wysiwyg
```

## Usage

```ts
import { renderMarkdown, domToMarkdown, merge3 } from "@joshuarli98/md-wysiwyg";

const html = renderMarkdown("# Hello\n\nWorld");
const md = domToMarkdown(document.getElementById("editor")!);
const merged = merge3(base, ours, theirs); // null on conflict
```

## Requirements

- ES2022+ runtime (uses `structuredClone`, `at()`, etc.)
- DOM environment (browser or compatible, e.g. happy-dom)
- No runtime dependencies