open-index/open-npm huggingface dataset:
npm package: @patternfly/transform-adoc
Description: Transforms asciidoc content by mapping known structures to PatternFly components
Latest version: 0.1.3

# @patternfly/transform-adoc
Maps known asciidoc structures to PatternFly components

## Node

const asciidoctor = require('asciidoctor')();
const { addReactConverter } = require('@patternfly/quickstarts-adoc');
addReactConverter(asciidoctor);

### Example usage with webpack to parse *.adoc files
```js
const asciidoctor = require('asciidoctor')();
const { addReactConverter } = require('@patternfly/quickstarts-adoc');
addReactConverter(asciidoctor);

module.exports = (_env, argv) => {
    plugins: [
        new CopyPlugin({
            patterns: [{
                from: 'src/**/*.adoc',
                to: ({ absoluteFilename }) => {
                    // The dirname of adoc is used as the output key
                    const dirName = path.basename(path.dirname(absoluteFilename));
                    if (_env === 'development') {
                        return `${dirName}.adoc.html`;
                    }
                    return `${dirName}.[contenthash].adoc.html`;
                },
                transform: (content) => {
                    const html = asciidoctor.convert(content);
                    return html;
                },
                noErrorOnMissing: true,
            }],
        }),
    ]
}
```

## ESM
TODO
npm package: @patterninc/esbuild-scss-modules-plugin
Description: esbuild-scss-modules-plugin =======
Author: ictrobot
Latest version: 1.2.0

esbuild-scss-modules-plugin
=======

