@yeshwanthyk/open-tui 0.1.4 → 0.1.6

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.
Files changed (45) hide show
  1. package/dist/app.js +17 -15
  2. package/dist/app.jsx.map +1 -0
  3. package/dist/components/badge.js +60 -24
  4. package/dist/components/{badge.js.map → badge.jsx.map} +1 -1
  5. package/dist/components/code-block.js +110 -17
  6. package/dist/components/code-block.jsx.map +1 -0
  7. package/dist/components/dialog.js +86 -10
  8. package/dist/components/dialog.jsx.map +1 -0
  9. package/dist/components/diff.js +79 -13
  10. package/dist/components/diff.jsx.map +1 -0
  11. package/dist/components/divider.js +44 -11
  12. package/dist/components/divider.jsx.map +1 -0
  13. package/dist/components/editor.js +174 -127
  14. package/dist/components/{editor.js.map → editor.jsx.map} +1 -1
  15. package/dist/components/image.js +292 -228
  16. package/dist/components/{image.js.map → image.jsx.map} +1 -1
  17. package/dist/components/loader.js +50 -6
  18. package/dist/components/loader.jsx.map +1 -0
  19. package/dist/components/markdown.js +35 -18
  20. package/dist/components/markdown.jsx.map +1 -0
  21. package/dist/components/panel.js +86 -42
  22. package/dist/components/{panel.js.map → panel.jsx.map} +1 -1
  23. package/dist/components/select-list.js +193 -103
  24. package/dist/components/select-list.jsx.map +1 -0
  25. package/dist/components/spacer.js +17 -12
  26. package/dist/components/spacer.jsx.map +1 -0
  27. package/dist/components/toast.js +115 -34
  28. package/dist/components/toast.jsx.map +1 -0
  29. package/dist/context/terminal.js +1 -2
  30. package/dist/context/terminal.jsx.map +1 -0
  31. package/dist/context/theme.js +779 -555
  32. package/dist/context/theme.jsx.map +1 -0
  33. package/package.json +4 -4
  34. package/dist/app.js.map +0 -1
  35. package/dist/components/code-block.js.map +0 -1
  36. package/dist/components/dialog.js.map +0 -1
  37. package/dist/components/diff.js.map +0 -1
  38. package/dist/components/divider.js.map +0 -1
  39. package/dist/components/loader.js.map +0 -1
  40. package/dist/components/markdown.js.map +0 -1
  41. package/dist/components/select-list.js.map +0 -1
  42. package/dist/components/spacer.js.map +0 -1
  43. package/dist/components/toast.js.map +0 -1
  44. package/dist/context/terminal.js.map +0 -1
  45. package/dist/context/theme.js.map +0 -1
@@ -1,4 +1,10 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "solid-js/h/jsx-runtime";
1
+ import { insertNode as _$insertNode } from "@opentui/solid";
2
+ import { createComponent as _$createComponent } from "@opentui/solid";
3
+ import { effect as _$effect } from "@opentui/solid";
4
+ import { insert as _$insert } from "@opentui/solid";
5
+ import { memo as _$memo } from "@opentui/solid";
6
+ import { setProp as _$setProp } from "@opentui/solid";
7
+ import { createElement as _$createElement } from "@opentui/solid";
2
8
  /**
3
9
  * Loader/spinner component using OpenTUI spinner
4
10
  */
