open-index/open-npm huggingface dataset:
npm package: @shalvah/vexor
Description: Graph resizable 2D vectors and basic operations
Author: Shalvah
Latest version: 0.3.0

Rough library for visualizing 2D vectors (linear algebra), inspired by [Vector.js](https://vectorjs.org).

Goal: simple diagrams of interactive 2D vectors on a Cartesian grid

Current abilities:
- Graph and style 2D vectors
- Resize vectors via mouse or touch
- Vector labels auto-update
- Easily add sum and difference vectors (which also auto-update)
- "Mirror" vectors across grids

See [demo](http://shalvah.me/vex). Example usage:

```js
let grid = new Grid(`container`, {
  maxX: 200, maxY: 200,
  minX: -200, minY: -200,
  defaultStyles: {
    line: {
      strokeWidth: `2px`,
      stroke: `red`,
    }
  }
});

let vecA = grid.vector('a', { to: {x: 20, y: 100} });

let vecB = grid.vector('b', { to: {x: 150, y: 150} });

let vecAMinusB = grid.vectorDifference(vecA, vecB,
  {
    styles: {stroke: `blue`},
    labelPosition: Vector.LABEL_POSITIONS.midPoint,
    labelContent: vector => `|${vector.name}| ≈ ${Math.round(vector.length)}`
  }
);
let vecAPlusB = grid.vectorSum(vecA, vecB,
  {
    styles: {stroke: `green`},
    labelPosition: Vector.LABEL_POSITIONS.midPoint,
    labelContent: vector => `|${vector.name}| ≈ ${Math.round(vector.length)}`
  }
);
```

Motivation: 
- Demonstrating vectors for articles (eg https://blog.shalvah.me/posts/learn-svg-by-drawing-an-arrow)
- Schoolwork

Inspirations:
- https://vectorjs.org/
- https://www.petercollingridge.co.uk/tools/interactivesvgjs/
- https://github.com/ksassnowski/vueclid (to which I'll probably switch)
npm package: @sham/my-scripts
Description: Configuration and scripts for Create React App.
Latest version: 3.0.6

# react-scripts

This package includes scripts and configuration used by [Create React App](https://github.com/facebook/create-react-app).<br>
Please refer to its documentation:

- [Getting Started](https://facebook.github.io/create-react-app/docs/getting-started) – How to create a new app.
- [User Guide](https://facebook.github.io/create-react-app/) – How to develop apps bootstrapped with Create React App.
npm package: @sham/react-scripts
Description: Configuration and scripts for Create React App.
Latest version: 3.0.3

# react-scripts

This package includes scripts and configuration used by [Create React App](https://github.com/facebook/create-react-app).<br>
Please refer to its documentation:

- [Getting Started](https://facebook.github.io/create-react-app/docs/getting-started) – How to create a new app.
- [User Guide](https://facebook.github.io/create-react-app/) – How to develop apps bootstrapped with Create React App.
npm package: @sham/ui-scripts
Description: Configuration and scripts for Create React App.
Latest version: 3.0.2

# react-scripts

This package includes scripts and configuration used by [Create React App](https://github.com/facebook/create-react-app).<br>
Please refer to its documentation:

- [Getting Started](https://facebook.github.io/create-react-app/docs/getting-started) – How to create a new app.
- [User Guide](https://facebook.github.io/create-react-app/) – How to develop apps bootstrapped with Create React App.
npm package: @shaman-apprentice/blob-saver
Description: Lets you download a blob within a browser
Author: shaman-apprentice
Latest version: 1.1.2

# blob-saver

Lets you download a blob within a browser.

Before you install this library, please think about whether you really need this extra dependency. Maybe one of the following native solutions will work for you:

- [download](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/a#download) attribute of anchor element
- [Content-Disposition: attachment](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/a#download) HTTP response header
- [File System API](https://developer.mozilla.org/en-US/docs/Web/API/File_System_API) of browser - be careful with browser support for the time being

## Example usage

```mjs
import { saveBlob } from "@shaman-apprentice/blob-saver";

const blob = new Blob(["Hello world"], { type: "text/plain" });
saveBlob("greeting.txt", blob);
```
npm package: @shaman-apprentice/bootstrap-v5.3-utility-classes-plus
Description: utility classes of bootstrap
Author: shaman-apprentice
Latest version: 0.1.0

# bootstrap-v5.3-utility-classes-plus

[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](./LICENSE)

This project provides utility classes based on [Bootstrap v5.3.3](https://getbootstrap.com/docs/5.3/getting-started/introduction/). It can be used with or without Bootstrap.

## Usage

After `npm i @shaman-apprentice/bootstrap-v5.3-utility-classes-plus` you can import styles from *node_modules/@shaman-apprentice/bootstrap-v5.3-utility-classes-plus/dist/index.css* into your app.

[bootstrap-v5-3-utility-classes-plus-intellisense](https://marketplace.visualstudio.com/items?itemName=shaman-apprentice.bootstrap-v5-3-utility-classes-plus-intellisense) provides intellisense for vscode.

For documentation refer to the Layout section of official [Bootstrap documentation](https://getbootstrap.com/docs/5.3/layout/utilities/). Be aware that not all css rules are integrated in this library. **In addition to Bootstrap's utility classes, you can use the custom utility classes defined in [custom.css](https://github.com/shaman-apprentice/bootstrap-v5.3-utility-classes-plus/blob/main/npm-package/css/custom.css).**

## Motivation

Imagine a software landscape with many different frontend frameworks like Bootstrap, Material, PrimeNg, ... with Bootstrap having the biggest parts.

Switching to one framework pays off in the long term. Having one set of utility classes is also beneficial.

Therefore, this project extracts the utility classes from Bootstrap and removes all style related rules from them. Its goal is to be usable with all frameworks. It should help with the migration to one framework and keep being useful afterwards.

## Contribution

This project is build with Angular in mind. If it doesn't fit your needs, feel free to open an issue. I am open for enhancements.

## Acknowledgements

As the utility classes are based on Bootstrap v5.3.3, this project wants to give a huge thank you to the Bootstrap team for their hard work and contributions to the open-source community ♥
npm package: @shaman-apprentice/i18n-parrot
Description: Sync i18n files from one source language to all existing languages
Latest version: 1.0.1

# i18n-parrot 🦜

Sync and sort i18n JSON translation files from a source language.

## Usage

```bash
npx i18n-parrot --folder ./i18n --source en.json
```

**Options:**
- `-h, --help` — Show help
- `-f, --folder` — Folder containing i18n files (required)
- `-s, --source` — Source language file name (required)

## How It Works

1. Reads source file as template structure
2. Syncs all other `.json` files to match source keys
3. Sorts all object keys recursively
4. Preserves order of arrays
5. Missing keys from source are added with source values. Keys in targets but not in source are removed.
npm package: @shaman-apprentice/json-type
Description: TypeScript type for valid JSON values as well as stringify and parse methods
Author: shaman-apprentice
Latest version: 1.1.1

# json-type

TypeScript type for valid JSON values as well as stringify and parse methods

## Example Usage

### Simple values

```ts
import type { JSONValue } from "@shaman-apprentice/json-type";

const valid: JSONValue = {
  a: "a",
  b: null,
};

// @ts-expect-error
const invalid: JSONValue = {
  a: undefined,
  b: new SomeClass(),
};
```

### Serialization with JSON

```ts
import { JSONValue, parse, stringify } from "@shaman-apprentice/json-type";

type User = JSONSerializable<{ 
  name: string;
}> // same as `type User = { name: string }`
const user: User = { name: "shaman-apprentice" };
const serializedUser: string = stringify(user);
const deserializedUser = parse<User>(serializedUser);
console.log(deserializedUser.name); // "shaman-apprentice"

type InvalidUser = JSONSerializable<User & { 
  work: () => number;
}> // same as `type InvalidUser = never`, because property `work` is not restored by JSON.parse(Json.stringify(user));
// @ts-expect-error
const invalidUser: InvalidUser = { name: "shaman-apprentice", work: () => -1 };
const serializedInValidUser: string = stringify(invalidUser);
const deserializedInValidUser = parse<InvalidUser>(serializedInValidUser);
// @ts-expect-error
console.log(deserializedInValidUser.name); // "shaman-apprentice"
// @ts-expect-error
deserializedInValidUser.work(); // would result in a runtime error
```
npm package: @shaman-apprentice/ngx-page-skeleton
Description: [DEPRECATED] An Angular page container providing slots for header, sidebar and content.
Author: shaman-apprentice
Latest version: 1.1.0
Deprecated: This package is deprecated. Use @shaman-apprentice/page-skeleton instead which is a framework-agnostic custom element

# ngx-page-skeleton

> **⚠️ DEPRECATED**: This package is deprecated and will no longer receive updates. Please migrate to [@shaman-apprentice/page-skeleton](https://github.com/shaman-apprentice/page-skeleton) instead. The new package is a framework-agnostic custom element.

An Angular page container providing slots for header, sidebar and content.

![example image](https://raw.githubusercontent.com/shaman-apprentice/ngx-page-skeleton/refs/tags/v0.1.0/docs/demo.excalidraw.png)

## How to use

```bash
npm install @shaman-apprentice/ngx-page-skeleton
```

See [demo app](https://github.com/shaman-apprentice/ngx-page-skeleton/tree/main/projects/demo/src/app) for example usage.

### Slots of `ngx-page-skeleton`

| select |
| --- |
| `[ngxpageskeleton_header]` |
| `[ngxpageskeleton_sidebar]` |
| `[ngxpageskeleton_sidebar_border]` |
| `[ngxpageskeleton_sidebar_content]` |

### Inputs of `ngx-page-skeleton`

| name | type | default |
| --- | --- | --- |
| `disableDragging` | `input<boolean>` | `false` |
| `isSidebarOpen` | `input<boolean>` | `false` |
| `sidebarMinWidthInPx` | `input<number>` | `240` |
| `sidebarWidthInPx` | `model<number>` | `320` |

### CSS variables

| name | default |
| --- | --- |
| `--ngx-page-skeleton_header-height` | `48px` |
| `--ngx-page-skeleton_sidebar_border-width` | `1px` |
| `--ngx-page-skeleton_transition-duration` | `0.3s` |
| `--ngx-page-skeleton_transition-timing-function` | `ease-in-out` |

### HTML attributes of `ngx-page-skeleton`

| name | description |
| --- | --- |
| `animated` | Opening / closing of sidebar will have a slide animation. Can be customized with css variables.
npm package: @shaman-apprentice/ngx-track-by-prop
Description: When using Angular's `*ngFor` it is annoying to write a custom `trackBy` function as member of your component class:
Latest version: 1.0.0

# trackByProp

When using Angular's `*ngFor` it is annoying to write a custom `trackBy` function as member of your component class:

- When you write the stupid boiler code it pulls you out of your meaningful thoughts about what elements you were about to write.
- Every time you touch the class, your mind gets distracted by a view stupid lines.

This library lets you declare a `trackBy` function as `trackByProp` directive, which will use given property name. It is type-safe, meaning you can only provide an existing property of given iterable.

## Usage

```ts
import { Component } from '@angular/core';
import { NgForTrackByPropDirective } from "@shaman-apprentice/ngx-track-by-prop"

@Component({
  selector: 'demo-app',
  template: `
    <ul>
      <li *ngFor="let item of list; trackByProp: 'id'">
        Item's id: {{ item.id }}
      </li>
    </ul>
  `,
  standalone: true,
  imports: [CommonModule, NgForTrackByPropDirective],
})
export class AppListComponent {
  public list: { id: string }[] = [
    { id: '1' },
    { id: '2' },
    { id: '3' },
  ];
}
```
npm package: @shambadynamic/contracts
Description: Shamba Smart Contracts
Author: Shamba Network
Latest version: 6.1.0

# Shamba Smart Contracts

## Prerequisites

Install [@chainlink/contracts](https://www.npmjs.com/package/@chainlink/contracts) package:

```
# via npm
$ npm install @chainlink/contracts --save
# via pnpm
$ pnpm add @chainlink/contracts
```

## Installation

```
# via npm
$ npm install @shambadynamic/contracts --save
# via pnpm
$ pnpm add @shambadynamic/contracts
```

##### Directory Structure

```
@shambadynamic/contracts
└── contracts  # Shamba Ecological Oracle Solidity Contracts
	├── ShambaFireConsumer.sol 
        ├── ShambaGeoConsumer.sol
        └── utils  # Utility Contracts/Libraries
              ├─ libraries 
              |        └─ NetworkConfig.sol           # Network Config Utility Library
	      └─ ShambaWhitelistAccounting.sol        # Shamba Whitelist Accounting Utility Contract
```

##### Usage

The solidity smart contracts themselves can be imported via the `contracts` directory of `@shambadynamic/contracts`:

###### To import `ShambaGeoConsumer` contract:

```solidity
import {ShambaGeoConsumer} from "@shambadynamic/contracts/contracts/ShambaGeoConsumer.sol";
```

###### To import `ShambaFireConsumer` contract:

```solidity
import {ShambaFireConsume} from "@shambadynamic/contracts/contracts/ShambaFireConsumer.sol";
```

## Local Development

```
# Clone Shamba Smart-Contract-Kit repository
$ git clone https://github.com/shambadynamic/shamba-smartcontractkit
$ cd contracts/
```