open-index/open-npm huggingface dataset:
npm package: @pageflux/element
Description: Excalidraw elements-related logic
Latest version: 0.18.1

# @pageflux/element

## Install

```bash
npm install @pageflux/element
```

If you prefer Yarn over npm, use this command to install the Excalidraw utils package:

```bash
yarn add @pageflux/element
```

With PNPM, similarly install the package with this command:

```bash
pnpm add @pageflux/element
```
npm package: @pageflux/excalidraw
Description: Excalidraw as a React component
Latest version: 0.18.1

# Excalidraw

**Excalidraw** is exported as a component to be directly embedded in your project.

## Installation

Use `npm` or `yarn` to install the package.

```bash
npm install react react-dom @pageflux/excalidraw
# or
yarn add react react-dom @pageflux/excalidraw
```

> **Note**: If you don't want to wait for the next stable release and try out the unreleased changes, use `@pageflux/excalidraw@next`.

#### Self-hosting fonts

By default, Excalidraw will try to download all the used fonts from the [CDN](https://esm.run/@pageflux/excalidraw/dist/prod).

For self-hosting purposes, you'll have to copy the content of the folder `node_modules/@pageflux/excalidraw/dist/prod/fonts` to the path where your assets should be served from (i.e. `public/` directory in your project). In that case, you should also set `window.EXCALIDRAW_ASSET_PATH` to the very same path, i.e. `/` in case it's in the root:

```js
<script>window.EXCALIDRAW_ASSET_PATH = "/";</script>
```

### Dimensions of Excalidraw

Excalidraw takes _100%_ of `width` and `height` of the containing block so make sure the container in which you render Excalidraw has non zero dimensions.

## Demo

Go to [CodeSandbox](https://codesandbox.io/p/sandbox/github/excalidraw/excalidraw/tree/master/examples/with-script-in-browser) example.

## Integration

Head over to the [docs](https://docs.excalidraw.com/docs/@pageflux/excalidraw/integration).

## API

Head over to the [docs](https://docs.excalidraw.com/docs/@pageflux/excalidraw/api).

## Contributing

Head over to the [docs](https://docs.excalidraw.com/docs/@pageflux/excalidraw/contributing).
npm package: @pageflux/math
Description: Excalidraw math functions
Latest version: 0.18.1

# @pageflux/math

## Install

```bash
npm install @pageflux/math
```

If you prefer Yarn over npm, use this command to install the Excalidraw utils package:

```bash
yarn add @pageflux/math
```

With PNPM, similarly install the package with this command:

```bash
pnpm add @pageflux/math
```
npm package: @pageflux/utils
Description: Excalidraw utility functions
Latest version: 0.1.3

# @pageflux/utils

## Install

```bash
npm install @pageflux/utils
```

If you prefer Yarn over npm, use this command to install the Excalidraw utils package:

```bash
yarn add @pageflux/utils
```

## API

### `serializeAsJSON`

See [`serializeAsJSON`](https://github.com/excalidraw/excalidraw/blob/master/src/packages/excalidraw/README.md#serializeAsJSON) for API and description.

### `exportToBlob` (async)

Export an Excalidraw diagram to a [Blob](https://developer.mozilla.org/en-US/docs/Web/API/Blob).

### `exportToSvg`

Export an Excalidraw diagram to a [SVGElement](https://developer.mozilla.org/en-US/docs/Web/API/SVGElement).

## Usage

Excalidraw utils is published as a UMD (Universal Module Definition). If you are using a module bundler (for instance, Webpack), you can import it as an ES6 module:

```js
import { exportToSvg, exportToBlob } from "@pageflux/utils";
```

To use it in a browser directly:

```html
<script src="https://unpkg.com/@pageflux/utils@0.1.0/dist/excalidraw-utils.min.js"></script>
<script>
  // ExcalidrawUtils is a global variable defined by excalidraw.min.js
  const { exportToSvg, exportToBlob } = ExcalidrawUtils;
</script>
```

Here's the `exportToBlob` and `exportToSvg` functions in action:

```js
const excalidrawDiagram = {
  type: "excalidraw",
  version: 2,
  source: "https://excalidraw.com",
  elements: [
    {
      id: "vWrqOAfkind2qcm7LDAGZ",
      type: "ellipse",
      x: 414,
      y: 237,
      width: 214,
      height: 214,
      angle: 0,
      strokeColor: "#000000",
      backgroundColor: "#15aabf",
      fillStyle: "hachure",
      strokeWidth: 1,
      strokeStyle: "solid",
      roughness: 1,
      opacity: 100,
      groupIds: [],
      roundness: null,
      seed: 1041657908,
      version: 120,
      versionNonce: 1188004276,
      isDeleted: false,
      boundElementIds: null,
    },
  ],
  appState: {
    viewBackgroundColor: "#ffffff",
    gridSize: null,
  },
};

// Export the Excalidraw diagram as SVG string
const svg = exportToSvg(excalidrawDiagram);
console.log(svg.outerHTML);

// Export the Excalidraw diagram as PNG Blob URL
(async () => {
  const blob = await exportToBlob({
    ...excalidrawDiagram,
    mimeType: "image/png",
  });

  const urlCreator = window.URL || window.webkitURL;
  console.log(urlCreator.createObjectURL(blob));
})();
```
npm package: @pagegap/nextjs
Description: Render PageGap CDN pages in Next.js
Latest version: 0.2.6

# @pagegap/nextjs

Render [PageGap](https://pagegap.io) SEO landing pages in your Next.js app. Pages are generated and hosted on our CDN — this package fetches and renders them with full control over styling.

## Quick Start

### 1. Install

```bash
npm install @pagegap/nextjs
```

### 2. Add environment variables

Create or update `.env.local` in your Next.js project root:

```env
PAGEGAP_KEY=pg_your_api_key_here
```

You'll find your API key in the [PageGap dashboard](https://pagegap.io/dashboard/api-keys).

### 3. Scaffold the pages

```bash
npx @pagegap/nextjs init
```

This creates three files in your `app/seo/` directory:

- `[...slug]/page.tsx` — the page component that renders your landing pages
- `[...slug]/layout.tsx` — a minimal layout wrapper
- `sitemap.xml/route.ts` — an auto-generated sitemap

That's it — your pages are live at `/seo/{slug}`.

## Configuration

All configuration is done via environment variables:

| Variable | Required | Default | Description |
|----------|----------|---------|-------------|
| `PAGEGAP_KEY` | Yes | — | Your PageGap API key (starts with `pg_`) |
| `PAGEGAP_BASE_PATH` | No | `/seo` | URL prefix for your landing pages |
| `PAGEGAP_TRACKING_ID` | No | — | Enables view tracking (found in dashboard) |
| `PAGEGAP_REVALIDATE` | No | `3600` | CDN cache revalidation interval in seconds |
| `PAGEGAP_DOMAIN` | No | — | Your site's domain for sitemap generation (e.g. `https://example.com`) |

### Custom base path

To serve pages at `/blog` instead of `/seo`:

```env
PAGEGAP_BASE_PATH=/blog
```

Then re-run `npx @pagegap/nextjs init` to scaffold files in the correct directory.

## Customization

The generated `page.tsx` is yours to edit. Every element has a CSS class you can target:

| Class | Element |
|-------|---------|
| `.pg-page` | Article wrapper |
| `.pg-hero` | Hero section |
| `.pg-hero-headline` | H1 headline |
| `.pg-hero-subheadline` | Subheadline |
| `.pg-description` | Main description |
| `.pg-area-intro` | Location/area introduction |
| `.pg-local-facts` | Local facts list |
| `.pg-highlights` | Offer highlights |
| `.pg-benefits` | Benefits section |
| `.pg-benefit` | Individual benefit |
| `.pg-process` | Process section |
| `.pg-use-cases` | Use cases section |
| `.pg-faq` | FAQ section |
| `.pg-faq-item` | FAQ item (`<details>`) |
| `.pg-faq-question` | FAQ question (`<summary>`) |
| `.pg-faq-answer` | FAQ answer |
| `.pg-cta` | Call to action |
| `.pg-nav` | Navigation links |

A default stylesheet is available at `@pagegap/nextjs/styles.css` — import it in your layout or use your own styles.

## TypeScript

The package exports all content types for use in custom components:

```typescript
import type {
  PageGapContent,
  PageGapHero,
  PageGapBenefit,
  PageGapFaqItem,
} from "@pagegap/nextjs";

import { hasHighlights, hasAreaIntro } from "@pagegap/nextjs";
```

## Support

- Dashboard: [pagegap.io/dashboard](https://pagegap.io/dashboard)
npm package: @pageindex/mcp-sdk
Description: PageIndex MCP SDK - Document processing tools for AI agents via Model Context Protocol
Author: VectifyAI
Latest version: 0.3.0
Deprecated: Renamed to @pageindex/sdk. See https://github.com/VectifyAI/pageindex-js-sdk/blob/main/MIGRATION.md

# @pageindex/mcp-sdk

TypeScript SDK for PageIndex document processing via [MCP](https://modelcontextprotocol.io/). Built for AI Agent applications.

## When to Use

- **Programmatic access** to PageIndex in TypeScript/JavaScript
- **Wrapping as tools** for AI frameworks without Remote MCP Server support

> For environments with Remote MCP Server support (Claude Desktop, Cursor), use [Direct Connection](https://github.com/VectifyAI/pageindex-mcp) instead.

## Installation

```bash
pnpm add @pageindex/mcp-sdk
```

Requires Node.js >= 18.0.0

## Quick Start

```typescript
import { PageIndexClient } from '@pageindex/mcp-sdk';

const client = new PageIndexClient({
  apiUrl: 'https://chat.pageindex.ai',
  apiKey: 'your-api-key',
});

await client.connect();
const docs = await client.tools.recentDocuments();
await client.close();
```

## API

### Client

```typescript
const client = new PageIndexClient({ apiUrl, apiKey, folderScope? });

await client.connect();
await client.setFolderScope(folderId);
```

### Tools

All methods via `client.tools`:

| Method | Description |
|--------|-------------|
| `processDocument({ url })` | Upload and process document from URL |
| `uploadDocument({ fileName, fileType, fileContent })` | Upload file and process |
| `recentDocuments()` | List recent uploads |
| `findRelevantDocuments({ nameOrDescriptionFilter?, limit? })` | Search documents |
| `getDocument({ docName, waitForCompletion? })` | Get document details |
| `getDocumentStructure({ docName, part?, waitForCompletion? })` | Extract document outline |
| `getPageContent({ docName, pages, waitForCompletion? })` | Extract page content |
| `removeDocument({ docNames })` | Delete documents |
| `createFolder({ name, description?, parentFolderId? })` | Create folder |
| `listFolders({ parentFolderId? })` | List folders |

Page specification formats: `"5"`, `"3,7,10"`, `"5-10"`, `"1-3,7,9-12"`

### Error Handling

```typescript
import { PageIndexError } from '@pageindex/mcp-sdk';

try {
  await client.tools.getDocument({ docName: 'xxx' });
} catch (e) {
  if (e instanceof PageIndexError) {
    // e.code: 'NOT_FOUND' | 'USAGE_LIMIT_REACHED' | 'INVALID_INPUT' | 'INTERNAL_ERROR'
  }
}
```

## Examples

See [examples/chat-demo](./examples/chat-demo) for Next.js + AI SDK integration.

## License

MIT
npm package: @pageinfo/docs
Description: [![MIT License](http://img.shields.io/badge/license-MIT-blue.svg?style=flat)](LICENSE)
Latest version: 0.0.2

# PageInfo Docs

[![MIT License](http://img.shields.io/badge/license-MIT-blue.svg?style=flat)](LICENSE)

## Overview

aspida で生成した PageInfo プラグイン用の API 定義。

## Installation

```shell
$ yarn add @pageinfo/docs
```

## Usage

```typescript
import api, { PageInfo } from '@pageinfo/docs'
```
npm package: @pagelines/discord-mcp
Description: Discord MCP server for Claude - manage Discord servers via Model Context Protocol
Author: PageLines
Latest version: 1.0.0

# Discord MCP Server

A Model Context Protocol (MCP) server for Discord, enabling Claude to manage Discord servers.

## Quick Setup

### 1. Create Discord Bot

1. Go to [Discord Developer Portal](https://discord.com/developers/applications)
2. Click "New Application" and name it
3. Go to "Bot" section and click "Add Bot"
4. Copy the **Bot Token**
5. Enable these Privileged Gateway Intents:
   - Presence Intent
   - Server Members Intent
   - Message Content Intent

### 2. Add Bot to Server

1. Go to "OAuth2" → "URL Generator"
2. Select scopes: `bot`, `applications.commands`
3. Select permissions: `Administrator` (or specific permissions you need)
4. Copy the generated URL and open it to add the bot to your server

### 3. Get Server ID

Right-click your server name → "Copy Server ID"
(Enable Developer Mode in Settings → Advanced if you don't see this option)

### 4. Configure Claude

Add to your `.mcp.json` or Claude settings:

```json
{
  "mcpServers": {
    "discord": {
      "command": "npx",
      "args": ["-y", "discord-mcp"],
      "env": {
        "DISCORD_TOKEN": "your-bot-token",
        "DISCORD_GUILD_ID": "your-server-id"
      }
    }
  }
}
```

## Environment Variables

| Variable | Required | Description |
|----------|----------|-------------|
| `DISCORD_TOKEN` | Yes | Your Discord bot token |
| `DISCORD_GUILD_ID` | No | Default server ID (can be overridden per-command) |

## Available Tools

### Server
- `get_server_info` - Get detailed server information

### User
- `get_user_id_by_name` - Find user ID by username
- `send_private_message` - Send DM to user
- `edit_private_message` - Edit a DM
- `delete_private_message` - Delete a DM
- `read_private_messages` - Read DM history

### Messages
- `send_message` - Send message to channel
- `edit_message` - Edit a message
- `delete_message` - Delete a message
- `read_messages` - Read channel history
- `add_reaction` - Add emoji reaction
- `remove_reaction` - Remove emoji reaction

### Channels
- `create_text_channel` - Create new text channel
- `delete_channel` - Delete a channel
- `find_channel` - Find channel by name
- `list_channels` - List all channels

### Categories
- `create_category` - Create new category
- `delete_category` - Delete a category
- `find_category` - Find category by name
- `list_channels_in_category` - List channels in category

### Webhooks
- `create_webhook` - Create webhook
- `delete_webhook` - Delete webhook
- `list_webhooks` - List webhooks on channel
- `send_webhook_message` - Send message via webhook

## Development

```bash
# Install dependencies
npm install

# Run in development mode
npm run dev

# Build for production
npm run build

# Run built version
npm start
```

## License

MIT
npm package: @pagelines/widget
Description: Embeddable PageLines agent widget for any website
Author: PageLines
Latest version: 1.0.431

# PageLines Widget

Embeddable PageLines agent widget. One-line integration: `<div data-pagelines-agent="handle"></div>`

## Development

```bash
pnpm dev:widget  # Hot reload SDK + widget + app (use from root)
pnpm dev         # Standalone widget dev server (from src/widget)
pnpm build       # Production IIFE bundle for CDN
```

## Testing

Playground (`/playground/widget`) tests **built packages**. Run `pnpm sdk:build && pnpm widget:build` first.

**See `plans/architecture/widget.md` for architecture and CDN usage.**
npm package: @pagenote/notion-database
Description: make notion as a real-database for server
Author: rowthan
Latest version: 0.0.1-c



### Usage

```javascript
import myLib from 'mylib'
```

Additionally, you can import the transpiled modules from `dist/lib` in case you have a modular library:

```javascript
import something from 'mylib/dist/lib/something'
```
npm package: @pagenote/web-component
Description: A react library developed with dumi
Latest version: 0.0.13

# pagenote

[![NPM version](https://img.shields.io/npm/v/pagenote.svg?style=flat)](https://npmjs.org/package/pagenote)
[![NPM downloads](http://img.shields.io/npm/dm/pagenote.svg?style=flat)](https://npmjs.org/package/pagenote)

A react library developed with dumi

## Usage

TODO

## Options

TODO

## Development

```bash
# install dependencies
$ pnpm install

# develop library by docs demo
$ pnpm start

# build library source code
$ pnpm run build

# build library source code in watch mode
$ pnpm run build:watch

# build docs
$ pnpm run docs:build

# check your project for potential problems
$ pnpm run doctor
```

## LICENSE

MIT
npm package: @pagent-libs/docs-core
Description: Core document editor engine for pagent-docs
Latest version: 0.1.0

# @pagent-libs/docs-core

Core document editor engine for pagent-docs. Zero React dependencies.

## Features

- Document model with blocks (paragraphs, headings, lists, tables, images)
- ProseMirror schema and state management
- Text and paragraph style pooling for memory efficiency
- Event system with batching
- Undo/redo history
- TypeScript strict mode

## Usage

```typescript
import { DocumentImpl, type Block } from '@pagent-libs/docs-core';

const doc = new DocumentImpl('doc_1', 'My Document');

// Get sections and blocks
const sections = doc.getSections();
const blocks = sections[0].blocks;

// Update page config
doc.setSectionPageConfig(sections[0].id, {
  size: { w: 816, h: 1056 },
  margins: { top: 96, right: 96, bottom: 96, left: 96, header: 48, footer: 48 },
  orientation: 'portrait',
});

// Serialize/deserialize
const data = doc.getData();
doc.setData(data);
```

## Block Types

- `paragraph` - Basic text paragraph
- `heading` - Heading levels 1-6
- `list-item` - Bulleted or numbered list items
- `table` - Tables with rows and cells
- `image` - Images with optional captions

## ProseMirror Integration

The package includes ProseMirror schema and utilities for rich text editing:

```typescript
import { 
  docsSchema, 
  createPlugins, 
  blocksToPmDoc, 
  proseMirrorToDocument 
} from '@pagent-libs/docs-core';

// Convert blocks to ProseMirror document
const pmDoc = blocksToPmDoc(blocks, schema);

// Convert ProseMirror document back to blocks
const docModel = proseMirrorToDocument(pmNode, existingDoc);
```

## Limitations

- No collaborative editing support
- Single-section documents (multi-section support is in the data model but not implemented in the UI)
- No comments or suggestions
npm package: @pagent-libs/docs-react
Description: React components for pagent-docs
Latest version: 0.1.0

# @pagent-libs/docs-react

React components for pagent-docs with paginated document rendering.

## Features

- **Paginated rendering**: True page-based layout with headers, footers, and page breaks
- **ProseMirror-based editing**: Rich text editing with formatting toolbar
- **Line-level pagination**: Content breaks at line boundaries, not block boundaries
- **Header/footer support**: Dynamic fields for page numbers, total pages, document title
- **Tables**: Basic table support with cell editing
- **Ruler**: Interactive margin adjustment via draggable ruler

## Components

### DocumentEditor (main component)
The main document editor component. Provides:
- Formatting toolbar
- Horizontal and vertical rulers
- Paginated content display
- Header/footer editing

### TrueLayoutEditor
Lower-level component for custom implementations. Handles:
- Page layout computation
- DOM-based content rendering
- Selection overlay
- Input bridging between visible content and hidden ProseMirror

## Usage

```typescript
import { DocumentProvider, DocumentEditor } from '@pagent-libs/docs-react';
import { DocumentImpl } from '@pagent-libs/docs-core';

const doc = new DocumentImpl('doc_1', 'My Document');

function App() {
  return (
    <DocumentProvider document={doc}>
      <DocumentEditor 
        width={window.innerWidth} 
        height={window.innerHeight}
        showToolbar={true}
        showRuler={true}
      />
    </DocumentProvider>
  );
}
```

## Architecture

The rendering uses a hidden ProseMirror editor with visible paginated output:

```
DocumentEditor (React)
├── Toolbar (DOM)
├── Ruler (DOM)
├── TrueLayoutEditor
│   ├── Hidden ProseMirror (handles editing)
│   ├── Page containers (visible, paginated)
│   │   ├── Header
│   │   ├── Content fragments
│   │   └── Footer
│   ├── Selection overlay (caret + selection rects)
│   └── Input bridge (forwards events to hidden editor)
└── PageSetupModal
```

## Hooks

```typescript
import { useDocument, useSections, useHistory } from '@pagent-libs/docs-react';

// Access document model
const { document, zoom, setZoom } = useDocument();

// Get sections
const sections = useSections();

// Undo/redo
const { canUndo, canRedo, undo, redo } = useHistory();
```

## Limitations (TODOs. Coming Soon.)

- No spell check integration
- No collaborative editing
- No comments or track changes
- Images are placeholders only (no upload handling)
- Tables don't support merging cells or column resizing
- No find/replace
npm package: @pagent-libs/sheets-core
Description: Core spreadsheet engine for pagent-sheets
Latest version: 0.1.0

# @pagent-sheets/core

Core spreadsheet engine for pagent-sheets. Zero React dependencies.

## Features

- Sparse cell storage (Map-based)
- Efficient range operations
- Formula dependency graph
- Style pooling for memory efficiency
- Event system with batching
- TypeScript strict mode

## Usage

```typescript
import { WorkbookImpl } from '@pagent-sheets/core';

const workbook = new WorkbookImpl('workbook_1', 'My Workbook');
const sheet = workbook.getSheet();

workbook.setCellValue(undefined, 0, 0, 'Hello');
workbook.setCellValue(undefined, 0, 1, 'World');
```

## Performance

- O(1) cell lookups
- Memory efficient for sparse sheets
- Incremental formula recalculation
- Shared style objects
npm package: @pagent-libs/sheets-react
Description: React components for pagent-sheets
Latest version: 0.1.0

# @pagent-sheets/react

React components for pagent-sheets with Canvas-based rendering.

## Features

- **Canvas-based rendering**: High-performance grid rendering with pixel-perfect scroll synchronization
- **Optimized React components**: Minimal re-renders with memoization
- **Context-based state management**: Clean separation of state and UI
- **TypeScript strict mode**: Full type safety
- **Retina display support**: Crisp rendering on high-DPI displays

## Components

### WorkbookCanvas (main component)
The main spreadsheet component using canvas rendering. Provides:
- Cell grid with headers
- Selection and active cell highlighting
- Cell editing with DOM overlay
- Toolbar and formula bar
- Sheet tabs

### CanvasGrid
Low-level canvas grid component for custom implementations.

### EditOverlay
DOM-based input overlay for cell editing.

## Usage

```typescript
import { Workbook, WorkbookProvider } from '@pagent-sheets/react';
import { WorkbookImpl } from '@pagent-sheets/core';

const workbook = new WorkbookImpl('workbook_1', 'My Workbook');

function App() {
  return (
    <WorkbookProvider workbook={workbook}>
      <Workbook width={800} height={600} />
    </WorkbookProvider>
  );
}
```

## Architecture

The rendering architecture uses a canvas-based approach:

```
WorkbookCanvas (React)
├── Toolbar (DOM)
├── FormulaBar (DOM)
├── CanvasGrid (Canvas)
│   ├── Cell rendering
│   ├── Grid lines
│   ├── Row/Column headers
│   ├── Selection highlighting
│   └── Fill handle
├── EditOverlay (DOM - shown during editing)
└── SheetTabs (DOM)
```

Canvas handles all grid rendering for optimal performance, while DOM is used for interactive elements like inputs and buttons.
npm package: @pageobject/adapter-test-suite
Description: A test suite for testing the compatibility of adapter implementations.
Author: Clemens Akens
Latest version: 0.16.1
Deprecated: This package is deprecated. Please change to @pageobject/standard-test.

# @pageobject/adapter-test-suite [![Package Version][badge-npm-image]][badge-npm-link] [![Build Status][badge-travis-image]][badge-travis-link] [![Coverage Status][badge-coveralls-image]][badge-coveralls-link]

A test suite for testing the compatibility of adapter implementations.

## Installation

```sh
npm install @pageobject/adapter-test-suite
```

```sh
# Peer dependencies
npm install @pageobject/class
```

## API

Please find the API documentation [here][repo-api-adapter-test-suite].

---

Built by (c) Clemens Akens. Released under the terms of the [MIT License][repo-license].

[badge-coveralls-image]: https://coveralls.io/repos/github/clebert/pageobject/badge.svg?branch=master
[badge-coveralls-link]: https://coveralls.io/github/clebert/pageobject?branch=master
[badge-npm-image]: https://img.shields.io/npm/v/@pageobject/predicates.svg
[badge-npm-link]: https://www.npmjs.com/package/@pageobject/predicates
[badge-travis-image]: https://travis-ci.org/clebert/pageobject.svg?branch=master
[badge-travis-link]: https://travis-ci.org/clebert/pageobject
[repo-api-adapter-test-suite]: https://pageobject.js.org/api/adapter-test-suite/
[repo-license]: https://github.com/clebert/pageobject/blob/master/LICENSE
npm package: @pageobject/base
Description: A declarative API as a basis for platform- and framework-independent UI test automation.
Author: Clemens Akens
Latest version: 11.2.0

# @pageobject/base

[![Package Version][badge-npm-image]][badge-npm-link]
[![Build Status][badge-travis-image]][badge-travis-link]
[![Coverage Status][badge-coveralls-image]][badge-coveralls-link]
[![TypeScript][badge-typescript-image]][badge-typescript-link]

> A declarative API as a basis for platform- and framework-independent UI test automation.

**This package is part of [PageObjectJS][internal-homepage].**

## Installation

```sh
yarn add @pageobject/base
```

## API documentation

Please find the API documentation [here][internal-api-base].

---

Copyright (c) 2017-present, Clemens Akens. Released under the terms of the [MIT License][internal-license].

[badge-coveralls-image]: https://coveralls.io/repos/github/clebert/pageobject/badge.svg?branch=master
[badge-coveralls-link]: https://coveralls.io/github/clebert/pageobject?branch=master
[badge-npm-image]: https://img.shields.io/npm/v/@pageobject/base.svg
[badge-npm-link]: https://yarnpkg.com/en/package/@pageobject/base
[badge-travis-image]: https://travis-ci.org/clebert/pageobject.svg?branch=master
[badge-travis-link]: https://travis-ci.org/clebert/pageobject
[badge-typescript-image]: https://img.shields.io/badge/TypeScript-ready-blue.svg
[badge-typescript-link]: https://www.typescriptlang.org/
[internal-api-base]: https://pageobject.js.org/api/base/
[internal-homepage]: https://pageobject.js.org/
[internal-license]: https://github.com/clebert/pageobject/blob/master/LICENSE
npm package: @pageobject/class
Description: A class-based implementation of the Page Object pattern for JavaScript.
Author: Clemens Akens
Latest version: 0.16.0
Deprecated: This package is deprecated. Please change to @pageobject/core.

# @pageobject/class [![Package Version][badge-npm-image]][badge-npm-link] [![Build Status][badge-travis-image]][badge-travis-link] [![Coverage Status][badge-coveralls-image]][badge-coveralls-link]

A class-based implementation of the Page Object pattern for JavaScript.

## Installation

```sh
npm install @pageobject/class
```

## API

Please find the API documentation [here][repo-api-class].

---

Built by (c) Clemens Akens. Released under the terms of the [MIT License][repo-license].

[badge-coveralls-image]: https://coveralls.io/repos/github/clebert/pageobject/badge.svg?branch=master
[badge-coveralls-link]: https://coveralls.io/github/clebert/pageobject?branch=master
[badge-npm-image]: https://img.shields.io/npm/v/@pageobject/class.svg
[badge-npm-link]: https://www.npmjs.com/package/@pageobject/class
[badge-travis-image]: https://travis-ci.org/clebert/pageobject.svg?branch=master
[badge-travis-link]: https://travis-ci.org/clebert/pageobject
[repo-api-class]: https://pageobject.js.org/api/class/
[repo-license]: https://github.com/clebert/pageobject/blob/master/LICENSE
npm package: @pageobject/core
Description: This package is the basis for the PageObjectJS standard API.
Author: Clemens Akens
Latest version: 1.0.0-beta-4
Deprecated: Please use @pageobject/stable instead.

# @pageobject/core [![Package Version][badge-npm-image]][badge-npm-link] [![Build Status][badge-travis-image]][badge-travis-link] [![Coverage Status][badge-coveralls-image]][badge-coveralls-link]

> This package is the basis for the PageObjectJS standard API.

## Installation

```sh
yarn add @pageobject/core
```

## API

Please find the API documentation [here][internal-api-core].

## Usage

As an end user, you will rarely want to consume this package directly. Instead, please take a look at package [@pageobject/standard][internal-usage-standard].

---

Built by (c) Clemens Akens. Released under the terms of the [MIT License][internal-license].

[badge-coveralls-image]: https://coveralls.io/repos/github/clebert/pageobject/badge.svg?branch=master
[badge-coveralls-link]: https://coveralls.io/github/clebert/pageobject?branch=master
[badge-npm-image]: https://img.shields.io/npm/v/@pageobject/core.svg
[badge-npm-link]: https://yarnpkg.com/en/package/@pageobject/core
[badge-travis-image]: https://travis-ci.org/clebert/pageobject.svg?branch=master
[badge-travis-link]: https://travis-ci.org/clebert/pageobject

[internal-api-core]: https://pageobject.js.org/api/core/
[internal-license]: https://github.com/clebert/pageobject/blob/master/LICENSE
[internal-usage-standard]: https://github.com/clebert/pageobject/blob/master/@pageobject/standard/README.md#usage
npm package: @pageobject/engine
Description: This package allows you to execute unreliable, asynchronous, and idempotent commands reliably.
Author: Clemens Akens
Latest version: 1.0.0-beta-4
Deprecated: Please use @pageobject/reliable instead.

# @pageobject/engine [![Package Version][badge-npm-image]][badge-npm-link] [![Build Status][badge-travis-image]][badge-travis-link] [![Coverage Status][badge-coveralls-image]][badge-coveralls-link]

> This package allows you to execute unreliable, asynchronous, and [idempotent][external-wiki-idempotence] commands reliably.

## Installation

```sh
yarn add @pageobject/engine
```

## API

Please find the API documentation [here][internal-api-engine].

## Usage

### Import the package

#### ES2015 modules

```js
import {createRetryEngine} from '@pageobject/engine';
```

#### CommonJS

```js
const {createRetryEngine} = require('@pageobject/engine');
```

### Create a retry engine

```js
const defaultTimeout = 10000 /* 10 seconds */;

const {retryOnError} = createRetryEngine(defaultTimeout);
```

### Execute an idempotent command

```js
const erroneousTwoTimes = async () => /* ... */;
```

In the following, the `erroneousTwoTimes` command is executed a total of 3 times. The third time the execution ends successfully.

```js
retryOnError(erroneousTwoTimes).then(() => {
  console.log('Yeah!');
});
```

```js
const neverEnding = async () => /* ... */;
```

The following execution of the `neverEnding` command results in a timeout error after 10 seconds.

```js
retryOnError(neverEnding).catch(() => {
  console.error('Oops!');
});
```

The following execution of the `neverEnding` command results in a timeout error after 5 seconds.

```js
const timeout = 5000 /* 5 seconds */;

retryOnError(neverEnding, timeout).catch(() => {
  console.error('Oops!');
});
```

---

Built by (c) Clemens Akens. Released under the terms of the [MIT License][internal-license].

[badge-coveralls-image]: https://coveralls.io/repos/github/clebert/pageobject/badge.svg?branch=master
[badge-coveralls-link]: https://coveralls.io/github/clebert/pageobject?branch=master
[badge-npm-image]: https://img.shields.io/npm/v/@pageobject/engine.svg
[badge-npm-link]: https://yarnpkg.com/en/package/@pageobject/engine
[badge-travis-image]: https://travis-ci.org/clebert/pageobject.svg?branch=master
[badge-travis-link]: https://travis-ci.org/clebert/pageobject

[internal-api-engine]: https://pageobject.js.org/api/engine/
[internal-license]: https://github.com/clebert/pageobject/blob/master/LICENSE

[external-wiki-idempotence]: https://en.wikipedia.org/wiki/Idempotence#Computer_science_meaning
npm package: @pageobject/flexible
Description: Write flexible tests using a @pageobject/stable-based API which is adaptable for different browser automation frameworks.
Author: Clemens Akens
Latest version: 2.0.0
Deprecated: Please use @pageobject/web instead.

# @pageobject/flexible [![Package Version][badge-npm-image]][badge-npm-link] [![Build Status][badge-travis-image]][badge-travis-link] [![Coverage Status][badge-coveralls-image]][badge-coveralls-link]

> Write **flexible** tests using a [@pageobject/stable][internal-readme-stable]-based API which is adaptable for different browser automation frameworks.

## Installation

```sh
yarn add @pageobject/flexible
```

## API

Please find the API documentation [here][internal-api-flexible].

---

Built by (c) Clemens Akens. Released under the terms of the [MIT License][internal-license].

[badge-coveralls-image]: https://coveralls.io/repos/github/clebert/pageobject/badge.svg?branch=master
[badge-coveralls-link]: https://coveralls.io/github/clebert/pageobject?branch=master
[badge-npm-image]: https://img.shields.io/npm/v/@pageobject/flexible.svg
[badge-npm-link]: https://yarnpkg.com/en/package/@pageobject/flexible
[badge-travis-image]: https://travis-ci.org/clebert/pageobject.svg?branch=master
[badge-travis-link]: https://travis-ci.org/clebert/pageobject
[internal-api-flexible]: https://pageobject.js.org/api/flexible/
[internal-license]: https://github.com/clebert/pageobject/blob/master/LICENSE
[internal-readme-stable]: https://github.com/clebert/pageobject/tree/master/@pageobject/stable/README.md
npm package: @pageobject/flexible-protractor
Description: Run your @pageobject/flexible-based tests using Protractor.
Author: Clemens Akens
Latest version: 2.0.0
Deprecated: Please use @pageobject/protractor instead.

# @pageobject/flexible-protractor [![Package Version][badge-npm-image]][badge-npm-link] [![Build Status][badge-travis-image]][badge-travis-link] [![Coverage Status][badge-coveralls-image]][badge-coveralls-link]

> Run your [@pageobject/flexible][internal-readme-flexible]-based tests using [Protractor][external-protractor].

## Installation

```sh
yarn add @pageobject/flexible-protractor
```

## API

Please find the API documentation [here][internal-api-flexible-protractor].

---

Built by (c) Clemens Akens. Released under the terms of the [MIT License][internal-license].

[badge-coveralls-image]: https://coveralls.io/repos/github/clebert/pageobject/badge.svg?branch=master
[badge-coveralls-link]: https://coveralls.io/github/clebert/pageobject?branch=master
[badge-npm-image]: https://img.shields.io/npm/v/@pageobject/flexible-protractor.svg
[badge-npm-link]: https://yarnpkg.com/en/package/@pageobject/flexible-protractor
[badge-travis-image]: https://travis-ci.org/clebert/pageobject.svg?branch=master
[badge-travis-link]: https://travis-ci.org/clebert/pageobject
[internal-api-flexible-protractor]: https://pageobject.js.org/api/flexible-protractor/
[internal-license]: https://github.com/clebert/pageobject/blob/master/LICENSE
[internal-readme-flexible]: https://github.com/clebert/pageobject/tree/master/@pageobject/flexible/README.md
[external-protractor]: https://www.protractortest.org/#/
npm package: @pageobject/flexible-puppeteer
Description: Run your @pageobject/flexible-based tests using Puppeteer.
Author: Clemens Akens
Latest version: 2.0.0
Deprecated: Please use @pageobject/puppeteer instead.

# @pageobject/flexible-puppeteer [![Package Version][badge-npm-image]][badge-npm-link] [![Build Status][badge-travis-image]][badge-travis-link] [![Coverage Status][badge-coveralls-image]][badge-coveralls-link]

> Run your [@pageobject/flexible][internal-readme-flexible]-based tests using [Puppeteer][external-puppeteer].

## Installation

```sh
yarn add @pageobject/flexible-puppeteer
```

## API

Please find the API documentation [here][internal-api-flexible-puppeteer].

---

Built by (c) Clemens Akens. Released under the terms of the [MIT License][internal-license].

[badge-coveralls-image]: https://coveralls.io/repos/github/clebert/pageobject/badge.svg?branch=master
[badge-coveralls-link]: https://coveralls.io/github/clebert/pageobject?branch=master
[badge-npm-image]: https://img.shields.io/npm/v/@pageobject/flexible-puppeteer.svg
[badge-npm-link]: https://yarnpkg.com/en/package/@pageobject/flexible-puppeteer
[badge-travis-image]: https://travis-ci.org/clebert/pageobject.svg?branch=master
[badge-travis-link]: https://travis-ci.org/clebert/pageobject
[internal-api-flexible-puppeteer]: https://pageobject.js.org/api/flexible-puppeteer/
[internal-license]: https://github.com/clebert/pageobject/blob/master/LICENSE
[internal-readme-flexible]: https://github.com/clebert/pageobject/tree/master/@pageobject/flexible/README.md
[external-puppeteer]: https://github.com/GoogleChrome/puppeteer/blob/master/README.md
npm package: @pageobject/flexible-selenium
Description: Run your @pageobject/flexible-based tests using Selenium.
Author: Clemens Akens
Latest version: 2.0.0
Deprecated: Please use @pageobject/selenium-webdriver instead.

# @pageobject/flexible-selenium [![Package Version][badge-npm-image]][badge-npm-link] [![Build Status][badge-travis-image]][badge-travis-link] [![Coverage Status][badge-coveralls-image]][badge-coveralls-link]

> Run your [@pageobject/flexible][internal-readme-flexible]-based tests using [Selenium][external-selenium].

## Installation

```sh
yarn add @pageobject/flexible-selenium
```

## API

Please find the API documentation [here][internal-api-flexible-selenium].

---

Built by (c) Clemens Akens. Released under the terms of the [MIT License][internal-license].

[badge-coveralls-image]: https://coveralls.io/repos/github/clebert/pageobject/badge.svg?branch=master
[badge-coveralls-link]: https://coveralls.io/github/clebert/pageobject?branch=master
[badge-npm-image]: https://img.shields.io/npm/v/@pageobject/flexible-selenium.svg
[badge-npm-link]: https://yarnpkg.com/en/package/@pageobject/flexible-selenium
[badge-travis-image]: https://travis-ci.org/clebert/pageobject.svg?branch=master
[badge-travis-link]: https://travis-ci.org/clebert/pageobject
[internal-api-flexible-selenium]: https://pageobject.js.org/api/flexible-selenium/
[internal-license]: https://github.com/clebert/pageobject/blob/master/LICENSE
[internal-readme-flexible]: https://github.com/clebert/pageobject/tree/master/@pageobject/flexible/README.md
[external-selenium]: http://seleniumhq.github.io/selenium/docs/api/javascript/index.html
npm package: @pageobject/predicates
Description: This package provides a collection of useful predicate functions.
Author: Clemens Akens
Latest version: 1.0.0-beta-4
Deprecated: Please use @pageobject/reliable instead.

# @pageobject/predicates [![Package Version][badge-npm-image]][badge-npm-link] [![Build Status][badge-travis-image]][badge-travis-link] [![Coverage Status][badge-coveralls-image]][badge-coveralls-link]

> This package provides a collection of useful predicate functions.

## Installation

```sh
yarn add @pageobject/predicates
```

## API

Please find the API documentation [here][internal-api-predicates].

## Usage

The result of a predicate function serves as an additional selection criterion for assigning a unique DOM element to a page object.

### Example

```js
pageObject.select(OtherPageObject).where(indexEquals(0));
```

---

Built by (c) Clemens Akens. Released under the terms of the [MIT License][internal-license].

[badge-coveralls-image]: https://coveralls.io/repos/github/clebert/pageobject/badge.svg?branch=master
[badge-coveralls-link]: https://coveralls.io/github/clebert/pageobject?branch=master
[badge-npm-image]: https://img.shields.io/npm/v/@pageobject/predicates.svg
[badge-npm-link]: https://yarnpkg.com/en/package/@pageobject/predicates
[badge-travis-image]: https://travis-ci.org/clebert/pageobject.svg?branch=master
[badge-travis-link]: https://travis-ci.org/clebert/pageobject

[internal-api-predicates]: https://pageobject.js.org/api/predicates/
[internal-license]: https://github.com/clebert/pageobject/blob/master/LICENSE
npm package: @pageobject/protractor
Description: A web API adapter for Protractor.
Author: Clemens Akens
Latest version: 11.2.1

# @pageobject/protractor

[![Package Version][badge-npm-image]][badge-npm-link]
[![Build Status][badge-travis-image]][badge-travis-link]
[![Coverage Status][badge-coveralls-image]][badge-coveralls-link]
[![TypeScript][badge-typescript-image]][badge-typescript-link]

> A web API adapter for [Protractor][external-protractor].

**This package is part of [PageObjectJS][internal-homepage].**

## Installation

```sh
yarn add @pageobject/protractor
```

## API documentation

Please find the API documentation [here][internal-api-protractor].

---

Copyright (c) 2017-present, Clemens Akens. Released under the terms of the [MIT License][internal-license].

[badge-coveralls-image]: https://coveralls.io/repos/github/clebert/pageobject/badge.svg?branch=master
[badge-coveralls-link]: https://coveralls.io/github/clebert/pageobject?branch=master
[badge-npm-image]: https://img.shields.io/npm/v/@pageobject/protractor.svg
[badge-npm-link]: https://yarnpkg.com/en/package/@pageobject/protractor
[badge-travis-image]: https://travis-ci.org/clebert/pageobject.svg?branch=master
[badge-travis-link]: https://travis-ci.org/clebert/pageobject
[badge-typescript-image]: https://img.shields.io/badge/TypeScript-ready-blue.svg
[badge-typescript-link]: https://www.typescriptlang.org/
[external-protractor]: https://www.protractortest.org/#/
[internal-api-protractor]: https://pageobject.js.org/api/protractor/
[internal-homepage]: https://pageobject.js.org/
[internal-license]: https://github.com/clebert/pageobject/blob/master/LICENSE
npm package: @pageobject/puppeteer
Description: A web API adapter for Puppeteer.
Author: Clemens Akens
Latest version: 11.2.1

# @pageobject/puppeteer

[![Package Version][badge-npm-image]][badge-npm-link]
[![Build Status][badge-travis-image]][badge-travis-link]
[![Coverage Status][badge-coveralls-image]][badge-coveralls-link]
[![TypeScript][badge-typescript-image]][badge-typescript-link]

> A web API adapter for [Puppeteer][external-puppeteer].

**This package is part of [PageObjectJS][internal-homepage].**

## Installation

```sh
yarn add @pageobject/puppeteer
```

## API documentation

Please find the API documentation [here][internal-api-puppeteer].

---

Copyright (c) 2017-present, Clemens Akens. Released under the terms of the [MIT License][internal-license].

[badge-coveralls-image]: https://coveralls.io/repos/github/clebert/pageobject/badge.svg?branch=master
[badge-coveralls-link]: https://coveralls.io/github/clebert/pageobject?branch=master
[badge-npm-image]: https://img.shields.io/npm/v/@pageobject/puppeteer.svg
[badge-npm-link]: https://yarnpkg.com/en/package/@pageobject/puppeteer
[badge-travis-image]: https://travis-ci.org/clebert/pageobject.svg?branch=master
[badge-travis-link]: https://travis-ci.org/clebert/pageobject
[badge-typescript-image]: https://img.shields.io/badge/TypeScript-ready-blue.svg
[badge-typescript-link]: https://www.typescriptlang.org/
[external-puppeteer]: https://github.com/GoogleChrome/puppeteer
[internal-api-puppeteer]: https://pageobject.js.org/api/puppeteer/
[internal-homepage]: https://pageobject.js.org/
[internal-license]: https://github.com/clebert/pageobject/blob/master/LICENSE
npm package: @pageobject/puppeteer-adapter
Description: An adapter implementation for connecting page objects to Puppeteer.
Author: Clemens Akens
Latest version: 0.16.1
Deprecated: This package is deprecated. Please change to @pageobject/standard.

# @pageobject/puppeteer-adapter [![Package Version][badge-npm-image]][badge-npm-link] [![Build Status][badge-travis-image]][badge-travis-link] [![Coverage Status][badge-coveralls-image]][badge-coveralls-link]

An adapter implementation for connecting page objects to [Puppeteer][puppeteer].

## Installation

```sh
npm install @pageobject/puppeteer-adapter
```

```sh
# Peer dependencies
npm install @pageobject/class puppeteer
```

```sh
# TypeScript types
npm install @types/puppeteer
```

## API

Please find the API documentation [here][repo-api-puppeteer-adapter].

---

Built by (c) Clemens Akens. Released under the terms of the [MIT License][repo-license].

[badge-coveralls-image]: https://coveralls.io/repos/github/clebert/pageobject/badge.svg?branch=master
[badge-coveralls-link]: https://coveralls.io/github/clebert/pageobject?branch=master
[badge-npm-image]: https://img.shields.io/npm/v/@pageobject/puppeteer-adapter.svg
[badge-npm-link]: https://www.npmjs.com/package/@pageobject/puppeteer-adapter
[badge-travis-image]: https://travis-ci.org/clebert/pageobject.svg?branch=master
[badge-travis-link]: https://travis-ci.org/clebert/pageobject
[repo-api-puppeteer-adapter]: https://pageobject.js.org/api/puppeteer-adapter/
[repo-license]: https://github.com/clebert/pageobject/blob/master/LICENSE
[puppeteer]: https://github.com/GoogleChrome/puppeteer
npm package: @pageobject/reliable
Description: Write reliable tests in a declarative programming style.
Author: Clemens Akens
Latest version: 2.0.0
Deprecated: Please use @pageobject/base instead.

# @pageobject/reliable [![Package Version][badge-npm-image]][badge-npm-link] [![Build Status][badge-travis-image]][badge-travis-link] [![Coverage Status][badge-coveralls-image]][badge-coveralls-link]

> Write **reliable** tests in a declarative programming style.

## Installation

```sh
yarn add @pageobject/reliable
```

## API

Please find the API documentation [here][internal-api-reliable].

---

Built by (c) Clemens Akens. Released under the terms of the [MIT License][internal-license].

[badge-coveralls-image]: https://coveralls.io/repos/github/clebert/pageobject/badge.svg?branch=master
[badge-coveralls-link]: https://coveralls.io/github/clebert/pageobject?branch=master
[badge-npm-image]: https://img.shields.io/npm/v/@pageobject/reliable.svg
[badge-npm-link]: https://yarnpkg.com/en/package/@pageobject/reliable
[badge-travis-image]: https://travis-ci.org/clebert/pageobject.svg?branch=master
[badge-travis-link]: https://travis-ci.org/clebert/pageobject
[internal-api-reliable]: https://pageobject.js.org/api/reliable/
[internal-license]: https://github.com/clebert/pageobject/blob/master/LICENSE
npm package: @pageobject/selenium-adapter
Description: An adapter implementation for connecting page objects to Selenium.
Author: Clemens Akens
Latest version: 0.16.1
Deprecated: This package is deprecated. Please change to @pageobject/standard-selenium.

# @pageobject/selenium-adapter [![Package Version][badge-npm-image]][badge-npm-link] [![Build Status][badge-travis-image]][badge-travis-link] [![Coverage Status][badge-coveralls-image]][badge-coveralls-link]

An adapter implementation for connecting page objects to [Selenium][selenium].

## Installation

```sh
npm install @pageobject/selenium-adapter
```

```sh
# Peer dependencies
npm install @pageobject/class selenium-webdriver
```

```sh
# TypeScript types
npm install @types/selenium-webdriver
```

## API

Please find the API documentation [here][repo-api-selenium-adapter].

---

Built by (c) Clemens Akens. Released under the terms of the [MIT License][repo-license].

[badge-coveralls-image]: https://coveralls.io/repos/github/clebert/pageobject/badge.svg?branch=master
[badge-coveralls-link]: https://coveralls.io/github/clebert/pageobject?branch=master
[badge-npm-image]: https://img.shields.io/npm/v/@pageobject/selenium-adapter.svg
[badge-npm-link]: https://www.npmjs.com/package/@pageobject/selenium-adapter
[badge-travis-image]: https://travis-ci.org/clebert/pageobject.svg?branch=master
[badge-travis-link]: https://travis-ci.org/clebert/pageobject
[repo-api-selenium-adapter]: https://pageobject.js.org/api/selenium-adapter/
[repo-license]: https://github.com/clebert/pageobject/blob/master/LICENSE
[selenium]: http://seleniumhq.github.io/selenium/docs/api/javascript/index.html