@@ -17,8 +23,46 @@ const DEFAULT_COLOR = parseColor("#64b4ff");
17
23
  * ```
18
24
  */
19
25
  export function Loader(props) {
20
- const interval = () => props.interval ?? 120;
21
- const color = () => props.color ?? DEFAULT_COLOR;
22
- return (_jsxs("box", { flexDirection: "row", gap: 1, children: [_jsx("spinner", { frames: DEFAULT_FRAMES, interval: interval(), color: color() }), _jsx(Show, { when: props.message && props.dimColor, children: _jsx("text", { fg: props.dimColor, children: props.message }) }), _jsx(Show, { when: props.message && !props.dimColor, children: _jsx("text", { children: props.message }) })] }));
23
- }
24
- //# sourceMappingURL=loader.js.map
26
+ const interval = () => props.interval ?? 120;
27
+ const color = () => props.color ?? DEFAULT_COLOR;
28
+ return (() => {
29
+ var _el$ = _$createElement("box"),
30
+ _el$2 = _$createElement("spinner");
31
+ _$insertNode(_el$, _el$2);
32
+ _$setProp(_el$, "flexDirection", "row");
33
+ _$setProp(_el$, "gap", 1);
34
+ _$setProp(_el$2, "frames", DEFAULT_FRAMES);
35
+ _$insert(_el$, _$createComponent(Show, {
36
+ get when() {
37
+ return _$memo(() => !!props.message)() && props.dimColor;
38
+ },
39
+ get children() {
40
+ var _el$3 = _$createElement("text");
41
+ _$insert(_el$3, () => props.message);
42
+ _$effect(_$p => _$setProp(_el$3, "fg", props.dimColor, _$p));
43
+ return _el$3;
44
+ }
45
+ }), null);
46
+ _$insert(_el$, _$createComponent(Show, {
47
+ get when() {
48
+ return _$memo(() => !!props.message)() && !props.dimColor;
49
+ },
50
+ get children() {
51
+ var _el$4 = _$createElement("text");
52
+ _$insert(_el$4, () => props.message);
53
+ return _el$4;
54
+ }
55
+ }), null);
56
+ _$effect(_p$ => {
57
+ var _v$ = interval(),
58
+ _v$2 = color();
59
+ _v$ !== _p$.e && (_p$.e = _$setProp(_el$2, "interval", _v$, _p$.e));
60
+ _v$2 !== _p$.t && (_p$.t = _$setProp(_el$2, "color", _v$2, _p$.t));
61
+ return _p$;
62
+ }, {
63
+ e: undefined,
64
+ t: undefined
65
+ });
66
+ return _el$;
67
+ })();
68
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.jsx","sourceRoot":"","sources":["../../src/components/loader.tsx"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAa,MAAM,eAAe,CAAA;AACrD,OAAO,uBAAuB,CAAA;AAC9B,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAA;AAa/B,+CAA+C;AAC/C,MAAM,cAAc,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;AACvF,MAAM,aAAa,GAAG,UAAU,CAAC,SAAS,CAAC,CAAA;AAE3C;;;;;;;GAOG;AACH,MAAM,UAAU,MAAM,CAAC,KAAkB;IACxC,MAAM,QAAQ,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC,QAAQ,IAAI,GAAG,CAAA;IAC5C,MAAM,KAAK,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC,KAAK,IAAI,aAAa,CAAA;IAEhD,OAAO,CACN,CAAC,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAC/B;GAAA,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC,EACtE;GAAA,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,QAAQ,CAAC,CAC3C;IAAA,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,QAAS,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,IAAI,CACjD;GAAA,EAAE,IAAI,CACN;GAAA,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAC5C;IAAA,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,IAAI,CAC5B;GAAA,EAAE,IAAI,CACP;EAAA,EAAE,GAAG,CAAC,CACN,CAAA;AACF,CAAC"}
@@ -1,4 +1,9 @@
1
- import { jsx as _jsx } from "solid-js/h/jsx-runtime";
1
+ import { setProp as _$setProp } from "@opentui/solid";
2
+ import { spread as _$spread } from "@opentui/solid";
3
+ import { createElement as _$createElement } from "@opentui/solid";
4
+ /**
5
+ * Markdown renderer using @opentui/core's tree-sitter based <code> component
6
+ */
2
7
  import { useTheme } from "../context/theme.js";
3
8
  /**
4
9
  * Markdown component that renders markdown text with tree-sitter syntax highlighting
@@ -9,20 +14,32 @@ import { useTheme } from "../context/theme.js";
9
14
  * ```
10
15
  */
11
16
  export function Markdown(props) {
12
- const { theme, syntaxStyle, subtleSyntaxStyle } = useTheme();
13
- const isStreaming = props.streaming ?? false;
14
- const commonProps = {
15
- content: props.text ?? "",
16
- syntaxStyle: props.dim ? subtleSyntaxStyle : syntaxStyle,
17
- conceal: props.conceal ?? true,
18
- streaming: isStreaming,
19
- drawUnstyledText: true,
20
- fg: props.dim ? theme.textMuted : theme.markdownText,
21
- };
22
- if (isStreaming) {
23
- // Skip tree-sitter while streaming to avoid O(n) highlight cost.
24
- return _jsx("code", { ...commonProps });
25
- }
26
- return _jsx("code", { filetype: "markdown", ...commonProps });
27
- }
28
- //# sourceMappingURL=markdown.js.map
17
+ const {
18
+ theme,
19
+ syntaxStyle,
20
+ subtleSyntaxStyle
21
+ } = useTheme();
22
+ const isStreaming = props.streaming ?? false;
23
+ const commonProps = {
24
+ content: props.text ?? "",
25
+ syntaxStyle: props.dim ? subtleSyntaxStyle : syntaxStyle,
26
+ conceal: props.conceal ?? true,
27
+ streaming: isStreaming,
28
+ drawUnstyledText: true,
29
+ fg: props.dim ? theme.textMuted : theme.markdownText
30
+ };
31
+ if (isStreaming) {
32
+ // Skip tree-sitter while streaming to avoid O(n) highlight cost.
33
+ return (() => {
34
+ var _el$ = _$createElement("code");
35
+ _$spread(_el$, commonProps, false);
36
+ return _el$;
37
+ })();
38
+ }
39
+ return (() => {
40
+ var _el$2 = _$createElement("code");
41
+ _$setProp(_el$2, "filetype", "markdown");
42
+ _$spread(_el$2, commonProps, false);
43
+ return _el$2;
44
+ })();
45
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown.jsx","sourceRoot":"","sources":["../../src/components/markdown.tsx"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAa9C;;;;;;;GAOG;AACH,MAAM,UAAU,QAAQ,CAAC,KAAoB;IAC5C,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,GAAG,QAAQ,EAAE,CAAA;IAE5D,MAAM,WAAW,GAAG,KAAK,CAAC,SAAS,IAAI,KAAK,CAAA;IAC5C,MAAM,WAAW,GAAG;QACnB,OAAO,EAAE,KAAK,CAAC,IAAI,IAAI,EAAE;QACzB,WAAW,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,WAAW;QACxD,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,IAAI;QAC9B,SAAS,EAAE,WAAW;QACtB,gBAAgB,EAAE,IAAa;QAC/B,EAAE,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY;KACpD,CAAA;IAED,IAAI,WAAW,EAAE,CAAC;QACjB,iEAAiE;QACjE,OAAO,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC,EAAG,CAAA;IACjC,CAAC;IAED,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,WAAW,CAAC,EAAG,CAAA;AACrD,CAAC"}
@@ -1,47 +1,91 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "solid-js/h/jsx-runtime";
1
+ import { effect as _$effect } from "@opentui/solid";
2
+ import { insertNode as _$insertNode } from "@opentui/solid";
3
+ import { insert as _$insert } from "@opentui/solid";
4
+ import { memo as _$memo } from "@opentui/solid";
5
+ import { setProp as _$setProp } from "@opentui/solid";
6
+ import { spread as _$spread } from "@opentui/solid";
7
+ import { createElement as _$createElement } from "@opentui/solid";
2
8
  import { parseColor } from "@opentui/core";
