feat: upgrade select list items
- add SelectItem model with labels and descriptions - support filtering, wrap-around, scroll info, and selection change - demonstrate select list filtering in Example
This commit is contained in:
+35
-7
@@ -54,10 +54,11 @@ input.OnSubmitted = value =>
|
||||
new SelectOverlay(runtime, message => AddEvent(eventsText, message), textMeasurer),
|
||||
new OverlayOptions
|
||||
{
|
||||
Width = 34,
|
||||
Width = OverlaySize.Percent(62),
|
||||
MinWidth = 56,
|
||||
Anchor = OverlayAnchor.LeftCenter,
|
||||
Margin = new OverlayMargin(1),
|
||||
MaxHeight = 9,
|
||||
MaxHeight = 12,
|
||||
});
|
||||
break;
|
||||
case "/edit":
|
||||
@@ -229,15 +230,42 @@ file sealed class SelectOverlay : IInputComponent
|
||||
{
|
||||
_runtime = runtime;
|
||||
_addEvent = addEvent;
|
||||
_selectList = new SelectList(textMeasurer) { Height = 5 };
|
||||
_selectList.SetItems(["Text", "Input", "Editor", "SelectList", "Markdown", "Loader", "Overlay"]);
|
||||
_selectList.OnSubmitted = (item, _) =>
|
||||
_selectList = new SelectList(textMeasurer)
|
||||
{
|
||||
_addEvent($"Selected: {item}");
|
||||
Height = 6,
|
||||
EmptyText = "没有匹配项",
|
||||
};
|
||||
_selectList.SetItems(
|
||||
[
|
||||
new SelectItem("text", "Text", "渲染纯文本和多行内容"),
|
||||
new SelectItem("input", "Input", "单行输入 提交 取消和光标定位"),
|
||||
new SelectItem("editor", "Editor", "多行编辑 历史记录 词级移动和撤销"),
|
||||
new SelectItem("select-list", "SelectList", "过滤 描述列 循环选择和提交"),
|
||||
new SelectItem("markdown", "Markdown", "轻量 Markdown 文本展示"),
|
||||
new SelectItem("loader", "Loader", "自动 tick 的加载动画"),
|
||||
new SelectItem("overlay", "Overlay", "定位 尺寸 焦点和 non-capturing 提示"),
|
||||
]);
|
||||
_selectList.OnSelectionChanged = (item, _) => _addEvent($"Selection: {item.Label}");
|
||||
_selectList.OnItemSubmitted = (item, _) =>
|
||||
{
|
||||
_addEvent($"Selected: {item.Label} ({item.Value})");
|
||||
_runtime.HideOverlay();
|
||||
};
|
||||
_selectList.OnCanceled = _runtime.HideOverlay;
|
||||
_box = new Box(_selectList, textMeasurer) { Title = "SelectList" };
|
||||
_box = new Box(
|
||||
new Container
|
||||
{
|
||||
Children =
|
||||
{
|
||||
new Text("输入文本过滤 Backspace 删除过滤 Up/Down 循环选择 Enter 提交"),
|
||||
new Text(),
|
||||
_selectList,
|
||||
},
|
||||
},
|
||||
textMeasurer)
|
||||
{
|
||||
Title = "SelectList",
|
||||
};
|
||||
}
|
||||
|
||||
public IReadOnlyList<string> Render(int width) => _box.Render(width);
|
||||
|
||||
Reference in New Issue
Block a user