Gridl
2D grid utilities
Install / Use
/learn @saschaklatt/GridlREADME
gridl
<p> <img alt="" src="https://img.shields.io/npm/v/gridl"> <img alt="" src="https://img.shields.io/npm/l/gridl"> <img alt="" src="https://raw.githubusercontent.com/klattiation/gridl/master/docs/badge-coverage.svg"> </p>A functional toolbox for grid-based data.
Documentation
Installation
Using npm
npm install gridl
Using yarn
yarn add gridl
ES6 modules
import { createGrid } from "gridl/core";
Nodejs
const { createGrid } = require("gridl/_umd");
Usage
See the website for detailed information and getting started guides.
import { createGrid } from "gridl/core";
const grid = createGrid({
columnCount: 4,
rowCount: 3,
createCell: (pos, idx) => (pos.y < 2 ? idx : "x"),
});
// creates the following data object
// => {
// x: 0,
// y: 0,
// cellCount: 12,
// columnCount: 4,
// rowCount: 3,
// array2D: [
// [ 0, 1, 2, 3],
// [ 4, 5, 6, 7],
// ["x", "x", "x", "x"],
// ],
// }
Selectors
Easily select cells, columns, rows, sub grids or neighbouring cells with selector functions. Read more about selectors in the getting started section or have a look at the API docs.
import { createGridFromArray2D, selectCell } from "gridl/core";
const grid = createGridFromArray2D([
[0, 1, 2, 3],
[4, 5, 6, 7],
[8, 9, 10, 11],
]);
// get the cell value at position = {x: 1, y: 2}
selectCell({ grid, x: 2, y: 1 }); // => 6
// get the column at x = 2
selectColumn({ grid, x: 2 }); // => [2, 6, 10]
// get the row at y = 1
selectRow({ grid, y: 1 }); // => [4, 5, 6, 7];
Transformers
Perform all kinds of data transformations on your grid, such as add, remove, rotate, swap, mirror and more. Read more about transformers in the getting started section or have a look at the API docs.
import { createGridFromArray2D } from "gridl/core";
import { addRowTop } from "gridl/transformers";
const grid = createGridFromArray2D([
[0, 1, 2, 3],
[4, 5, 6, 7],
[8, 9, 10, 11],
]);
const newGrid = addRowTop(["x", "x", "x", "x"])(grid);
// resulting grid:
// {
// x: 0,
// y: 0,
// cellCount: 12,
// columnCount: 4,
// rowCount: 4,
// array2D: [
// ["x", "x", "x", "x"],
// [ 0, 1, 2, 3],
// [ 4, 5, 6, 7],
// [ 8, 9, 10, 11],
// ],
// }
Walkers
Traverse over your grid in variety of ways. Choose from a predefined set of iterators or just come up with your own one. Read more about walkers in the getting started section or have a look at the API docs.
import { createWalker } from "gridl/core";
const grid = createGridFromArray2D([
[1, 1, 1],
[1, 1, 1],
]);
const walker = createWalker(grid);
walker.next(); // => {value: {index: 0, position: {x: 0, y: 0}}, done: false}
walker.next(); // => {value: {index: 1, position: {x: 1, y: 0}}, done: false}
walker.next(); // => {value: {index: 2, position: {x: 2, y: 0}}, done: false}
walker.next(); // => {value: {index: 3, position: {x: 0, y: 1}}, done: false}
walker.next(); // => {value: {index: 4, position: {x: 1, y: 1}}, done: false}
walker.next(); // => {value: {index: 5, position: {x: 2, y: 1}}, done: false}
walker.next(); // => {value: undefined, done: true}
Issues
Report issues, bugs and feature request on the github issues page.
License
MIT © Sascha Klatt
Related Skills
node-connect
354.3kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
112.3kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
354.3kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
qqbot-media
354.3kQQBot 富媒体收发能力。使用 <qqmedia> 标签,系统根据文件扩展名自动识别类型(图片/语音/视频/文件)。