3
9
  import { splitProps } from "solid-js";
4
10
  import { useTheme } from "../context/theme.js";
5
11
  const transparentBg = parseColor("transparent");
6
12
  export function Panel(props) {
7
- const { theme } = useTheme();
8
- const [local, rest] = splitProps(props, [
9
- "variant",
10
- "padding",
11
- "paddingLeft",
12
- "paddingRight",
13
- "paddingTop",
14
- "paddingBottom",
15
- "paddingX",
16
- "paddingY",
17
- "backgroundColor",
18
- "border",
19
- "borderColor",
20
- "accentLeft",
21
- "accentWidth",
22
- "children",
23
- ]);
24
- const resolvedBg = () => {
25
- if (local.backgroundColor !== undefined)
26
- return local.backgroundColor;
27
- switch (local.variant ?? "panel") {
28
- case "element":
29
- return theme.backgroundElement;
30
- case "menu":
31
- return theme.backgroundMenu;
32
- case "transparent":
33
- return transparentBg;
34
- case "panel":
35
- default:
36
- return theme.backgroundPanel;
37
- }
38
- };
39
- const resolvedBorder = () => local.border ?? true;
40
- const resolvedBorderColor = () => local.borderColor ?? theme.borderSubtle;
41
- const paddingLeft = () => local.paddingLeft ?? local.paddingX ?? local.padding ?? 1;
42
- const paddingRight = () => local.paddingRight ?? local.paddingX ?? local.padding ?? 1;
43
- const paddingTop = () => local.paddingTop ?? local.paddingY ?? local.padding ?? 0;
44
- const paddingBottom = () => local.paddingBottom ?? local.paddingY ?? local.padding ?? 0;
45
- return (_jsxs("box", { flexDirection: "row", ...rest, children: [local.accentLeft && (_jsx("box", { width: local.accentWidth ?? 1, backgroundColor: local.accentLeft, flexShrink: 0 })), _jsx("box", { flexDirection: "column", backgroundColor: resolvedBg(), border: resolvedBorder(), borderColor: resolvedBorderColor(), paddingLeft: paddingLeft(), paddingRight: paddingRight(), paddingTop: paddingTop(), paddingBottom: paddingBottom(), flexGrow: 1, children: local.children })] }));
46
- }
47
- //# sourceMappingURL=panel.js.map
13
+ const {
14
+ theme
15
+ } = useTheme();
16
+ const [local, rest] = splitProps(props, ["variant", "padding", "paddingLeft", "paddingRight", "paddingTop", "paddingBottom", "paddingX", "paddingY", "backgroundColor", "border", "borderColor", "accentLeft", "accentWidth", "children"]);
17
+ const resolvedBg = () => {
18
+ if (local.backgroundColor !== undefined) return local.backgroundColor;
19
+ switch (local.variant ?? "panel") {
20
+ case "element":
21
+ return theme.backgroundElement;
22
+ case "menu":
23
+ return theme.backgroundMenu;
24
+ case "transparent":
25
+ return transparentBg;
26
+ case "panel":
27
+ default:
28
+ return theme.backgroundPanel;
29
+ }
30
+ };
31
+ const resolvedBorder = () => local.border ?? true;
32
+ const resolvedBorderColor = () => local.borderColor ?? theme.borderSubtle;
33
+ const paddingLeft = () => local.paddingLeft ?? local.paddingX ?? local.padding ?? 1;
34
+ const paddingRight = () => local.paddingRight ?? local.paddingX ?? local.padding ?? 1;
35
+ const paddingTop = () => local.paddingTop ?? local.paddingY ?? local.padding ?? 0;
36
+ const paddingBottom = () => local.paddingBottom ?? local.paddingY ?? local.padding ?? 0;
37
+ return (() => {
38
+ var _el$ = _$createElement("box"),
39
+ _el$2 = _$createElement("box");
40
+ _$insertNode(_el$, _el$2);
41
+ _$setProp(_el$, "flexDirection", "row");
42
+ _$spread(_el$, rest, true);
43
+ _$insert(_el$, (() => {
44
+ var _c$ = _$memo(() => !!local.accentLeft);
45
+ return () => _c$() && (() => {
46
+ var _el$3 = _$createElement("box");
47
+ _$setProp(_el$3, "flexShrink", 0);
48
+ _$effect(_p$ => {
49
+ var _v$8 = local.accentWidth ?? 1,
50
+ _v$9 = local.accentLeft;
51
+ _v$8 !== _p$.e && (_p$.e = _$setProp(_el$3, "width", _v$8, _p$.e));
52
+ _v$9 !== _p$.t && (_p$.t = _$setProp(_el$3, "backgroundColor", _v$9, _p$.t));
53
+ return _p$;
54
+ }, {
55
+ e: undefined,
56
+ t: undefined
57
+ });
58
+ return _el$3;
59
+ })();
60
+ })(), _el$2);
61
+ _$setProp(_el$2, "flexDirection", "column");
62
+ _$setProp(_el$2, "flexGrow", 1);
63
+ _$insert(_el$2, () => local.children);
64
+ _$effect(_p$ => {
65
+ var _v$ = resolvedBg(),
66
+ _v$2 = resolvedBorder(),
67
+ _v$3 = resolvedBorderColor(),
68
+ _v$4 = paddingLeft(),
69
+ _v$5 = paddingRight(),
70
+ _v$6 = paddingTop(),
71
+ _v$7 = paddingBottom();
72
+ _v$ !== _p$.e && (_p$.e = _$setProp(_el$2, "backgroundColor", _v$, _p$.e));
73
+ _v$2 !== _p$.t && (_p$.t = _$setProp(_el$2, "border", _v$2, _p$.t));
74
+ _v$3 !== _p$.a && (_p$.a = _$setProp(_el$2, "borderColor", _v$3, _p$.a));
75
+ _v$4 !== _p$.o && (_p$.o = _$setProp(_el$2, "paddingLeft", _v$4, _p$.o));
76
+ _v$5 !== _p$.i && (_p$.i = _$setProp(_el$2, "paddingRight", _v$5, _p$.i));
77
+ _v$6 !== _p$.n && (_p$.n = _$setProp(_el$2, "paddingTop", _v$6, _p$.n));
78
+ _v$7 !== _p$.s && (_p$.s = _$setProp(_el$2, "paddingBottom", _v$7, _p$.s));
79
+ return _p$;
80
+ }, {
81
+ e: undefined,
82
+ t: undefined,
83
+ a: undefined,
84
+ o: undefined,
85
+ i: undefined,
86
+ n: undefined,
87
+ s: undefined
88
+ });
89
+ return _el$;
90
+ })();
91
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"panel.js","sourceRoot":"","sources":["../../src/components/panel.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAE1C,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AACrC,OAAO,EAAE,QAAQ,EAAa,MAAM,qBAAqB,CAAA;AAEzD,MAAM,aAAa,GAAG,UAAU,CAAC,aAAa,CAAC,CAAA;AAY/C,MAAM,UAAU,KAAK,CAAC,KAAiB;IACtC,MAAM,EAAE,KAAK,EAAE,GAAG,QAAQ,EAAE,CAAA;IAE5B,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,UAAU,CAAC,KAAK,EAAE;QACvC,SAAS;QACT,SAAS;QACT,aAAa;QACb,cAAc;QACd,YAAY;QACZ,eAAe;QACf,UAAU;QACV,UAAU;QACV,iBAAiB;QACjB,QAAQ;QACR,aAAa;QACb,YAAY;QACZ,aAAa;QACb,UAAU;KACV,CAAC,CAAA;IAEF,MAAM,UAAU,GAAG,GAAS,EAAE;QAC7B,IAAI,KAAK,CAAC,eAAe,KAAK,SAAS;YAAE,OAAO,KAAK,CAAC,eAAuB,CAAA;QAC7E,QAAQ,KAAK,CAAC,OAAO,IAAI,OAAO,EAAE,CAAC;YAClC,KAAK,SAAS;gBACb,OAAO,KAAK,CAAC,iBAAiB,CAAA;YAC/B,KAAK,MAAM;gBACV,OAAO,KAAK,CAAC,cAAc,CAAA;YAC5B,KAAK,aAAa;gBACjB,OAAO,aAAa,CAAA;YACrB,KAAK,OAAO,CAAC;YACb;gBACC,OAAO,KAAK,CAAC,eAAe,CAAA;QAC9B,CAAC;IACF,CAAC,CAAA;IAED,MAAM,cAAc,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,CAAA;IACjD,MAAM,mBAAmB,GAAG,GAAS,EAAE,CAAE,KAAK,CAAC,WAAgC,IAAI,KAAK,CAAC,YAAY,CAAA;IAErG,MAAM,WAAW,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,OAAO,IAAI,CAAC,CAAA;IACnF,MAAM,YAAY,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC,YAAY,IAAI,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,OAAO,IAAI,CAAC,CAAA;IACrF,MAAM,UAAU,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,OAAO,IAAI,CAAC,CAAA;IACjF,MAAM,aAAa,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC,aAAa,IAAI,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,OAAO,IAAI,CAAC,CAAA;IAEvF,OAAO,CACN,eAAK,aAAa,EAAC,KAAK,KAAK,IAAI,aAC/B,KAAK,CAAC,UAAU,IAAI,CACpB,cACC,KAAK,EAAE,KAAK,CAAC,WAAW,IAAI,CAAC,EAC7B,eAAe,EAAE,KAAK,CAAC,UAAU,EACjC,UAAU,EAAE,CAAC,GACZ,CACF,EACD,cACC,aAAa,EAAC,QAAQ,EACtB,eAAe,EAAE,UAAU,EAAE,EAC7B,MAAM,EAAE,cAAc,EAAE,EACxB,WAAW,EAAE,mBAAmB,EAAE,EAClC,WAAW,EAAE,WAAW,EAAE,EAC1B,YAAY,EAAE,YAAY,EAAE,EAC5B,UAAU,EAAE,UAAU,EAAE,EACxB,aAAa,EAAE,aAAa,EAAE,EAC9B,QAAQ,EAAE,CAAC,YAEV,KAAK,CAAC,QAAQ,GACV,IACD,CACN,CAAA;AACF,CAAC"}
1
+ {"version":3,"file":"panel.jsx","sourceRoot":"","sources":["../../src/components/panel.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAE1C,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AACrC,OAAO,EAAE,QAAQ,EAAa,MAAM,qBAAqB,CAAA;AAEzD,MAAM,aAAa,GAAG,UAAU,CAAC,aAAa,CAAC,CAAA;AAY/C,MAAM,UAAU,KAAK,CAAC,KAAiB;IACtC,MAAM,EAAE,KAAK,EAAE,GAAG,QAAQ,EAAE,CAAA;IAE5B,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,UAAU,CAAC,KAAK,EAAE;QACvC,SAAS;QACT,SAAS;QACT,aAAa;QACb,cAAc;QACd,YAAY;QACZ,eAAe;QACf,UAAU;QACV,UAAU;QACV,iBAAiB;QACjB,QAAQ;QACR,aAAa;QACb,YAAY;QACZ,aAAa;QACb,UAAU;KACV,CAAC,CAAA;IAEF,MAAM,UAAU,GAAG,GAAS,EAAE;QAC7B,IAAI,KAAK,CAAC,eAAe,KAAK,SAAS;YAAE,OAAO,KAAK,CAAC,eAAuB,CAAA;QAC7E,QAAQ,KAAK,CAAC,OAAO,IAAI,OAAO,EAAE,CAAC;YAClC,KAAK,SAAS;gBACb,OAAO,KAAK,CAAC,iBAAiB,CAAA;YAC/B,KAAK,MAAM;gBACV,OAAO,KAAK,CAAC,cAAc,CAAA;YAC5B,KAAK,aAAa;gBACjB,OAAO,aAAa,CAAA;YACrB,KAAK,OAAO,CAAC;YACb;gBACC,OAAO,KAAK,CAAC,eAAe,CAAA;QAC9B,CAAC;IACF,CAAC,CAAA;IAED,MAAM,cAAc,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,CAAA;IACjD,MAAM,mBAAmB,GAAG,GAAS,EAAE,CAAE,KAAK,CAAC,WAAgC,IAAI,KAAK,CAAC,YAAY,CAAA;IAErG,MAAM,WAAW,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,OAAO,IAAI,CAAC,CAAA;IACnF,MAAM,YAAY,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC,YAAY,IAAI,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,OAAO,IAAI,CAAC,CAAA;IACrF,MAAM,UAAU,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,OAAO,IAAI,CAAC,CAAA;IACjF,MAAM,aAAa,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC,aAAa,IAAI,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,OAAO,IAAI,CAAC,CAAA;IAEvF,OAAO,CACN,CAAC,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,CACjC;GAAA,CAAC,KAAK,CAAC,UAAU,IAAI,CACpB,CAAC,GAAG,CACH,KAAK,CAAC,CAAC,KAAK,CAAC,WAAW,IAAI,CAAC,CAAC,CAC9B,eAAe,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAClC,UAAU,CAAC,CAAC,CAAC,CAAC,EACb,CACF,CACD;GAAA,CAAC,GAAG,CACH,aAAa,CAAC,QAAQ,CACtB,eAAe,CAAC,CAAC,UAAU,EAAE,CAAC,CAC9B,MAAM,CAAC,CAAC,cAAc,EAAE,CAAC,CACzB,WAAW,CAAC,CAAC,mBAAmB,EAAE,CAAC,CACnC,WAAW,CAAC,CAAC,WAAW,EAAE,CAAC,CAC3B,YAAY,CAAC,CAAC,YAAY,EAAE,CAAC,CAC7B,UAAU,CAAC,CAAC,UAAU,EAAE,CAAC,CACzB,aAAa,CAAC,CAAC,aAAa,EAAE,CAAC,CAC/B,QAAQ,CAAC,CAAC,CAAC,CAAC,CAEZ;IAAA,CAAC,KAAK,CAAC,QAAQ,CAChB;GAAA,EAAE,GAAG,CACN;EAAA,EAAE,GAAG,CAAC,CACN,CAAA;AACF,CAAC"}
@@ -1,4 +1,10 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "solid-js/h/jsx-runtime";
1
+ import { insert as _$insert } from "@opentui/solid";
2
+ import { createComponent as _$createComponent } from "@opentui/solid";
3
+ import { setProp as _$setProp } from "@opentui/solid";
4
+ import { effect as _$effect } from "@opentui/solid";
5
+ import { createTextNode as _$createTextNode } from "@opentui/solid";
6
+ import { insertNode as _$insertNode } from "@opentui/solid";
7
+ import { createElement as _$createElement } from "@opentui/solid";
2
8
  /**
3
9
  * SelectList component - wraps OpenTUI's SelectRenderable
4
10
  */
@@ -7,110 +13,194 @@ import { createEffect, createMemo, createSignal, For, Show } from "solid-js";
7
13
  import { useTheme } from "../context/theme.js";
8
14
  import { truncateToWidth, visibleWidth } from "../utils/text-width.js";
9
15
  export function SelectList(props) {
10
- const { theme: globalTheme } = useTheme();
11
- const [internalIndex, setInternalIndex] = createSignal(0);
12
- const selectedIndex = () => props.selectedIndex ?? internalIndex();
13
- const theme = createMemo(() => ({
14
- selectedBg: props.theme?.selectedBg ?? globalTheme.selectionBg,
15
- selectedFg: props.theme?.selectedFg ?? globalTheme.selectionFg,
16
- text: props.theme?.text ?? globalTheme.text,
17
- description: props.theme?.description ?? globalTheme.textMuted,
18
- scrollInfo: props.theme?.scrollInfo ?? globalTheme.textMuted,
19
- noMatch: props.theme?.noMatch ?? globalTheme.textMuted,
20
- }));
21
- const filteredItems = createMemo(() => {
22
- const filter = props.filter?.toLowerCase() ?? "";
23
- if (!filter)
24
- return props.items;
25
- return props.items.filter((item) => item.value.toLowerCase().includes(filter) || item.label.toLowerCase().includes(filter));
26
- });
27
- const clampedIndex = createMemo(() => {
28
- const items = filteredItems();
29
- if (items.length === 0)
30
- return 0;
31
- return Math.max(0, Math.min(selectedIndex(), items.length - 1));
32
- });
33
- createEffect(() => {
34
- if (props.selectedIndex !== undefined)
35
- return;
36
- setInternalIndex(clampedIndex());
37
- });
38
- createEffect(() => {
39
- if (props.selectedIndex !== undefined)
40
- return;
41
- const items = filteredItems();
42
- if (items.length === 0)
43
- return;
44
- props.onSelectionChange?.(items[clampedIndex()], clampedIndex());
45
- });
46
- const setSelection = (nextIndex) => {
47
- const items = filteredItems();
48
- if (items.length === 0)
49
- return;
50
- const next = Math.max(0, Math.min(nextIndex, items.length - 1));
51
- if (props.selectedIndex === undefined) {
52
- setInternalIndex(next);
53
- return;
54
- }
55
- props.onSelectionChange?.(items[next], next);
56
- };
57
- const ref = {
58
- moveUp: () => setSelection(clampedIndex() - 1),
59
- moveDown: () => setSelection(clampedIndex() + 1),
60
- select: () => {
61
- const item = filteredItems()[clampedIndex()];
62
- if (item)
63
- props.onSelect?.(item);
64
- },
65
- cancel: () => props.onCancel?.(),
66
- getSelectedItem: () => filteredItems()[clampedIndex()],
67
- getSelectedIndex: () => clampedIndex(),
68
- };
69
- createEffect(() => {
70
- props.ref?.(ref);
71
- });
72
- const maxVisible = () => props.maxVisible ?? 5;
73
- const width = () => props.width ?? 80;
74
- const visibleWindow = createMemo(() => {
75
- const items = filteredItems();
76
- const max = maxVisible();
77
- const idx = clampedIndex();
78
- const startIndex = Math.max(0, Math.min(idx - Math.floor(max / 2), items.length - max));
79
- const endIndex = Math.min(startIndex + max, items.length);
80
- return { startIndex, endIndex };
81
- });
82
- if (filteredItems().length === 0) {
83
- return (_jsx("box", { children: _jsx("text", { fg: theme().noMatch, children: " No matching items" }) }));
16
+ const {
17
+ theme: globalTheme
18
+ } = useTheme();
19
+ const [internalIndex, setInternalIndex] = createSignal(0);
20
+ const selectedIndex = () => props.selectedIndex ?? internalIndex();
21
+ const theme = createMemo(() => ({
22
+ selectedBg: props.theme?.selectedBg ?? globalTheme.selectionBg,
23
+ selectedFg: props.theme?.selectedFg ?? globalTheme.selectionFg,
24
+ text: props.theme?.text ?? globalTheme.text,
25
+ description: props.theme?.description ?? globalTheme.textMuted,
26
+ scrollInfo: props.theme?.scrollInfo ?? globalTheme.textMuted,
27
+ noMatch: props.theme?.noMatch ?? globalTheme.textMuted
28
+ }));
29
+ const filteredItems = createMemo(() => {
30
+ const filter = props.filter?.toLowerCase() ?? "";
31
+ if (!filter) return props.items;
32
+ return props.items.filter(item => item.value.toLowerCase().includes(filter) || item.label.toLowerCase().includes(filter));
33
+ });
34
+ const clampedIndex = createMemo(() => {
35
+ const items = filteredItems();
36
+ if (items.length === 0) return 0;
37
+ return Math.max(0, Math.min(selectedIndex(), items.length - 1));
38
+ });
39
+ createEffect(() => {
40
+ if (props.selectedIndex !== undefined) return;
41
+ setInternalIndex(clampedIndex());
42
+ });
43
+ createEffect(() => {
44
+ if (props.selectedIndex !== undefined) return;
45
+ const items = filteredItems();
46
+ if (items.length === 0) return;
47
+ props.onSelectionChange?.(items[clampedIndex()], clampedIndex());
48
+ });
49
+ const setSelection = nextIndex => {
50
+ const items = filteredItems();
51
+ if (items.length === 0) return;
52
+ const next = Math.max(0, Math.min(nextIndex, items.length - 1));
53
+ if (props.selectedIndex === undefined) {
54
+ setInternalIndex(next);
55
+ return;
84
56
  }
85
- // Derive reactive values from visibleWindow memo
86
- const startIndex = () => visibleWindow().startIndex;
87
- const endIndex = () => visibleWindow().endIndex;
88
- const visibleItems = () => filteredItems().slice(startIndex(), endIndex());
89
- const showScrollInfo = () => startIndex() > 0 || endIndex() < filteredItems().length;
90
- return (_jsxs("box", { flexDirection: "column", children: [_jsx(For, { each: visibleItems(), children: (item, localIndex) => {
91
- const globalIndex = () => startIndex() + localIndex();
92
- const isSelected = () => globalIndex() === clampedIndex();
93
- return _jsx(SelectListItem, { item: item, isSelected: isSelected, theme: theme, width: width });
94
- } }), _jsx(Show, { when: showScrollInfo(), children: _jsxs("text", { fg: theme().scrollInfo, children: [" ", "(", clampedIndex() + 1, "/", filteredItems().length, ")"] }) })] }));
57
+ props.onSelectionChange?.(items[next], next);
58
+ };
59
+ const ref = {
60
+ moveUp: () => setSelection(clampedIndex() - 1),
61
+ moveDown: () => setSelection(clampedIndex() + 1),
62
+ select: () => {
63
+ const item = filteredItems()[clampedIndex()];
64
+ if (item) props.onSelect?.(item);
65
+ },
66
+ cancel: () => props.onCancel?.(),
67
+ getSelectedItem: () => filteredItems()[clampedIndex()],
68
+ getSelectedIndex: () => clampedIndex()
69
+ };
70
+ createEffect(() => {
71
+ props.ref?.(ref);
72
+ });
73
+ const maxVisible = () => props.maxVisible ?? 5;
74
+ const width = () => props.width ?? 80;
75
+ const visibleWindow = createMemo(() => {
76
+ const items = filteredItems();
77
+ const max = maxVisible();
78
+ const idx = clampedIndex();
79
+ const startIndex = Math.max(0, Math.min(idx - Math.floor(max / 2), items.length - max));
80
+ const endIndex = Math.min(startIndex + max, items.length);
81
+ return {
82
+ startIndex,
83
+ endIndex
84
+ };
85
+ });
86
+ if (filteredItems().length === 0) {
87
+ return (() => {
88
+ var _el$ = _$createElement("box"),
89
+ _el$2 = _$createElement("text");
90
+ _$insertNode(_el$, _el$2);
91
+ _$insertNode(_el$2, _$createTextNode(` No matching items`));
92
+ _$effect(_$p => _$setProp(_el$2, "fg", theme().noMatch, _$p));
93
+ return _el$;
94
+ })();
95
+ }
96
+ // Derive reactive values from visibleWindow memo
97
+ const startIndex = () => visibleWindow().startIndex;
98
+ const endIndex = () => visibleWindow().endIndex;
99
+ const visibleItems = () => filteredItems().slice(startIndex(), endIndex());
100
+ const showScrollInfo = () => startIndex() > 0 || endIndex() < filteredItems().length;
101
+ return (() => {
102
+ var _el$4 = _$createElement("box");
103
+ _$setProp(_el$4, "flexDirection", "column");
104
+ _$insert(_el$4, _$createComponent(For, {
105
+ get each() {
106
+ return visibleItems();
107
+ },
108
+ children: (item, localIndex) => {
109
+ const globalIndex = () => startIndex() + localIndex();
110
+ const isSelected = () => globalIndex() === clampedIndex();
111
+ return _$createComponent(SelectListItem, {
112
+ item: item,
113
+ isSelected: isSelected,
114
+ theme: theme,
115
+ width: width
116
+ });
117
+ }
118
+ }), null);
119
+ _$insert(_el$4, _$createComponent(Show, {
120
+ get when() {
121
+ return showScrollInfo();
122
+ },
123
+ get children() {
124
+ var _el$5 = _$createElement("text"),
125
+ _el$6 = _$createTextNode(` (`),
126
+ _el$8 = _$createTextNode(`/`),
127
+ _el$9 = _$createTextNode(`)`);
128
+ _$insertNode(_el$5, _el$6);
129
+ _$insertNode(_el$5, _el$8);
130
+ _$insertNode(_el$5, _el$9);
131
+ _$insert(_el$5, () => clampedIndex() + 1, _el$8);
132
+ _$insert(_el$5, () => filteredItems().length, _el$9);
133
+ _$effect(_$p => _$setProp(_el$5, "fg", theme().scrollInfo, _$p));
134
+ return _el$5;
135
+ }
136
+ }), null);
137
+ return _el$4;
138
+ })();
95
139
  }
96
140
  function SelectListItem(props) {
97
- const prefix = () => (props.isSelected() ? "→ " : " ");
98
- const prefixWidth = 2;
99
- const value = () => props.item.label || props.item.value;
100
- const labelWidth = () => Math.min(32, Math.max(12, props.width() - prefixWidth - 10));
101
- const label = () => truncateToWidth(value(), labelWidth(), "");
102
- const labelPad = () => " ".repeat(Math.max(0, labelWidth() - visibleWidth(label())));
103
- const showDescription = () => Boolean(props.item.description) && props.width() > 50;
104
- const descWidth = () => (showDescription() ? Math.max(0, props.width() - prefixWidth - labelWidth() - 2) : 0);
105
- const desc = () => (showDescription() ? truncateToWidth(props.item.description, descWidth(), "") : "");
106
- const line = () => prefix() + label() + labelPad() + (showDescription() ? " " + desc() : "");
107
- const pad = () => " ".repeat(Math.max(0, props.width() - visibleWidth(line())));
108
- return (_jsx(Show, { when: props.isSelected(), fallback: _jsxs("text", { children: [_jsx("span", { style: { fg: props.theme().text }, children: prefix() + label() + labelPad() }), _jsx(Show, { when: showDescription(), children: _jsx("span", { style: { fg: props.theme().description }, children: " " + desc() }) })] }), children: _jsx("text", { fg: props.theme().selectedFg, bg: props.theme().selectedBg, attributes: TextAttributes.BOLD, children: line() + pad() }) }));
141
+ const prefix = () => props.isSelected() ? "→ " : " ";
142
+ const prefixWidth = 2;
143
+ const value = () => props.item.label || props.item.value;
144
+ const labelWidth = () => Math.min(32, Math.max(12, props.width() - prefixWidth - 10));
145
+ const label = () => truncateToWidth(value(), labelWidth(), "");
146
+ const labelPad = () => " ".repeat(Math.max(0, labelWidth() - visibleWidth(label())));
147
+ const showDescription = () => Boolean(props.item.description) && props.width() > 50;
148
+ const descWidth = () => showDescription() ? Math.max(0, props.width() - prefixWidth - labelWidth() - 2) : 0;
149
+ const desc = () => showDescription() ? truncateToWidth(props.item.description, descWidth(), "") : "";
150
+ const line = () => prefix() + label() + labelPad() + (showDescription() ? " " + desc() : "");
151
+ const pad = () => " ".repeat(Math.max(0, props.width() - visibleWidth(line())));
152
+ return _$createComponent(Show, {
153
+ get when() {
154
+ return props.isSelected();
155
+ },
156
+ get fallback() {
157
+ return (() => {
158
+ var _el$1 = _$createElement("text"),
159
+ _el$10 = _$createElement("span");
160
+ _$insertNode(_el$1, _el$10);
161
+ _$insert(_el$10, () => prefix() + label() + labelPad());
162
+ _$insert(_el$1, _$createComponent(Show, {
163
+ get when() {
164
+ return showDescription();
165
+ },
166
+ get children() {
167
+ var _el$11 = _$createElement("span");
168
+ _$insert(_el$11, () => " " + desc());
169
+ _$effect(_$p => _$setProp(_el$11, "style", {
170
+ fg: props.theme().description
171
+ }, _$p));
172
+ return _el$11;
173
+ }
174
+ }), null);
175
+ _$effect(_$p => _$setProp(_el$10, "style", {
176
+ fg: props.theme().text
177
+ }, _$p));
178
+ return _el$1;
179
+ })();
180
+ },
181
+ get children() {
182
+ var _el$0 = _$createElement("text");
183
+ _$insert(_el$0, () => line() + pad());
184
+ _$effect(_p$ => {
185
+ var _v$ = props.theme().selectedFg,
186
+ _v$2 = props.theme().selectedBg,
187
+ _v$3 = TextAttributes.BOLD;
188
+ _v$ !== _p$.e && (_p$.e = _$setProp(_el$0, "fg", _v$, _p$.e));
189
+ _v$2 !== _p$.t && (_p$.t = _$setProp(_el$0, "bg", _v$2, _p$.t));
190
+ _v$3 !== _p$.a && (_p$.a = _$setProp(_el$0, "attributes", _v$3, _p$.a));
191
+ return _p$;
192
+ }, {
193
+ e: undefined,
194
+ t: undefined,
195
+ a: undefined
196
+ });
197
+ return _el$0;
198
+ }
199
+ });
109
200
  }
110
201
  export const SelectListKeys = {
111
- isUp: (key) => key === "up" || key === "\x1b[A",
112
- isDown: (key) => key === "down" || key === "\x1b[B",
113
- isEnter: (key) => key === "return" || key === "\r",
114
- isEscape: (key) => key === "escape" || key === "\x1b",
115
- };
116
- //# sourceMappingURL=select-list.js.map
202
+ isUp: key => key === "up" || key === "\x1b[A",
203
+ isDown: key => key === "down" || key === "\x1b[B",
204
+ isEnter: key => key === "return" || key === "\r",
205
+ isEscape: key => key === "escape" || key === "\x1b"
206
+ };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"select-list.jsx","sourceRoot":"","sources":["../../src/components/select-list.tsx"],"names":[],"mappings":"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"}