@tooee/choose 0.6.1 → 0.6.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"choose-list.d.ts","sourceRoot":"","sources":["../src/choose-list.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIvC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAEvD,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,UAAU,CAAC;IACjB,KAAK,EAAE,UAAU,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,OAAO,CAAC;IACpB,cAAc,EAAE,SAAS,CAAC;CAC3B;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,eAAe,CAAC;IACxB,0EAA0E;IAC1E,QAAQ,CAAC,EAAE,UAAU,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC1C,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,uBAAuB,KAAK,SAAS,CAAC;IAC7D,cAAc,CAAC,EAAE,SAAS,CAAC;IAC3B,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,SAAS,CAAC;IAC5C,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,+DAA+D;IAC/D,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAoBD,qEAAqE;AACrE,eAAO,MAAM,UAAU,6FAQpB,eAAe,KAAG,SA0FpB,CAAC"}
1
+ {"version":3,"file":"choose-list.d.ts","sourceRoot":"","sources":["../src/choose-list.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIvC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAEvD,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,UAAU,CAAC;IACjB,KAAK,EAAE,UAAU,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,OAAO,CAAC;IACpB,cAAc,EAAE,SAAS,CAAC;CAC3B;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,eAAe,CAAC;IACxB,0EAA0E;IAC1E,QAAQ,CAAC,EAAE,UAAU,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC1C,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,uBAAuB,KAAK,SAAS,CAAC;IAC7D,cAAc,CAAC,EAAE,SAAS,CAAC;IAC3B,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,SAAS,CAAC;IAC5C,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,+DAA+D;IAC/D,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAoBD,qEAAqE;AACrE,eAAO,MAAM,UAAU,6FAQpB,eAAe,KAAG,SAwFpB,CAAC"}
@@ -1,4 +1,4 @@
1
- import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "@opentui/react/jsx-runtime";
1
+ import { jsx as _jsx, jsxs as _jsxs } from "@opentui/react/jsx-runtime";
2
2
  import { useEffect, useRef } from "react";
3
3
  import { useTheme } from "@tooee/themes";
4
4
  import { ChooseHighlightedText } from "./choose-highlighted-text.js";
@@ -15,18 +15,19 @@ export const ChooseList = function ChooseList({ choose, rowClick = "activate", r
15
15
  const { state, controller } = choose;
16
16
  const interactionSuspended = choose.view.suspended || (suspended ?? false);
17
17
  useEffect(() => {
18
- if (scrollRef.current && state.matches.length > 0) {
19
- scrollRef.current.scrollTop = Math.max(0, state.activeIndex - 5);
18
+ const activeMatch = state.matches[state.activeIndex];
19
+ if (scrollRef.current && activeMatch !== undefined) {
20
+ scrollRef.current.scrollChildIntoView(`choose-item-${activeMatch.originalIndex}`);
20
21
  }
21
- }, [state.activeIndex, state.matches.length]);
22
- return (_jsxs("scrollbox", { ref: scrollRef, flexDirection: "column", style: { flexGrow: 1 }, focused: false, children: [state.loading && _jsx(ThemedLine, { content: loadingContent, color: theme.textMuted }), !state.loading && state.error !== null && state.error !== "" && (_jsx(ThemedLine, { content: errorContent(state.error), color: theme.error })), !state.loading &&
22
+ }, [state.activeIndex, state.matches]);
23
+ return (_jsxs("scrollbox", { ref: scrollRef, style: { flexGrow: 1 }, focused: false, children: [state.loading && _jsx(ThemedLine, { content: loadingContent, color: theme.textMuted }), !state.loading && state.error !== null && state.error !== "" && (_jsx(ThemedLine, { content: errorContent(state.error), color: theme.error })), !state.loading &&
23
24
  (state.error?.length ?? 0) === 0 &&
24
25
  state.matches.length === 0 &&
25
26
  emptyContent !== null &&
26
27
  emptyContent !== undefined && _jsx(ThemedLine, { content: emptyContent, color: theme.textMuted }), state.matches.map((match, index) => {
27
28
  const isActive = index === state.activeIndex;
28
29
  const isSelected = state.selectedOriginalIndices.has(match.originalIndex);
29
- const defaultContent = (_jsxs(_Fragment, { children: [state.multi && (_jsx("text", { content: isSelected ? "✓ " : " ", fg: isSelected ? theme.accent : theme.textMuted })), (match.item.icon?.length ?? 0) > 0 && (_jsx("text", { content: `${match.item.icon} `, fg: theme.textMuted })), _jsx("text", { fg: isActive ? theme.primary : theme.text, children: _jsx(ChooseHighlightedText, { text: match.item.text, positions: match.positions, highlightColor: theme.warning }) }), (match.item.description?.length ?? 0) > 0 && (_jsx("text", { content: ` ${match.item.description}`, fg: theme.textMuted }))] }));
30
+ const defaultContent = (_jsxs("text", { fg: isActive ? theme.primary : theme.text, style: { flexGrow: 1 }, children: [state.multi && (_jsx("span", { fg: isSelected ? theme.accent : theme.textMuted, children: isSelected ? "✓ " : " " })), (match.item.icon?.length ?? 0) > 0 && (_jsx("span", { fg: theme.textMuted, children: `${match.item.icon} ` })), _jsx(ChooseHighlightedText, { text: match.item.text, positions: match.positions, highlightColor: theme.warning }), (match.item.description?.length ?? 0) > 0 && (_jsx("span", { fg: theme.textMuted, children: ` ${match.item.description}` }))] }));
30
31
  const context = {
31
32
  defaultContent,
32
33
  index,
@@ -37,7 +38,7 @@ export const ChooseList = function ChooseList({ choose, rowClick = "activate", r
37
38
  originalIndex: match.originalIndex,
38
39
  positions: match.positions,
39
40
  };
40
- return (_jsx("box", { flexDirection: "row", height: 1, backgroundColor: isActive ? theme.backgroundElement : undefined, style: { paddingLeft: 1 }, onMouseDown: (event) => {
41
+ return (_jsx("box", { id: `choose-item-${match.originalIndex}`, flexDirection: "row", backgroundColor: isActive ? theme.backgroundElement : undefined, style: { paddingLeft: 1 }, onMouseDown: (event) => {
41
42
  if (interactionSuspended || event.button !== 0 || rowClick === "none") {
42
43
  return;
43
44
  }
@@ -1 +1 @@
1
- {"version":3,"file":"choose-list.js","sourceRoot":"","sources":["../src/choose-list.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"choose-list.js","sourceRoot":"","sources":["../src/choose-list.tsx"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tooee/choose",
3
- "version": "0.6.1",
3
+ "version": "0.6.2",
4
4
  "description": "Terminal selection with fuzzy filtering",
5
5
  "keywords": [
6
6
  "cli",
@@ -40,12 +40,12 @@
40
40
  "typecheck": "tsc --noEmit"
41
41
  },
42
42
  "dependencies": {
43
- "@tooee/commands": "0.6.1",
44
- "@tooee/fuzzy": "0.6.1",
45
- "@tooee/layout": "0.6.1",
46
- "@tooee/overlays": "0.6.1",
47
- "@tooee/shell": "0.6.1",
48
- "@tooee/themes": "0.6.1"
43
+ "@tooee/commands": "0.6.2",
44
+ "@tooee/fuzzy": "0.6.2",
45
+ "@tooee/layout": "0.6.2",
46
+ "@tooee/overlays": "0.6.2",
47
+ "@tooee/shell": "0.6.2",
48
+ "@tooee/themes": "0.6.2"
49
49
  },
50
50
  "devDependencies": {
51
51
  "@opentui/core": "^0.5.1",
@@ -64,13 +64,14 @@ export const ChooseList = function ChooseList({
64
64
  const interactionSuspended = choose.view.suspended || (suspended ?? false);
65
65
 
66
66
  useEffect(() => {
67
- if (scrollRef.current && state.matches.length > 0) {
68
- scrollRef.current.scrollTop = Math.max(0, state.activeIndex - 5);
67
+ const activeMatch = state.matches[state.activeIndex];
68
+ if (scrollRef.current && activeMatch !== undefined) {
69
+ scrollRef.current.scrollChildIntoView(`choose-item-${activeMatch.originalIndex}`);
69
70
  }
70
- }, [state.activeIndex, state.matches.length]);
71
+ }, [state.activeIndex, state.matches]);
71
72
 
72
73
  return (
73
- <scrollbox ref={scrollRef} flexDirection="column" style={{ flexGrow: 1 }} focused={false}>
74
+ <scrollbox ref={scrollRef} style={{ flexGrow: 1 }} focused={false}>
74
75
  {state.loading && <ThemedLine content={loadingContent} color={theme.textMuted} />}
75
76
 
76
77
  {!state.loading && state.error !== null && state.error !== "" && (
@@ -87,27 +88,24 @@ export const ChooseList = function ChooseList({
87
88
  const isActive = index === state.activeIndex;
88
89
  const isSelected = state.selectedOriginalIndices.has(match.originalIndex);
89
90
  const defaultContent = (
90
- <>
91
+ <text fg={isActive ? theme.primary : theme.text} style={{ flexGrow: 1 }}>
91
92
  {state.multi && (
92
- <text
93
- content={isSelected ? "✓ " : " "}
94
- fg={isSelected ? theme.accent : theme.textMuted}
95
- />
93
+ <span fg={isSelected ? theme.accent : theme.textMuted}>
94
+ {isSelected ? "✓ " : " "}
95
+ </span>
96
96
  )}
97
97
  {(match.item.icon?.length ?? 0) > 0 && (
98
- <text content={`${match.item.icon} `} fg={theme.textMuted} />
98
+ <span fg={theme.textMuted}>{`${match.item.icon} `}</span>
99
99
  )}
100
- <text fg={isActive ? theme.primary : theme.text}>
101
- <ChooseHighlightedText
102
- text={match.item.text}
103
- positions={match.positions}
104
- highlightColor={theme.warning}
105
- />
106
- </text>
100
+ <ChooseHighlightedText
101
+ text={match.item.text}
102
+ positions={match.positions}
103
+ highlightColor={theme.warning}
104
+ />
107
105
  {(match.item.description?.length ?? 0) > 0 && (
108
- <text content={` ${match.item.description}`} fg={theme.textMuted} />
106
+ <span fg={theme.textMuted}>{` ${match.item.description}`}</span>
109
107
  )}
110
- </>
108
+ </text>
111
109
  );
112
110
  const context: ChooseItemRenderContext = {
113
111
  defaultContent,
@@ -123,8 +121,8 @@ export const ChooseList = function ChooseList({
123
121
  return (
124
122
  <box
125
123
  key={match.originalIndex}
124
+ id={`choose-item-${match.originalIndex}`}
126
125
  flexDirection="row"
127
- height={1}
128
126
  backgroundColor={isActive ? theme.backgroundElement : undefined}
129
127
  style={{ paddingLeft: 1 }}
130
128
  onMouseDown={(event) => {