
Research
/Security News
Weaponizing Discord for Command and Control Across npm, PyPI, and RubyGems.org
Socket researchers uncover how threat actors weaponize Discord across the npm, PyPI, and RubyGems ecosystems to exfiltrate sensitive data.
@fforres/ink-quicksearch-input
Advanced tools
QuickSearch Component for Ink 2, demo on repl.it
Forked from @Eximchain with some upgrades to make it Ink v3.x compatible.
This re-write uses modern React, some perf optimizations, typescript, exports type definitions and adds linting/prettier.
$ npm install @fforres/ink-quicksearch-input
If you'd like to get a feel for how the component works, you can see the examples in action by running:
yarn
yarn dev
import React, { useState } from "react";
import { render, Text, Newline } from "ink";
import { QuickSearchInput } from "ink-quicksearch-input";
const Demo = (props) => {
const [result, setResult] = useState("");
return (
<>
<Text>The user selected {result}.</Text>
<Newline />
<QuickSearchInput
items={[
{ value: 1, label: "Animal" },
{ value: 3, label: "Antilope" },
{ value: 2, label: "Animation" },
{ value: 0, label: "Animate" },
{ value: 4, label: "Arizona" },
{ value: 5, label: "Aria" },
{ value: 6, label: "Arid" },
// ...
]}
onSelect={(item) => setResult(item.label)}
/>
</>
);
};
render(<Demo />);
Parameter | Type | Default | Description |
---|---|---|---|
items | Array(object) | [] | Items to display in a list. Each item must be an object and have at least a label prop. |
onSelect | function | Function to call when user selects an item. Item object is passed to that function as an argument. | |
focus | boolean | true | Listen to user's input. Useful in case there are multiple input components at the same time and input must be "routed" to a specific component. |
caseSensitive | boolean | false | Whether or not quicksearch matching will be case sensitive. |
limit | int | 0 | Limit the number of rows to display. 0 is unlimited Use in conjunction with https://www.npmjs.com/package/term-size. |
forceMatchingQuery | bool | false | If set to true, queries that return no results are not allowed. In particular, if previous query X returns at least one result and X + new_character would not, query will not update to X + new_character . |
clearQueryChars | Array(char) | ['\u0015', '\u0017'] (Ctrl + u, Ctrl + w) | Key Combinations that will clear the query. ch follows the keypress API process.stdin.on('keypress', (ch, key) => {}) . |
initialSelectionIndex | int | 0 | Selection index when the component is initially rendered or when props.items changes. Can be set together with new props.items to automatically select an option. |
label | string | Optionally provide a label which will appear before the current query. | |
indicatorComponent | Component | Custom component to override the default indicator component (default - arrow). | |
itemComponent | Component | Custom component to override the default item style (default - selection coloring). | |
highlightComponent | Component | Custom component to override the default highlight style (default - background highlight). | |
statusComponent | Component | Custom component to override the status component (default - current query, optional value label). |
Type: Component
Props:
isSelected
: boolean
isHighlighted
: boolean
item
: Object
- The corresponding object inside props.items
Type: Component
Props:
isSelected
: boolean
isHighlighted
: boolean
item
: Object
- The corresponding object inside props.items
children
: any
Type: Component
Props:
isSelected
: boolean
isHighlighted
: boolean
item
: Object
- The corresponding object inside props.items
children
: any
Type: Component
Props:
hasMatch
: boolean
children
: any
label
: Optional string
// For the following four, whitespace is important
const IndicatorComponent = ({ isSelected }) => {
return <Text color="#00FF00">{isSelected ? ">" : " "} </Text>;
};
const ItemComponent = ({ isSelected, children }) => (
<Text color={isSelected ? "#00FF00" : ""}>{children}</Text>
);
const HighlightComponent = ({ children }) => (
<Text color="#6C71C4">{children}</Text>
);
const StatusComponent = ({ hasMatch, children }) => (
<Text color={hasMatch ? "#00FF00" : "#FF0000"}>{children}</Text>
);
FAQs
Quicksearch Input Component for Ink 3
We found that @fforres/ink-quicksearch-input demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
/Security News
Socket researchers uncover how threat actors weaponize Discord across the npm, PyPI, and RubyGems ecosystems to exfiltrate sensitive data.
Security News
Socket now integrates with Bun 1.3’s Security Scanner API to block risky packages at install time and enforce your organization’s policies in local dev and CI.
Research
The Socket Threat Research Team is tracking weekly intrusions into the npm registry that follow a repeatable adversarial playbook used by North Korean state-sponsored actors.