using System.Collections.ObjectModel;
using CommunityToolkit.Mvvm.ComponentModel;
namespace LanMountainDesktop.Mobile.ViewModels;
///
/// 组件面板视图模型。
/// 移动端不提供桌面自由摆放,组件以卡片流形式呈现。
/// 后续由组件运行时(DesktopComponents.Runtime)通过
/// 注入真实组件视图。
///
public sealed partial class WidgetPanelViewModel : ObservableObject
{
public ObservableCollection Widgets { get; } = [];
[ObservableProperty]
private string _title = "组件面板";
public WidgetPanelViewModel()
{
// 首版占位卡片:标记组件运行时的接入点。
Widgets.Add(new WidgetCardViewModel("时间表", "课程表 / 日程组件将在此呈现"));
Widgets.Add(new WidgetCardViewModel("天气", "天气组件将在此呈现"));
Widgets.Add(new WidgetCardViewModel("插件组件", "已安装插件提供的组件将在此呈现"));
}
///
/// 组件运行时接入点:注册一个真实组件卡片。
///
public void RegisterWidget(WidgetCardViewModel widget)
{
Widgets.Add(widget);
}
}
///
/// 单个组件卡片。 为空时显示占位说明文本,
/// 非空时承载组件运行时提供的真实控件。
///
public sealed partial class WidgetCardViewModel : ObservableObject
{
[ObservableProperty]
private string _name;
[ObservableProperty]
private string _placeholder;
[ObservableProperty]
private object? _content;
public WidgetCardViewModel(string name, string placeholder, object? content = null)
{
_name = name;
_placeholder = placeholder;
_content = content;
}
}