Plugin to use scss and css modules with esbuild.
Based on [indooorsman/esbuild-css-modules-plugin](https://github.com/indooorsman/esbuild-css-modules-plugin/blob/eff4a500c56a45b1550887a8f7c20f57b01a46b7/index.js).

![npm](https://img.shields.io/npm/v/esbuild-scss-modules-plugin)

## Example

```js
import esbuild from "esbuild";
import {ScssModulesPlugin} from "esbuild-scss-modules-plugin";

const result = await esbuild.build({
    entryPoints: ['src/index.ts'],
    bundle: true,
    outfile: 'dist/index.js',

    plugins: [
        ScssModulesPlugin({
            inject: false,
            minify: true,
            cssCallback: (css) => console.log(css),
        })
    ]
})
```

## Options
See `index.ts`

## License
MIT
npm package: @patternize/components
Description: React components for Patternize.io
Latest version: 0.2.22

# Patternize Components

React components for algorithm visualization and interactive learning.

## Installation

```bash
npm install @patternize/components
# or
yarn add @patternize/components
```

## Features

### Algorithm Visualizations
- **Sorting Algorithms**
  - Merge Sort
  - Bubble Sort
  - Selection Sort
- **Tree Operations**
  - DFS/BFS Traversals
  - B-Tree Operations
  - Trie Operations
- **Graph Algorithms**
  - Depth-First Search
  - Breadth-First Search
  - Dijkstra's Algorithm
- **Data Structures**
  - Linked List Operations
  - Binary Tree Operations
  - React Fiber Visualization

### Interactive Components
- Array Visualization
- Tree Charts
- Timeline
- World Map
- Cycle Flow
## Usage Examples

```jsx
import { 
  Sorting, 
  Graph, 
  Tree, 
  LinkedList 
} from '@patternize/components';

// Merge Sort Example
export const SortingExample = () => {
  return <MergeSortStory />;
};

// Graph Traversal Example
export const GraphExample = () => {
  return <GraphDFSStory />;
};
```

## Development

This project uses Node.js v16.10.0 for development.

### Available Scripts
- `yarn start` - Runs Storybook for development
- `yarn build` - Builds the package
- `yarn test` - Runs tests
- `yarn lint` - Runs linter

### Publishing
1. Bump version:
```bash
npm version patch
```

2. Push changes with tags:
```bash
git push --follow-tags
```

## License

[MIT](https://choosealicense.com/licenses/mit/)
npm package: @patternize/travel-map
Description: Maps travel history onto an interactive globe
Latest version: 0.1.4

# @patternize/travel-map

[![npm version](https://img.shields.io/npm/v/@patternize/travel-map.svg)](https://www.npmjs.com/package/@patternize/travel-map)
[![npm downloads](https://img.shields.io/npm/dm/@patternize/travel-map.svg)](https://www.npmjs.com/package/@patternize/travel-map)
[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT)

![](./demo.gif)

An interactive globe map component for React applications, featuring smooth animations, custom markers, and bounce cards.

## Installation

```bash
npm install @patternize/travel-map
# or
yarn add @patternize/travel-map
```

## Usage

```tsx
import { GlobeMap } from '@patternize/travel-map';

function App() {
  const markers = [
    {
      id: 1,
      longitude: -74.006,
      latitude: 40.7128,
      name: 'New York',
      description: 'The Big Apple',
      images: [
        'https://example.com/ny1.jpg',
        'https://example.com/ny2.jpg',
        'https://example.com/ny3.jpg'
      ]
    },
    // ... more markers
  ];

  return (
    <GlobeMap
      width="100%"
      height={500}
      mapboxToken="YOUR_MAPBOX_TOKEN"
      markers={markers}
      enableAnimation={true}
      interactiveMarkers={true}
      showBounceCards={true}
    />
  );
}
```

## Props

| Prop | Type | Default | Description |
|------|------|---------|-------------|
| width | string \| number | '100%' | Width of the map container |
| height | string \| number | 500 | Height of the map container |
| mapboxToken | string | - | Your Mapbox access token |
| initialViewState | object | { longitude: 0, latitude: 0, zoom: 1 } | Initial view state of the map |
| markers | MarkerData[] | [] | Array of markers to display |
| onMarkerClick | (marker: MarkerData) => void | - | Callback when a marker is clicked |
| enableAnimation | boolean | false | Enable auto-rotation animation |
| interactiveMarkers | boolean | true | Enable marker interaction |
| showBounceCards | boolean | true | Show bounce cards on marker click |

## MarkerData Interface

```typescript
interface MarkerData {
  id: string | number;
  longitude: number;
  latitude: number;
  size?: number;
  color?: string;
  name?: string;
  description?: string;
  images?: string[];
}
```

### Publishing

This repository is set up with GitHub Actions workflows for automated publishing:

1. **Tag-based publishing**: When you push a tag with the format `v*.*.*` (e.g., `v0.1.2`), GitHub Actions will automatically build and publish the package to npm.
```bash
npm version patch
git push --follow-tags
```

2. **Manual workflow**: You can also trigger a manual publish from the GitHub Actions tab:
   - Go to the "Actions" tab in your GitHub repository
   - Select "Manual Publish to npm" workflow
   - Click "Run workflow"
   - Choose the version increment type (patch, minor, major) or enter a custom version
   - The workflow will update the version, build, and publish to npm

> Note: Both workflows require an NPM_TOKEN secret to be set in your GitHub repository settings.

## License

MIT
npm package: @patternkit/pk-assets-fonts
Description: Open source web fonts globally shared across Pega's Digital Properties. Part of the PatternKit Design System.
Author: Salem Ghoweri
Latest version: 0.1.0

@patternkit/pk-assets-icons
============

> Icon set shared across PatternKit-powered properties


## Contents

* [Install](#install)
* [Release History](#release-history)
* [License](#license)


----------------------------------------------------------------------------------------------------------------------------------------------------------------


## Install


```shell
yarn add @patternkit/pk-assets-icons
```

```shell
npm install @patternkit/pk-assets-icons --save-dev
```


**[⬆ back to top](#contents)**


----------------------------------------------------------------------------------------------------------------------------------------------------------------


## Release History

* v1.0.0 - 💥 Initial release of SVG icon set


**[⬆ back to top](#contents)**


----------------------------------------------------------------------------------------------------------------------------------------------------------------


## License

Copyright (c) Pegasystems.
Licensed under [MIT](https://raw.githubusercontent.com/pega-digital/patternkit/packages/core/master/LICENSE).


**[⬆ back to top](#contents)**
npm package: @patternkit/pk-assets-icons
Description: Icon set shared across PatternKit-powered properties
Author: Salem Ghoweri
Latest version: 0.1.1

@patternkit/pk-assets-icons
============

> Icon set shared across PatternKit-powered properties


## Contents

* [Install](#install)
* [Release History](#release-history)
* [License](#license)


----------------------------------------------------------------------------------------------------------------------------------------------------------------


## Install


```shell
yarn add @patternkit/pk-assets-icons
```

```shell
npm install @patternkit/pk-assets-icons --save-dev
```


**[⬆ back to top](#contents)**


----------------------------------------------------------------------------------------------------------------------------------------------------------------


## Release History

* v1.0.0 - 💥 Initial release of SVG icon set


**[⬆ back to top](#contents)**


----------------------------------------------------------------------------------------------------------------------------------------------------------------


## License

Copyright (c) Pegasystems.
Licensed under [MIT](https://raw.githubusercontent.com/pega-digital/patternkit/packages/core/master/LICENSE).


**[⬆ back to top](#contents)**
npm package: @patternkit/pk-build-copy-fonts
Description: Automatically copy fonts over from your source to destination.
Author: Salem Ghoweri
Latest version: 0.1.0

@patternkit/pk-build-copy-fonts
============

> Automatically copy over fonts from one place to another


## Contents

* [Install](#install)
* [Release History](#release-history)
* [License](#license)


----------------------------------------------------------------------------------------------------------------------------------------------------------------


## Install


```shell
yarn add @patternkit/pk-build-copy-fonts
```

```shell
npm install @patternkit/pk-build-copy-fonts --save-dev
```


**[⬆ back to top](#contents)**


----------------------------------------------------------------------------------------------------------------------------------------------------------------



## Release History

* v1.0.0 - 💥 Initial release!


**[⬆ back to top](#contents)**


----------------------------------------------------------------------------------------------------------------------------------------------------------------


## License

Copyright (c) Pegasystems.
Licensed under [MIT](https://raw.githubusercontent.com/pega-digital/patternkit/packages/core/master/LICENSE).


**[⬆ back to top](#contents)**
npm package: @patternkit/pk-build-svgstore
Description: Automatically generate an SVG icon sprite from a folder of SVG image assets.
Author: Salem Ghoweri
Latest version: 1.0.2

@patternkit/pk-build-svgstore
============

> Gulp build process to automatically generate SVG sprites using a folder of separate image assets.


## Contents

* [Install](#install)
* [Release History](#release-history)
* [License](#license)


----------------------------------------------------------------------------------------------------------------------------------------------------------------


## Install


```shell
yarn add @patternkit/pk-build-svgstore
```

```shell
npm install @patternkit/pk-build-svgstore --save-dev
```


**[⬆ back to top](#contents)**


----------------------------------------------------------------------------------------------------------------------------------------------------------------



## Release History

* v0.1.0 - 💥 Initial version


**[⬆ back to top](#contents)**


----------------------------------------------------------------------------------------------------------------------------------------------------------------


## License

Copyright (c) PegaSystems.
Licensed under [MIT](https://raw.githubusercontent.com/pega-digital/patternkit/packages/core/master/LICENSE).


**[⬆ back to top](#contents)**

# };
npm package: @patternslib/pat-ckeditor
Description: A Patternslib pattern for CKEditor.
Author: Syslab GesmbH
Latest version: 3.2.0

pat-ckeditor
============

## Documentation

Integrates the CKEditor 5 into patternslib.

CKEditor web: https://ckeditor.com/
CKEditor documentation: https://ckeditor.com/docs/ckeditor5/latest
CKEditor Github: https://github.com/ckeditor/ckeditor5


## Example

    <form>
        <textarea name="text" class="pat-ckeditor"></textarea>
    </form>
npm package: @patternslib/pat-code-editor
Description: A pattern for a code-editor
Author: Syslab GesmbH
Latest version: 4.0.1

# pat-code-editor

## Documentation

This is code editor pattern based on CodeJar and PrismJS.


---

**Note:**

When prefilling the textarea, please add HTML escaped content to the template to avoid any XSS security issues or nesting errors with existing HTML.

Example to escape content in Python:

    import html
    escaped_html = html.escape(unescaped_html)


Example to escape content in JavaScript:

    const escaped_html = unescaped_html
        .replaceAll("&amp;", "&")
        .replaceAll("&lt;", "<")
        .replaceAll("&gt;", ">")
        .replaceAll("&quot;", '"');

---

### Options reference

| Property       | Default Value | Type              | Description                   |
| -------------- | ------------- | ----------------- | ----------------------------- |
| language       | null          | String, null      | Programming language to use.  |
| linenumbers    | false         | Boolean           | Show line numbers.            |
| theme          | null          | String            | Name of PrismJS theme.        |
| tab            | "'    '"      | String            | Characters to use as tab. Use "\t" for a tab character, spaces in quotes (e.g. "'  '") for spaces |
| indent-on      | {$            | String            | Regex pattern where the next line is indented. |
| spellcheck     | false         | Boolean           | Activate spellchecking.       |
| catch-tab      | true          | Boolean           | Catch a tab keystroke and indent. |
| preserve-indent | true         | Boolean           | Preserve indentation of original source. |
| add-closing    | true          | Boolean           | Automatically add closing brackets. |
| history        | true          | Boolean           | Activate undo history.        |


## Examples

### Invocation on a contenteditable div

<div class="pat-code-editor" data-pat-code-editor="language: javascript" contenteditable>
import Pattern from "./code-editor";
Pattern.init(document.querySelector(".pat-code-editor"));
</div>

```html
<div class="pat-code-editor" data-pat-code-editor="language: javascript" contenteditable>
import Pattern from "./code-editor";
Pattern.init(document.querySelector(".pat-code-editor"));
</div>
```

### Invocation on a textarea

This will create a div where the code editor is finally initialized and changes are synchronized back to the text editor.

<textarea class="pat-code-editor" data-pat-code-editor="language: css">
body {
  background-color: black;
  color: blue;
}
</textarea>

```html
<textarea class="pat-code-editor" data-pat-code-editor="language: css">
body {
  background-color: black;
  color: blue;
}
</textarea>
```
npm package: @patternslib/pat-content-mirror
Description: A pattern for content-mirror
Author: Syslab GesmbH
Latest version: 4.0.1

pat-content-mirror
==================

A pattern that provides rich dynamic functionality to a textarea. It is used
for single-line text input that should be able to wrap into the next line.
Line breaks, tabs or multiple space characters are not allowed, removed from
the text input and replaced with a single space character.

The main functionality is provided by maintaining a "mirror" element that
is updated every time the main textarea is changed.  This element, which
can be specified using a CSS selector in the `target` option, sits behind the
textarea, and allows us to overcome the limitations of text-only content in
the html textarea element.  The user interacts with the textarea, mostly by
typing, and the .content-mirror reflects the textarea content, but can also
contain links to other users or tags.

The difference to a contenteditable element is, that a textarea automatically
participates as a form element in form submissions and validation.

The pattern would typically be applied to a textarea element, though it is
not required.
In addition, another element must be present to act as the content mirror.
When the designated content mirror is empty, the pattern injects a placeholder
element (`<em class="placeholder">Leave a comment</em>`).

By default, the pattern looks for the content mirror using the CSS selector
`p.content-mirror .text`, though this can be overridden by the `target`
option.

The placeholder can be overridden by the `placeholder` attribute.

The example html below shows a structure that would work with the defaults:

    <p class="content-mirror"
        ><span class="text"
        ><em class="placeholder">Leave a comment</em></span
        ></p>
    <textarea placeholder="Leave a comment" class="pat-content-mirror"></textarea>


## Documentation

Property | Value | Default | Type | Description
---------|-------|---------|------|------------
target | a CSS selector | `p.content-mirror .text` | string | a CSS selector that indicates in which element(s) the content of the textarea should be mirrored
npm package: @patternslib/pat-doclock
Description: A pattern for doclock
Author: Syslab GesmbH
Latest version: 3.0.0

# pat-doclock

A [Patternslib](http://patternslib.com) pattern.


For example:
```html
<form class="pat-doclock"
      data-pat-doclock="url: mock/toggle-lock.html"
>
    ...
</form>
```

## Development

For standalone development run (installation and starting a server):
```shell
    > make all
```

To clean up local directory (after running make all) run:
```shell
    > make clean
```


## Purpose

This pattern is Quaive specific and is meant to lock
a document in order to prevent concurrent edits.

Every time a user starts typing or pastes content in a form that
has the class `pat-doclock`, an ajax call to the `url` specified
using the `data-pat-doclock` option is performed.
When the form is replaced or the user leaves the page, the same `url`
is called to unlock the document.
npm package: @patternslib/pat-redactor
Description: A pattern for redactor
Author: Syslab GesmbH
Latest version: 7.0.0

pat-redactor
============

A Patternslib plugin for redactor.

:warning: If you want to build and use this Pattern you need a [Redactor 3](https://imperavi.com/redactor/log/) release a folder above the checkout of this repository.
Redactor is a properitary WYSIWYG editor for the web with a commercial license which cannot be included here.


Usage
-----

To convert any textarea to a redactor-enabled editor just give it the class `pat-redactor`.

The following key/values are supported in the `data-pat-redactor` data attribute:

* `toolbar-type` with values being `standard`, `fixed` or `air`
* `toolbar-external` with a css-selector value pointing to the external toolbar element.
* `toolbar-fixed-target` with a css-selector pointing to the layer of the toolbar.
* `buttons` as a comma/space separated list of buttons you wish to have available on the editor.
* `air-buttons` the buttons in the *air* menu by use of if you have specified `air` as the toolbar type.
* `allowed-tags` or `denied-tags` as a comma/space separated list of allowed/not-allowed html tags.
* `file-upload` as a url where file uploads are going to be posted to.
* `image-upload` as a url where image uploads are going to be posted to.


Installation
------------

Download redactor.js and unzip the the file in a directory named `redactor` one level above this directory.

In your console,

	npm install
	gulp bower
	gulp
npm package: @patternslib/pat-resourcepolling
Description: A pattern for periodically checking resource availability
Author: Syslab GesmbH
Latest version: 3.0.0

# pat-resourcepolling

This is a [Patternslib](patternslib.com) pattern that periodically checks
whether certain resources (such as images) are available.

Suppose you have documents in your website for which you generate image
previews.

When the page loads, these previews might not yet be available. This pattern
will periodically poll (with exponential drop-off in polling period) the server
to inquire whether (and which) resources are available.
npm package: @patternslib/pat-shopping-cart
Description: A pattern for adding items to a cart, and performing an action on them
Author: Syslab GesmbH
Latest version: 3.0.0

# pat-shopping-cart

Add a value to a "shopping cart" and process this "shopping cart".

This can be used to implement a bulk download feature e.g.

    <a class="pat-shopping-cart" data-pat-shopping-cart="id: 0d599f0ec05c3bda8c3b8a68c32a1b47">
      Add this item for download
    </a>

When an item is added to the cart, the element is given the .in-cart css class.

A .pat-shopping-cart element is also used for processing the cart.
A list of the id values is submitted to the action URL using the POST method as a comma separated string.

    <a class="pat-shopping-cart" data-pat-shopping-cart="action: /download-as-zip">
      Download the items
    </a>

The shopping cart action element gets the .has-items css class when there are items in the cart, and .is-empty otherwise.

To add a button to empty the cart use "action: empty":

    <a class="pat-shopping-cart" data-pat-shopping-cart="action: empty">
      Empty your shopping cart
    </a>

To use an action without clearing the cart use "contents: keep":

    <a class="pat-shopping-cart" data-pat-shopping-cart="action: delete-confirmation; contents: keep">
      Delete the selected items
    </a>

You can pass on other patterns to the action "patterns: pat-modal":

    <a class="pat-shopping-cart" data-pat-shopping-cart="action: delete-confirmation; patterns: pat-modal">
      Delete the selected items
    </a>


You can configure patterns passed on to the action by prepending data-pat-shopping-cart to the pattern:

    <a class="pat-shopping-cart" data-pat-shopping-cart="action: delete-confirmation; patterns: pat-inject" data-pat-shopping-cart-inject="source: #main-content; target: #footer">
      Delete the selected items
    </a>
npm package: @patternslib/pat-sortable-table
Description: A pattern for interactive tables.
Author: Syslab GesmbH
Latest version: 3.1.0

pat-sortable-table
==================

## Documentation

Pattern to create sort- and filterable tables.


### Options reference

Property | Default Value | Values | Type | Description
---------|---------------|--------|------|------------
paging-type | numbers | numbers simple simple_numbers full full_numbers first_last_numbers | String | Type of batch/paging navigation menu.
page-length | 20 | Any number | Integer | Number of items per page.
page-length-menu | [10, 20, 50, 100] | | Array of integers | Entries for the pagingation length menu.
server-side | false | | boolean | Use server side processing in the table. See also `ajax`
ajax | "" | | string, object or function | Configuration for ajax calls. Can be a URL (string), properties for jQuery.ajax (object) or custom code to get data (function).
language-info | "Page _PAGE_ of _PAGES_" | | String | Text for pagination.
language-info-empty | "Showing 0 to 0 of 0 entries" | | String | Info text when filtering leads to no results.
language-info-filtered | "(filtered from _MAX_ total entries)" | | String | Info text when filtering.
language-length-menu | "Show _MENU_ entries per page." | | String | Text for pagination.
language-zero-records | "No results found." | | String | Text shown when filtering leads to no results.
language-search | "Search" | | String | Label for the search field.
language-search-placeholder | "Search term" | | String | Placeholder for the search field.
npm package: @patternslib/pat-tinymce
Description: A pattern for tinymce
Author: Syslab GesmbH
Latest version: 3.0.0

# pat-tinymce

## Documentation

TinyMCE text editor pattern.


### Options reference

| Property       | Default Value | Values      | Type    | Description                                                         |
| -------------- | ------------- | ----------- | ------- | ------------------------------------------------------------------- |
| inline         | false         | true, false | Boolean | Initializes TinyMCE in iframe mode (default) or inline mode (true). |
| content-css    | false         | URL         | String  | URL to the css used for the content in TinyMCE. Ignored in inline mode. If not given, uses a default from a cloudflare CDN. |
| plugins        | []            |             | Array   | List of plugins to load.                                            |


## Examples

### TinyMCE in iframe mode

<textarea class="pat-tinymce" data-pat-tinymce="inline: false">
this is a non-inline / iframe instance of tinymce.
</textarea>

```html
<textarea class="pat-tinymce" data-pat-tinymce="inline: false">
this is a non-inline / iframe instance of tinymce.
</textarea>
```

### TinyMCE in inline mode

<textarea class="pat-tinymce" data-pat-tinymce="inline: true">
this is a non-inline / iframe instance of tinymce.
</textarea>

```html
<textarea class="pat-tinymce" data-pat-tinymce="inline: true">
this is a non-inline / iframe instance of tinymce.
</textarea>
```
npm package: @patternslib/pat-upload
Description: A pattern for drag & drop file upload
Author: Syslab GesmbH
Latest version: 3.1.1

#pat-upload

A pattern that creates a drop area for uploading multiple files.

Based on [DropzoneJS](https://www.dropzonejs.com/).

##demo

To view a demo of how this pattern works, clone the repository:

    git clone https://github.com/Patternslib/pat-upload.git

The run the Makefile:

    make

And then in your browser open: http://localhost:4001


## Form protection

Some systems allow to pass a authentication token to protect against CSRF attacks.
You can do this with pat-upload by adding a URL parameter, even if the upload happens in a POST request.
This is a valid practice, see: https://stackoverflow.com/a/1592446/1337474

For example, for a plone.protect style token, do:

      <fieldset class="pat-upload"
                data-pat-upload="url: https://example.com/upload?_authenticator=TOKEN"
      >
      </fieldset>


## Documentation

Property | Value | Default | Type | Description
---------|-------|---------|------|------------
ajax-upload | `true`, `false` | `true` | boolean | For letting the widget upload the files via ajax. If false the form will act like a normal form.
post-upload | `true`, `false` | `true` | boolean | Condition value for the file preview in div element to fadeout after file upload is completed.
base-url | _url string_ | _null_ | string | To be used in conjunction with relative-path to.
class-name | _class name_ | `upload` | string | Value for class attribute in the form element.
clickable | `true`, `false` | `false` | boolean | If you can click on container to also upload.
current-path | _path string_ | _null_ | string | Current path related items is starting with.
label | *string* | `Drop files here…` | string | Label text to show on the upload zone.
name | _name attr_ | `file` | string | Value for name attribute in the file input element.
previews-container | | `.previews` | selector | JavaScript selector for file preview in div element.
trigger | _trigger name_ | `button` | string | What triggers the upload.  'button' expects user to click upload button, 'auto' starts uploading automatically after the user drags something, and always hides the upload button.
url | _url string_ | _null_ | string | If not used with a form, this option must provide the URL to submit to.
npm package: @patternslib/pat-wavesurfer
Description: A pattern for wavesurfer
Author: Syslab GesmbH
Latest version: 1.0.0-alpha.0

# pat-wavesurfer

A pattern implementation of the wavesurfer library.

See:

https://wavesurfer.xyz/
https://wavesurfer.xyz/examples/
https://wavesurfer.xyz/docs/types/
https://github.com/katspaugh/wavesurfer.js