An open API service indexing awesome lists of open source software.

https://github.com/sina-byn/ink-tree-select

Directory tree select component for ink
https://github.com/sina-byn/ink-tree-select

cli directory-traversal directory-tree directory-tree-generator ink javascript nodejs react terminal typescript

Last synced: 6 months ago
JSON representation

Directory tree select component for ink

Awesome Lists containing this project

README

          

# ink-tree-select [![NPM version](https://img.shields.io/npm/v/ink-tree-select.svg?style=flat)](https://www.npmjs.com/package/ink-tree-select) [![NPM monthly downloads](https://img.shields.io/npm/dm/ink-tree-select.svg?style=flat)](https://npmjs.org/package/ink-tree-select) [![NPM total downloads](https://img.shields.io/npm/dt/ink-tree-select.svg?style=flat)](https://npmjs.org/package/ink-tree-select)

Tree select component built for [ink](https://www.npmjs.com/package/ink)

Please consider following this project's author, [Sina Bayandorian](https://github.com/sina-byn), and consider starring the project to show your :heart: and support.

## Table of Contents

- [Installation](#installation)
- [Usage](#usage)
- [Components](#components)
- [TreeSelect](#treeselect-)
- [VirtualTreeSelect](#virtualtreeselect-)

![Demo GIF](assets/demo.gif)

## Installation

```shell
npm i ink-tree-select
```

## Usage

```js
// * index.tsx
// * visit the components section if you need further customization

import { render, Text } from 'ink';
import React, { useState } from 'react';
import { TreeSelect } from 'ink-tree-select';

const App = () => {
const [selectedPath, setSelectedPath] = useState('');
const selectHandler = (path: string) => setSelectedPath(path);

return (
<>

{selectedPath.length > 0 && {selectedPath}}
>
);
};

render();
```

## Components

### ``

| | Type | Default | Description |
|----------|---------------------------------------------|---------|----------------------------------------|
| root | string | | Root directory to scan |
| onChange | `(activePath: string) => void;` | | Triggers on every selected path change |
| onSelect | `(selectedPath: string) => void;` | | Triggers once user hits `Enter` |
| options | `TreeSelectOptions` | `{ }` | |

#### TreeSelectOptions

```ts
type TreeSelectOptions = Partial<{
// * directories to ignore - read https://www.npmjs.com/package/fast-glob#ignore
ignore: string[];
rootAlias: string; // default to '.' - tree's root
previewColor: Color; // path preview text color
indicatorColor: Color; // ● color
}>;
```

### ``

Accepts a custom tree instead of a directory to scan

| | Type | Default | Description |
|----------|---------------------------------------------|---------|----------------------------------------|
| tree | `Tree` | | Custom directory tree |
| onChange | `(activePath: string) => void;` | | Triggers on every selected path change |
| onSelect | `(selectedPath: string) => void;` | | Triggers once user hits `Enter` |
| options | `VirtualTreeSelectOptions` | `{ }` | |

#### Tree

```ts
type Tree = { name: string; fullPath: string; branches: Tree[]; dir?: boolean };
```

#### VirtualTreeSelectOptions

```ts
type VirtualTreeSelectOptions = Partial<{
previewColor: Color; // path preview text color
indicatorColor: Color; // ● color
}>;
```