diff --git a/Libraries/Microsoft.Teams.Api/Activities/Message/MessageActivity.cs b/Libraries/Microsoft.Teams.Api/Activities/Message/MessageActivity.cs index 70a1eb0f..831e0e74 100644 --- a/Libraries/Microsoft.Teams.Api/Activities/Message/MessageActivity.cs +++ b/Libraries/Microsoft.Teams.Api/Activities/Message/MessageActivity.cs @@ -89,7 +89,7 @@ public MessageActivity AddAttachment(params Attachment[] value) return this; } - public MessageActivity AddAttachment(Teams.Cards.Card card) + public MessageActivity AddAttachment(Teams.Cards.AdaptiveCard card) { return AddAttachment(new Attachment(card)); } diff --git a/Libraries/Microsoft.Teams.Api/Attachment.cs b/Libraries/Microsoft.Teams.Api/Attachment.cs index b6a04853..768cfd09 100644 --- a/Libraries/Microsoft.Teams.Api/Attachment.cs +++ b/Libraries/Microsoft.Teams.Api/Attachment.cs @@ -69,7 +69,7 @@ public Attachment(ContentType contentType, object? content = null) Content = content; } - public Attachment(Teams.Cards.Card card) + public Attachment(Teams.Cards.AdaptiveCard card) { ContentType = ContentType.AdaptiveCard; Content = card; diff --git a/Libraries/Microsoft.Teams.Apps/App.cs b/Libraries/Microsoft.Teams.Apps/App.cs index f232ef08..d7a59f10 100644 --- a/Libraries/Microsoft.Teams.Apps/App.cs +++ b/Libraries/Microsoft.Teams.Apps/App.cs @@ -179,7 +179,7 @@ public async Task Send(string conversationId, string text, stri /// send a message activity with a card attachment /// /// the card to send as an attachment - public async Task Send(string conversationId, Cards.Card card, string? serviceUrl = null, CancellationToken cancellationToken = default) + public async Task Send(string conversationId, Cards.AdaptiveCard card, string? serviceUrl = null, CancellationToken cancellationToken = default) { return await Send(conversationId, new MessageActivity().AddAttachment(card), serviceUrl, cancellationToken); } diff --git a/Libraries/Microsoft.Teams.Apps/Contexts/Context.Client.cs b/Libraries/Microsoft.Teams.Apps/Contexts/Context.Client.cs index 4864d145..841e00b4 100644 --- a/Libraries/Microsoft.Teams.Apps/Contexts/Context.Client.cs +++ b/Libraries/Microsoft.Teams.Apps/Contexts/Context.Client.cs @@ -26,7 +26,7 @@ public class Client(IContext context) /// send a message activity with a card attachment /// /// the card to send as an attachment - public Task Send(Cards.Card card) => context.Send(card); + public Task Send(Cards.AdaptiveCard card) => context.Send(card); /// /// send an activity to the conversation as a reply @@ -44,7 +44,7 @@ public class Client(IContext context) /// send a message activity with a card attachment as a reply /// /// the card to send as an attachment - public Task Reply(Cards.Card card) => context.Reply(card); + public Task Reply(Cards.AdaptiveCard card) => context.Reply(card); /// /// send a typing activity diff --git a/Libraries/Microsoft.Teams.Apps/Contexts/Context.Send.cs b/Libraries/Microsoft.Teams.Apps/Contexts/Context.Send.cs index 735e0954..b0b2b5fd 100644 --- a/Libraries/Microsoft.Teams.Apps/Contexts/Context.Send.cs +++ b/Libraries/Microsoft.Teams.Apps/Contexts/Context.Send.cs @@ -20,7 +20,7 @@ public partial interface IContext /// send a message activity with a card attachment /// /// the card to send as an attachment - public Task Send(Cards.Card card); + public Task Send(Cards.AdaptiveCard card); /// /// send an activity to the conversation as a reply @@ -38,7 +38,7 @@ public partial interface IContext /// send a message activity with a card attachment as a reply /// /// the card to send as an attachment - public Task Reply(Cards.Card card); + public Task Reply(Cards.AdaptiveCard card); /// /// send a typing activity @@ -64,7 +64,7 @@ public Task Send(string text) return Send(new MessageActivity(text)); } - public Task Send(Cards.Card card) + public Task Send(Cards.AdaptiveCard card) { return Send(new MessageActivity().AddAttachment(card)); } @@ -90,7 +90,7 @@ public Task Reply(string text) return Reply(new MessageActivity(text)); } - public Task Reply(Cards.Card card) + public Task Reply(Cards.AdaptiveCard card) { return Reply(new MessageActivity().AddAttachment(card)); } diff --git a/Libraries/Microsoft.Teams.Cards/Actions/Action.cs b/Libraries/Microsoft.Teams.Cards/Actions/Action.cs deleted file mode 100644 index e67f9676..00000000 --- a/Libraries/Microsoft.Teams.Cards/Actions/Action.cs +++ /dev/null @@ -1,184 +0,0 @@ -using System.Text.Json; -using System.Text.Json.Serialization; - -using Microsoft.Teams.Common; - -namespace Microsoft.Teams.Cards; - -/// -/// Controls the style of an Action, which influences how the action is displayed, spoken, etc. -/// -[JsonConverter(typeof(JsonConverter))] -public partial class ActionStyle(string value) : StringEnum(value) -{ - public static readonly ActionStyle Default = new("default"); - public bool IsDefault => Default.Equals(Value); - - public static readonly ActionStyle Positive = new("positive"); - public bool IsPositive => Positive.Equals(Value); - - public static readonly ActionStyle Destructive = new("destructive"); - public bool IsDestructive => Destructive.Equals(Value); -} - -/// -/// Determines whether an action is displayed with a button or is moved to the overflow menu. -/// -[JsonConverter(typeof(JsonConverter))] -public partial class ActionMode(string value) : StringEnum(value) -{ - public static readonly ActionMode Primary = new("primary"); - public bool IsPrimary => Primary.Equals(Value); - - public static readonly ActionMode Secondary = new("secondary"); - public bool IsSecondary => Secondary.Equals(Value); -} - -public abstract class Action(CardType type) -{ - /// - /// A unique identifier associated with this Action. - /// - [JsonPropertyName("id")] - [JsonPropertyOrder(0)] - public string? Id { get; set; } - - /// - /// the action type - /// - [JsonPropertyName("type")] - [JsonPropertyOrder(1)] - public CardType Type { get; set; } = type; - - /// - /// Label for button or link that represents this action. - /// - [JsonPropertyName("title")] - [JsonPropertyOrder(2)] - public string? Title { get; set; } - - /// - /// Optional icon to be shown on the action in conjunction with the title. Supports data URI in version 1.2+ - /// - [JsonPropertyName("iconUrl")] - [JsonPropertyOrder(3)] - public string? IconUrl { get; set; } - - /// - /// Controls the style of an Action, which influences how the action is displayed, spoken, etc. - /// - [JsonPropertyName("style")] - [JsonPropertyOrder(4)] - public ActionStyle? Style { get; set; } - - /// - /// Describes what to do when an unknown element is encountered or the requires of this or any children can’t be met. - /// - [JsonPropertyName("fallback")] - [JsonPropertyOrder(5)] - public IUnion? Fallback { get; set; } - - /// - /// Determines whether an action is displayed with a button or is moved to the overflow menu. - /// - [JsonPropertyName("mode")] - [JsonPropertyOrder(6)] - public ActionMode? Mode { get; set; } - - /// - /// Defines text that should be displayed to the end user as they hover the mouse over the action, and read when using narration software. - /// - [JsonPropertyName("tooltip")] - [JsonPropertyOrder(7)] - public string? Tooltip { get; set; } - - /// - /// Determines whether the action should be enabled. - /// - [JsonPropertyName("isEnabled")] - [JsonPropertyOrder(8)] - public bool? IsEnabled { get; set; } - - /// - /// A series of key/value pairs indicating features that the item requires with corresponding minimum version. When a feature is missing or of insufficient version, fallback is triggered. - /// - [JsonPropertyName("requires")] - [JsonPropertyOrder(9)] - public IDictionary? Requires { get; set; } - - public Action WithId(string value) - { - Id = value; - return this; - } - - public Action WithTitle(string value) - { - Title = value; - return this; - } - - public Action WithIconUrl(string value) - { - IconUrl = value; - return this; - } - - public Action WithStyle(ActionStyle value) - { - Style = value; - return this; - } - - public Action WithFallback(Action value) - { - Fallback = new Union(value); - return this; - } - - public Action WithFallback(string value) - { - Fallback = new Union(value); - return this; - } - - public Action WithMode(ActionMode value) - { - Mode = value; - return this; - } - - public Action WithTooltip(string value) - { - Tooltip = value; - return this; - } - - public Action WithEnabled(bool value = true) - { - IsEnabled = value; - return this; - } - - public Action WithRequires(IDictionary value) - { - Requires = value; - return this; - } - - public Action WithRequire(string key, string value) - { - Requires ??= new Dictionary(); - Requires.Add(key, value); - return this; - } - - public override string ToString() - { - return JsonSerializer.Serialize(this, new JsonSerializerOptions() - { - WriteIndented = true, - DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull - }); - } -} \ No newline at end of file diff --git a/Libraries/Microsoft.Teams.Cards/Actions/ExecuteAction.cs b/Libraries/Microsoft.Teams.Cards/Actions/ExecuteAction.cs deleted file mode 100644 index ee137c40..00000000 --- a/Libraries/Microsoft.Teams.Cards/Actions/ExecuteAction.cs +++ /dev/null @@ -1,62 +0,0 @@ -using System.Text.Json.Serialization; - -using Microsoft.Teams.Common; - -namespace Microsoft.Teams.Cards; - -public partial class CardType : StringEnum -{ - public static readonly CardType ExecuteAction = new("Action.Execute"); - public bool IsExecuteAction => ExecuteAction.Equals(Value); -} - -/// -/// Gathers input fields, merges with optional data field, and sends an event to the client. Clients process the event by sending an Invoke activity of type adaptiveCard/action to the target Bot. The inputs that are gathered are those on the current card, and in the case of a show card those on any parent cards. See [Universal Action Model](https://docs.microsoft.com/en-us/adaptive-cards/authoring-cards/universal-action-model) documentation for more details. -/// -public class ExecuteAction() : SelectAction(CardType.ExecuteAction) -{ - /// - /// The card author-defined verb associated with this action. - /// - [JsonPropertyName("verb")] - [JsonPropertyOrder(10)] - public string? Verb { get; set; } - - /// - /// Initial data that input fields will be combined with. These are essentially ‘hidden’ properties. - /// - [JsonPropertyName("data")] - [JsonPropertyOrder(11)] - public IUnion>? Data { get; set; } - - /// - /// Controls which inputs are associated with the action. - /// - [JsonPropertyName("associatedInputs")] - [JsonPropertyOrder(12)] - public AssociatedInputs? AssociatedInputs { get; set; } - - public ExecuteAction WithVerb(string value) - { - Verb = value; - return this; - } - - public ExecuteAction WithData(string value) - { - Data = new Union>(value); - return this; - } - - public ExecuteAction WithData(IDictionary value) - { - Data = new Union>(value); - return this; - } - - public ExecuteAction WithAssociatedInputs(AssociatedInputs value) - { - AssociatedInputs = value; - return this; - } -} \ No newline at end of file diff --git a/Libraries/Microsoft.Teams.Cards/Actions/IMBackAction.cs b/Libraries/Microsoft.Teams.Cards/Actions/IMBackAction.cs new file mode 100644 index 00000000..663701cf --- /dev/null +++ b/Libraries/Microsoft.Teams.Cards/Actions/IMBackAction.cs @@ -0,0 +1,16 @@ +namespace Microsoft.Teams.Cards; + +public class IMBackAction : SubmitAction +{ + /// + /// Initial data that input fields will be combined with. These are essentially ‘hidden’ properties. + /// + /// + public IMBackAction(string value) + { + Data = new() + { + MsTeams = new ImBackSubmitActionData(value) + }; + } +} \ No newline at end of file diff --git a/Libraries/Microsoft.Teams.Cards/Actions/InvokeAction.cs b/Libraries/Microsoft.Teams.Cards/Actions/InvokeAction.cs new file mode 100644 index 00000000..a5035836 --- /dev/null +++ b/Libraries/Microsoft.Teams.Cards/Actions/InvokeAction.cs @@ -0,0 +1,12 @@ +namespace Microsoft.Teams.Cards; + +public class InvokeAction : SubmitAction +{ + public InvokeAction(object value) + { + Data = new() + { + MsTeams = new InvokeSubmitActionData(value) + }; + } +} \ No newline at end of file diff --git a/Libraries/Microsoft.Teams.Cards/Actions/MessageBackAction.cs b/Libraries/Microsoft.Teams.Cards/Actions/MessageBackAction.cs new file mode 100644 index 00000000..1b078679 --- /dev/null +++ b/Libraries/Microsoft.Teams.Cards/Actions/MessageBackAction.cs @@ -0,0 +1,29 @@ +namespace Microsoft.Teams.Cards; + +public class MessageBackAction : SubmitAction +{ + public MessageBackAction(string text, string value) + { + Data = new() + { + MsTeams = new MessageBackSubmitActionData() + { + Text = text, + Value = value + } + }; + } + + public MessageBackAction(string text, string displayText, string value) + { + Data = new() + { + MsTeams = new MessageBackSubmitActionData() + { + Text = text, + DisplayText = displayText, + Value = value + } + }; + } +} \ No newline at end of file diff --git a/Libraries/Microsoft.Teams.Cards/Actions/OpenUrlAction.cs b/Libraries/Microsoft.Teams.Cards/Actions/OpenUrlAction.cs deleted file mode 100644 index f871aef9..00000000 --- a/Libraries/Microsoft.Teams.Cards/Actions/OpenUrlAction.cs +++ /dev/null @@ -1,30 +0,0 @@ -using System.Text.Json.Serialization; - -using Microsoft.Teams.Common; - -namespace Microsoft.Teams.Cards; - -public partial class CardType : StringEnum -{ - public static readonly CardType OpenUrlAction = new("Action.OpenUrl"); - public bool IsOpenUrlAction => OpenUrlAction.Equals(Value); -} - -/// -/// When invoked, show the given url either by launching it in an external web browser or showing within an embedded web browser. -/// -public class OpenUrlAction(string url) : SelectAction(CardType.OpenUrlAction) -{ - /// - /// The URL to open. - /// - [JsonPropertyName("url")] - [JsonPropertyOrder(10)] - public string Url { get; set; } = url; - - public OpenUrlAction WithUrl(string value) - { - Url = value; - return this; - } -} \ No newline at end of file diff --git a/Libraries/Microsoft.Teams.Cards/Actions/SelectAction.cs b/Libraries/Microsoft.Teams.Cards/Actions/SelectAction.cs deleted file mode 100644 index f480ff9a..00000000 --- a/Libraries/Microsoft.Teams.Cards/Actions/SelectAction.cs +++ /dev/null @@ -1,6 +0,0 @@ -namespace Microsoft.Teams.Cards; - -public class SelectAction(CardType type) : Action(type) -{ - -} \ No newline at end of file diff --git a/Libraries/Microsoft.Teams.Cards/Actions/ShowCardAction.cs b/Libraries/Microsoft.Teams.Cards/Actions/ShowCardAction.cs deleted file mode 100644 index 611408d3..00000000 --- a/Libraries/Microsoft.Teams.Cards/Actions/ShowCardAction.cs +++ /dev/null @@ -1,30 +0,0 @@ -using System.Text.Json.Serialization; - -using Microsoft.Teams.Common; - -namespace Microsoft.Teams.Cards; - -public partial class CardType : StringEnum -{ - public static readonly CardType ShowCardAction = new("Action.ShowCard"); - public bool IsShowCardAction => ShowCardAction.Equals(Value); -} - -/// -/// Defines an AdaptiveCard which is shown to the user when the button or link is clicked. -/// -public class ShowCardAction(Card card) : Action(CardType.ShowCardAction) -{ - /// - /// the card to display - /// - [JsonPropertyName("card")] - [JsonPropertyOrder(10)] - public Card Card { get; set; } = card; - - public ShowCardAction WithCard(Card value) - { - Card = value; - return this; - } -} \ No newline at end of file diff --git a/Libraries/Microsoft.Teams.Cards/Actions/SignInAction.cs b/Libraries/Microsoft.Teams.Cards/Actions/SignInAction.cs new file mode 100644 index 00000000..04398808 --- /dev/null +++ b/Libraries/Microsoft.Teams.Cards/Actions/SignInAction.cs @@ -0,0 +1,12 @@ +namespace Microsoft.Teams.Cards; + +public class SignInAction : SubmitAction +{ + public SignInAction(string value) + { + Data = new() + { + MsTeams = new SigninSubmitActionData(value) + }; + } +} \ No newline at end of file diff --git a/Libraries/Microsoft.Teams.Cards/Actions/SubmitAction/IMBackAction.cs b/Libraries/Microsoft.Teams.Cards/Actions/SubmitAction/IMBackAction.cs deleted file mode 100644 index 236ceb88..00000000 --- a/Libraries/Microsoft.Teams.Cards/Actions/SubmitAction/IMBackAction.cs +++ /dev/null @@ -1,55 +0,0 @@ -using System.Text.Json.Serialization; - -using Microsoft.Teams.Common; - -namespace Microsoft.Teams.Cards; - -public partial class SubmitActionType : StringEnum -{ - public static readonly SubmitActionType IMBack = new("imBack"); - public bool IsIMBack => IMBack.Equals(Value); -} - -public class IMBackAction : SubmitAction -{ - /// - /// Initial data that input fields will be combined with. These are essentially ‘hidden’ properties. - /// - [JsonPropertyName("data")] - [JsonPropertyOrder(11)] - public new IMBackActionData Data { get; set; } - - public IMBackAction(string value) - { - Data = new() - { - MSTeams = new(value) - }; - } -} - -/// -/// Initial data that input fields will be combined with. These are essentially ‘hidden’ properties. -/// -public class IMBackActionData : SubmitActionData -{ - /// - /// Teams specific payload data. - /// - [JsonPropertyName("msteams")] - [JsonPropertyOrder(0)] - public new required IMBackMSTeamsActionData MSTeams { get; set; } -} - -/// -/// the IMBackAction teams data -/// -public class IMBackMSTeamsActionData(string value) : MSTeamsActionData(SubmitActionType.IMBack) -{ - /// - /// String that needs to be echoed back in the chat. - /// - [JsonPropertyName("value")] - [JsonPropertyOrder(1)] - public string Value { get; set; } = value; -} \ No newline at end of file diff --git a/Libraries/Microsoft.Teams.Cards/Actions/SubmitAction/InvokeAction.cs b/Libraries/Microsoft.Teams.Cards/Actions/SubmitAction/InvokeAction.cs deleted file mode 100644 index 432261c1..00000000 --- a/Libraries/Microsoft.Teams.Cards/Actions/SubmitAction/InvokeAction.cs +++ /dev/null @@ -1,55 +0,0 @@ -using System.Text.Json.Serialization; - -using Microsoft.Teams.Common; - -namespace Microsoft.Teams.Cards; - -public partial class SubmitActionType : StringEnum -{ - public static readonly SubmitActionType Invoke = new("invoke"); - public bool IsInvoke => Invoke.Equals(Value); -} - -public class InvokeAction : SubmitAction -{ - /// - /// Initial data that input fields will be combined with. These are essentially ‘hidden’ properties. - /// - [JsonPropertyName("data")] - [JsonPropertyOrder(11)] - public new InvokeActionData Data { get; set; } - - public InvokeAction(object? value) - { - Data = new(value) - { - MSTeams = new(value) - }; - } -} - -/// -/// Initial data that input fields will be combined with. These are essentially ‘hidden’ properties. -/// -public class InvokeActionData(object? value) : SubmitActionData -{ - /// - /// Teams specific payload data. - /// - [JsonPropertyName("msteams")] - [JsonPropertyOrder(0)] - public new InvokeMSTeamsActionData MSTeams { get; set; } = new(value); -} - -/// -/// the InvokeAction teams data -/// -public class InvokeMSTeamsActionData(object? value) : MSTeamsActionData(SubmitActionType.Invoke) -{ - /// - /// Set the value to send with the invoke - /// - [JsonPropertyName("value")] - [JsonPropertyOrder(1)] - public object? Value { get; set; } = value; -} \ No newline at end of file diff --git a/Libraries/Microsoft.Teams.Cards/Actions/SubmitAction/MessageBackAction.cs b/Libraries/Microsoft.Teams.Cards/Actions/SubmitAction/MessageBackAction.cs deleted file mode 100644 index fcc326af..00000000 --- a/Libraries/Microsoft.Teams.Cards/Actions/SubmitAction/MessageBackAction.cs +++ /dev/null @@ -1,88 +0,0 @@ -using System.Text.Json.Serialization; - -using Microsoft.Teams.Common; - -namespace Microsoft.Teams.Cards; - -public partial class SubmitActionType : StringEnum -{ - public static readonly SubmitActionType MessageBack = new("messageBack"); - public bool IsMessageBack => MessageBack.Equals(Value); -} - -public class MessageBackAction : SubmitAction -{ - /// - /// Initial data that input fields will be combined with. These are essentially ‘hidden’ properties. - /// - [JsonPropertyName("data")] - [JsonPropertyOrder(11)] - public new MessageBackActionData Data { get; set; } - - public MessageBackAction(string text, string value) - { - Data = new() - { - MSTeams = new() - { - Text = text, - Value = value - } - }; - } - - public MessageBackAction(string text, string displayText, string value) - { - Data = new() - { - MSTeams = new() - { - Text = text, - DisplayText = displayText, - Value = value - } - }; - } -} - -/// -/// Initial data that input fields will be combined with. These are essentially ‘hidden’ properties. -/// -public class MessageBackActionData : SubmitActionData -{ - /// - /// Teams specific payload data. - /// - [JsonPropertyName("msteams")] - [JsonPropertyOrder(0)] - public new required MessageBackMSTeamsActionData MSTeams { get; set; } -} - -/// -/// the MessageBackAction teams data -/// -public class MessageBackMSTeamsActionData() : MSTeamsActionData(SubmitActionType.MessageBack) -{ - /// - /// Sent to your bot when the action is performed. - /// - [JsonPropertyName("text")] - [JsonPropertyOrder(1)] - public required string Text { get; set; } - - /// - /// Used by the user in the chat stream when the action is performed. - /// This text isn't sent to your bot. - /// - [JsonPropertyName("displayText")] - [JsonPropertyOrder(2)] - public string? DisplayText { get; set; } - - /// - /// Sent to your bot when the action is performed. You can encode context - /// for the action, such as unique identifiers or a `JSON` object. - /// - [JsonPropertyName("value")] - [JsonPropertyOrder(3)] - public required string Value { get; set; } -} \ No newline at end of file diff --git a/Libraries/Microsoft.Teams.Cards/Actions/SubmitAction/SignInAction.cs b/Libraries/Microsoft.Teams.Cards/Actions/SubmitAction/SignInAction.cs deleted file mode 100644 index 19e770da..00000000 --- a/Libraries/Microsoft.Teams.Cards/Actions/SubmitAction/SignInAction.cs +++ /dev/null @@ -1,55 +0,0 @@ -using System.Text.Json.Serialization; - -using Microsoft.Teams.Common; - -namespace Microsoft.Teams.Cards; - -public partial class SubmitActionType : StringEnum -{ - public static readonly SubmitActionType SignIn = new("signin"); - public bool IsSignIn => SignIn.Equals(Value); -} - -public class SignInAction : SubmitAction -{ - /// - /// Initial data that input fields will be combined with. These are essentially ‘hidden’ properties. - /// - [JsonPropertyName("data")] - [JsonPropertyOrder(11)] - public new SignInActionData Data { get; set; } - - public SignInAction(string value) - { - Data = new() - { - MSTeams = new(value) - }; - } -} - -/// -/// Initial data that input fields will be combined with. These are essentially ‘hidden’ properties. -/// -public class SignInActionData : SubmitActionData -{ - /// - /// Teams specific payload data. - /// - [JsonPropertyName("msteams")] - [JsonPropertyOrder(0)] - public new required SignInMSTeamsActionData MSTeams { get; set; } -} - -/// -/// the SignInAction teams data -/// -public class SignInMSTeamsActionData(string value) : MSTeamsActionData(SubmitActionType.SignIn) -{ - /// - /// Set to the `URL` where you want to redirect. - /// - [JsonPropertyName("value")] - [JsonPropertyOrder(1)] - public string Value { get; set; } = value; -} \ No newline at end of file diff --git a/Libraries/Microsoft.Teams.Cards/Actions/SubmitAction/SubmitAction.cs b/Libraries/Microsoft.Teams.Cards/Actions/SubmitAction/SubmitAction.cs deleted file mode 100644 index feabe554..00000000 --- a/Libraries/Microsoft.Teams.Cards/Actions/SubmitAction/SubmitAction.cs +++ /dev/null @@ -1,90 +0,0 @@ -using System.Text.Json; -using System.Text.Json.Serialization; - -using Microsoft.Teams.Common; - -namespace Microsoft.Teams.Cards; - -public partial class CardType : StringEnum -{ - public static readonly CardType SubmitAction = new("Action.Submit"); - public bool IsSubmitAction => SubmitAction.Equals(Value); -} - -[JsonConverter(typeof(JsonConverter))] -public partial class SubmitActionType(string value) : StringEnum(value) -{ -} - -/// -/// Gathers input fields, merges with optional data field, and sends an event to the client. It is up to the client to determine how this data is processed. For example: With BotFramework bots, the client would send an activity through the messaging medium to the bot. The inputs that are gathered are those on the current card, and in the case of a show card those on any parent cards. See https://docs.microsoft.com/en-us/adaptive-cards/authoring-cards/input-validation for more details. -/// -public class SubmitAction() : Action(CardType.SubmitAction) -{ - /// - /// Controls which inputs are associated with the action. - /// - [JsonPropertyName("associatedInputs")] - [JsonPropertyOrder(10)] - public AssociatedInputs? AssociatedInputs { get; set; } - - /// - /// Initial data that input fields will be combined with. These are essentially ‘hidden’ properties. - /// - [JsonPropertyName("data")] - [JsonPropertyOrder(11)] - public SubmitActionData? Data { get; set; } - - public SubmitAction WithAssociatedInputs(AssociatedInputs value) - { - AssociatedInputs = value; - return this; - } - - public SubmitAction WithData(SubmitActionData value) - { - Data = value; - return this; - } - - public override string ToString() - { - return JsonSerializer.Serialize(this, new JsonSerializerOptions() - { - WriteIndented = true, - DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull - }); - } -} - -/// -/// Initial data that input fields will be combined with. These are essentially ‘hidden’ properties. -/// -public class SubmitActionData -{ - /// - /// Teams specific payload data. - /// - [JsonPropertyName("msteams")] - [JsonPropertyOrder(0)] - public MSTeamsActionData? MSTeams { get; set; } - - [JsonExtensionData] - public IDictionary Properties { get; set; } = new Dictionary(); -} - -/// -/// Teams specific payload data. -/// -public class MSTeamsActionData(SubmitActionType type) -{ - /// - /// the type of submit action - /// - [JsonPropertyName("type")] - [JsonPropertyOrder(0)] - public SubmitActionType Type { get; set; } = type; - - [JsonExtensionData] - public IDictionary Properties { get; set; } = new Dictionary(); -} \ No newline at end of file diff --git a/Libraries/Microsoft.Teams.Cards/Actions/SubmitAction/TaskFetchAction.cs b/Libraries/Microsoft.Teams.Cards/Actions/SubmitAction/TaskFetchAction.cs deleted file mode 100644 index 364f46ce..00000000 --- a/Libraries/Microsoft.Teams.Cards/Actions/SubmitAction/TaskFetchAction.cs +++ /dev/null @@ -1,55 +0,0 @@ -using System.Text.Json.Serialization; - -using Microsoft.Teams.Common; - -namespace Microsoft.Teams.Cards; - -public partial class SubmitActionType : StringEnum -{ - public static readonly SubmitActionType TaskFetch = new("task/fetch"); - public bool IsTaskFetch => TaskFetch.Equals(Value); -} - -public class TaskFetchAction : SubmitAction -{ - /// - /// Initial data that input fields will be combined with. These are essentially ‘hidden’ properties. - /// - [JsonPropertyName("data")] - [JsonPropertyOrder(11)] - public new TaskFetchActionData Data { get; set; } - - public TaskFetchAction(object? value) - { - Data = new() - { - MSTeams = new(value) - }; - } -} - -/// -/// Initial data that input fields will be combined with. These are essentially ‘hidden’ properties. -/// -public class TaskFetchActionData : SubmitActionData -{ - /// - /// Teams specific payload data. - /// - [JsonPropertyName("msteams")] - [JsonPropertyOrder(0)] - public new required TaskFetchMSTeamsActionData MSTeams { get; set; } -} - -/// -/// the TaskFetchAction teams data -/// -public class TaskFetchMSTeamsActionData(object? value) : MSTeamsActionData(SubmitActionType.TaskFetch) -{ - /// - /// The data value sent with the `task/fetch` invoke. - /// - [JsonPropertyName("value")] - [JsonPropertyOrder(1)] - public object? Value { get; set; } = value; -} \ No newline at end of file diff --git a/Libraries/Microsoft.Teams.Cards/Actions/TaskFetchAction.cs b/Libraries/Microsoft.Teams.Cards/Actions/TaskFetchAction.cs new file mode 100644 index 00000000..db7b24fd --- /dev/null +++ b/Libraries/Microsoft.Teams.Cards/Actions/TaskFetchAction.cs @@ -0,0 +1,12 @@ +namespace Microsoft.Teams.Cards; + +public class TaskFetchAction : SubmitAction +{ + public TaskFetchAction(object value) + { + Data = new() + { + MsTeams = new TaskFetchSubmitActionData(value) + }; + } +} \ No newline at end of file diff --git a/Libraries/Microsoft.Teams.Cards/Actions/ToggleVisibilityAction.cs b/Libraries/Microsoft.Teams.Cards/Actions/ToggleVisibilityAction.cs deleted file mode 100644 index 00b7edfa..00000000 --- a/Libraries/Microsoft.Teams.Cards/Actions/ToggleVisibilityAction.cs +++ /dev/null @@ -1,66 +0,0 @@ -using System.Text.Json.Serialization; - -using Microsoft.Teams.Common; - -namespace Microsoft.Teams.Cards; - -public partial class CardType : StringEnum -{ - public static readonly CardType ToggleVisibilityAction = new("Action.ToggleVisibility"); - public bool IsToggleVisibilityAction => ToggleVisibilityAction.Equals(Value); -} - -/// -/// An action that toggles the visibility of associated card elements. -/// -public class ToggleVisibilityAction : SelectAction -{ - [JsonPropertyName("targetElements")] - [JsonPropertyOrder(10)] - public IList> TargetElements { get; set; } - - public ToggleVisibilityAction() : base(CardType.ToggleVisibilityAction) - { - TargetElements = []; - } - - public ToggleVisibilityAction(params string[] targetElements) : base(CardType.ToggleVisibilityAction) - { - TargetElements = []; - - foreach (var element in targetElements) - { - TargetElements.Add(new Union(element)); - } - } - - public ToggleVisibilityAction(params TargetElement[] targetElements) : base(CardType.ToggleVisibilityAction) - { - TargetElements = []; - - foreach (var element in targetElements) - { - TargetElements.Add(new Union(element)); - } - } - - public ToggleVisibilityAction AddTargets(params string[] value) - { - foreach (var element in value) - { - TargetElements.Add(new Union(element)); - } - - return this; - } - - public ToggleVisibilityAction AddTargets(params TargetElement[] value) - { - foreach (var element in value) - { - TargetElements.Add(new Union(element)); - } - - return this; - } -} \ No newline at end of file diff --git a/Libraries/Microsoft.Teams.Cards/Auth/Auth.cs b/Libraries/Microsoft.Teams.Cards/Auth/Auth.cs deleted file mode 100644 index cfb69727..00000000 --- a/Libraries/Microsoft.Teams.Cards/Auth/Auth.cs +++ /dev/null @@ -1,77 +0,0 @@ -using System.Text.Json; -using System.Text.Json.Serialization; - -namespace Microsoft.Teams.Cards; - -/// -/// Defines authentication information associated with a card. This maps to the OAuthCard type defined by the Bot Framework (https://docs.microsoft.com/dotnet/api/microsoft.bot.schema.oauthcard) -/// -public class Auth -{ - /// - /// Text that can be displayed to the end user when prompting them to authenticate. - /// - [JsonPropertyName("text")] - [JsonPropertyOrder(0)] - public string? Text { get; set; } - - /// - /// The identifier for registered OAuth connection setting information. - /// - [JsonPropertyName("connectionName")] - [JsonPropertyOrder(1)] - public string? ConnectionName { get; set; } - - /// - /// Provides information required to enable on-behalf-of single sign-on user authentication. - /// - [JsonPropertyName("tokenExchangeResource")] - [JsonPropertyOrder(2)] - public TokenExchangeResource? TokenExchangeResource { get; set; } - - /// - /// Buttons that should be displayed to the user when prompting for authentication. The array MUST contain one button of type “signin”. Other button types are not currently supported. - /// - [JsonPropertyName("buttons")] - [JsonPropertyOrder(3)] - public IList? Buttons { get; set; } - - public Auth WithText(string value) - { - Text = value; - return this; - } - - public Auth WithConnectionName(string value) - { - ConnectionName = value; - return this; - } - - public Auth WithTokenExchangeResource(TokenExchangeResource value) - { - TokenExchangeResource = value; - return this; - } - - public Auth AddButtons(params AuthCardButton[] value) - { - Buttons ??= []; - - foreach (var button in value) - { - Buttons.Add(button); - } - - return this; - } - - public override string ToString() - { - return JsonSerializer.Serialize(this, new JsonSerializerOptions() - { - WriteIndented = true, - DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull - }); - } -} \ No newline at end of file diff --git a/Libraries/Microsoft.Teams.Cards/Auth/AuthCardButton.cs b/Libraries/Microsoft.Teams.Cards/Auth/AuthCardButton.cs deleted file mode 100644 index f57d4111..00000000 --- a/Libraries/Microsoft.Teams.Cards/Auth/AuthCardButton.cs +++ /dev/null @@ -1,71 +0,0 @@ -using System.Text.Json; -using System.Text.Json.Serialization; - -namespace Microsoft.Teams.Cards; - -/// -/// Defines a button as displayed when prompting a user to authenticate. This maps to the cardAction type defined by the Bot Framework (https://docs.microsoft.com/dotnet/api/microsoft.bot.schema.cardaction). -/// -public class AuthCardButton -{ - /// - /// The type of the button. - /// - [JsonPropertyName("type")] - [JsonPropertyOrder(0)] - public required string Type { get; set; } - - /// - /// The value associated with the button. The meaning of value depends on the button’s type. - /// - [JsonPropertyName("value")] - [JsonPropertyOrder(1)] - public required string Value { get; set; } - - /// - /// The caption of the button. - /// - [JsonPropertyName("title")] - [JsonPropertyOrder(2)] - public string? Title { get; set; } - - /// - /// A URL to an image to display alongside the button’s caption. - /// - [JsonPropertyName("image")] - [JsonPropertyOrder(3)] - public string? Image { get; set; } - - public AuthCardButton WithType(string value) - { - Type = value; - return this; - } - - public AuthCardButton WithValue(string value) - { - Value = value; - return this; - } - - public AuthCardButton WithTitle(string value) - { - Title = value; - return this; - } - - public AuthCardButton WithImage(string value) - { - Image = value; - return this; - } - - public override string ToString() - { - return JsonSerializer.Serialize(this, new JsonSerializerOptions() - { - WriteIndented = true, - DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull - }); - } -} \ No newline at end of file diff --git a/Libraries/Microsoft.Teams.Cards/Auth/TokenExchangeResource.cs b/Libraries/Microsoft.Teams.Cards/Auth/TokenExchangeResource.cs deleted file mode 100644 index 12713ab8..00000000 --- a/Libraries/Microsoft.Teams.Cards/Auth/TokenExchangeResource.cs +++ /dev/null @@ -1,40 +0,0 @@ -using System.Text.Json; -using System.Text.Json.Serialization; - -namespace Microsoft.Teams.Cards; - -/// -/// Defines information required to enable on-behalf-of single sign-on user authentication. Maps to the TokenExchangeResource type defined by the Bot Framework (https://docs.microsoft.com/dotnet/api/microsoft.bot.schema.tokenexchangeresource) -/// -public class TokenExchangeResource -{ - /// - /// The unique identified of this token exchange instance. - /// - [JsonPropertyName("id")] - [JsonPropertyOrder(0)] - public required string Id { get; set; } - - /// - /// An application ID or resource identifier with which to exchange a token on behalf of. This property is identity provider- and application-specific. - /// - [JsonPropertyName("uri")] - [JsonPropertyOrder(1)] - public required string Uri { get; set; } - - /// - /// An identifier for the identity provider with which to attempt a token exchange. - /// - [JsonPropertyName("providerId")] - [JsonPropertyOrder(2)] - public required string ProviderId { get; set; } - - public override string ToString() - { - return JsonSerializer.Serialize(this, new JsonSerializerOptions() - { - WriteIndented = true, - DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull - }); - } -} \ No newline at end of file diff --git a/Libraries/Microsoft.Teams.Cards/Card.cs b/Libraries/Microsoft.Teams.Cards/Card.cs deleted file mode 100644 index 54af526f..00000000 --- a/Libraries/Microsoft.Teams.Cards/Card.cs +++ /dev/null @@ -1,220 +0,0 @@ -using System.Text.Json; -using System.Text.Json.Serialization; - -using Microsoft.Teams.Common; - -namespace Microsoft.Teams.Cards; - -/// -/// the card type -/// -[JsonConverter(typeof(JsonConverter))] -public partial class CardType(string value) : StringEnum(value) -{ - public static readonly CardType AdaptiveCard = new("AdaptiveCard"); - public bool IsAdaptiveCard => AdaptiveCard.Equals(Value); -} - -/// -/// An Adaptive Card, containing a free-form body of card elements, and an optional set of actions. -/// -public class Card -{ - /// - /// the cards type - /// - [JsonPropertyName("type")] - [JsonPropertyOrder(0)] - public CardType Type { get; } = CardType.AdaptiveCard; - - /// - /// The Adaptive Card schema. - /// - [JsonPropertyName("$schema")] - [JsonPropertyOrder(1)] - public string? Schema { get; set; } - - /// - /// Schema version that this card requires. If a client is lower than this version, the fallbackText will be rendered. NOTE: Version is not required for cards within an Action.ShowCard. However, it is required for the top-level card. - /// - [JsonPropertyName("version")] - [JsonPropertyOrder(2)] - public string Version { get; set; } = "1.6"; - - /// - /// Defines how the card can be refreshed by making a request to the target Bot. - /// - [JsonPropertyName("refresh")] - [JsonPropertyOrder(3)] - public Refresh? Refresh { get; set; } - - /// - /// Defines authentication information to enable on-behalf-of single sign on or just-in-time OAuth. - /// - [JsonPropertyName("authentication")] - [JsonPropertyOrder(4)] - public Auth? Authentication { get; set; } - - /// - /// The card elements to show in the primary card region. - /// - [JsonPropertyName("body")] - [JsonPropertyOrder(5)] - public IList? Body { get; set; } - - /// - /// The Actions to show in the card’s action bar. - /// - [JsonPropertyName("actions")] - [JsonPropertyOrder(6)] - public IList? Actions { get; set; } - - /// - /// An Action that will be invoked when the card is tapped or selected. Action.ShowCard is not supported. - /// - [JsonPropertyName("selectAction")] - [JsonPropertyOrder(7)] - public SelectAction? SelectAction { get; set; } - - /// - /// Text shown when the client doesn’t support the version specified (may contain markdown). - /// - [JsonPropertyName("fallbackText")] - [JsonPropertyOrder(8)] - public string? FallbackText { get; set; } - - /// - /// Specifies the background image of the card. - /// - [JsonPropertyName("backgroundImage")] - [JsonPropertyOrder(9)] - public IUnion? BackgroundImage { get; set; } - - /// - /// Specifies the minimum height of the card. - /// - [JsonPropertyName("minHeight")] - [JsonPropertyOrder(10)] - public string? MinHeight { get; set; } - - /// - /// When true content in this Adaptive Card should be presented right to left. When ‘false’ content in this Adaptive Card should be presented left to right. If unset, the default platform behavior will apply. - /// - [JsonPropertyName("rtl")] - [JsonPropertyOrder(11)] - public bool? Rtl { get; set; } - - /// - /// Specifies what should be spoken for this entire card. This is simple text or SSML fragment. - /// - [JsonPropertyName("speak")] - [JsonPropertyOrder(12)] - public string? Speak { get; set; } - - /// - /// The 2-letter ISO-639-1 language used in the card. Used to localize any date/time functions. - /// - [JsonPropertyName("lang")] - [JsonPropertyOrder(13)] - public string? Lang { get; set; } - - /// - /// Defines how the content should be aligned vertically within the container. Only relevant for fixed-height cards, or cards with a minHeight specified. - /// - [JsonPropertyName("verticalContentAlignment")] - [JsonPropertyOrder(14)] - public VerticalAlignment? VerticalContentAlignment { get; set; } - - [JsonPropertyName("msteams")] - [JsonPropertyOrder(15)] - public MSTeamsCardInfo? MSTeams { get; set; } - - public Card WithSchema(string value) - { - Schema = value; - return this; - } - - public Card WithVersion(string value) - { - Version = value; - return this; - } - - public Card WithRefresh(Refresh value) - { - Refresh = value; - return this; - } - - public Card WithAuth(Auth value) - { - Authentication = value; - return this; - } - - public Card WithSelectAction(SelectAction value) - { - SelectAction = value; - return this; - } - - public Card WithBody(params Element[] value) - { - Body = value; - return this; - } - - public Card AddCards(params Element[] value) - { - Body ??= []; - - foreach (var element in value) - { - Body.Add(element); - } - - return this; - } - - public Card AddActions(params Action[] value) - { - Actions ??= []; - - foreach (var action in value) - { - Actions.Add(action); - } - - return this; - } - - public override string ToString() - { - return JsonSerializer.Serialize(this, new JsonSerializerOptions() - { - WriteIndented = true, - DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull - }); - } -} - -/// -/// Card metadata for Microsoft Teams. -/// -public class MSTeamsCardInfo -{ - /// - /// Expands the card to take up the full width of the message. - /// - [JsonPropertyName("width")] - [JsonPropertyOrder(0)] - public string? Width { get; set; } - - /// - /// Conditional visibility of elements on different viewports. - /// - [JsonPropertyName("targetWidth")] - [JsonPropertyOrder(1)] - public TargetWidth? TargetWidth { get; set; } -} \ No newline at end of file diff --git a/Libraries/Microsoft.Teams.Cards/Charts/ChatColor.cs b/Libraries/Microsoft.Teams.Cards/Charts/ChatColor.cs deleted file mode 100644 index 0b36a434..00000000 --- a/Libraries/Microsoft.Teams.Cards/Charts/ChatColor.cs +++ /dev/null @@ -1,102 +0,0 @@ -using System.Text.Json.Serialization; - -using Microsoft.Teams.Common; - -namespace Microsoft.Teams.Cards; - -[JsonConverter(typeof(JsonConverter))] -public partial class ChartColor(string value) : StringEnum(value, caseSensitive: false) -{ - public static readonly ChartColor Good = new("good"); - public bool IsGood => Good.Equals(Value); - - public static readonly ChartColor Warning = new("warning"); - public bool IsWarning => Warning.Equals(Value); - - public static readonly ChartColor Attention = new("attention"); - public bool IsAttention => Attention.Equals(Value); - - public static readonly ChartColor Neutral = new("neutral"); - public bool IsNeutral => Neutral.Equals(Value); - - public static readonly ChartColor CategoricalRed = new("categoricalRed"); - public bool IsCategoricalRed => CategoricalRed.Equals(Value); - - public static readonly ChartColor CategoricalPurple = new("categoricalPurple"); - public bool IsCategoricalPurple => CategoricalPurple.Equals(Value); - - public static readonly ChartColor CategoricalLavender = new("categoricalLavender"); - public bool IsCategoricalLavender => CategoricalLavender.Equals(Value); - - public static readonly ChartColor CategoricalBlue = new("categoricalBlue"); - public bool IsCategoricalBlue => CategoricalBlue.Equals(Value); - - public static readonly ChartColor CategoricalLightBlue = new("categoricalLightBlue"); - public bool IsCategoricalLightBlue => CategoricalLightBlue.Equals(Value); - - public static readonly ChartColor CategoricalTeal = new("categoricalTeal"); - public bool IsCategoricalTeal => CategoricalTeal.Equals(Value); - - public static readonly ChartColor CategoricalGreen = new("categoricalGreen"); - public bool IsCategoricalGreen => CategoricalGreen.Equals(Value); - - public static readonly ChartColor CategoricalLime = new("categoricalLime"); - public bool IsCategoricalLime => CategoricalLime.Equals(Value); - - public static readonly ChartColor CategoricalMarigold = new("categoricalMarigold"); - public bool IsCategoricalMarigold => CategoricalMarigold.Equals(Value); - - public static readonly ChartColor Sequential1 = new("sequential1"); - public bool IsSequential1 => Sequential1.Equals(Value); - - public static readonly ChartColor Sequential2 = new("sequential2"); - public bool IsSequential2 => Sequential2.Equals(Value); - - public static readonly ChartColor Sequential3 = new("sequential3"); - public bool IsSequential3 => Sequential3.Equals(Value); - - public static readonly ChartColor Sequential4 = new("sequential4"); - public bool IsSequential4 => Sequential4.Equals(Value); - - public static readonly ChartColor Sequential5 = new("sequential5"); - public bool IsSequential5 => Sequential5.Equals(Value); - - public static readonly ChartColor Sequential6 = new("sequential6"); - public bool IsSequential6 => Sequential6.Equals(Value); - - public static readonly ChartColor Sequential7 = new("sequential7"); - public bool IsSequential7 => Sequential7.Equals(Value); - - public static readonly ChartColor Sequential8 = new("sequential8"); - public bool IsSequential8 => Sequential8.Equals(Value); - - public static readonly ChartColor DivergingBlue = new("divergingBlue"); - public bool IsDivergingBlue => DivergingBlue.Equals(Value); - - public static readonly ChartColor DivergingLightBlue = new("divergingLightBlue"); - public bool IsDivergingLightBlue => DivergingLightBlue.Equals(Value); - - public static readonly ChartColor DivergingCyan = new("divergingCyan"); - public bool IsDivergingCyan => DivergingCyan.Equals(Value); - - public static readonly ChartColor DivergingTeal = new("divergingTeal"); - public bool IsDivergingTeal => DivergingTeal.Equals(Value); - - public static readonly ChartColor DivergingYellow = new("divergingYellow"); - public bool IsDivergingYellow => DivergingYellow.Equals(Value); - - public static readonly ChartColor DivergingPeach = new("divergingPeach"); - public bool IsDivergingPeach => DivergingPeach.Equals(Value); - - public static readonly ChartColor DivergingLightRed = new("divergingLightRed"); - public bool IsDivergingLightRed => DivergingLightRed.Equals(Value); - - public static readonly ChartColor DivergingRed = new("divergingRed"); - public bool IsDivergingRed => DivergingRed.Equals(Value); - - public static readonly ChartColor DivergingMaroon = new("divergingMaroon"); - public bool IsDivergingMaroon => DivergingMaroon.Equals(Value); - - public static readonly ChartColor DivergingGray = new("divergingGray"); - public bool IsDivergingGray => DivergingGray.Equals(Value); -} \ No newline at end of file diff --git a/Libraries/Microsoft.Teams.Cards/Charts/DonutChart.cs b/Libraries/Microsoft.Teams.Cards/Charts/DonutChart.cs deleted file mode 100644 index 2d0efded..00000000 --- a/Libraries/Microsoft.Teams.Cards/Charts/DonutChart.cs +++ /dev/null @@ -1,81 +0,0 @@ -using System.Text.Json.Serialization; - -using Microsoft.Teams.Common; - -namespace Microsoft.Teams.Cards; - -public partial class CardType : StringEnum -{ - public static readonly CardType DonutChart = new("Chart.Donut"); - public bool IsDonutChart => DonutChart.Equals(Value); -} - -public class DonutChart(params DonutChartData[] data) : Element(CardType.DonutChart) -{ - /// - /// the title of the chart. - /// - [JsonPropertyName("title")] - [JsonPropertyOrder(12)] - public string? Title { get; set; } - - /// - /// the name of the set of colors to use. - /// - [JsonPropertyName("colorSet")] - [JsonPropertyOrder(13)] - public string? ColorSet { get; set; } - - /// - /// the data to display in the chart. - /// - [JsonPropertyName("data")] - [JsonPropertyOrder(14)] - public IList Data { get; set; } = data; - - public DonutChart WithTitle(string value) - { - Title = value; - return this; - } - - public DonutChart WithColorSet(string value) - { - ColorSet = value; - return this; - } - - public DonutChart AddData(params DonutChartData[] value) - { - foreach (var datapoint in value) - { - Data.Add(datapoint); - } - - return this; - } -} - -public class DonutChartData -{ - /// - /// the color to use for the data point. - /// - [JsonPropertyName("color")] - [JsonPropertyOrder(0)] - public ChartColor? Color { get; set; } - - /// - /// the legend of the chart. - /// - [JsonPropertyName("legend")] - [JsonPropertyOrder(1)] - public string? Legend { get; set; } - - /// - /// the value associated with the data point. - /// - [JsonPropertyName("value")] - [JsonPropertyOrder(2)] - public required int Value { get; set; } -} \ No newline at end of file diff --git a/Libraries/Microsoft.Teams.Cards/Charts/LineChart.cs b/Libraries/Microsoft.Teams.Cards/Charts/LineChart.cs deleted file mode 100644 index 9e73e594..00000000 --- a/Libraries/Microsoft.Teams.Cards/Charts/LineChart.cs +++ /dev/null @@ -1,123 +0,0 @@ -using System.Text.Json.Serialization; - -using Microsoft.Teams.Common; - -namespace Microsoft.Teams.Cards; - -public partial class CardType : StringEnum -{ - public static readonly CardType LineChart = new("Chart.Line"); - public bool IsLineChart => LineChart.Equals(Value); -} - -public class LineChart(params LineChartData[] data) : Element(CardType.LineChart) -{ - /// - /// the title of the chart. - /// - [JsonPropertyName("title")] - [JsonPropertyOrder(12)] - public string? Title { get; set; } - - /// - /// the color to use for all data points. - /// - [JsonPropertyName("color")] - [JsonPropertyOrder(13)] - public ChartColor? Color { get; set; } - - /// - /// the name of the set of colors to use. - /// - [JsonPropertyName("colorSet")] - [JsonPropertyOrder(14)] - public string? ColorSet { get; set; } - - /// - /// the data to display in the chart. - /// - [JsonPropertyName("data")] - [JsonPropertyOrder(15)] - public IList Data { get; set; } = data; - - public LineChart WithTitle(string value) - { - Title = value; - return this; - } - - public LineChart WithColor(ChartColor value) - { - Color = value; - return this; - } - - public LineChart WithColorSet(string value) - { - ColorSet = value; - return this; - } - - public LineChart AddData(params LineChartData[] value) - { - foreach (var datapoint in value) - { - Data.Add(datapoint); - } - - return this; - } -} - -public class LineChartData(params LineChartDataPoint[] values) -{ - /// - /// the color to use for the data point. - /// - [JsonPropertyName("color")] - [JsonPropertyOrder(0)] - public ChartColor? Color { get; set; } - - /// - /// the legend of the chart. - /// - [JsonPropertyName("legend")] - [JsonPropertyOrder(1)] - public string? Legend { get; set; } - - /// - /// the data points in the series. - /// - [JsonPropertyName("values")] - [JsonPropertyOrder(2)] - public IList Values { get; set; } = values; -} - -public class LineChartDataPoint -{ - /// - /// the x axis value of the data point. - /// - [JsonPropertyName("x")] - [JsonPropertyOrder(0)] - public IUnion X { get; set; } - - /// - /// the y axis value of the data point. - /// - [JsonPropertyName("y")] - [JsonPropertyOrder(1)] - public double Y { get; set; } - - public LineChartDataPoint(string x, double y) - { - X = new Union(x); - Y = y; - } - - public LineChartDataPoint(double x, double y) - { - X = new Union(x); - Y = y; - } -} \ No newline at end of file diff --git a/Libraries/Microsoft.Teams.Cards/Common/AssociatedInputs.cs b/Libraries/Microsoft.Teams.Cards/Common/AssociatedInputs.cs deleted file mode 100644 index 29df17d0..00000000 --- a/Libraries/Microsoft.Teams.Cards/Common/AssociatedInputs.cs +++ /dev/null @@ -1,15 +0,0 @@ -using System.Text.Json.Serialization; - -using Microsoft.Teams.Common; - -namespace Microsoft.Teams.Cards; - -[JsonConverter(typeof(JsonConverter))] -public partial class AssociatedInputs(string value) : StringEnum(value, caseSensitive: false) -{ - public static readonly AssociatedInputs Auto = new("auto"); - public bool IsAuto => Auto.Equals(Value); - - public static readonly AssociatedInputs None = new("none"); - public bool IsNone => None.Equals(Value); -} \ No newline at end of file diff --git a/Libraries/Microsoft.Teams.Cards/Common/Color.cs b/Libraries/Microsoft.Teams.Cards/Common/Color.cs deleted file mode 100644 index 0c27c1e2..00000000 --- a/Libraries/Microsoft.Teams.Cards/Common/Color.cs +++ /dev/null @@ -1,30 +0,0 @@ -using System.Text.Json.Serialization; - -using Microsoft.Teams.Common; - -namespace Microsoft.Teams.Cards; - -[JsonConverter(typeof(JsonConverter))] -public partial class Color(string value) : StringEnum(value, caseSensitive: false) -{ - public static readonly Color Default = new("default"); - public bool IsDefault => Default.Equals(Value); - - public static readonly Color Dark = new("dark"); - public bool IsDark => Dark.Equals(Value); - - public static readonly Color Light = new("light"); - public bool IsLight => Light.Equals(Value); - - public static readonly Color Accent = new("accent"); - public bool IsAccent => Accent.Equals(Value); - - public static readonly Color Good = new("good"); - public bool IsGood => Good.Equals(Value); - - public static readonly Color Warning = new("warning"); - public bool IsWarning => Warning.Equals(Value); - - public static readonly Color Attention = new("attention"); - public bool IsAttention => Attention.Equals(Value); -} \ No newline at end of file diff --git a/Libraries/Microsoft.Teams.Cards/Common/Font.cs b/Libraries/Microsoft.Teams.Cards/Common/Font.cs deleted file mode 100644 index ccb74a09..00000000 --- a/Libraries/Microsoft.Teams.Cards/Common/Font.cs +++ /dev/null @@ -1,47 +0,0 @@ -using System.Text.Json.Serialization; - -using Microsoft.Teams.Common; - -namespace Microsoft.Teams.Cards; - -[JsonConverter(typeof(JsonConverter))] -public partial class FontSize(string value) : StringEnum(value, caseSensitive: false) -{ - public static readonly FontSize Default = new("default"); - public bool IsDefault => Default.Equals(Value); - - public static readonly FontSize Small = new("small"); - public bool IsSmall => Small.Equals(Value); - - public static readonly FontSize Medium = new("medium"); - public bool IsMedium => Medium.Equals(Value); - - public static readonly FontSize Large = new("large"); - public bool IsLarge => Large.Equals(Value); - - public static readonly FontSize ExtraLarge = new("extraLarge"); - public bool IsExtraLarge => ExtraLarge.Equals(Value); -} - -[JsonConverter(typeof(JsonConverter))] -public partial class FontType(string value) : StringEnum(value, caseSensitive: false) -{ - public static readonly FontType Default = new("default"); - public bool IsDefault => Default.Equals(Value); - - public static readonly FontType Monospace = new("monospace"); - public bool IsMonospace => Monospace.Equals(Value); -} - -[JsonConverter(typeof(JsonConverter))] -public partial class FontWeight(string value) : StringEnum(value, caseSensitive: false) -{ - public static readonly FontWeight Default = new("default"); - public bool IsDefault => Default.Equals(Value); - - public static readonly FontWeight Lighter = new("lighter"); - public bool IsLighter => Lighter.Equals(Value); - - public static readonly FontWeight Bolder = new("bolder"); - public bool IsBolder => Bolder.Equals(Value); -} \ No newline at end of file diff --git a/Libraries/Microsoft.Teams.Cards/Common/Height.cs b/Libraries/Microsoft.Teams.Cards/Common/Height.cs deleted file mode 100644 index b44d0bc9..00000000 --- a/Libraries/Microsoft.Teams.Cards/Common/Height.cs +++ /dev/null @@ -1,18 +0,0 @@ -using System.Text.Json.Serialization; - -using Microsoft.Teams.Common; - -namespace Microsoft.Teams.Cards; - -/// -/// `\"auto\"`, `\"stretch\"`, a number representing relative width of the column in the column group, or in version 1.1 and higher, a specific pixel width, like `\"50px\"`. -/// -[JsonConverter(typeof(JsonConverter))] -public partial class Height(string value) : StringEnum(value, caseSensitive: false) -{ - public static readonly Height Auto = new("auto"); - public bool IsAuto => Auto.Equals(Value); - - public static readonly Height Stretch = new("stretch"); - public bool IsStretch => Stretch.Equals(Value); -} \ No newline at end of file diff --git a/Libraries/Microsoft.Teams.Cards/Common/HorizontalAlignment.cs b/Libraries/Microsoft.Teams.Cards/Common/HorizontalAlignment.cs deleted file mode 100644 index a0efa7d8..00000000 --- a/Libraries/Microsoft.Teams.Cards/Common/HorizontalAlignment.cs +++ /dev/null @@ -1,21 +0,0 @@ -using System.Text.Json.Serialization; - -using Microsoft.Teams.Common; - -namespace Microsoft.Teams.Cards; - -/// -/// Describes how the image should be aligned if it must be cropped or if using repeat fill mode. -/// -[JsonConverter(typeof(JsonConverter))] -public partial class HorizontalAlignment(string value) : StringEnum(value, caseSensitive: false) -{ - public static readonly HorizontalAlignment Left = new("left"); - public bool IsLeft => Left.Equals(Value); - - public static readonly HorizontalAlignment Center = new("center"); - public bool IsCenter => Center.Equals(Value); - - public static readonly HorizontalAlignment Right = new("right"); - public bool IsRight => Right.Equals(Value); -} \ No newline at end of file diff --git a/Libraries/Microsoft.Teams.Cards/Common/Refresh.cs b/Libraries/Microsoft.Teams.Cards/Common/Refresh.cs deleted file mode 100644 index e7f597fe..00000000 --- a/Libraries/Microsoft.Teams.Cards/Common/Refresh.cs +++ /dev/null @@ -1,30 +0,0 @@ -using System.Text.Json.Serialization; - -namespace Microsoft.Teams.Cards; - -/// -/// Defines how a card can be refreshed by making a request to the target Bot. -/// -public class Refresh -{ - /// - /// The action to be executed to refresh the card. Clients can run this refresh action automatically or can provide an affordance for users to trigger it manually. - /// - [JsonPropertyName("action")] - [JsonPropertyOrder(0)] - public object? Action { get; set; } - - /// - /// A timestamp that informs a Host when the card content has expired, and that it should trigger a refresh as appropriate. The format is ISO-8601 Instant format. E.g., 2022-01-01T12:00:00Z - /// - [JsonPropertyName("expires")] - [JsonPropertyOrder(1)] - public string? Expires { get; set; } - - /// - /// A list of user Ids informing the client for which users should the refresh action should be run automatically. Some clients will not run the refresh action automatically unless this property is specified. Some clients may ignore this property and always run the refresh action automatically. - /// - [JsonPropertyName("userIds")] - [JsonPropertyOrder(2)] - public IList? UserIds { get; set; } -} \ No newline at end of file diff --git a/Libraries/Microsoft.Teams.Cards/Common/Spacing.cs b/Libraries/Microsoft.Teams.Cards/Common/Spacing.cs deleted file mode 100644 index ed5fc153..00000000 --- a/Libraries/Microsoft.Teams.Cards/Common/Spacing.cs +++ /dev/null @@ -1,33 +0,0 @@ -using System.Text.Json.Serialization; - -using Microsoft.Teams.Common; - -namespace Microsoft.Teams.Cards; - -/// -/// Specifies how much spacing. Hosts pick the exact pixel amounts for each of these. -/// -[JsonConverter(typeof(JsonConverter))] -public partial class Spacing(string value) : StringEnum(value, caseSensitive: false) -{ - public static readonly Spacing Default = new("default"); - public bool IsDefault => Default.Equals(Value); - - public static readonly Spacing None = new("none"); - public bool IsNone => None.Equals(Value); - - public static readonly Spacing Small = new("small"); - public bool IsSmall => Small.Equals(Value); - - public static readonly Spacing Medium = new("medium"); - public bool IsMedium => Medium.Equals(Value); - - public static readonly Spacing Large = new("large"); - public bool IsLarge => Large.Equals(Value); - - public static readonly Spacing ExtraLarge = new("extraLarge"); - public bool IsExtraLarge => ExtraLarge.Equals(Value); - - public static readonly Spacing Padding = new("padding"); - public bool IsPadding => Padding.Equals(Value); -} \ No newline at end of file diff --git a/Libraries/Microsoft.Teams.Cards/Common/StringBool.cs b/Libraries/Microsoft.Teams.Cards/Common/StringBool.cs deleted file mode 100644 index 77ea6dea..00000000 --- a/Libraries/Microsoft.Teams.Cards/Common/StringBool.cs +++ /dev/null @@ -1,18 +0,0 @@ -using System.Text.Json.Serialization; - -using Microsoft.Teams.Common; - -namespace Microsoft.Teams.Cards; - -/// -/// a string representation of a boolean value -/// -[JsonConverter(typeof(JsonConverter))] -public partial class StringBool(string value) : StringEnum(value, caseSensitive: false) -{ - public static readonly StringBool True = new("true"); - public bool IsTrue => True.Equals(Value); - - public static readonly StringBool False = new("false"); - public bool IsFalse => False.Equals(Value); -} \ No newline at end of file diff --git a/Libraries/Microsoft.Teams.Cards/Common/TargetElement.cs b/Libraries/Microsoft.Teams.Cards/Common/TargetElement.cs deleted file mode 100644 index 58f1f29b..00000000 --- a/Libraries/Microsoft.Teams.Cards/Common/TargetElement.cs +++ /dev/null @@ -1,30 +0,0 @@ -using System.Text.Json.Serialization; - -namespace Microsoft.Teams.Cards; - -/// -/// Represents an entry for Action.ToggleVisibility's targetElements property -/// -public class TargetElement -{ - /// - /// the type - /// - [JsonPropertyName("type")] - [JsonPropertyOrder(0)] - public string Type { get; } = "TargetElement"; - - /// - /// Element ID of element to toggle - /// - [JsonPropertyName("elementId")] - [JsonPropertyOrder(1)] - public required string ElementId { get; set; } - - /// - /// If `true`, always show target element. If `false`, always hide target element. If not supplied, toggle target element's visibility. - /// - [JsonPropertyName("isVisible")] - [JsonPropertyOrder(2)] - public bool? IsVisible { get; set; } -} \ No newline at end of file diff --git a/Libraries/Microsoft.Teams.Cards/Common/TargetWidth.cs b/Libraries/Microsoft.Teams.Cards/Common/TargetWidth.cs deleted file mode 100644 index 42a535c8..00000000 --- a/Libraries/Microsoft.Teams.Cards/Common/TargetWidth.cs +++ /dev/null @@ -1,51 +0,0 @@ -using System.Text.Json.Serialization; - -using Microsoft.Teams.Common; - -namespace Microsoft.Teams.Cards; - -/// -/// Controls for which card width the element should be displayed. -/// If targetWidth isn't specified, the element is rendered at all card widths. -/// Using targetWidth makes it possible to author responsive cards that adapt -/// their layout to the available horizontal space. -/// -[JsonConverter(typeof(JsonConverter))] -public partial class TargetWidth(string value) : StringEnum(value, caseSensitive: false) -{ - public static readonly TargetWidth VeryNarrow = new("VeryNarrow"); - public bool IsVeryNarrow => VeryNarrow.Equals(Value); - - public static readonly TargetWidth Narrow = new("Narrow"); - public bool IsNarrow => Narrow.Equals(Value); - - public static readonly TargetWidth Standard = new("Standard"); - public bool IsStandard => Standard.Equals(Value); - - public static readonly TargetWidth Wide = new("Wide"); - public bool IsWide => Wide.Equals(Value); - - public static readonly TargetWidth AtLeastVeryNarrow = new("atLeast:VeryNarrow"); - public bool IsAtLeastVeryNarrow => AtLeastVeryNarrow.Equals(Value); - - public static readonly TargetWidth AtMostVeryNarrow = new("atMost:VeryNarrow"); - public bool IsAtMostVeryNarrow => AtMostVeryNarrow.Equals(Value); - - public static readonly TargetWidth AtLeastNarrow = new("atLeast:Narrow"); - public bool IsAtLeastNarrow => AtLeastNarrow.Equals(Value); - - public static readonly TargetWidth AtMostNarrow = new("atMost:Narrow"); - public bool IsAtMostNarrow => AtMostNarrow.Equals(Value); - - public static readonly TargetWidth AtLeastStandard = new("atLeast:Standard"); - public bool IsAtLeastStandard => AtLeastStandard.Equals(Value); - - public static readonly TargetWidth AtMostStandard = new("atMost:Standard"); - public bool IsAtMostStandard => AtMostStandard.Equals(Value); - - public static readonly TargetWidth AtLeastWide = new("atLeast:Wide"); - public bool IsAtLeastWide => AtLeastWide.Equals(Value); - - public static readonly TargetWidth AtMostWide = new("atMost:Wide"); - public bool IsAtMostWide => AtMostWide.Equals(Value); -} \ No newline at end of file diff --git a/Libraries/Microsoft.Teams.Cards/Common/VerticalAlignment.cs b/Libraries/Microsoft.Teams.Cards/Common/VerticalAlignment.cs deleted file mode 100644 index 41980102..00000000 --- a/Libraries/Microsoft.Teams.Cards/Common/VerticalAlignment.cs +++ /dev/null @@ -1,21 +0,0 @@ -using System.Text.Json.Serialization; - -using Microsoft.Teams.Common; - -namespace Microsoft.Teams.Cards; - -/// -/// Describes how the image should be aligned if it must be cropped or if using repeat fill mode. -/// -[JsonConverter(typeof(JsonConverter))] -public partial class VerticalAlignment(string value) : StringEnum(value, caseSensitive: false) -{ - public static readonly VerticalAlignment Top = new("top"); - public bool IsTop => Top.Equals(Value); - - public static readonly VerticalAlignment Center = new("center"); - public bool IsCenter => Center.Equals(Value); - - public static readonly VerticalAlignment Bottom = new("bottom"); - public bool IsBottom => Bottom.Equals(Value); -} \ No newline at end of file diff --git a/Libraries/Microsoft.Teams.Cards/Common/Width.cs b/Libraries/Microsoft.Teams.Cards/Common/Width.cs deleted file mode 100644 index 98b36ebb..00000000 --- a/Libraries/Microsoft.Teams.Cards/Common/Width.cs +++ /dev/null @@ -1,18 +0,0 @@ -using System.Text.Json.Serialization; - -using Microsoft.Teams.Common; - -namespace Microsoft.Teams.Cards; - -/// -/// `\"auto\"`, `\"stretch\"`, a number representing relative width of the column in the column group, or in version 1.1 and higher, a specific pixel width, like `\"50px\"`. -/// -[JsonConverter(typeof(JsonConverter))] -public partial class Width(string value) : StringEnum(value, caseSensitive: false) -{ - public static readonly Width Auto = new("auto"); - public bool IsAuto => Auto.Equals(Value); - - public static readonly Width Stretch = new("stretch"); - public bool IsStretch => Stretch.Equals(Value); -} \ No newline at end of file diff --git a/Libraries/Microsoft.Teams.Cards/Containers/ActionSet.cs b/Libraries/Microsoft.Teams.Cards/Containers/ActionSet.cs deleted file mode 100644 index ee540279..00000000 --- a/Libraries/Microsoft.Teams.Cards/Containers/ActionSet.cs +++ /dev/null @@ -1,34 +0,0 @@ -using System.Text.Json.Serialization; - -using Microsoft.Teams.Common; - -namespace Microsoft.Teams.Cards; - -public partial class CardType : StringEnum -{ - public static readonly CardType ActionSet = new("ActionSet"); - public bool IsActionSet => ActionSet.Equals(Value); -} - -/// -/// Displays a set of actions. -/// -public class ActionSet(params Action[] actions) : Element(CardType.ActionSet) -{ - /// - /// The array of `Action` elements to show. - /// - [JsonPropertyName("actions")] - [JsonPropertyOrder(12)] - public IList Actions { get; set; } = actions; - - public ActionSet AddActions(params Action[] value) - { - foreach (var action in value) - { - Actions.Add(action); - } - - return this; - } -} \ No newline at end of file diff --git a/Libraries/Microsoft.Teams.Cards/Containers/Carousel.cs b/Libraries/Microsoft.Teams.Cards/Containers/Carousel.cs deleted file mode 100644 index be4e59de..00000000 --- a/Libraries/Microsoft.Teams.Cards/Containers/Carousel.cs +++ /dev/null @@ -1,76 +0,0 @@ -using System.Text.Json.Serialization; - -using Microsoft.Teams.Common; - -namespace Microsoft.Teams.Cards; - -public partial class CardType : StringEnum -{ - public static readonly CardType Carousel = new("Carousel"); - public bool IsCarousel => Carousel.Equals(Value); -} - -/// -/// Controls the type of animation to use to navigate between pages. -/// -[JsonConverter(typeof(JsonConverter))] -public partial class PageAnimation(string value) : StringEnum(value, caseSensitive: false) -{ - public static readonly PageAnimation Slide = new("slide"); - public bool IsSlide => Slide.Equals(Value); - - public static readonly PageAnimation CrossFade = new("crossFade"); - public bool IsCrossFade => CrossFade.Equals(Value); - - public static readonly PageAnimation None = new("none"); - public bool IsNone => None.Equals(Value); -} - -/// -/// A carousel with sliding pages. -/// -public class Carousel(params CarouselPage[] pages) : ContainerElement(CardType.Carousel) -{ - /// - /// The minimum height, in pixels, of the container, in the px format. - /// - [JsonPropertyName("minHeight")] - [JsonPropertyOrder(18)] - public string? MinHeight { get; set; } - - /// - /// Controls the type of animation to use to navigate between pages. - /// - [JsonPropertyName("pageAnimation")] - [JsonPropertyOrder(19)] - public PageAnimation? PageAnimation { get; set; } - - /// - /// The pages in the carousel. - /// - [JsonPropertyName("pages")] - [JsonPropertyOrder(20)] - public IList Pages { get; set; } = pages; - - public Carousel WithMinHeight(string value) - { - MinHeight = value; - return this; - } - - public Carousel WithPageAnimation(PageAnimation value) - { - PageAnimation = value; - return this; - } - - public Carousel AddPages(params CarouselPage[] value) - { - foreach (var page in value) - { - Pages.Add(page); - } - - return this; - } -} \ No newline at end of file diff --git a/Libraries/Microsoft.Teams.Cards/Containers/CarouselPage.cs b/Libraries/Microsoft.Teams.Cards/Containers/CarouselPage.cs deleted file mode 100644 index ce00b541..00000000 --- a/Libraries/Microsoft.Teams.Cards/Containers/CarouselPage.cs +++ /dev/null @@ -1,76 +0,0 @@ -using System.Text.Json.Serialization; - -using Microsoft.Teams.Common; - -namespace Microsoft.Teams.Cards; - -public partial class CardType : StringEnum -{ - public static readonly CardType CarouselPage = new("CarouselPage"); - public bool IsCarouselPage => CarouselPage.Equals(Value); -} - -/// -/// A page inside a Carousel element. -/// -public class CarouselPage(params Element[] items) : ContainerElement(CardType.CarouselPage) -{ - /// - /// The card elements to render inside the `CarouselPage`. - /// - [JsonPropertyName("items")] - [JsonPropertyOrder(18)] - public IList Items { get; set; } = items; - - /// - /// The maximum height, in pixels, of the container, in the px format. When the content of a container exceeds the container's maximum height, a vertical scrollbar is displayed. - /// - [JsonPropertyName("maxHeight")] - [JsonPropertyOrder(19)] - public string? MaxHeight { get; set; } - - /// - /// The minimum height, in pixels, of the container, in the px format. - /// - [JsonPropertyName("minHeight")] - [JsonPropertyOrder(20)] - public string? MinHeight { get; set; } - - /// - /// The style of the container. Container styles control the colors of the background, border and text inside the container, in such a way that contrast requirements are always met. - /// - [JsonPropertyName("style")] - [JsonPropertyOrder(21)] - public ContainerStyle? Style { get; set; } - - /// - /// Defines how the content should be aligned vertically within the container. When not specified, the value of verticalContentAlignment is inherited from the parent container. If no parent container has verticalContentAlignment set, it defaults to Top. - /// - [JsonPropertyName("verticalContentAlignment")] - [JsonPropertyOrder(22)] - public VerticalAlignment? VerticalContentAlignment; - - public CarouselPage WithMaxHeight(string value) - { - MaxHeight = value; - return this; - } - - public CarouselPage WithMinHeight(string value) - { - MinHeight = value; - return this; - } - - public CarouselPage WithStyle(ContainerStyle value) - { - Style = value; - return this; - } - - public CarouselPage WithVerticalAlignment(VerticalAlignment value) - { - VerticalContentAlignment = value; - return this; - } -} \ No newline at end of file diff --git a/Libraries/Microsoft.Teams.Cards/Containers/Column.cs b/Libraries/Microsoft.Teams.Cards/Containers/Column.cs deleted file mode 100644 index 2819b888..00000000 --- a/Libraries/Microsoft.Teams.Cards/Containers/Column.cs +++ /dev/null @@ -1,83 +0,0 @@ -using System.Text.Json.Serialization; - -using Microsoft.Teams.Common; - -namespace Microsoft.Teams.Cards; - -public partial class CardType : StringEnum -{ - public static readonly CardType Column = new("Column"); - public bool IsColumn => Column.Equals(Value); -} - -/// -/// Defines a container that is part of a ColumnSet. -/// -public class Column(params Element[] items) : ContainerElement(CardType.Column) -{ - [JsonPropertyName("items")] - [JsonPropertyOrder(18)] - public IList Items { get; set; } = items; - - /// - /// The minimum height, in pixels, of the container, in the px format. - /// - [JsonPropertyName("minHeight")] - [JsonPropertyOrder(19)] - public string? MinHeight { get; set; } - - /// - /// Style hint for `Container`. - /// - [JsonPropertyName("style")] - [JsonPropertyOrder(20)] - public ContainerStyle? Style { get; set; } - - /// - /// Defines how the content should be aligned vertically within the container. When not specified, the value of verticalContentAlignment is inherited from the parent container. If no parent container has verticalContentAlignment set, it defaults to Top. - /// - [JsonPropertyName("verticalContentAlignment")] - [JsonPropertyOrder(22)] - public VerticalAlignment? VerticalContentAlignment; - - /// - /// `\"auto\"`, `\"stretch\"`, a number representing relative width of the column in the column group, or in version 1.1 and higher, a specific pixel width, like `\"50px\"`. - /// - [JsonPropertyName("width")] - [JsonPropertyOrder(23)] - public Width? Width { get; set; } - - public Column WithStyle(ContainerStyle value) - { - Style = value; - return this; - } - - public Column WithVerticalAlignment(VerticalAlignment value) - { - VerticalContentAlignment = value; - return this; - } - - public Column WithMinHeight(string value) - { - MinHeight = value; - return this; - } - - public Column WithWidth(Width value) - { - Width = value; - return this; - } - - public Column AddCards(params Element[] value) - { - foreach (var card in value) - { - Items.Add(card); - } - - return this; - } -} \ No newline at end of file diff --git a/Libraries/Microsoft.Teams.Cards/Containers/ColumnSet.cs b/Libraries/Microsoft.Teams.Cards/Containers/ColumnSet.cs deleted file mode 100644 index 71efd09a..00000000 --- a/Libraries/Microsoft.Teams.Cards/Containers/ColumnSet.cs +++ /dev/null @@ -1,74 +0,0 @@ -using System.Text.Json.Serialization; - -using Microsoft.Teams.Common; - -namespace Microsoft.Teams.Cards; - -public partial class CardType : StringEnum -{ - public static readonly CardType ColumnSet = new("ColumnSet"); - public bool IsColumnSet => ColumnSet.Equals(Value); -} - -/// -/// ColumnSet divides a region into Columns, allowing elements to sit side-by-side. -/// -public class ColumnSet(params Column[] columns) : ContainerElement(CardType.ColumnSet) -{ - /// - /// The array of `Columns` to divide the region into. - /// - [JsonPropertyName("columns")] - [JsonPropertyOrder(18)] - public IList Columns { get; set; } = columns; - - /// - /// The minimum height, in pixels, of the container, in the px format. - /// - [JsonPropertyName("minHeight")] - [JsonPropertyOrder(19)] - public string? MinHeight { get; set; } - - /// - /// Style hint for `Container`. - /// - [JsonPropertyName("style")] - [JsonPropertyOrder(20)] - public ContainerStyle? Style { get; set; } - - /// - /// Defines how the content should be aligned vertically within the container. When not specified, the value of verticalContentAlignment is inherited from the parent container. If no parent container has verticalContentAlignment set, it defaults to Top. - /// - [JsonPropertyName("horizontalContentAlignment")] - [JsonPropertyOrder(22)] - public HorizontalAlignment? HorizontalContentAlignment; - - public ColumnSet WithStyle(ContainerStyle value) - { - Style = value; - return this; - } - - public ColumnSet WithHorizontalContentAlignment(HorizontalAlignment value) - { - HorizontalContentAlignment = value; - return this; - } - - public ColumnSet WithMinHeight(string value) - { - MinHeight = value; - return this; - } - - - public ColumnSet AddColumns(params Column[] value) - { - foreach (var card in value) - { - Columns.Add(card); - } - - return this; - } -} \ No newline at end of file diff --git a/Libraries/Microsoft.Teams.Cards/Containers/Container.cs b/Libraries/Microsoft.Teams.Cards/Containers/Container.cs deleted file mode 100644 index 8acd802e..00000000 --- a/Libraries/Microsoft.Teams.Cards/Containers/Container.cs +++ /dev/null @@ -1,98 +0,0 @@ -using System.Text.Json.Serialization; - -using Microsoft.Teams.Common; - -namespace Microsoft.Teams.Cards; - -public partial class CardType : StringEnum -{ - public static readonly CardType Container = new("Container"); - public bool IsContainer => Container.Equals(Value); -} - -/// -/// The style of the container. Container styles control the colors of the background, border and text inside the container, in such a way that contrast requirements are always met. -/// -[JsonConverter(typeof(JsonConverter))] -public partial class ContainerStyle(string value) : StringEnum(value, caseSensitive: false) -{ - public static readonly ContainerStyle Default = new("default"); - public bool IsDefault => Default.Equals(Value); - - public static readonly ContainerStyle Emphasis = new("emphasis"); - public bool IsEmphasis => Emphasis.Equals(Value); - - public static readonly ContainerStyle Good = new("good"); - public bool IsGood => Good.Equals(Value); - - public static readonly ContainerStyle Attention = new("attention"); - public bool IsAttention => Attention.Equals(Value); - - public static readonly ContainerStyle Warning = new("warning"); - public bool IsWarning => Warning.Equals(Value); - - public static readonly ContainerStyle Accent = new("accent"); - public bool IsAccent => Accent.Equals(Value); -} - -/// -/// Containers group items together. -/// -public class Container(params Element[] items) : ContainerElement(CardType.Container) -{ - /// - /// The card elements to render inside the `Container`. - /// - [JsonPropertyName("items")] - [JsonPropertyOrder(19)] - public IList Items { get; set; } = items; - - /// - /// Style hint for `Container`. - /// - [JsonPropertyName("style")] - [JsonPropertyOrder(20)] - public ContainerStyle? Style { get; set; } - - /// - /// Defines how the content should be aligned vertically within the container. When not specified, the value of verticalContentAlignment is inherited from the parent container. If no parent container has verticalContentAlignment set, it defaults to Top. - /// - [JsonPropertyName("verticalContentAlignment")] - [JsonPropertyOrder(21)] - public VerticalAlignment? VerticalContentAlignment; - - /// - /// Specifies the minimum height of the container in pixels, like `\"80px\"`. - /// - [JsonPropertyName("minHeight")] - [JsonPropertyOrder(22)] - public string? MinHeight { get; set; } - - public Container WithStyle(ContainerStyle value) - { - Style = value; - return this; - } - - public Container WithVerticalAlignment(VerticalAlignment value) - { - VerticalContentAlignment = value; - return this; - } - - public Container WithMinHeight(string value) - { - MinHeight = value; - return this; - } - - public Container AddCards(params Element[] value) - { - foreach (var card in value) - { - Items.Add(card); - } - - return this; - } -} \ No newline at end of file diff --git a/Libraries/Microsoft.Teams.Cards/Containers/ContainerElement.cs b/Libraries/Microsoft.Teams.Cards/Containers/ContainerElement.cs deleted file mode 100644 index 92918f45..00000000 --- a/Libraries/Microsoft.Teams.Cards/Containers/ContainerElement.cs +++ /dev/null @@ -1,108 +0,0 @@ -using System.Text.Json.Serialization; - -using Microsoft.Teams.Common; - -namespace Microsoft.Teams.Cards; - -/// -/// an element that contains other elements -/// -public abstract class ContainerElement(CardType type) : Element(type) -{ - /// - /// The layouts associated with the container. The container can dynamically switch from one layout to another as the card's width changes. See Container layouts for more details. - /// - [JsonPropertyName("layouts")] - [JsonPropertyOrder(12)] - public IList? Layouts { get; set; } - - /// - /// Specifies the background image. Acceptable formats are PNG, JPEG, and GIF - /// - [JsonPropertyName("backgroundImage")] - [JsonPropertyOrder(13)] - public IUnion? BackgroundImage { get; set; } - - /// - /// Determines whether the column should bleed through its parent's padding. - /// - [JsonPropertyName("bleed")] - [JsonPropertyOrder(14)] - public bool? Bleed { get; set; } - - /// - /// Controls if the container should have rounded corners. - /// - [JsonPropertyName("roundedCorners")] - [JsonPropertyOrder(15)] - public bool? RoundedCorners { get; set; } - - /// - /// When `true` content in this container should be presented right to left. When 'false' content in this container should be presented left to right. When unset layout direction will inherit from parent container or column. If unset in all ancestors, the default platform behavior will apply. - /// - [JsonPropertyName("rtl")] - [JsonPropertyOrder(16)] - public bool? Rtl { get; set; } - - /// - /// Controls if a border should be displayed around the container. - /// - [JsonPropertyName("showBorder")] - [JsonPropertyOrder(17)] - public bool? ShowBorder { get; set; } - - /// - /// An Action that will be invoked when the `Container` is tapped or selected. `Action.ShowCard` is not supported. - /// - [JsonPropertyName("selectAction")] - [JsonPropertyOrder(18)] - public SelectAction? SelectAction { get; set; } - - public ContainerElement WithLayouts(params Layout[] value) - { - Layouts = value; - return this; - } - - public ContainerElement WithBackgroundImage(string value) - { - BackgroundImage = new Union(value); - return this; - } - - public ContainerElement WithBackgroundImage(BackgroundImage value) - { - BackgroundImage = new Union(value); - return this; - } - - public ContainerElement WithBleed(bool value = true) - { - Bleed = value; - return this; - } - - public ContainerElement WithRoundedCorners(bool value = true) - { - RoundedCorners = value; - return this; - } - - public ContainerElement WithRtl(bool value = true) - { - Rtl = value; - return this; - } - - public ContainerElement WithShowBorder(bool value = true) - { - ShowBorder = value; - return this; - } - - public ContainerElement WithSelectAction(SelectAction value) - { - SelectAction = value; - return this; - } -} \ No newline at end of file diff --git a/Libraries/Microsoft.Teams.Cards/Containers/FactSet.cs b/Libraries/Microsoft.Teams.Cards/Containers/FactSet.cs deleted file mode 100644 index 679f7920..00000000 --- a/Libraries/Microsoft.Teams.Cards/Containers/FactSet.cs +++ /dev/null @@ -1,54 +0,0 @@ -using System.Text.Json.Serialization; - -using Microsoft.Teams.Common; - -namespace Microsoft.Teams.Cards; - -public partial class CardType : StringEnum -{ - public static readonly CardType FactSet = new("FactSet"); - public bool IsFactSet => FactSet.Equals(Value); -} - -/// -/// The `FactSet` element displays a series of facts (i.e. name/value pairs) in a tabular form. -/// -public class FactSet(params Fact[] facts) : Element(CardType.FactSet) -{ - /// - /// The array of `Fact`'s - /// - [JsonPropertyName("facts")] - [JsonPropertyOrder(12)] - public IList Facts { get; set; } = facts; - - public FactSet AddFacts(params Fact[] facts) - { - foreach (var fact in facts) - { - Facts.Add(fact); - } - - return this; - } -} - -/// -/// Describes a `Fact` in a `FactSet` as a key/value pair. -/// -public class Fact() -{ - /// - /// The title of the fact. - /// - [JsonPropertyName("title")] - [JsonPropertyOrder(0)] - public required string Title { get; set; } - - /// - /// The value of the fact. - /// - [JsonPropertyName("value")] - [JsonPropertyOrder(1)] - public required string Value { get; set; } -} \ No newline at end of file diff --git a/Libraries/Microsoft.Teams.Cards/Containers/ImageSet.cs b/Libraries/Microsoft.Teams.Cards/Containers/ImageSet.cs deleted file mode 100644 index 6d514a8c..00000000 --- a/Libraries/Microsoft.Teams.Cards/Containers/ImageSet.cs +++ /dev/null @@ -1,78 +0,0 @@ -using System.Text.Json.Serialization; - -using Microsoft.Teams.Common; - -namespace Microsoft.Teams.Cards; - -public partial class CardType : StringEnum -{ - public static readonly CardType ImageSet = new("ImageSet"); - public bool IsImageSet => ImageSet.Equals(Value); -} - -/// -/// Controls how the images are displayed. -/// -[JsonConverter(typeof(JsonConverter))] -public partial class ImageSetStyle(string value) : StringEnum(value, caseSensitive: false) -{ - public static readonly ImageSetStyle Default = new("default"); - public bool IsDefault => Default.Equals(Value); - - public static readonly ImageSetStyle Stacked = new("stacked"); - public bool IsStacked => Stacked.Equals(Value); - - public static readonly ImageSetStyle Grid = new("grid"); - public bool IsGrid => Grid.Equals(Value); -} - -/// -/// The `ImageSet` element displays a collection of `Image`'s similar to a gallery. Acceptable formats are `PNG`, `JPEG`, and `GIF`. -/// -public class ImageSet(params Image[] images) : Element(CardType.ImageSet) -{ - /// - /// Controls how the images are displayed. - /// - [JsonPropertyName("style")] - [JsonPropertyOrder(12)] - public ImageSetStyle? Style { get; set; } - - /// - /// Controls the approximate size of each image. The physical dimensions will vary per host. - /// Auto and stretch are not supported for `ImageSet`. The size will default to medium if - /// those values are set. - /// - [JsonPropertyName("imageSize")] - [JsonPropertyOrder(13)] - public ImageSize? ImageSize { get; set; } - - /// - /// The array of `Image`'s to show. - /// - [JsonPropertyName("images")] - [JsonPropertyOrder(14)] - public IList Images { get; set; } = images; - - public ImageSet WithStyle(ImageSetStyle value) - { - Style = value; - return this; - } - - public ImageSet WithImageSize(ImageSize value) - { - ImageSize = value; - return this; - } - - public ImageSet AddImages(params Image[] value) - { - foreach (var image in value) - { - Images.Add(image); - } - - return this; - } -} \ No newline at end of file diff --git a/Libraries/Microsoft.Teams.Cards/Core.cs b/Libraries/Microsoft.Teams.Cards/Core.cs new file mode 100644 index 00000000..748e78c6 --- /dev/null +++ b/Libraries/Microsoft.Teams.Cards/Core.cs @@ -0,0 +1,13265 @@ +// This file was automatically generated by a tool on 05/07/2025, 6:43 PM UTC. +// It includes declarations for Adaptive Card features available in Teams. + +#pragma warning disable IDE0290 + +using System.Text.Json; +using System.Text.Json.Serialization; + +using Microsoft.Teams.Common; + +namespace Microsoft.Teams.Cards; + +[JsonConverter(typeof(JsonConverter))] +public class ActionStyle(string value) : StringEnum(value, caseSensitive: false) +{ + public static readonly ActionStyle Default = new("default"); + public bool IsDefault => Default.Equals(Value); + + public static readonly ActionStyle Positive = new("positive"); + public bool IsPositive => Positive.Equals(Value); + + public static readonly ActionStyle Destructive = new("destructive"); + public bool IsDestructive => Destructive.Equals(Value); +} + +[JsonConverter(typeof(JsonConverter))] +public class ActionMode(string value) : StringEnum(value, caseSensitive: false) +{ + public static readonly ActionMode Primary = new("primary"); + public bool IsPrimary => Primary.Equals(Value); + + public static readonly ActionMode Secondary = new("secondary"); + public bool IsSecondary => Secondary.Equals(Value); +} + +[JsonConverter(typeof(JsonConverter))] +public class AssociatedInputs(string value) : StringEnum(value, caseSensitive: false) +{ + public static readonly AssociatedInputs Auto = new("auto"); + public bool IsAuto => Auto.Equals(Value); + + public static readonly AssociatedInputs None = new("none"); + public bool IsNone => None.Equals(Value); +} + +[JsonConverter(typeof(JsonConverter))] +public class FallbackAction(string value) : StringEnum(value, caseSensitive: false) +{ + public static readonly FallbackAction Drop = new("drop"); + public bool IsDrop => Drop.Equals(Value); +} + +[JsonConverter(typeof(JsonConverter))] +public class ContainerStyle(string value) : StringEnum(value, caseSensitive: false) +{ + public static readonly ContainerStyle Default = new("default"); + public bool IsDefault => Default.Equals(Value); + + public static readonly ContainerStyle Emphasis = new("emphasis"); + public bool IsEmphasis => Emphasis.Equals(Value); + + public static readonly ContainerStyle Accent = new("accent"); + public bool IsAccent => Accent.Equals(Value); + + public static readonly ContainerStyle Good = new("good"); + public bool IsGood => Good.Equals(Value); + + public static readonly ContainerStyle Attention = new("attention"); + public bool IsAttention => Attention.Equals(Value); + + public static readonly ContainerStyle Warning = new("warning"); + public bool IsWarning => Warning.Equals(Value); +} + +[JsonConverter(typeof(JsonConverter))] +public class TargetWidth(string value) : StringEnum(value, caseSensitive: false) +{ + public static readonly TargetWidth VeryNarrow = new("VeryNarrow"); + public bool IsVeryNarrow => VeryNarrow.Equals(Value); + + public static readonly TargetWidth Narrow = new("Narrow"); + public bool IsNarrow => Narrow.Equals(Value); + + public static readonly TargetWidth Standard = new("Standard"); + public bool IsStandard => Standard.Equals(Value); + + public static readonly TargetWidth Wide = new("Wide"); + public bool IsWide => Wide.Equals(Value); + + public static readonly TargetWidth AtLeastVeryNarrow = new("atLeast:VeryNarrow"); + public bool IsAtLeastVeryNarrow => AtLeastVeryNarrow.Equals(Value); + + public static readonly TargetWidth AtMostVeryNarrow = new("atMost:VeryNarrow"); + public bool IsAtMostVeryNarrow => AtMostVeryNarrow.Equals(Value); + + public static readonly TargetWidth AtLeastNarrow = new("atLeast:Narrow"); + public bool IsAtLeastNarrow => AtLeastNarrow.Equals(Value); + + public static readonly TargetWidth AtMostNarrow = new("atMost:Narrow"); + public bool IsAtMostNarrow => AtMostNarrow.Equals(Value); + + public static readonly TargetWidth AtLeastStandard = new("atLeast:Standard"); + public bool IsAtLeastStandard => AtLeastStandard.Equals(Value); + + public static readonly TargetWidth AtMostStandard = new("atMost:Standard"); + public bool IsAtMostStandard => AtMostStandard.Equals(Value); + + public static readonly TargetWidth AtLeastWide = new("atLeast:Wide"); + public bool IsAtLeastWide => AtLeastWide.Equals(Value); + + public static readonly TargetWidth AtMostWide = new("atMost:Wide"); + public bool IsAtMostWide => AtMostWide.Equals(Value); +} + +[JsonConverter(typeof(JsonConverter))] +public class HorizontalAlignment(string value) : StringEnum(value, caseSensitive: false) +{ + public static readonly HorizontalAlignment Left = new("Left"); + public bool IsLeft => Left.Equals(Value); + + public static readonly HorizontalAlignment Center = new("Center"); + public bool IsCenter => Center.Equals(Value); + + public static readonly HorizontalAlignment Right = new("Right"); + public bool IsRight => Right.Equals(Value); +} + +[JsonConverter(typeof(JsonConverter))] +public class VerticalAlignment(string value) : StringEnum(value, caseSensitive: false) +{ + public static readonly VerticalAlignment Top = new("Top"); + public bool IsTop => Top.Equals(Value); + + public static readonly VerticalAlignment Center = new("Center"); + public bool IsCenter => Center.Equals(Value); + + public static readonly VerticalAlignment Bottom = new("Bottom"); + public bool IsBottom => Bottom.Equals(Value); +} + +[JsonConverter(typeof(JsonConverter))] +public class FlowLayoutItemFit(string value) : StringEnum(value, caseSensitive: false) +{ + public static readonly FlowLayoutItemFit Fit = new("Fit"); + public bool IsFit => Fit.Equals(Value); + + public static readonly FlowLayoutItemFit Fill = new("Fill"); + public bool IsFill => Fill.Equals(Value); +} + +[JsonConverter(typeof(JsonConverter))] +public class Spacing(string value) : StringEnum(value, caseSensitive: false) +{ + public static readonly Spacing None = new("None"); + public bool IsNone => None.Equals(Value); + + public static readonly Spacing ExtraSmall = new("ExtraSmall"); + public bool IsExtraSmall => ExtraSmall.Equals(Value); + + public static readonly Spacing Small = new("Small"); + public bool IsSmall => Small.Equals(Value); + + public static readonly Spacing Default = new("Default"); + public bool IsDefault => Default.Equals(Value); + + public static readonly Spacing Medium = new("Medium"); + public bool IsMedium => Medium.Equals(Value); + + public static readonly Spacing Large = new("Large"); + public bool IsLarge => Large.Equals(Value); + + public static readonly Spacing ExtraLarge = new("ExtraLarge"); + public bool IsExtraLarge => ExtraLarge.Equals(Value); + + public static readonly Spacing Padding = new("Padding"); + public bool IsPadding => Padding.Equals(Value); +} + +[JsonConverter(typeof(JsonConverter))] +public class FillMode(string value) : StringEnum(value, caseSensitive: false) +{ + public static readonly FillMode Cover = new("Cover"); + public bool IsCover => Cover.Equals(Value); + + public static readonly FillMode RepeatHorizontally = new("RepeatHorizontally"); + public bool IsRepeatHorizontally => RepeatHorizontally.Equals(Value); + + public static readonly FillMode RepeatVertically = new("RepeatVertically"); + public bool IsRepeatVertically => RepeatVertically.Equals(Value); + + public static readonly FillMode Repeat = new("Repeat"); + public bool IsRepeat => Repeat.Equals(Value); +} + +[JsonConverter(typeof(JsonConverter))] +public class Version(string value) : StringEnum(value, caseSensitive: false) +{ + public static readonly Version Version1_0 = new("1.0"); + public bool IsVersion1_0 => Version1_0.Equals(Value); + + public static readonly Version Version1_1 = new("1.1"); + public bool IsVersion1_1 => Version1_1.Equals(Value); + + public static readonly Version Version1_2 = new("1.2"); + public bool IsVersion1_2 => Version1_2.Equals(Value); + + public static readonly Version Version1_3 = new("1.3"); + public bool IsVersion1_3 => Version1_3.Equals(Value); + + public static readonly Version Version1_4 = new("1.4"); + public bool IsVersion1_4 => Version1_4.Equals(Value); + + public static readonly Version Version1_5 = new("1.5"); + public bool IsVersion1_5 => Version1_5.Equals(Value); + + public static readonly Version Version1_6 = new("1.6"); + public bool IsVersion1_6 => Version1_6.Equals(Value); +} + +[JsonConverter(typeof(JsonConverter))] +public class TeamsCardWidth(string value) : StringEnum(value, caseSensitive: false) +{ + public static readonly TeamsCardWidth Full = new("full"); + public bool IsFull => Full.Equals(Value); +} + +[JsonConverter(typeof(JsonConverter))] +public class MentionType(string value) : StringEnum(value, caseSensitive: false) +{ + public static readonly MentionType Person = new("Person"); + public bool IsPerson => Person.Equals(Value); + + public static readonly MentionType Tag = new("Tag"); + public bool IsTag => Tag.Equals(Value); +} + +[JsonConverter(typeof(JsonConverter))] +public class ElementHeight(string value) : StringEnum(value, caseSensitive: false) +{ + public static readonly ElementHeight Auto = new("auto"); + public bool IsAuto => Auto.Equals(Value); + + public static readonly ElementHeight Stretch = new("stretch"); + public bool IsStretch => Stretch.Equals(Value); +} + +[JsonConverter(typeof(JsonConverter))] +public class TextSize(string value) : StringEnum(value, caseSensitive: false) +{ + public static readonly TextSize Small = new("Small"); + public bool IsSmall => Small.Equals(Value); + + public static readonly TextSize Default = new("Default"); + public bool IsDefault => Default.Equals(Value); + + public static readonly TextSize Medium = new("Medium"); + public bool IsMedium => Medium.Equals(Value); + + public static readonly TextSize Large = new("Large"); + public bool IsLarge => Large.Equals(Value); + + public static readonly TextSize ExtraLarge = new("ExtraLarge"); + public bool IsExtraLarge => ExtraLarge.Equals(Value); +} + +[JsonConverter(typeof(JsonConverter))] +public class TextWeight(string value) : StringEnum(value, caseSensitive: false) +{ + public static readonly TextWeight Lighter = new("Lighter"); + public bool IsLighter => Lighter.Equals(Value); + + public static readonly TextWeight Default = new("Default"); + public bool IsDefault => Default.Equals(Value); + + public static readonly TextWeight Bolder = new("Bolder"); + public bool IsBolder => Bolder.Equals(Value); +} + +[JsonConverter(typeof(JsonConverter))] +public class TextColor(string value) : StringEnum(value, caseSensitive: false) +{ + public static readonly TextColor Default = new("Default"); + public bool IsDefault => Default.Equals(Value); + + public static readonly TextColor Dark = new("Dark"); + public bool IsDark => Dark.Equals(Value); + + public static readonly TextColor Light = new("Light"); + public bool IsLight => Light.Equals(Value); + + public static readonly TextColor Accent = new("Accent"); + public bool IsAccent => Accent.Equals(Value); + + public static readonly TextColor Good = new("Good"); + public bool IsGood => Good.Equals(Value); + + public static readonly TextColor Warning = new("Warning"); + public bool IsWarning => Warning.Equals(Value); + + public static readonly TextColor Attention = new("Attention"); + public bool IsAttention => Attention.Equals(Value); +} + +[JsonConverter(typeof(JsonConverter))] +public class FontType(string value) : StringEnum(value, caseSensitive: false) +{ + public static readonly FontType Default = new("Default"); + public bool IsDefault => Default.Equals(Value); + + public static readonly FontType Monospace = new("Monospace"); + public bool IsMonospace => Monospace.Equals(Value); +} + +[JsonConverter(typeof(JsonConverter))] +public class StyleEnum(string value) : StringEnum(value, caseSensitive: false) +{ + public static readonly StyleEnum Compact = new("compact"); + public bool IsCompact => Compact.Equals(Value); + + public static readonly StyleEnum Expanded = new("expanded"); + public bool IsExpanded => Expanded.Equals(Value); + + public static readonly StyleEnum Filtered = new("filtered"); + public bool IsFiltered => Filtered.Equals(Value); +} + +[JsonConverter(typeof(JsonConverter))] +public class ImageStyle(string value) : StringEnum(value, caseSensitive: false) +{ + public static readonly ImageStyle Default = new("Default"); + public bool IsDefault => Default.Equals(Value); + + public static readonly ImageStyle Person = new("Person"); + public bool IsPerson => Person.Equals(Value); + + public static readonly ImageStyle RoundedCorners = new("RoundedCorners"); + public bool IsRoundedCorners => RoundedCorners.Equals(Value); +} + +[JsonConverter(typeof(JsonConverter))] +public class Size(string value) : StringEnum(value, caseSensitive: false) +{ + public static readonly Size Auto = new("Auto"); + public bool IsAuto => Auto.Equals(Value); + + public static readonly Size Stretch = new("Stretch"); + public bool IsStretch => Stretch.Equals(Value); + + public static readonly Size Small = new("Small"); + public bool IsSmall => Small.Equals(Value); + + public static readonly Size Medium = new("Medium"); + public bool IsMedium => Medium.Equals(Value); + + public static readonly Size Large = new("Large"); + public bool IsLarge => Large.Equals(Value); +} + +[JsonConverter(typeof(JsonConverter))] +public class InputTextStyle(string value) : StringEnum(value, caseSensitive: false) +{ + public static readonly InputTextStyle Text = new("Text"); + public bool IsText => Text.Equals(Value); + + public static readonly InputTextStyle Tel = new("Tel"); + public bool IsTel => Tel.Equals(Value); + + public static readonly InputTextStyle Url = new("Url"); + public bool IsUrl => Url.Equals(Value); + + public static readonly InputTextStyle Email = new("Email"); + public bool IsEmail => Email.Equals(Value); + + public static readonly InputTextStyle Password = new("Password"); + public bool IsPassword => Password.Equals(Value); +} + +[JsonConverter(typeof(JsonConverter))] +public class RatingSize(string value) : StringEnum(value, caseSensitive: false) +{ + public static readonly RatingSize Medium = new("Medium"); + public bool IsMedium => Medium.Equals(Value); + + public static readonly RatingSize Large = new("Large"); + public bool IsLarge => Large.Equals(Value); +} + +[JsonConverter(typeof(JsonConverter))] +public class RatingColor(string value) : StringEnum(value, caseSensitive: false) +{ + public static readonly RatingColor Neutral = new("Neutral"); + public bool IsNeutral => Neutral.Equals(Value); + + public static readonly RatingColor Marigold = new("Marigold"); + public bool IsMarigold => Marigold.Equals(Value); +} + +[JsonConverter(typeof(JsonConverter))] +public class RatingStyle(string value) : StringEnum(value, caseSensitive: false) +{ + public static readonly RatingStyle Default = new("Default"); + public bool IsDefault => Default.Equals(Value); + + public static readonly RatingStyle Compact = new("Compact"); + public bool IsCompact => Compact.Equals(Value); +} + +[JsonConverter(typeof(JsonConverter))] +public class IconSize(string value) : StringEnum(value, caseSensitive: false) +{ + public static readonly IconSize XxSmall = new("xxSmall"); + public bool IsXxSmall => XxSmall.Equals(Value); + + public static readonly IconSize XSmall = new("xSmall"); + public bool IsXSmall => XSmall.Equals(Value); + + public static readonly IconSize Small = new("Small"); + public bool IsSmall => Small.Equals(Value); + + public static readonly IconSize Standard = new("Standard"); + public bool IsStandard => Standard.Equals(Value); + + public static readonly IconSize Medium = new("Medium"); + public bool IsMedium => Medium.Equals(Value); + + public static readonly IconSize Large = new("Large"); + public bool IsLarge => Large.Equals(Value); + + public static readonly IconSize XLarge = new("xLarge"); + public bool IsXLarge => XLarge.Equals(Value); + + public static readonly IconSize XxLarge = new("xxLarge"); + public bool IsXxLarge => XxLarge.Equals(Value); +} + +[JsonConverter(typeof(JsonConverter))] +public class IconStyle(string value) : StringEnum(value, caseSensitive: false) +{ + public static readonly IconStyle Regular = new("Regular"); + public bool IsRegular => Regular.Equals(Value); + + public static readonly IconStyle Filled = new("Filled"); + public bool IsFilled => Filled.Equals(Value); +} + +[JsonConverter(typeof(JsonConverter))] +public class CarouselPageAnimation(string value) : StringEnum(value, caseSensitive: false) +{ + public static readonly CarouselPageAnimation Slide = new("Slide"); + public bool IsSlide => Slide.Equals(Value); + + public static readonly CarouselPageAnimation CrossFade = new("CrossFade"); + public bool IsCrossFade => CrossFade.Equals(Value); + + public static readonly CarouselPageAnimation None = new("None"); + public bool IsNone => None.Equals(Value); +} + +[JsonConverter(typeof(JsonConverter))] +public class BadgeIconPosition(string value) : StringEnum(value, caseSensitive: false) +{ + public static readonly BadgeIconPosition Before = new("Before"); + public bool IsBefore => Before.Equals(Value); + + public static readonly BadgeIconPosition After = new("After"); + public bool IsAfter => After.Equals(Value); +} + +[JsonConverter(typeof(JsonConverter))] +public class BadgeAppearance(string value) : StringEnum(value, caseSensitive: false) +{ + public static readonly BadgeAppearance Filled = new("Filled"); + public bool IsFilled => Filled.Equals(Value); + + public static readonly BadgeAppearance Tint = new("Tint"); + public bool IsTint => Tint.Equals(Value); +} + +[JsonConverter(typeof(JsonConverter))] +public class BadgeSize(string value) : StringEnum(value, caseSensitive: false) +{ + public static readonly BadgeSize Medium = new("Medium"); + public bool IsMedium => Medium.Equals(Value); + + public static readonly BadgeSize Large = new("Large"); + public bool IsLarge => Large.Equals(Value); + + public static readonly BadgeSize ExtraLarge = new("ExtraLarge"); + public bool IsExtraLarge => ExtraLarge.Equals(Value); +} + +[JsonConverter(typeof(JsonConverter))] +public class BadgeShape(string value) : StringEnum(value, caseSensitive: false) +{ + public static readonly BadgeShape Square = new("Square"); + public bool IsSquare => Square.Equals(Value); + + public static readonly BadgeShape Rounded = new("Rounded"); + public bool IsRounded => Rounded.Equals(Value); + + public static readonly BadgeShape Circular = new("Circular"); + public bool IsCircular => Circular.Equals(Value); +} + +[JsonConverter(typeof(JsonConverter))] +public class BadgeStyle(string value) : StringEnum(value, caseSensitive: false) +{ + public static readonly BadgeStyle Default = new("Default"); + public bool IsDefault => Default.Equals(Value); + + public static readonly BadgeStyle Subtle = new("Subtle"); + public bool IsSubtle => Subtle.Equals(Value); + + public static readonly BadgeStyle Informative = new("Informative"); + public bool IsInformative => Informative.Equals(Value); + + public static readonly BadgeStyle Accent = new("Accent"); + public bool IsAccent => Accent.Equals(Value); + + public static readonly BadgeStyle Good = new("Good"); + public bool IsGood => Good.Equals(Value); + + public static readonly BadgeStyle Attention = new("Attention"); + public bool IsAttention => Attention.Equals(Value); + + public static readonly BadgeStyle Warning = new("Warning"); + public bool IsWarning => Warning.Equals(Value); +} + +[JsonConverter(typeof(JsonConverter))] +public class ChartColorSet(string value) : StringEnum(value, caseSensitive: false) +{ + public static readonly ChartColorSet Categorical = new("categorical"); + public bool IsCategorical => Categorical.Equals(Value); + + public static readonly ChartColorSet Sequential = new("sequential"); + public bool IsSequential => Sequential.Equals(Value); + + public static readonly ChartColorSet Diverging = new("diverging"); + public bool IsDiverging => Diverging.Equals(Value); +} + +[JsonConverter(typeof(JsonConverter))] +public class ChartColor(string value) : StringEnum(value, caseSensitive: false) +{ + public static readonly ChartColor Good = new("good"); + public bool IsGood => Good.Equals(Value); + + public static readonly ChartColor Warning = new("warning"); + public bool IsWarning => Warning.Equals(Value); + + public static readonly ChartColor Attention = new("attention"); + public bool IsAttention => Attention.Equals(Value); + + public static readonly ChartColor Neutral = new("neutral"); + public bool IsNeutral => Neutral.Equals(Value); + + public static readonly ChartColor CategoricalRed = new("categoricalRed"); + public bool IsCategoricalRed => CategoricalRed.Equals(Value); + + public static readonly ChartColor CategoricalPurple = new("categoricalPurple"); + public bool IsCategoricalPurple => CategoricalPurple.Equals(Value); + + public static readonly ChartColor CategoricalLavender = new("categoricalLavender"); + public bool IsCategoricalLavender => CategoricalLavender.Equals(Value); + + public static readonly ChartColor CategoricalBlue = new("categoricalBlue"); + public bool IsCategoricalBlue => CategoricalBlue.Equals(Value); + + public static readonly ChartColor CategoricalLightBlue = new("categoricalLightBlue"); + public bool IsCategoricalLightBlue => CategoricalLightBlue.Equals(Value); + + public static readonly ChartColor CategoricalTeal = new("categoricalTeal"); + public bool IsCategoricalTeal => CategoricalTeal.Equals(Value); + + public static readonly ChartColor CategoricalGreen = new("categoricalGreen"); + public bool IsCategoricalGreen => CategoricalGreen.Equals(Value); + + public static readonly ChartColor CategoricalLime = new("categoricalLime"); + public bool IsCategoricalLime => CategoricalLime.Equals(Value); + + public static readonly ChartColor CategoricalMarigold = new("categoricalMarigold"); + public bool IsCategoricalMarigold => CategoricalMarigold.Equals(Value); + + public static readonly ChartColor Sequential1 = new("sequential1"); + public bool IsSequential1 => Sequential1.Equals(Value); + + public static readonly ChartColor Sequential2 = new("sequential2"); + public bool IsSequential2 => Sequential2.Equals(Value); + + public static readonly ChartColor Sequential3 = new("sequential3"); + public bool IsSequential3 => Sequential3.Equals(Value); + + public static readonly ChartColor Sequential4 = new("sequential4"); + public bool IsSequential4 => Sequential4.Equals(Value); + + public static readonly ChartColor Sequential5 = new("sequential5"); + public bool IsSequential5 => Sequential5.Equals(Value); + + public static readonly ChartColor Sequential6 = new("sequential6"); + public bool IsSequential6 => Sequential6.Equals(Value); + + public static readonly ChartColor Sequential7 = new("sequential7"); + public bool IsSequential7 => Sequential7.Equals(Value); + + public static readonly ChartColor Sequential8 = new("sequential8"); + public bool IsSequential8 => Sequential8.Equals(Value); + + public static readonly ChartColor DivergingBlue = new("divergingBlue"); + public bool IsDivergingBlue => DivergingBlue.Equals(Value); + + public static readonly ChartColor DivergingLightBlue = new("divergingLightBlue"); + public bool IsDivergingLightBlue => DivergingLightBlue.Equals(Value); + + public static readonly ChartColor DivergingCyan = new("divergingCyan"); + public bool IsDivergingCyan => DivergingCyan.Equals(Value); + + public static readonly ChartColor DivergingTeal = new("divergingTeal"); + public bool IsDivergingTeal => DivergingTeal.Equals(Value); + + public static readonly ChartColor DivergingYellow = new("divergingYellow"); + public bool IsDivergingYellow => DivergingYellow.Equals(Value); + + public static readonly ChartColor DivergingPeach = new("divergingPeach"); + public bool IsDivergingPeach => DivergingPeach.Equals(Value); + + public static readonly ChartColor DivergingLightRed = new("divergingLightRed"); + public bool IsDivergingLightRed => DivergingLightRed.Equals(Value); + + public static readonly ChartColor DivergingRed = new("divergingRed"); + public bool IsDivergingRed => DivergingRed.Equals(Value); + + public static readonly ChartColor DivergingMaroon = new("divergingMaroon"); + public bool IsDivergingMaroon => DivergingMaroon.Equals(Value); + + public static readonly ChartColor DivergingGray = new("divergingGray"); + public bool IsDivergingGray => DivergingGray.Equals(Value); +} + +[JsonConverter(typeof(JsonConverter))] +public class HorizontalBarChartDisplayMode(string value) : StringEnum(value, caseSensitive: false) +{ + public static readonly HorizontalBarChartDisplayMode AbsoluteWithAxis = new("AbsoluteWithAxis"); + public bool IsAbsoluteWithAxis => AbsoluteWithAxis.Equals(Value); + + public static readonly HorizontalBarChartDisplayMode AbsoluteNoAxis = new("AbsoluteNoAxis"); + public bool IsAbsoluteNoAxis => AbsoluteNoAxis.Equals(Value); + + public static readonly HorizontalBarChartDisplayMode PartToWhole = new("PartToWhole"); + public bool IsPartToWhole => PartToWhole.Equals(Value); +} + +[JsonConverter(typeof(JsonConverter))] +public class GaugeChartValueFormat(string value) : StringEnum(value, caseSensitive: false) +{ + public static readonly GaugeChartValueFormat Percentage = new("Percentage"); + public bool IsPercentage => Percentage.Equals(Value); + + public static readonly GaugeChartValueFormat Fraction = new("Fraction"); + public bool IsFraction => Fraction.Equals(Value); +} + +[JsonConverter(typeof(JsonConverter))] +public class CodeLanguage(string value) : StringEnum(value, caseSensitive: false) +{ + public static readonly CodeLanguage Bash = new("Bash"); + public bool IsBash => Bash.Equals(Value); + + public static readonly CodeLanguage C = new("C"); + public bool IsC => C.Equals(Value); + + public static readonly CodeLanguage Cpp = new("Cpp"); + public bool IsCpp => Cpp.Equals(Value); + + public static readonly CodeLanguage CSharp = new("CSharp"); + public bool IsCSharp => CSharp.Equals(Value); + + public static readonly CodeLanguage Css = new("Css"); + public bool IsCss => Css.Equals(Value); + + public static readonly CodeLanguage Dos = new("Dos"); + public bool IsDos => Dos.Equals(Value); + + public static readonly CodeLanguage Go = new("Go"); + public bool IsGo => Go.Equals(Value); + + public static readonly CodeLanguage Graphql = new("Graphql"); + public bool IsGraphql => Graphql.Equals(Value); + + public static readonly CodeLanguage Html = new("Html"); + public bool IsHtml => Html.Equals(Value); + + public static readonly CodeLanguage Java = new("Java"); + public bool IsJava => Java.Equals(Value); + + public static readonly CodeLanguage JavaScript = new("JavaScript"); + public bool IsJavaScript => JavaScript.Equals(Value); + + public static readonly CodeLanguage Json = new("Json"); + public bool IsJson => Json.Equals(Value); + + public static readonly CodeLanguage ObjectiveC = new("ObjectiveC"); + public bool IsObjectiveC => ObjectiveC.Equals(Value); + + public static readonly CodeLanguage Perl = new("Perl"); + public bool IsPerl => Perl.Equals(Value); + + public static readonly CodeLanguage Php = new("Php"); + public bool IsPhp => Php.Equals(Value); + + public static readonly CodeLanguage PlainText = new("PlainText"); + public bool IsPlainText => PlainText.Equals(Value); + + public static readonly CodeLanguage PowerShell = new("PowerShell"); + public bool IsPowerShell => PowerShell.Equals(Value); + + public static readonly CodeLanguage Python = new("Python"); + public bool IsPython => Python.Equals(Value); + + public static readonly CodeLanguage Sql = new("Sql"); + public bool IsSql => Sql.Equals(Value); + + public static readonly CodeLanguage TypeScript = new("TypeScript"); + public bool IsTypeScript => TypeScript.Equals(Value); + + public static readonly CodeLanguage VbNet = new("VbNet"); + public bool IsVbNet => VbNet.Equals(Value); + + public static readonly CodeLanguage Verilog = new("Verilog"); + public bool IsVerilog => Verilog.Equals(Value); + + public static readonly CodeLanguage Vhdl = new("Vhdl"); + public bool IsVhdl => Vhdl.Equals(Value); + + public static readonly CodeLanguage Xml = new("Xml"); + public bool IsXml => Xml.Equals(Value); +} + +[JsonConverter(typeof(JsonConverter))] +public class FallbackElement(string value) : StringEnum(value, caseSensitive: false) +{ + public static readonly FallbackElement Drop = new("drop"); + public bool IsDrop => Drop.Equals(Value); +} + +[JsonConverter(typeof(JsonConverter))] +public class ImageSize(string value) : StringEnum(value, caseSensitive: false) +{ + public static readonly ImageSize Small = new("Small"); + public bool IsSmall => Small.Equals(Value); + + public static readonly ImageSize Medium = new("Medium"); + public bool IsMedium => Medium.Equals(Value); + + public static readonly ImageSize Large = new("Large"); + public bool IsLarge => Large.Equals(Value); +} + +public abstract class SerializableObject +{ + public override string ToString() + { + return JsonSerializer.Serialize(this, new JsonSerializerOptions() + { + WriteIndented = true, + DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull + }); + } +} + +public abstract class CardElement : SerializableObject { } +public abstract class Action : SerializableObject { } +public abstract class ContainerLayout : SerializableObject { } + +/// +/// An Adaptive Card, containing a free-form body of card elements, and an optional set of actions. +/// +public class AdaptiveCard : CardElement +{ + /// + /// Must be **AdaptiveCard**. + /// + [JsonPropertyName("type")] + public string Type { get; } = "AdaptiveCard"; + + /// + /// A unique identifier for the element or action. Input elements must have an id, otherwise they will not be validated and their values will not be sent to the Bot. + /// + [JsonPropertyName("id")] + public string? Id { get; set; } + + /// + /// A list of capabilities the element requires the host application to support. If the host application doesn't support at least one of the listed capabilities, the element is not rendered (or its fallback is rendered if provided). + /// + [JsonPropertyName("requires")] + public HostCapabilities? Requires { get; set; } + + /// + /// The locale associated with the element. + /// + [JsonPropertyName("lang")] + public string? Lang { get; set; } + + /// + /// Controls the visibility of the element. + /// + [JsonPropertyName("isVisible")] + public bool? IsVisible { get; set; } + + /// + /// Controls whether the element should be used as a sort key by elements that allow sorting across a collection of elements. + /// + [JsonPropertyName("isSortKey")] + public bool? IsSortKey { get; set; } + + /// + /// An Action that will be invoked when the element is tapped or clicked. Action.ShowCard is not supported. + /// + [JsonPropertyName("selectAction")] + public Action? SelectAction { get; set; } + + /// + /// The style of the container. Container styles control the colors of the background, border and text inside the container, in such a way that contrast requirements are always met. + /// + [JsonPropertyName("style")] + public ContainerStyle? Style { get; set; } + + /// + /// The layouts associated with the container. The container can dynamically switch from one layout to another as the card's width changes. See [Container layouts](https://adaptivecards.microsoft.com/?topic=container-layouts) for more details. + /// + [JsonPropertyName("layouts")] + public IList? Layouts { get; set; } + + /// + /// The minimum height, in pixels, of the container, in the `px` format. + /// + [JsonPropertyName("minHeight")] + public string? MinHeight { get; set; } + + /// + /// Defines the container's background image. + /// + [JsonPropertyName("backgroundImage")] + public IUnion? BackgroundImage { get; set; } + + /// + /// Controls how the container's content should be vertically aligned. + /// + [JsonPropertyName("verticalContentAlignment")] + public VerticalAlignment? VerticalContentAlignment { get; set; } + + /// + /// Controls if the content of the card is to be rendered left-to-right or right-to-left. + /// + [JsonPropertyName("rtl")] + public bool? Rtl { get; set; } + + /// + /// A URL to the Adaptive Card schema the card is authored against. + /// + [JsonPropertyName("$schema")] + public string? Schema { get; set; } + + /// + /// The Adaptive Card schema version the card is authored against. + /// + [JsonPropertyName("version")] + public Version? Version { get; set; } + + /// + /// The text that should be displayed if the client is not able to render the card. + /// + [JsonPropertyName("fallbackText")] + public string? FallbackText { get; set; } + + /// + /// The text that should be spoken for the entire card. + /// + [JsonPropertyName("speak")] + public string? Speak { get; set; } + + /// + /// Defines how the card can be refreshed by making a request to the target Bot. + /// + [JsonPropertyName("refresh")] + public RefreshDefinition? Refresh { get; set; } + + /// + /// Defines authentication information to enable on-behalf-of single-sign-on or just-in-time OAuth. This information is used in conjunction with the refresh property and Action.Execute in general. + /// + [JsonPropertyName("authentication")] + public Authentication? Authentication { get; set; } + + /// + /// Teams-specific metadata associated with the card. + /// + [JsonPropertyName("msTeams")] + public TeamsCardProperties? MsTeams { get; set; } + + /// + /// Metadata associated with the card. + /// + [JsonPropertyName("metadata")] + public CardMetadata? Metadata { get; set; } + + /// + /// The area of a Layout.AreaGrid layout in which an element should be displayed. + /// + [JsonPropertyName("grid.area")] + public string? GridArea { get; set; } + + /// + /// An alternate element to render if the type of this one is unsupported or if the host application doesn't support all the capabilities specified in the requires property. + /// + [JsonPropertyName("fallback")] + public IUnion? Fallback { get; set; } + + /// + /// The body of the card, comprised of a list of elements displayed according to the layouts property. If the layouts property is not specified, a Layout.Stack is used. + /// + [JsonPropertyName("body")] + public IList? Body { get; set; } + + /// + /// The card level actions, which always appear at the bottom of the card. + /// + [JsonPropertyName("actions")] + public IList? Actions { get; set; } + + public AdaptiveCard(params IList body) + { + this.Body = body; + } + + public AdaptiveCard WithId(string value) + { + this.Id = value; + return this; + } + + public AdaptiveCard WithRequires(HostCapabilities value) + { + this.Requires = value; + return this; + } + + public AdaptiveCard WithLang(string value) + { + this.Lang = value; + return this; + } + + public AdaptiveCard WithIsVisible(bool value) + { + this.IsVisible = value; + return this; + } + + public AdaptiveCard WithIsSortKey(bool value) + { + this.IsSortKey = value; + return this; + } + + public AdaptiveCard WithSelectAction(Action value) + { + this.SelectAction = value; + return this; + } + + public AdaptiveCard WithStyle(ContainerStyle value) + { + this.Style = value; + return this; + } + + public AdaptiveCard WithLayouts(params IList value) + { + this.Layouts = value; + return this; + } + + public AdaptiveCard WithMinHeight(string value) + { + this.MinHeight = value; + return this; + } + + public AdaptiveCard WithBackgroundImage(IUnion value) + { + this.BackgroundImage = value; + return this; + } + + public AdaptiveCard WithVerticalContentAlignment(VerticalAlignment value) + { + this.VerticalContentAlignment = value; + return this; + } + + public AdaptiveCard WithRtl(bool value) + { + this.Rtl = value; + return this; + } + + public AdaptiveCard WithSchema(string value) + { + this.Schema = value; + return this; + } + + public AdaptiveCard WithVersion(Version value) + { + this.Version = value; + return this; + } + + public AdaptiveCard WithFallbackText(string value) + { + this.FallbackText = value; + return this; + } + + public AdaptiveCard WithSpeak(string value) + { + this.Speak = value; + return this; + } + + public AdaptiveCard WithRefresh(RefreshDefinition value) + { + this.Refresh = value; + return this; + } + + public AdaptiveCard WithAuthentication(Authentication value) + { + this.Authentication = value; + return this; + } + + public AdaptiveCard WithMsTeams(TeamsCardProperties value) + { + this.MsTeams = value; + return this; + } + + public AdaptiveCard WithMetadata(CardMetadata value) + { + this.Metadata = value; + return this; + } + + public AdaptiveCard WithGridArea(string value) + { + this.GridArea = value; + return this; + } + + public AdaptiveCard WithFallback(IUnion value) + { + this.Fallback = value; + return this; + } + + public AdaptiveCard WithBody(params IList value) + { + this.Body = value; + return this; + } + + public AdaptiveCard WithActions(params IList value) + { + this.Actions = value; + return this; + } +} + +/// +/// Represents a list of versioned capabilities a host application must support. +/// +public class HostCapabilities : SerializableObject +{ + [JsonExtensionData] + public IDictionary NonSchemaProperties { get; set; } = new Dictionary(); +} + +/// +/// Gathers input values, merges them with the data property if specified, and sends them to the Bot via an Invoke activity. The Bot can respond synchronously and return an updated Adaptive Card to be displayed by the client. Action.Execute works in all Adaptive Card hosts. +/// +public class ExecuteAction : Action +{ + /// + /// Must be **Action.Execute**. + /// + [JsonPropertyName("type")] + public string Type { get; } = "Action.Execute"; + + /// + /// A unique identifier for the element or action. Input elements must have an id, otherwise they will not be validated and their values will not be sent to the Bot. + /// + [JsonPropertyName("id")] + public string? Id { get; set; } + + /// + /// A list of capabilities the element requires the host application to support. If the host application doesn't support at least one of the listed capabilities, the element is not rendered (or its fallback is rendered if provided). + /// + [JsonPropertyName("requires")] + public HostCapabilities? Requires { get; set; } + + /// + /// The title of the action, as it appears on buttons. + /// + [JsonPropertyName("title")] + public string? Title { get; set; } + + /// + /// A URL (or Base64-encoded Data URI) to a PNG, GIF, JPEG or SVG image to be displayed on the left of the action's title. + /// + /// `iconUrl` also accepts the `[,regular|filled]` format to display an icon from the vast [Adaptive Card icon catalog](https://adaptivecards.microsoft.com/?topic=icon-catalog) instead of an image. + /// + [JsonPropertyName("iconUrl")] + public string? IconUrl { get; set; } + + /// + /// Control the style of the action, affecting its visual and spoken representations. + /// + [JsonPropertyName("style")] + public ActionStyle? Style { get; set; } + + /// + /// Controls if the action is primary or secondary. Secondary actions appear in an overflow menu. + /// + [JsonPropertyName("mode")] + public ActionMode? Mode { get; set; } + + /// + /// The tooltip text to display when the action is hovered over. + /// + [JsonPropertyName("tooltip")] + public string? Tooltip { get; set; } + + /// + /// Controls the enabled state of the action. A disabled action cannot be clicked. If the action is represented as a button, the button's style will reflect this state. + /// + [JsonPropertyName("isEnabled")] + public bool? IsEnabled { get; set; } + + /// + /// The data to send to the Bot when the action is executed. The data specified in the card payload will be sent back to the Bot as is, alongside the values of the inputs expressed as key/value pairs where the key is the Id of the input. + /// + [JsonPropertyName("data")] + public SubmitActionData? Data { get; set; } + + /// + /// The Ids of the inputs associated with the Action.Submit. When the action is executed, the values of the associated inputs are sent to the Bot. See [Input validation](https://adaptivecards.microsoft.com/?topic=input-validation) for more details. + /// + [JsonPropertyName("associatedInputs")] + public AssociatedInputs? AssociatedInputs { get; set; } + + /// + /// Controls if the action is enabled only if at least one required input has been filled by the user. + /// + [JsonPropertyName("conditionallyEnabled")] + public bool? ConditionallyEnabled { get; set; } + + /// + /// The verb of the action. + /// + [JsonPropertyName("verb")] + public string? Verb { get; set; } + + /// + /// An alternate action to render if the type of this one is unsupported or if the host application doesn't support all the capabilities specified in the requires property. + /// + [JsonPropertyName("fallback")] + public IUnion? Fallback { get; set; } + + public ExecuteAction WithId(string value) + { + this.Id = value; + return this; + } + + public ExecuteAction WithRequires(HostCapabilities value) + { + this.Requires = value; + return this; + } + + public ExecuteAction WithTitle(string value) + { + this.Title = value; + return this; + } + + public ExecuteAction WithIconUrl(string value) + { + this.IconUrl = value; + return this; + } + + public ExecuteAction WithStyle(ActionStyle value) + { + this.Style = value; + return this; + } + + public ExecuteAction WithMode(ActionMode value) + { + this.Mode = value; + return this; + } + + public ExecuteAction WithTooltip(string value) + { + this.Tooltip = value; + return this; + } + + public ExecuteAction WithIsEnabled(bool value) + { + this.IsEnabled = value; + return this; + } + + public ExecuteAction WithData(SubmitActionData value) + { + this.Data = value; + return this; + } + + public ExecuteAction WithAssociatedInputs(AssociatedInputs value) + { + this.AssociatedInputs = value; + return this; + } + + public ExecuteAction WithConditionallyEnabled(bool value) + { + this.ConditionallyEnabled = value; + return this; + } + + public ExecuteAction WithVerb(string value) + { + this.Verb = value; + return this; + } + + public ExecuteAction WithFallback(IUnion value) + { + this.Fallback = value; + return this; + } +} + +/// +/// Represents the data of an Action.Submit. +/// +public class SubmitActionData : SerializableObject +{ + /// + /// Defines the optional Teams-specific portion of the action's data. + /// + [JsonPropertyName("msTeams")] + public object? MsTeams { get; set; } + + public SubmitActionData WithMsTeams(object value) + { + this.MsTeams = value; + return this; + } + [JsonExtensionData] + public IDictionary NonSchemaProperties { get; set; } = new Dictionary(); +} + +/// +/// Represents Teams-specific data in an Action.Submit to send an Instant Message back to the Bot. +/// +public class ImBackSubmitActionData : SerializableObject +{ + /// + /// Must be **imBack**. + /// + [JsonPropertyName("type")] + public string Type { get; } = "imBack"; + + /// + /// The value that will be sent to the Bot. + /// + [JsonPropertyName("value")] + public string? Value { get; set; } + + public ImBackSubmitActionData(string value) + { + this.Value = value; + } + + public ImBackSubmitActionData WithValue(string value) + { + this.Value = value; + return this; + } +} + +/// +/// Represents Teams-specific data in an Action.Submit to make an Invoke request to the Bot. +/// +public class InvokeSubmitActionData : SerializableObject +{ + /// + /// Must be **invoke**. + /// + [JsonPropertyName("type")] + public string Type { get; } = "invoke"; + + /// + /// The object to send to the Bot with the Invoke request. + /// + [JsonPropertyName("value")] + public object? Value { get; set; } + + public InvokeSubmitActionData(object value) + { + this.Value = value; + } + + public InvokeSubmitActionData WithValue(object value) + { + this.Value = value; + return this; + } +} + +/// +/// Represents Teams-specific data in an Action.Submit to send a message back to the Bot. +/// +public class MessageBackSubmitActionData : SerializableObject +{ + /// + /// Must be **messageBack**. + /// + [JsonPropertyName("type")] + public string Type { get; } = "messageBack"; + + /// + /// The text that will be sent to the Bot. + /// + [JsonPropertyName("text")] + public string? Text { get; set; } + + /// + /// The optional text that will be displayed as a new message in the conversation, as if the end-user sent it. `displayText` is not sent to the Bot. + /// + [JsonPropertyName("displayText")] + public string? DisplayText { get; set; } + + /// + /// Optional additional value that will be sent to the Bot. For instance, `value` can encode specific context for the action, such as unique identifiers or a JSON object. + /// + [JsonPropertyName("value")] + public string? Value { get; set; } + + public MessageBackSubmitActionData WithText(string value) + { + this.Text = value; + return this; + } + + public MessageBackSubmitActionData WithDisplayText(string value) + { + this.DisplayText = value; + return this; + } + + public MessageBackSubmitActionData WithValue(string value) + { + this.Value = value; + return this; + } +} + +/// +/// Represents Teams-specific data in an Action.Submit to sign in a user. +/// +public class SigninSubmitActionData : SerializableObject +{ + /// + /// Must be **signin**. + /// + [JsonPropertyName("type")] + public string Type { get; } = "signin"; + + /// + /// The URL to redirect the end-user for signing in. + /// + [JsonPropertyName("value")] + public string? Value { get; set; } + + public SigninSubmitActionData(string value) + { + this.Value = value; + } + + public SigninSubmitActionData WithValue(string value) + { + this.Value = value; + return this; + } +} + +/// +/// Represents Teams-specific data in an Action.Submit to open a task module. +/// +public class TaskFetchSubmitActionData : SerializableObject +{ + /// + /// Must be **task/fetch**. + /// + [JsonPropertyName("type")] + public string Type { get; } = "task/fetch"; + + /// + /// The contextual data sent to the Bot to specify which task module to open. + /// + [JsonPropertyName("value")] + public object? Value { get; set; } + + public TaskFetchSubmitActionData(object value) + { + this.Value = value; + } + + public TaskFetchSubmitActionData WithValue(object value) + { + this.Value = value; + return this; + } +} + +/// +/// Gathers input values, merges them with the data property if specified, and sends them to the Bot via an Invoke activity. The Bot can only acknowledge is has received the request. Action.Submit only works in Teams. +/// +public class SubmitAction : Action +{ + /// + /// Must be **Action.Submit**. + /// + [JsonPropertyName("type")] + public string Type { get; } = "Action.Submit"; + + /// + /// A unique identifier for the element or action. Input elements must have an id, otherwise they will not be validated and their values will not be sent to the Bot. + /// + [JsonPropertyName("id")] + public string? Id { get; set; } + + /// + /// A list of capabilities the element requires the host application to support. If the host application doesn't support at least one of the listed capabilities, the element is not rendered (or its fallback is rendered if provided). + /// + [JsonPropertyName("requires")] + public HostCapabilities? Requires { get; set; } + + /// + /// The title of the action, as it appears on buttons. + /// + [JsonPropertyName("title")] + public string? Title { get; set; } + + /// + /// A URL (or Base64-encoded Data URI) to a PNG, GIF, JPEG or SVG image to be displayed on the left of the action's title. + /// + /// `iconUrl` also accepts the `[,regular|filled]` format to display an icon from the vast [Adaptive Card icon catalog](https://adaptivecards.microsoft.com/?topic=icon-catalog) instead of an image. + /// + [JsonPropertyName("iconUrl")] + public string? IconUrl { get; set; } + + /// + /// Control the style of the action, affecting its visual and spoken representations. + /// + [JsonPropertyName("style")] + public ActionStyle? Style { get; set; } + + /// + /// Controls if the action is primary or secondary. Secondary actions appear in an overflow menu. + /// + [JsonPropertyName("mode")] + public ActionMode? Mode { get; set; } + + /// + /// The tooltip text to display when the action is hovered over. + /// + [JsonPropertyName("tooltip")] + public string? Tooltip { get; set; } + + /// + /// Controls the enabled state of the action. A disabled action cannot be clicked. If the action is represented as a button, the button's style will reflect this state. + /// + [JsonPropertyName("isEnabled")] + public bool? IsEnabled { get; set; } + + /// + /// The data to send to the Bot when the action is executed. The data specified in the card payload will be sent back to the Bot as is, alongside the values of the inputs expressed as key/value pairs where the key is the Id of the input. + /// + [JsonPropertyName("data")] + public SubmitActionData? Data { get; set; } + + /// + /// The Ids of the inputs associated with the Action.Submit. When the action is executed, the values of the associated inputs are sent to the Bot. See [Input validation](https://adaptivecards.microsoft.com/?topic=input-validation) for more details. + /// + [JsonPropertyName("associatedInputs")] + public AssociatedInputs? AssociatedInputs { get; set; } + + /// + /// Controls if the action is enabled only if at least one required input has been filled by the user. + /// + [JsonPropertyName("conditionallyEnabled")] + public bool? ConditionallyEnabled { get; set; } + + /// + /// Teams-specific metadata associated with the action. + /// + [JsonPropertyName("msTeams")] + public TeamsSubmitActionProperties? MsTeams { get; set; } + + /// + /// An alternate action to render if the type of this one is unsupported or if the host application doesn't support all the capabilities specified in the requires property. + /// + [JsonPropertyName("fallback")] + public IUnion? Fallback { get; set; } + + public SubmitAction WithId(string value) + { + this.Id = value; + return this; + } + + public SubmitAction WithRequires(HostCapabilities value) + { + this.Requires = value; + return this; + } + + public SubmitAction WithTitle(string value) + { + this.Title = value; + return this; + } + + public SubmitAction WithIconUrl(string value) + { + this.IconUrl = value; + return this; + } + + public SubmitAction WithStyle(ActionStyle value) + { + this.Style = value; + return this; + } + + public SubmitAction WithMode(ActionMode value) + { + this.Mode = value; + return this; + } + + public SubmitAction WithTooltip(string value) + { + this.Tooltip = value; + return this; + } + + public SubmitAction WithIsEnabled(bool value) + { + this.IsEnabled = value; + return this; + } + + public SubmitAction WithData(SubmitActionData value) + { + this.Data = value; + return this; + } + + public SubmitAction WithAssociatedInputs(AssociatedInputs value) + { + this.AssociatedInputs = value; + return this; + } + + public SubmitAction WithConditionallyEnabled(bool value) + { + this.ConditionallyEnabled = value; + return this; + } + + public SubmitAction WithMsTeams(TeamsSubmitActionProperties value) + { + this.MsTeams = value; + return this; + } + + public SubmitAction WithFallback(IUnion value) + { + this.Fallback = value; + return this; + } +} + +/// +/// Teams-specific properties associated with the action. +/// +public class TeamsSubmitActionProperties : SerializableObject +{ + /// + /// Defines how feedback is provided to the end-user when the action is executed. + /// + [JsonPropertyName("feedback")] + public TeamsSubmitActionFeedback? Feedback { get; set; } + + public TeamsSubmitActionProperties WithFeedback(TeamsSubmitActionFeedback value) + { + this.Feedback = value; + return this; + } +} + +/// +/// Represents feedback options for an [Action.Submit](https://adaptivecards.microsoft.com/?topic=Action.Submit). +/// +public class TeamsSubmitActionFeedback : SerializableObject +{ + /// + /// Defines if a feedback message should be displayed after the action is executed. + /// + [JsonPropertyName("hide")] + public bool? Hide { get; set; } + + public TeamsSubmitActionFeedback WithHide(bool value) + { + this.Hide = value; + return this; + } +} + +/// +/// Opens the provided URL in either a separate browser tab or within the host application. +/// +public class OpenUrlAction : Action +{ + /// + /// Must be **Action.OpenUrl**. + /// + [JsonPropertyName("type")] + public string Type { get; } = "Action.OpenUrl"; + + /// + /// A unique identifier for the element or action. Input elements must have an id, otherwise they will not be validated and their values will not be sent to the Bot. + /// + [JsonPropertyName("id")] + public string? Id { get; set; } + + /// + /// A list of capabilities the element requires the host application to support. If the host application doesn't support at least one of the listed capabilities, the element is not rendered (or its fallback is rendered if provided). + /// + [JsonPropertyName("requires")] + public HostCapabilities? Requires { get; set; } + + /// + /// The title of the action, as it appears on buttons. + /// + [JsonPropertyName("title")] + public string? Title { get; set; } + + /// + /// A URL (or Base64-encoded Data URI) to a PNG, GIF, JPEG or SVG image to be displayed on the left of the action's title. + /// + /// `iconUrl` also accepts the `[,regular|filled]` format to display an icon from the vast [Adaptive Card icon catalog](https://adaptivecards.microsoft.com/?topic=icon-catalog) instead of an image. + /// + [JsonPropertyName("iconUrl")] + public string? IconUrl { get; set; } + + /// + /// Control the style of the action, affecting its visual and spoken representations. + /// + [JsonPropertyName("style")] + public ActionStyle? Style { get; set; } + + /// + /// Controls if the action is primary or secondary. Secondary actions appear in an overflow menu. + /// + [JsonPropertyName("mode")] + public ActionMode? Mode { get; set; } + + /// + /// The tooltip text to display when the action is hovered over. + /// + [JsonPropertyName("tooltip")] + public string? Tooltip { get; set; } + + /// + /// Controls the enabled state of the action. A disabled action cannot be clicked. If the action is represented as a button, the button's style will reflect this state. + /// + [JsonPropertyName("isEnabled")] + public bool? IsEnabled { get; set; } + + /// + /// The URL to open. + /// + [JsonPropertyName("url")] + public string? Url { get; set; } + + /// + /// An alternate action to render if the type of this one is unsupported or if the host application doesn't support all the capabilities specified in the requires property. + /// + [JsonPropertyName("fallback")] + public IUnion? Fallback { get; set; } + + public OpenUrlAction(string url) + { + this.Url = url; + } + + public OpenUrlAction WithId(string value) + { + this.Id = value; + return this; + } + + public OpenUrlAction WithRequires(HostCapabilities value) + { + this.Requires = value; + return this; + } + + public OpenUrlAction WithTitle(string value) + { + this.Title = value; + return this; + } + + public OpenUrlAction WithIconUrl(string value) + { + this.IconUrl = value; + return this; + } + + public OpenUrlAction WithStyle(ActionStyle value) + { + this.Style = value; + return this; + } + + public OpenUrlAction WithMode(ActionMode value) + { + this.Mode = value; + return this; + } + + public OpenUrlAction WithTooltip(string value) + { + this.Tooltip = value; + return this; + } + + public OpenUrlAction WithIsEnabled(bool value) + { + this.IsEnabled = value; + return this; + } + + public OpenUrlAction WithUrl(string value) + { + this.Url = value; + return this; + } + + public OpenUrlAction WithFallback(IUnion value) + { + this.Fallback = value; + return this; + } +} + +/// +/// Toggles the visibility of a set of elements. Action.ToggleVisibility is useful for creating "Show more" type UI patterns. +/// +public class ToggleVisibilityAction : Action +{ + /// + /// Must be **Action.ToggleVisibility**. + /// + [JsonPropertyName("type")] + public string Type { get; } = "Action.ToggleVisibility"; + + /// + /// A unique identifier for the element or action. Input elements must have an id, otherwise they will not be validated and their values will not be sent to the Bot. + /// + [JsonPropertyName("id")] + public string? Id { get; set; } + + /// + /// A list of capabilities the element requires the host application to support. If the host application doesn't support at least one of the listed capabilities, the element is not rendered (or its fallback is rendered if provided). + /// + [JsonPropertyName("requires")] + public HostCapabilities? Requires { get; set; } + + /// + /// The title of the action, as it appears on buttons. + /// + [JsonPropertyName("title")] + public string? Title { get; set; } + + /// + /// A URL (or Base64-encoded Data URI) to a PNG, GIF, JPEG or SVG image to be displayed on the left of the action's title. + /// + /// `iconUrl` also accepts the `[,regular|filled]` format to display an icon from the vast [Adaptive Card icon catalog](https://adaptivecards.microsoft.com/?topic=icon-catalog) instead of an image. + /// + [JsonPropertyName("iconUrl")] + public string? IconUrl { get; set; } + + /// + /// Control the style of the action, affecting its visual and spoken representations. + /// + [JsonPropertyName("style")] + public ActionStyle? Style { get; set; } + + /// + /// Controls if the action is primary or secondary. Secondary actions appear in an overflow menu. + /// + [JsonPropertyName("mode")] + public ActionMode? Mode { get; set; } + + /// + /// The tooltip text to display when the action is hovered over. + /// + [JsonPropertyName("tooltip")] + public string? Tooltip { get; set; } + + /// + /// Controls the enabled state of the action. A disabled action cannot be clicked. If the action is represented as a button, the button's style will reflect this state. + /// + [JsonPropertyName("isEnabled")] + public bool? IsEnabled { get; set; } + + /// + /// The Ids of the elements to toggle the visibility of. + /// + [JsonPropertyName("targetElements")] + public IUnion, IList>? TargetElements { get; set; } + + /// + /// An alternate action to render if the type of this one is unsupported or if the host application doesn't support all the capabilities specified in the requires property. + /// + [JsonPropertyName("fallback")] + public IUnion? Fallback { get; set; } + + public ToggleVisibilityAction WithId(string value) + { + this.Id = value; + return this; + } + + public ToggleVisibilityAction WithRequires(HostCapabilities value) + { + this.Requires = value; + return this; + } + + public ToggleVisibilityAction WithTitle(string value) + { + this.Title = value; + return this; + } + + public ToggleVisibilityAction WithIconUrl(string value) + { + this.IconUrl = value; + return this; + } + + public ToggleVisibilityAction WithStyle(ActionStyle value) + { + this.Style = value; + return this; + } + + public ToggleVisibilityAction WithMode(ActionMode value) + { + this.Mode = value; + return this; + } + + public ToggleVisibilityAction WithTooltip(string value) + { + this.Tooltip = value; + return this; + } + + public ToggleVisibilityAction WithIsEnabled(bool value) + { + this.IsEnabled = value; + return this; + } + + public ToggleVisibilityAction WithTargetElements(IUnion, IList> value) + { + this.TargetElements = value; + return this; + } + + public ToggleVisibilityAction WithFallback(IUnion value) + { + this.Fallback = value; + return this; + } +} + +/// +/// Defines a target element in an Action.ToggleVisibility. +/// +public class TargetElement : SerializableObject +{ + /// + /// The Id of the element to change the visibility of. + /// + [JsonPropertyName("elementId")] + public string? ElementId { get; set; } + + /// + /// The new visibility state of the element. + /// + [JsonPropertyName("isVisible")] + public bool? IsVisible { get; set; } + + public TargetElement WithElementId(string value) + { + this.ElementId = value; + return this; + } + + public TargetElement WithIsVisible(bool value) + { + this.IsVisible = value; + return this; + } +} + +/// +/// Expands or collapses an embedded card within the main card. +/// +public class ShowCardAction : Action +{ + /// + /// Must be **Action.ShowCard**. + /// + [JsonPropertyName("type")] + public string Type { get; } = "Action.ShowCard"; + + /// + /// A unique identifier for the element or action. Input elements must have an id, otherwise they will not be validated and their values will not be sent to the Bot. + /// + [JsonPropertyName("id")] + public string? Id { get; set; } + + /// + /// A list of capabilities the element requires the host application to support. If the host application doesn't support at least one of the listed capabilities, the element is not rendered (or its fallback is rendered if provided). + /// + [JsonPropertyName("requires")] + public HostCapabilities? Requires { get; set; } + + /// + /// The title of the action, as it appears on buttons. + /// + [JsonPropertyName("title")] + public string? Title { get; set; } + + /// + /// A URL (or Base64-encoded Data URI) to a PNG, GIF, JPEG or SVG image to be displayed on the left of the action's title. + /// + /// `iconUrl` also accepts the `[,regular|filled]` format to display an icon from the vast [Adaptive Card icon catalog](https://adaptivecards.microsoft.com/?topic=icon-catalog) instead of an image. + /// + [JsonPropertyName("iconUrl")] + public string? IconUrl { get; set; } + + /// + /// Control the style of the action, affecting its visual and spoken representations. + /// + [JsonPropertyName("style")] + public ActionStyle? Style { get; set; } + + /// + /// Controls if the action is primary or secondary. Secondary actions appear in an overflow menu. + /// + [JsonPropertyName("mode")] + public ActionMode? Mode { get; set; } + + /// + /// The tooltip text to display when the action is hovered over. + /// + [JsonPropertyName("tooltip")] + public string? Tooltip { get; set; } + + /// + /// Controls the enabled state of the action. A disabled action cannot be clicked. If the action is represented as a button, the button's style will reflect this state. + /// + [JsonPropertyName("isEnabled")] + public bool? IsEnabled { get; set; } + + /// + /// An alternate action to render if the type of this one is unsupported or if the host application doesn't support all the capabilities specified in the requires property. + /// + [JsonPropertyName("fallback")] + public IUnion? Fallback { get; set; } + + /// + /// The card that should be displayed when the action is executed. + /// + [JsonPropertyName("card")] + public AdaptiveCard? Card { get; set; } + + public ShowCardAction WithId(string value) + { + this.Id = value; + return this; + } + + public ShowCardAction WithRequires(HostCapabilities value) + { + this.Requires = value; + return this; + } + + public ShowCardAction WithTitle(string value) + { + this.Title = value; + return this; + } + + public ShowCardAction WithIconUrl(string value) + { + this.IconUrl = value; + return this; + } + + public ShowCardAction WithStyle(ActionStyle value) + { + this.Style = value; + return this; + } + + public ShowCardAction WithMode(ActionMode value) + { + this.Mode = value; + return this; + } + + public ShowCardAction WithTooltip(string value) + { + this.Tooltip = value; + return this; + } + + public ShowCardAction WithIsEnabled(bool value) + { + this.IsEnabled = value; + return this; + } + + public ShowCardAction WithFallback(IUnion value) + { + this.Fallback = value; + return this; + } + + public ShowCardAction WithCard(AdaptiveCard value) + { + this.Card = value; + return this; + } +} + +/// +/// Resets the values of the inputs in the card. +/// +public class ResetInputsAction : Action +{ + /// + /// Must be **Action.ResetInputs**. + /// + [JsonPropertyName("type")] + public string Type { get; } = "Action.ResetInputs"; + + /// + /// A unique identifier for the element or action. Input elements must have an id, otherwise they will not be validated and their values will not be sent to the Bot. + /// + [JsonPropertyName("id")] + public string? Id { get; set; } + + /// + /// A list of capabilities the element requires the host application to support. If the host application doesn't support at least one of the listed capabilities, the element is not rendered (or its fallback is rendered if provided). + /// + [JsonPropertyName("requires")] + public HostCapabilities? Requires { get; set; } + + /// + /// The title of the action, as it appears on buttons. + /// + [JsonPropertyName("title")] + public string? Title { get; set; } + + /// + /// A URL (or Base64-encoded Data URI) to a PNG, GIF, JPEG or SVG image to be displayed on the left of the action's title. + /// + /// `iconUrl` also accepts the `[,regular|filled]` format to display an icon from the vast [Adaptive Card icon catalog](https://adaptivecards.microsoft.com/?topic=icon-catalog) instead of an image. + /// + [JsonPropertyName("iconUrl")] + public string? IconUrl { get; set; } + + /// + /// Control the style of the action, affecting its visual and spoken representations. + /// + [JsonPropertyName("style")] + public ActionStyle? Style { get; set; } + + /// + /// Controls if the action is primary or secondary. Secondary actions appear in an overflow menu. + /// + [JsonPropertyName("mode")] + public ActionMode? Mode { get; set; } + + /// + /// The tooltip text to display when the action is hovered over. + /// + [JsonPropertyName("tooltip")] + public string? Tooltip { get; set; } + + /// + /// Controls the enabled state of the action. A disabled action cannot be clicked. If the action is represented as a button, the button's style will reflect this state. + /// + [JsonPropertyName("isEnabled")] + public bool? IsEnabled { get; set; } + + /// + /// The Ids of the inputs that should be reset. + /// + [JsonPropertyName("targetInputIds")] + public IList? TargetInputIds { get; set; } + + /// + /// An alternate action to render if the type of this one is unsupported or if the host application doesn't support all the capabilities specified in the requires property. + /// + [JsonPropertyName("fallback")] + public IUnion? Fallback { get; set; } + + public ResetInputsAction WithId(string value) + { + this.Id = value; + return this; + } + + public ResetInputsAction WithRequires(HostCapabilities value) + { + this.Requires = value; + return this; + } + + public ResetInputsAction WithTitle(string value) + { + this.Title = value; + return this; + } + + public ResetInputsAction WithIconUrl(string value) + { + this.IconUrl = value; + return this; + } + + public ResetInputsAction WithStyle(ActionStyle value) + { + this.Style = value; + return this; + } + + public ResetInputsAction WithMode(ActionMode value) + { + this.Mode = value; + return this; + } + + public ResetInputsAction WithTooltip(string value) + { + this.Tooltip = value; + return this; + } + + public ResetInputsAction WithIsEnabled(bool value) + { + this.IsEnabled = value; + return this; + } + + public ResetInputsAction WithTargetInputIds(params IList value) + { + this.TargetInputIds = value; + return this; + } + + public ResetInputsAction WithFallback(IUnion value) + { + this.Fallback = value; + return this; + } +} + +/// +/// A layout that stacks elements on top of each other. Layout.Stack is the default layout used by AdaptiveCard and all containers. +/// +public class StackLayout : ContainerLayout +{ + /// + /// Must be **Layout.Stack**. + /// + [JsonPropertyName("type")] + public string Type { get; } = "Layout.Stack"; + + /// + /// Controls for which card width the layout should be used. + /// + [JsonPropertyName("targetWidth")] + public TargetWidth? TargetWidth { get; set; } + + public StackLayout WithTargetWidth(TargetWidth value) + { + this.TargetWidth = value; + return this; + } +} + +/// +/// A layout that spreads elements horizontally and wraps them across multiple rows, as needed. +/// +public class FlowLayout : ContainerLayout +{ + /// + /// Must be **Layout.Flow**. + /// + [JsonPropertyName("type")] + public string Type { get; } = "Layout.Flow"; + + /// + /// Controls for which card width the layout should be used. + /// + [JsonPropertyName("targetWidth")] + public TargetWidth? TargetWidth { get; set; } + + /// + /// Controls how the content of the container should be horizontally aligned. + /// + [JsonPropertyName("horizontalItemsAlignment")] + public HorizontalAlignment? HorizontalItemsAlignment { get; set; } + + /// + /// Controls how the content of the container should be vertically aligned. + /// + [JsonPropertyName("verticalItemsAlignment")] + public VerticalAlignment? VerticalItemsAlignment { get; set; } + + /// + /// Controls how item should fit inside the container. + /// + [JsonPropertyName("itemFit")] + public FlowLayoutItemFit? ItemFit { get; set; } + + /// + /// The minimum width, in pixels, of each item, in the `px` format. Should not be used if itemWidth is set. + /// + [JsonPropertyName("minItemWidth")] + public string? MinItemWidth { get; set; } + + /// + /// The maximum width, in pixels, of each item, in the `px` format. Should not be used if itemWidth is set. + /// + [JsonPropertyName("maxItemWidth")] + public string? MaxItemWidth { get; set; } + + /// + /// The width, in pixels, of each item, in the `px` format. Should not be used if maxItemWidth and/or minItemWidth are set. + /// + [JsonPropertyName("itemWidth")] + public string? ItemWidth { get; set; } + + /// + /// The space between items. + /// + [JsonPropertyName("columnSpacing")] + public Spacing? ColumnSpacing { get; set; } + + /// + /// The space between rows of items. + /// + [JsonPropertyName("rowSpacing")] + public Spacing? RowSpacing { get; set; } + + public FlowLayout WithTargetWidth(TargetWidth value) + { + this.TargetWidth = value; + return this; + } + + public FlowLayout WithHorizontalItemsAlignment(HorizontalAlignment value) + { + this.HorizontalItemsAlignment = value; + return this; + } + + public FlowLayout WithVerticalItemsAlignment(VerticalAlignment value) + { + this.VerticalItemsAlignment = value; + return this; + } + + public FlowLayout WithItemFit(FlowLayoutItemFit value) + { + this.ItemFit = value; + return this; + } + + public FlowLayout WithMinItemWidth(string value) + { + this.MinItemWidth = value; + return this; + } + + public FlowLayout WithMaxItemWidth(string value) + { + this.MaxItemWidth = value; + return this; + } + + public FlowLayout WithItemWidth(string value) + { + this.ItemWidth = value; + return this; + } + + public FlowLayout WithColumnSpacing(Spacing value) + { + this.ColumnSpacing = value; + return this; + } + + public FlowLayout WithRowSpacing(Spacing value) + { + this.RowSpacing = value; + return this; + } +} + +/// +/// A layout that divides a container into named areas into which elements can be placed. +/// +public class AreaGridLayout : ContainerLayout +{ + /// + /// Must be **Layout.AreaGrid**. + /// + [JsonPropertyName("type")] + public string Type { get; } = "Layout.AreaGrid"; + + /// + /// Controls for which card width the layout should be used. + /// + [JsonPropertyName("targetWidth")] + public TargetWidth? TargetWidth { get; set; } + + /// + /// The columns in the grid layout, defined as a percentage of the available width or in pixels using the `px` format. + /// + [JsonPropertyName("columns")] + public IUnion, IList>? Columns { get; set; } + + /// + /// The areas in the grid layout. + /// + [JsonPropertyName("areas")] + public IList? Areas { get; set; } + + /// + /// The space between columns. + /// + [JsonPropertyName("columnSpacing")] + public Spacing? ColumnSpacing { get; set; } + + /// + /// The space between rows. + /// + [JsonPropertyName("rowSpacing")] + public Spacing? RowSpacing { get; set; } + + public AreaGridLayout WithTargetWidth(TargetWidth value) + { + this.TargetWidth = value; + return this; + } + + public AreaGridLayout WithColumns(IUnion, IList> value) + { + this.Columns = value; + return this; + } + + public AreaGridLayout WithAreas(params IList value) + { + this.Areas = value; + return this; + } + + public AreaGridLayout WithColumnSpacing(Spacing value) + { + this.ColumnSpacing = value; + return this; + } + + public AreaGridLayout WithRowSpacing(Spacing value) + { + this.RowSpacing = value; + return this; + } +} + +/// +/// Defines an area in a Layout.AreaGrid layout. +/// +public class GridArea : SerializableObject +{ + /// + /// The name of the area. To place an element in this area, set its `grid.area` property to match the name of the area. + /// + [JsonPropertyName("name")] + public string? Name { get; set; } + + /// + /// The start column index of the area. Column indices start at 1. + /// + [JsonPropertyName("column")] + public float? Column { get; set; } + + /// + /// Defines how many columns the area should span. + /// + [JsonPropertyName("columnSpan")] + public float? ColumnSpan { get; set; } + + /// + /// The start row index of the area. Row indices start at 1. + /// + [JsonPropertyName("row")] + public float? Row { get; set; } + + /// + /// Defines how many rows the area should span. + /// + [JsonPropertyName("rowSpan")] + public float? RowSpan { get; set; } + + public GridArea WithName(string value) + { + this.Name = value; + return this; + } + + public GridArea WithColumn(float value) + { + this.Column = value; + return this; + } + + public GridArea WithColumnSpan(float value) + { + this.ColumnSpan = value; + return this; + } + + public GridArea WithRow(float value) + { + this.Row = value; + return this; + } + + public GridArea WithRowSpan(float value) + { + this.RowSpan = value; + return this; + } +} + +/// +/// Defines a container's background image and the way it should be rendered. +/// +public class BackgroundImage : SerializableObject +{ + /// + /// The URL (or Base64-encoded Data URI) of the image. Acceptable formats are PNG, JPEG, GIF and SVG. + /// + [JsonPropertyName("url")] + public string? Url { get; set; } + + /// + /// Controls how the image should fill the area. + /// + [JsonPropertyName("fillMode")] + public FillMode? FillMode { get; set; } + + /// + /// Controls how the image should be aligned if it must be cropped or if using repeat fill mode. + /// + [JsonPropertyName("horizontalAlignment")] + public HorizontalAlignment? HorizontalAlignment { get; set; } + + /// + /// Controls how the image should be aligned if it must be cropped or if using repeat fill mode. + /// + [JsonPropertyName("verticalAlignment")] + public VerticalAlignment? VerticalAlignment { get; set; } + + public BackgroundImage WithUrl(string value) + { + this.Url = value; + return this; + } + + public BackgroundImage WithFillMode(FillMode value) + { + this.FillMode = value; + return this; + } + + public BackgroundImage WithHorizontalAlignment(HorizontalAlignment value) + { + this.HorizontalAlignment = value; + return this; + } + + public BackgroundImage WithVerticalAlignment(VerticalAlignment value) + { + this.VerticalAlignment = value; + return this; + } +} + +/// +/// Defines how a card can be refreshed by making a request to the target Bot. +/// +public class RefreshDefinition : SerializableObject +{ + /// + /// The Action.Execute action to invoke to refresh the card. + /// + [JsonPropertyName("action")] + public ExecuteAction? Action { get; set; } + + /// + /// The list of user Ids for which the card will be automatically refreshed. In Teams, in chats or channels with more than 60 users, the card will automatically refresh only for users specified in the userIds list. Other users will have to manually click on a "refresh" button. In contexts with fewer than 60 users, the card will automatically refresh for all users. + /// + [JsonPropertyName("userIds")] + public IList? UserIds { get; set; } + + public RefreshDefinition WithAction(ExecuteAction value) + { + this.Action = value; + return this; + } + + public RefreshDefinition WithUserIds(params IList value) + { + this.UserIds = value; + return this; + } +} + +/// +/// Defines authentication information associated with a card. For more information, refer to the [Bot Framework OAuthCard type](https://docs.microsoft.com/dotnet/api/microsoft.bot.schema.oauthcard) +/// +public class Authentication : SerializableObject +{ + /// + /// The text that can be displayed to the end user when prompting them to authenticate. + /// + [JsonPropertyName("text")] + public string? Text { get; set; } + + /// + /// The identifier for registered OAuth connection setting information. + /// + [JsonPropertyName("connectionName")] + public string? ConnectionName { get; set; } + + /// + /// The buttons that should be displayed to the user when prompting for authentication. The array MUST contain one button of type “signin”. Other button types are not currently supported. + /// + [JsonPropertyName("buttons")] + public IList? Buttons { get; set; } + + /// + /// Provides information required to enable on-behalf-of single sign-on user authentication. + /// + [JsonPropertyName("tokenExchangeResource")] + public TokenExchangeResource? TokenExchangeResource { get; set; } + + public Authentication WithText(string value) + { + this.Text = value; + return this; + } + + public Authentication WithConnectionName(string value) + { + this.ConnectionName = value; + return this; + } + + public Authentication WithButtons(params IList value) + { + this.Buttons = value; + return this; + } + + public Authentication WithTokenExchangeResource(TokenExchangeResource value) + { + this.TokenExchangeResource = value; + return this; + } +} + +/// +/// Defines a button as displayed when prompting a user to authenticate. For more information, refer to the [Bot Framework CardAction type](https://docs.microsoft.com/dotnet/api/microsoft.bot.schema.cardaction). +/// +public class AuthCardButton : SerializableObject +{ + /// + /// Must be **signin**. + /// + [JsonPropertyName("type")] + public string? Type { get; set; } + + /// + /// The caption of the button. + /// + [JsonPropertyName("title")] + public string? Title { get; set; } + + /// + /// A URL to an image to display alongside the button’s caption. + /// + [JsonPropertyName("image")] + public string? Image { get; set; } + + /// + /// The value associated with the button. The meaning of value depends on the button’s type. + /// + [JsonPropertyName("value")] + public string? Value { get; set; } + + public AuthCardButton WithType(string value) + { + this.Type = value; + return this; + } + + public AuthCardButton WithTitle(string value) + { + this.Title = value; + return this; + } + + public AuthCardButton WithImage(string value) + { + this.Image = value; + return this; + } + + public AuthCardButton WithValue(string value) + { + this.Value = value; + return this; + } +} + +/// +/// Defines information required to enable on-behalf-of single sign-on user authentication. For more information, refer to the [Bot Framework TokenExchangeResource type](https://docs.microsoft.com/dotnet/api/microsoft.bot.schema.tokenexchangeresource) +/// +public class TokenExchangeResource : SerializableObject +{ + /// + /// The unique identified of this token exchange instance. + /// + [JsonPropertyName("id")] + public string? Id { get; set; } + + /// + /// An application ID or resource identifier with which to exchange a token on behalf of. This property is identity provider- and application-specific. + /// + [JsonPropertyName("uri")] + public string? Uri { get; set; } + + /// + /// An identifier for the identity provider with which to attempt a token exchange. + /// + [JsonPropertyName("providerId")] + public string? ProviderId { get; set; } + + public TokenExchangeResource WithId(string value) + { + this.Id = value; + return this; + } + + public TokenExchangeResource WithUri(string value) + { + this.Uri = value; + return this; + } + + public TokenExchangeResource WithProviderId(string value) + { + this.ProviderId = value; + return this; + } +} + +/// +/// Represents a set of Teams-specific properties on a card. +/// +public class TeamsCardProperties : SerializableObject +{ + /// + /// Controls the width of the card in a Teams chat. + /// + /// Note that setting `width` to "full" will not actually stretch the card to the "full width" of the chat pane. It will only make the card wider than when the `width` property isn't set. + /// + [JsonPropertyName("width")] + public TeamsCardWidth? Width { get; set; } + + /// + /// The Teams-specific entities associated with the card. + /// + [JsonPropertyName("entities")] + public IList? Entities { get; set; } + + public TeamsCardProperties WithWidth(TeamsCardWidth value) + { + this.Width = value; + return this; + } + + public TeamsCardProperties WithEntities(params IList value) + { + this.Entities = value; + return this; + } +} + +/// +/// Represents a mention to a person. +/// +public class Mention : SerializableObject +{ + /// + /// Must be **mention**. + /// + [JsonPropertyName("type")] + public string Type { get; } = "mention"; + + /// + /// The text that will be substituted with the mention. + /// + [JsonPropertyName("text")] + public string? Text { get; set; } + + /// + /// Defines the entity being mentioned. + /// + [JsonPropertyName("mentioned")] + public MentionedEntity? Mentioned { get; set; } + + public Mention WithText(string value) + { + this.Text = value; + return this; + } + + public Mention WithMentioned(MentionedEntity value) + { + this.Mentioned = value; + return this; + } +} + +/// +/// Represents a mentioned person or tag. +/// +public class MentionedEntity : SerializableObject +{ + /// + /// The Id of a person (typically a Microsoft Entra user Id) or tag. + /// + [JsonPropertyName("id")] + public string? Id { get; set; } + + /// + /// The name of the mentioned entity. + /// + [JsonPropertyName("name")] + public string? Name { get; set; } + + /// + /// The type of the mentioned entity. + /// + [JsonPropertyName("mentionType")] + public MentionType? MentionType { get; set; } + + public MentionedEntity WithId(string value) + { + this.Id = value; + return this; + } + + public MentionedEntity WithName(string value) + { + this.Name = value; + return this; + } + + public MentionedEntity WithMentionType(MentionType value) + { + this.MentionType = value; + return this; + } +} + +/// +/// Card-level metadata. +/// +public class CardMetadata : SerializableObject +{ + /// + /// The URL the card originates from. When `webUrl` is set, the card is dubbed an **Adaptive Card-based Loop Component** and, when pasted in Teams or other Loop Component-capable host applications, the URL will unfurl to the same exact card. + /// + [JsonPropertyName("webUrl")] + public string? WebUrl { get; set; } + + public CardMetadata WithWebUrl(string value) + { + this.WebUrl = value; + return this; + } +} + +/// +/// A container for other elements. Use containers for styling purposes and/or to logically group a set of elements together, which can be especially useful when used with Action.ToggleVisibility. +/// +public class Container : CardElement +{ + /// + /// Must be **Container**. + /// + [JsonPropertyName("type")] + public string Type { get; } = "Container"; + + /// + /// A unique identifier for the element or action. Input elements must have an id, otherwise they will not be validated and their values will not be sent to the Bot. + /// + [JsonPropertyName("id")] + public string? Id { get; set; } + + /// + /// A list of capabilities the element requires the host application to support. If the host application doesn't support at least one of the listed capabilities, the element is not rendered (or its fallback is rendered if provided). + /// + [JsonPropertyName("requires")] + public HostCapabilities? Requires { get; set; } + + /// + /// The locale associated with the element. + /// + [JsonPropertyName("lang")] + public string? Lang { get; set; } + + /// + /// Controls the visibility of the element. + /// + [JsonPropertyName("isVisible")] + public bool? IsVisible { get; set; } + + /// + /// Controls whether a separator line should be displayed above the element to visually separate it from the previous element. No separator will be displayed for the first element in a container, even if this property is set to true. + /// + [JsonPropertyName("separator")] + public bool? Separator { get; set; } + + /// + /// The height of the element. When set to stretch, the element will use the remaining vertical space in its container. + /// + [JsonPropertyName("height")] + public ElementHeight? Height { get; set; } + + /// + /// Controls how the element should be horizontally aligned. + /// + [JsonPropertyName("horizontalAlignment")] + public HorizontalAlignment? HorizontalAlignment { get; set; } + + /// + /// Controls the amount of space between this element and the previous one. No space will be added for the first element in a container. + /// + [JsonPropertyName("spacing")] + public Spacing? Spacing { get; set; } + + /// + /// Controls for which card width the element should be displayed. If targetWidth isn't specified, the element is rendered at all card widths. Using targetWidth makes it possible to author responsive cards that adapt their layout to the available horizontal space. For more details, see [Responsive layout](https://adaptivecards.microsoft.com/?topic=responsive-layout). + /// + [JsonPropertyName("targetWidth")] + public TargetWidth? TargetWidth { get; set; } + + /// + /// Controls whether the element should be used as a sort key by elements that allow sorting across a collection of elements. + /// + [JsonPropertyName("isSortKey")] + public bool? IsSortKey { get; set; } + + /// + /// An Action that will be invoked when the element is tapped or clicked. Action.ShowCard is not supported. + /// + [JsonPropertyName("selectAction")] + public Action? SelectAction { get; set; } + + /// + /// The style of the container. Container styles control the colors of the background, border and text inside the container, in such a way that contrast requirements are always met. + /// + [JsonPropertyName("style")] + public ContainerStyle? Style { get; set; } + + /// + /// Controls if a border should be displayed around the container. + /// + [JsonPropertyName("showBorder")] + public bool? ShowBorder { get; set; } + + /// + /// Controls if the container should have rounded corners. + /// + [JsonPropertyName("roundedCorners")] + public bool? RoundedCorners { get; set; } + + /// + /// The layouts associated with the container. The container can dynamically switch from one layout to another as the card's width changes. See [Container layouts](https://adaptivecards.microsoft.com/?topic=container-layouts) for more details. + /// + [JsonPropertyName("layouts")] + public IList? Layouts { get; set; } + + /// + /// Controls if the container should bleed into its parent. A bleeding container extends into its parent's padding. + /// + [JsonPropertyName("bleed")] + public bool? Bleed { get; set; } + + /// + /// The minimum height, in pixels, of the container, in the `px` format. + /// + [JsonPropertyName("minHeight")] + public string? MinHeight { get; set; } + + /// + /// Defines the container's background image. + /// + [JsonPropertyName("backgroundImage")] + public IUnion? BackgroundImage { get; set; } + + /// + /// Controls how the container's content should be vertically aligned. + /// + [JsonPropertyName("verticalContentAlignment")] + public VerticalAlignment? VerticalContentAlignment { get; set; } + + /// + /// Controls if the content of the card is to be rendered left-to-right or right-to-left. + /// + [JsonPropertyName("rtl")] + public bool? Rtl { get; set; } + + /// + /// The maximum height, in pixels, of the container, in the `px` format. When the content of a container exceeds the container's maximum height, a vertical scrollbar is displayed. + /// + [JsonPropertyName("maxHeight")] + public string? MaxHeight { get; set; } + + /// + /// The area of a Layout.AreaGrid layout in which an element should be displayed. + /// + [JsonPropertyName("grid.area")] + public string? GridArea { get; set; } + + /// + /// An alternate element to render if the type of this one is unsupported or if the host application doesn't support all the capabilities specified in the requires property. + /// + [JsonPropertyName("fallback")] + public IUnion? Fallback { get; set; } + + /// + /// The elements in the container. + /// + [JsonPropertyName("items")] + public IList? Items { get; set; } + + public Container(params IList items) + { + this.Items = items; + } + + public Container WithId(string value) + { + this.Id = value; + return this; + } + + public Container WithRequires(HostCapabilities value) + { + this.Requires = value; + return this; + } + + public Container WithLang(string value) + { + this.Lang = value; + return this; + } + + public Container WithIsVisible(bool value) + { + this.IsVisible = value; + return this; + } + + public Container WithSeparator(bool value) + { + this.Separator = value; + return this; + } + + public Container WithHeight(ElementHeight value) + { + this.Height = value; + return this; + } + + public Container WithHorizontalAlignment(HorizontalAlignment value) + { + this.HorizontalAlignment = value; + return this; + } + + public Container WithSpacing(Spacing value) + { + this.Spacing = value; + return this; + } + + public Container WithTargetWidth(TargetWidth value) + { + this.TargetWidth = value; + return this; + } + + public Container WithIsSortKey(bool value) + { + this.IsSortKey = value; + return this; + } + + public Container WithSelectAction(Action value) + { + this.SelectAction = value; + return this; + } + + public Container WithStyle(ContainerStyle value) + { + this.Style = value; + return this; + } + + public Container WithShowBorder(bool value) + { + this.ShowBorder = value; + return this; + } + + public Container WithRoundedCorners(bool value) + { + this.RoundedCorners = value; + return this; + } + + public Container WithLayouts(params IList value) + { + this.Layouts = value; + return this; + } + + public Container WithBleed(bool value) + { + this.Bleed = value; + return this; + } + + public Container WithMinHeight(string value) + { + this.MinHeight = value; + return this; + } + + public Container WithBackgroundImage(IUnion value) + { + this.BackgroundImage = value; + return this; + } + + public Container WithVerticalContentAlignment(VerticalAlignment value) + { + this.VerticalContentAlignment = value; + return this; + } + + public Container WithRtl(bool value) + { + this.Rtl = value; + return this; + } + + public Container WithMaxHeight(string value) + { + this.MaxHeight = value; + return this; + } + + public Container WithGridArea(string value) + { + this.GridArea = value; + return this; + } + + public Container WithFallback(IUnion value) + { + this.Fallback = value; + return this; + } + + public Container WithItems(params IList value) + { + this.Items = value; + return this; + } +} + +/// +/// Displays a set of action, which can be placed anywhere in the card. +/// +public class ActionSet : CardElement +{ + /// + /// Must be **ActionSet**. + /// + [JsonPropertyName("type")] + public string Type { get; } = "ActionSet"; + + /// + /// A unique identifier for the element or action. Input elements must have an id, otherwise they will not be validated and their values will not be sent to the Bot. + /// + [JsonPropertyName("id")] + public string? Id { get; set; } + + /// + /// A list of capabilities the element requires the host application to support. If the host application doesn't support at least one of the listed capabilities, the element is not rendered (or its fallback is rendered if provided). + /// + [JsonPropertyName("requires")] + public HostCapabilities? Requires { get; set; } + + /// + /// The locale associated with the element. + /// + [JsonPropertyName("lang")] + public string? Lang { get; set; } + + /// + /// Controls the visibility of the element. + /// + [JsonPropertyName("isVisible")] + public bool? IsVisible { get; set; } + + /// + /// Controls whether a separator line should be displayed above the element to visually separate it from the previous element. No separator will be displayed for the first element in a container, even if this property is set to true. + /// + [JsonPropertyName("separator")] + public bool? Separator { get; set; } + + /// + /// The height of the element. When set to stretch, the element will use the remaining vertical space in its container. + /// + [JsonPropertyName("height")] + public ElementHeight? Height { get; set; } + + /// + /// Controls how the element should be horizontally aligned. + /// + [JsonPropertyName("horizontalAlignment")] + public HorizontalAlignment? HorizontalAlignment { get; set; } + + /// + /// Controls the amount of space between this element and the previous one. No space will be added for the first element in a container. + /// + [JsonPropertyName("spacing")] + public Spacing? Spacing { get; set; } + + /// + /// Controls for which card width the element should be displayed. If targetWidth isn't specified, the element is rendered at all card widths. Using targetWidth makes it possible to author responsive cards that adapt their layout to the available horizontal space. For more details, see [Responsive layout](https://adaptivecards.microsoft.com/?topic=responsive-layout). + /// + [JsonPropertyName("targetWidth")] + public TargetWidth? TargetWidth { get; set; } + + /// + /// Controls whether the element should be used as a sort key by elements that allow sorting across a collection of elements. + /// + [JsonPropertyName("isSortKey")] + public bool? IsSortKey { get; set; } + + /// + /// The area of a Layout.AreaGrid layout in which an element should be displayed. + /// + [JsonPropertyName("grid.area")] + public string? GridArea { get; set; } + + /// + /// An alternate element to render if the type of this one is unsupported or if the host application doesn't support all the capabilities specified in the requires property. + /// + [JsonPropertyName("fallback")] + public IUnion? Fallback { get; set; } + + /// + /// The actions in the set. + /// + [JsonPropertyName("actions")] + public IList? Actions { get; set; } + + public ActionSet(params IList actions) + { + this.Actions = actions; + } + + public ActionSet WithId(string value) + { + this.Id = value; + return this; + } + + public ActionSet WithRequires(HostCapabilities value) + { + this.Requires = value; + return this; + } + + public ActionSet WithLang(string value) + { + this.Lang = value; + return this; + } + + public ActionSet WithIsVisible(bool value) + { + this.IsVisible = value; + return this; + } + + public ActionSet WithSeparator(bool value) + { + this.Separator = value; + return this; + } + + public ActionSet WithHeight(ElementHeight value) + { + this.Height = value; + return this; + } + + public ActionSet WithHorizontalAlignment(HorizontalAlignment value) + { + this.HorizontalAlignment = value; + return this; + } + + public ActionSet WithSpacing(Spacing value) + { + this.Spacing = value; + return this; + } + + public ActionSet WithTargetWidth(TargetWidth value) + { + this.TargetWidth = value; + return this; + } + + public ActionSet WithIsSortKey(bool value) + { + this.IsSortKey = value; + return this; + } + + public ActionSet WithGridArea(string value) + { + this.GridArea = value; + return this; + } + + public ActionSet WithFallback(IUnion value) + { + this.Fallback = value; + return this; + } + + public ActionSet WithActions(params IList value) + { + this.Actions = value; + return this; + } +} + +/// +/// Splits the available horizontal space into separate columns, so elements can be organized in a row. +/// +public class ColumnSet : CardElement +{ + /// + /// Must be **ColumnSet**. + /// + [JsonPropertyName("type")] + public string Type { get; } = "ColumnSet"; + + /// + /// A unique identifier for the element or action. Input elements must have an id, otherwise they will not be validated and their values will not be sent to the Bot. + /// + [JsonPropertyName("id")] + public string? Id { get; set; } + + /// + /// A list of capabilities the element requires the host application to support. If the host application doesn't support at least one of the listed capabilities, the element is not rendered (or its fallback is rendered if provided). + /// + [JsonPropertyName("requires")] + public HostCapabilities? Requires { get; set; } + + /// + /// The locale associated with the element. + /// + [JsonPropertyName("lang")] + public string? Lang { get; set; } + + /// + /// Controls the visibility of the element. + /// + [JsonPropertyName("isVisible")] + public bool? IsVisible { get; set; } + + /// + /// Controls whether a separator line should be displayed above the element to visually separate it from the previous element. No separator will be displayed for the first element in a container, even if this property is set to true. + /// + [JsonPropertyName("separator")] + public bool? Separator { get; set; } + + /// + /// The height of the element. When set to stretch, the element will use the remaining vertical space in its container. + /// + [JsonPropertyName("height")] + public ElementHeight? Height { get; set; } + + /// + /// Controls how the element should be horizontally aligned. + /// + [JsonPropertyName("horizontalAlignment")] + public HorizontalAlignment? HorizontalAlignment { get; set; } + + /// + /// Controls the amount of space between this element and the previous one. No space will be added for the first element in a container. + /// + [JsonPropertyName("spacing")] + public Spacing? Spacing { get; set; } + + /// + /// Controls for which card width the element should be displayed. If targetWidth isn't specified, the element is rendered at all card widths. Using targetWidth makes it possible to author responsive cards that adapt their layout to the available horizontal space. For more details, see [Responsive layout](https://adaptivecards.microsoft.com/?topic=responsive-layout). + /// + [JsonPropertyName("targetWidth")] + public TargetWidth? TargetWidth { get; set; } + + /// + /// Controls whether the element should be used as a sort key by elements that allow sorting across a collection of elements. + /// + [JsonPropertyName("isSortKey")] + public bool? IsSortKey { get; set; } + + /// + /// An Action that will be invoked when the element is tapped or clicked. Action.ShowCard is not supported. + /// + [JsonPropertyName("selectAction")] + public Action? SelectAction { get; set; } + + /// + /// The style of the container. Container styles control the colors of the background, border and text inside the container, in such a way that contrast requirements are always met. + /// + [JsonPropertyName("style")] + public ContainerStyle? Style { get; set; } + + /// + /// Controls if a border should be displayed around the container. + /// + [JsonPropertyName("showBorder")] + public bool? ShowBorder { get; set; } + + /// + /// Controls if the container should have rounded corners. + /// + [JsonPropertyName("roundedCorners")] + public bool? RoundedCorners { get; set; } + + /// + /// Controls if the container should bleed into its parent. A bleeding container extends into its parent's padding. + /// + [JsonPropertyName("bleed")] + public bool? Bleed { get; set; } + + /// + /// The minimum height, in pixels, of the container, in the `px` format. + /// + [JsonPropertyName("minHeight")] + public string? MinHeight { get; set; } + + /// + /// The area of a Layout.AreaGrid layout in which an element should be displayed. + /// + [JsonPropertyName("grid.area")] + public string? GridArea { get; set; } + + /// + /// An alternate element to render if the type of this one is unsupported or if the host application doesn't support all the capabilities specified in the requires property. + /// + [JsonPropertyName("fallback")] + public IUnion? Fallback { get; set; } + + /// + /// The columns in the set. + /// + [JsonPropertyName("columns")] + public IList? Columns { get; set; } + + public ColumnSet WithId(string value) + { + this.Id = value; + return this; + } + + public ColumnSet WithRequires(HostCapabilities value) + { + this.Requires = value; + return this; + } + + public ColumnSet WithLang(string value) + { + this.Lang = value; + return this; + } + + public ColumnSet WithIsVisible(bool value) + { + this.IsVisible = value; + return this; + } + + public ColumnSet WithSeparator(bool value) + { + this.Separator = value; + return this; + } + + public ColumnSet WithHeight(ElementHeight value) + { + this.Height = value; + return this; + } + + public ColumnSet WithHorizontalAlignment(HorizontalAlignment value) + { + this.HorizontalAlignment = value; + return this; + } + + public ColumnSet WithSpacing(Spacing value) + { + this.Spacing = value; + return this; + } + + public ColumnSet WithTargetWidth(TargetWidth value) + { + this.TargetWidth = value; + return this; + } + + public ColumnSet WithIsSortKey(bool value) + { + this.IsSortKey = value; + return this; + } + + public ColumnSet WithSelectAction(Action value) + { + this.SelectAction = value; + return this; + } + + public ColumnSet WithStyle(ContainerStyle value) + { + this.Style = value; + return this; + } + + public ColumnSet WithShowBorder(bool value) + { + this.ShowBorder = value; + return this; + } + + public ColumnSet WithRoundedCorners(bool value) + { + this.RoundedCorners = value; + return this; + } + + public ColumnSet WithBleed(bool value) + { + this.Bleed = value; + return this; + } + + public ColumnSet WithMinHeight(string value) + { + this.MinHeight = value; + return this; + } + + public ColumnSet WithGridArea(string value) + { + this.GridArea = value; + return this; + } + + public ColumnSet WithFallback(IUnion value) + { + this.Fallback = value; + return this; + } + + public ColumnSet WithColumns(params IList value) + { + this.Columns = value; + return this; + } +} + +/// +/// A media element, that makes it possible to embed videos inside a card. +/// +public class Media : CardElement +{ + /// + /// Must be **Media**. + /// + [JsonPropertyName("type")] + public string Type { get; } = "Media"; + + /// + /// A unique identifier for the element or action. Input elements must have an id, otherwise they will not be validated and their values will not be sent to the Bot. + /// + [JsonPropertyName("id")] + public string? Id { get; set; } + + /// + /// A list of capabilities the element requires the host application to support. If the host application doesn't support at least one of the listed capabilities, the element is not rendered (or its fallback is rendered if provided). + /// + [JsonPropertyName("requires")] + public HostCapabilities? Requires { get; set; } + + /// + /// The locale associated with the element. + /// + [JsonPropertyName("lang")] + public string? Lang { get; set; } + + /// + /// Controls the visibility of the element. + /// + [JsonPropertyName("isVisible")] + public bool? IsVisible { get; set; } + + /// + /// Controls whether a separator line should be displayed above the element to visually separate it from the previous element. No separator will be displayed for the first element in a container, even if this property is set to true. + /// + [JsonPropertyName("separator")] + public bool? Separator { get; set; } + + /// + /// The height of the element. When set to stretch, the element will use the remaining vertical space in its container. + /// + [JsonPropertyName("height")] + public ElementHeight? Height { get; set; } + + /// + /// Controls the amount of space between this element and the previous one. No space will be added for the first element in a container. + /// + [JsonPropertyName("spacing")] + public Spacing? Spacing { get; set; } + + /// + /// Controls for which card width the element should be displayed. If targetWidth isn't specified, the element is rendered at all card widths. Using targetWidth makes it possible to author responsive cards that adapt their layout to the available horizontal space. For more details, see [Responsive layout](https://adaptivecards.microsoft.com/?topic=responsive-layout). + /// + [JsonPropertyName("targetWidth")] + public TargetWidth? TargetWidth { get; set; } + + /// + /// Controls whether the element should be used as a sort key by elements that allow sorting across a collection of elements. + /// + [JsonPropertyName("isSortKey")] + public bool? IsSortKey { get; set; } + + /// + /// The sources for the media. For YouTube, Dailymotion and Vimeo, only one source can be specified. + /// + [JsonPropertyName("sources")] + public IList? Sources { get; set; } + + /// + /// The caption sources for the media. Caption sources are not used for YouTube, Dailymotion or Vimeo sources. + /// + [JsonPropertyName("captionSources")] + public IList? CaptionSources { get; set; } + + /// + /// The URL of the poster image to display. + /// + [JsonPropertyName("poster")] + public string? Poster { get; set; } + + /// + /// The alternate text for the media, used for accessibility purposes. + /// + [JsonPropertyName("altText")] + public string? AltText { get; set; } + + /// + /// The area of a Layout.AreaGrid layout in which an element should be displayed. + /// + [JsonPropertyName("grid.area")] + public string? GridArea { get; set; } + + /// + /// An alternate element to render if the type of this one is unsupported or if the host application doesn't support all the capabilities specified in the requires property. + /// + [JsonPropertyName("fallback")] + public IUnion? Fallback { get; set; } + + public Media WithId(string value) + { + this.Id = value; + return this; + } + + public Media WithRequires(HostCapabilities value) + { + this.Requires = value; + return this; + } + + public Media WithLang(string value) + { + this.Lang = value; + return this; + } + + public Media WithIsVisible(bool value) + { + this.IsVisible = value; + return this; + } + + public Media WithSeparator(bool value) + { + this.Separator = value; + return this; + } + + public Media WithHeight(ElementHeight value) + { + this.Height = value; + return this; + } + + public Media WithSpacing(Spacing value) + { + this.Spacing = value; + return this; + } + + public Media WithTargetWidth(TargetWidth value) + { + this.TargetWidth = value; + return this; + } + + public Media WithIsSortKey(bool value) + { + this.IsSortKey = value; + return this; + } + + public Media WithSources(params IList value) + { + this.Sources = value; + return this; + } + + public Media WithCaptionSources(params IList value) + { + this.CaptionSources = value; + return this; + } + + public Media WithPoster(string value) + { + this.Poster = value; + return this; + } + + public Media WithAltText(string value) + { + this.AltText = value; + return this; + } + + public Media WithGridArea(string value) + { + this.GridArea = value; + return this; + } + + public Media WithFallback(IUnion value) + { + this.Fallback = value; + return this; + } +} + +/// +/// Defines the source URL of a media stream. YouTube, Dailymotion, Vimeo and Microsoft Stream URLs are supported. +/// +public class MediaSource : SerializableObject +{ + /// + /// The MIME type of the source. + /// + [JsonPropertyName("mimeType")] + public string? MimeType { get; set; } + + /// + /// The URL of the source. + /// + [JsonPropertyName("url")] + public string? Url { get; set; } + + public MediaSource WithMimeType(string value) + { + this.MimeType = value; + return this; + } + + public MediaSource WithUrl(string value) + { + this.Url = value; + return this; + } +} + +/// +/// Defines a source URL for a video captions. +/// +public class CaptionSource : SerializableObject +{ + /// + /// The MIME type of the source. + /// + [JsonPropertyName("mimeType")] + public string? MimeType { get; set; } + + /// + /// The URL of the source. + /// + [JsonPropertyName("url")] + public string? Url { get; set; } + + /// + /// The label of this caption source. + /// + [JsonPropertyName("label")] + public string? Label { get; set; } + + public CaptionSource WithMimeType(string value) + { + this.MimeType = value; + return this; + } + + public CaptionSource WithUrl(string value) + { + this.Url = value; + return this; + } + + public CaptionSource WithLabel(string value) + { + this.Label = value; + return this; + } +} + +/// +/// A rich text block that displays formatted text. +/// +public class RichTextBlock : CardElement +{ + /// + /// Must be **RichTextBlock**. + /// + [JsonPropertyName("type")] + public string Type { get; } = "RichTextBlock"; + + /// + /// A unique identifier for the element or action. Input elements must have an id, otherwise they will not be validated and their values will not be sent to the Bot. + /// + [JsonPropertyName("id")] + public string? Id { get; set; } + + /// + /// A list of capabilities the element requires the host application to support. If the host application doesn't support at least one of the listed capabilities, the element is not rendered (or its fallback is rendered if provided). + /// + [JsonPropertyName("requires")] + public HostCapabilities? Requires { get; set; } + + /// + /// The locale associated with the element. + /// + [JsonPropertyName("lang")] + public string? Lang { get; set; } + + /// + /// Controls the visibility of the element. + /// + [JsonPropertyName("isVisible")] + public bool? IsVisible { get; set; } + + /// + /// Controls whether a separator line should be displayed above the element to visually separate it from the previous element. No separator will be displayed for the first element in a container, even if this property is set to true. + /// + [JsonPropertyName("separator")] + public bool? Separator { get; set; } + + /// + /// The height of the element. When set to stretch, the element will use the remaining vertical space in its container. + /// + [JsonPropertyName("height")] + public ElementHeight? Height { get; set; } + + /// + /// Controls how the element should be horizontally aligned. + /// + [JsonPropertyName("horizontalAlignment")] + public HorizontalAlignment? HorizontalAlignment { get; set; } + + /// + /// Controls the amount of space between this element and the previous one. No space will be added for the first element in a container. + /// + [JsonPropertyName("spacing")] + public Spacing? Spacing { get; set; } + + /// + /// Controls for which card width the element should be displayed. If targetWidth isn't specified, the element is rendered at all card widths. Using targetWidth makes it possible to author responsive cards that adapt their layout to the available horizontal space. For more details, see [Responsive layout](https://adaptivecards.microsoft.com/?topic=responsive-layout). + /// + [JsonPropertyName("targetWidth")] + public TargetWidth? TargetWidth { get; set; } + + /// + /// Controls whether the element should be used as a sort key by elements that allow sorting across a collection of elements. + /// + [JsonPropertyName("isSortKey")] + public bool? IsSortKey { get; set; } + + /// + /// The area of a Layout.AreaGrid layout in which an element should be displayed. + /// + [JsonPropertyName("grid.area")] + public string? GridArea { get; set; } + + /// + /// An alternate element to render if the type of this one is unsupported or if the host application doesn't support all the capabilities specified in the requires property. + /// + [JsonPropertyName("fallback")] + public IUnion? Fallback { get; set; } + + /// + /// The inlines making up the rich text block. + /// + [JsonPropertyName("inlines")] + public IUnion, IList>? Inlines { get; set; } + + public RichTextBlock WithId(string value) + { + this.Id = value; + return this; + } + + public RichTextBlock WithRequires(HostCapabilities value) + { + this.Requires = value; + return this; + } + + public RichTextBlock WithLang(string value) + { + this.Lang = value; + return this; + } + + public RichTextBlock WithIsVisible(bool value) + { + this.IsVisible = value; + return this; + } + + public RichTextBlock WithSeparator(bool value) + { + this.Separator = value; + return this; + } + + public RichTextBlock WithHeight(ElementHeight value) + { + this.Height = value; + return this; + } + + public RichTextBlock WithHorizontalAlignment(HorizontalAlignment value) + { + this.HorizontalAlignment = value; + return this; + } + + public RichTextBlock WithSpacing(Spacing value) + { + this.Spacing = value; + return this; + } + + public RichTextBlock WithTargetWidth(TargetWidth value) + { + this.TargetWidth = value; + return this; + } + + public RichTextBlock WithIsSortKey(bool value) + { + this.IsSortKey = value; + return this; + } + + public RichTextBlock WithGridArea(string value) + { + this.GridArea = value; + return this; + } + + public RichTextBlock WithFallback(IUnion value) + { + this.Fallback = value; + return this; + } + + public RichTextBlock WithInlines(IUnion, IList> value) + { + this.Inlines = value; + return this; + } +} + +/// +/// Use tables to display data in a tabular way, with rows, columns and cells. +/// +public class Table : CardElement +{ + /// + /// Must be **Table**. + /// + [JsonPropertyName("type")] + public string Type { get; } = "Table"; + + /// + /// A unique identifier for the element or action. Input elements must have an id, otherwise they will not be validated and their values will not be sent to the Bot. + /// + [JsonPropertyName("id")] + public string? Id { get; set; } + + /// + /// A list of capabilities the element requires the host application to support. If the host application doesn't support at least one of the listed capabilities, the element is not rendered (or its fallback is rendered if provided). + /// + [JsonPropertyName("requires")] + public HostCapabilities? Requires { get; set; } + + /// + /// The locale associated with the element. + /// + [JsonPropertyName("lang")] + public string? Lang { get; set; } + + /// + /// Controls the visibility of the element. + /// + [JsonPropertyName("isVisible")] + public bool? IsVisible { get; set; } + + /// + /// Controls whether a separator line should be displayed above the element to visually separate it from the previous element. No separator will be displayed for the first element in a container, even if this property is set to true. + /// + [JsonPropertyName("separator")] + public bool? Separator { get; set; } + + /// + /// The height of the element. When set to stretch, the element will use the remaining vertical space in its container. + /// + [JsonPropertyName("height")] + public ElementHeight? Height { get; set; } + + /// + /// Controls how the element should be horizontally aligned. + /// + [JsonPropertyName("horizontalAlignment")] + public HorizontalAlignment? HorizontalAlignment { get; set; } + + /// + /// Controls the amount of space between this element and the previous one. No space will be added for the first element in a container. + /// + [JsonPropertyName("spacing")] + public Spacing? Spacing { get; set; } + + /// + /// Controls for which card width the element should be displayed. If targetWidth isn't specified, the element is rendered at all card widths. Using targetWidth makes it possible to author responsive cards that adapt their layout to the available horizontal space. For more details, see [Responsive layout](https://adaptivecards.microsoft.com/?topic=responsive-layout). + /// + [JsonPropertyName("targetWidth")] + public TargetWidth? TargetWidth { get; set; } + + /// + /// Controls whether the element should be used as a sort key by elements that allow sorting across a collection of elements. + /// + [JsonPropertyName("isSortKey")] + public bool? IsSortKey { get; set; } + + /// + /// The style of the container. Container styles control the colors of the background, border and text inside the container, in such a way that contrast requirements are always met. + /// + [JsonPropertyName("style")] + public ContainerStyle? Style { get; set; } + + /// + /// Controls if a border should be displayed around the container. + /// + [JsonPropertyName("showBorder")] + public bool? ShowBorder { get; set; } + + /// + /// Controls if the container should have rounded corners. + /// + [JsonPropertyName("roundedCorners")] + public bool? RoundedCorners { get; set; } + + /// + /// The columns in the table. + /// + [JsonPropertyName("columns")] + public IList? Columns { get; set; } + + /// + /// Controls whether the first row of the table should be treated as a header. + /// + [JsonPropertyName("firstRowAsHeaders")] + public bool? FirstRowAsHeaders { get; set; } + + /// + /// Controls if grid lines should be displayed. + /// + [JsonPropertyName("showGridLines")] + public bool? ShowGridLines { get; set; } + + /// + /// The style of the grid lines between cells. + /// + [JsonPropertyName("gridStyle")] + public ContainerStyle? GridStyle { get; set; } + + /// + /// Controls how the content of every cell in the table should be horizontally aligned by default. + /// + [JsonPropertyName("horizontalCellContentAlignment")] + public HorizontalAlignment? HorizontalCellContentAlignment { get; set; } + + /// + /// Controls how the content of every cell in the table should be vertically aligned by default. + /// + [JsonPropertyName("verticalCellContentAlignment")] + public VerticalAlignment? VerticalCellContentAlignment { get; set; } + + /// + /// The area of a Layout.AreaGrid layout in which an element should be displayed. + /// + [JsonPropertyName("grid.area")] + public string? GridArea { get; set; } + + /// + /// An alternate element to render if the type of this one is unsupported or if the host application doesn't support all the capabilities specified in the requires property. + /// + [JsonPropertyName("fallback")] + public IUnion? Fallback { get; set; } + + /// + /// The rows of the table. + /// + [JsonPropertyName("rows")] + public IList? Rows { get; set; } + + public Table WithId(string value) + { + this.Id = value; + return this; + } + + public Table WithRequires(HostCapabilities value) + { + this.Requires = value; + return this; + } + + public Table WithLang(string value) + { + this.Lang = value; + return this; + } + + public Table WithIsVisible(bool value) + { + this.IsVisible = value; + return this; + } + + public Table WithSeparator(bool value) + { + this.Separator = value; + return this; + } + + public Table WithHeight(ElementHeight value) + { + this.Height = value; + return this; + } + + public Table WithHorizontalAlignment(HorizontalAlignment value) + { + this.HorizontalAlignment = value; + return this; + } + + public Table WithSpacing(Spacing value) + { + this.Spacing = value; + return this; + } + + public Table WithTargetWidth(TargetWidth value) + { + this.TargetWidth = value; + return this; + } + + public Table WithIsSortKey(bool value) + { + this.IsSortKey = value; + return this; + } + + public Table WithStyle(ContainerStyle value) + { + this.Style = value; + return this; + } + + public Table WithShowBorder(bool value) + { + this.ShowBorder = value; + return this; + } + + public Table WithRoundedCorners(bool value) + { + this.RoundedCorners = value; + return this; + } + + public Table WithColumns(params IList value) + { + this.Columns = value; + return this; + } + + public Table WithFirstRowAsHeaders(bool value) + { + this.FirstRowAsHeaders = value; + return this; + } + + public Table WithShowGridLines(bool value) + { + this.ShowGridLines = value; + return this; + } + + public Table WithGridStyle(ContainerStyle value) + { + this.GridStyle = value; + return this; + } + + public Table WithHorizontalCellContentAlignment(HorizontalAlignment value) + { + this.HorizontalCellContentAlignment = value; + return this; + } + + public Table WithVerticalCellContentAlignment(VerticalAlignment value) + { + this.VerticalCellContentAlignment = value; + return this; + } + + public Table WithGridArea(string value) + { + this.GridArea = value; + return this; + } + + public Table WithFallback(IUnion value) + { + this.Fallback = value; + return this; + } + + public Table WithRows(params IList value) + { + this.Rows = value; + return this; + } +} + +/// +/// Defines a column in a Table element. +/// +public class ColumnDefinition : SerializableObject +{ + /// + /// Controls how the content of every cell in the table should be horizontally aligned by default. This property overrides the horizontalCellContentAlignment property of the table. + /// + [JsonPropertyName("horizontalCellContentAlignment")] + public HorizontalAlignment? HorizontalCellContentAlignment { get; set; } + + /// + /// Controls how the content of every cell in the column should be vertically aligned by default. This property overrides the verticalCellContentAlignment property of the table. + /// + [JsonPropertyName("verticalCellContentAlignment")] + public VerticalAlignment? VerticalCellContentAlignment { get; set; } + + /// + /// The width of the column in the table, expressed as either a percentage of the available width or in pixels, using the `px` format. + /// + [JsonPropertyName("width")] + public IUnion? Width { get; set; } + + public ColumnDefinition WithHorizontalCellContentAlignment(HorizontalAlignment value) + { + this.HorizontalCellContentAlignment = value; + return this; + } + + public ColumnDefinition WithVerticalCellContentAlignment(VerticalAlignment value) + { + this.VerticalCellContentAlignment = value; + return this; + } + + public ColumnDefinition WithWidth(IUnion value) + { + this.Width = value; + return this; + } +} + +/// +/// A block of text, optionally formatted using Markdown. +/// +public class TextBlock : CardElement +{ + /// + /// Must be **TextBlock**. + /// + [JsonPropertyName("type")] + public string Type { get; } = "TextBlock"; + + /// + /// A unique identifier for the element or action. Input elements must have an id, otherwise they will not be validated and their values will not be sent to the Bot. + /// + [JsonPropertyName("id")] + public string? Id { get; set; } + + /// + /// A list of capabilities the element requires the host application to support. If the host application doesn't support at least one of the listed capabilities, the element is not rendered (or its fallback is rendered if provided). + /// + [JsonPropertyName("requires")] + public HostCapabilities? Requires { get; set; } + + /// + /// The locale associated with the element. + /// + [JsonPropertyName("lang")] + public string? Lang { get; set; } + + /// + /// Controls the visibility of the element. + /// + [JsonPropertyName("isVisible")] + public bool? IsVisible { get; set; } + + /// + /// Controls whether a separator line should be displayed above the element to visually separate it from the previous element. No separator will be displayed for the first element in a container, even if this property is set to true. + /// + [JsonPropertyName("separator")] + public bool? Separator { get; set; } + + /// + /// The height of the element. When set to stretch, the element will use the remaining vertical space in its container. + /// + [JsonPropertyName("height")] + public ElementHeight? Height { get; set; } + + /// + /// Controls how the element should be horizontally aligned. + /// + [JsonPropertyName("horizontalAlignment")] + public HorizontalAlignment? HorizontalAlignment { get; set; } + + /// + /// Controls the amount of space between this element and the previous one. No space will be added for the first element in a container. + /// + [JsonPropertyName("spacing")] + public Spacing? Spacing { get; set; } + + /// + /// Controls for which card width the element should be displayed. If targetWidth isn't specified, the element is rendered at all card widths. Using targetWidth makes it possible to author responsive cards that adapt their layout to the available horizontal space. For more details, see [Responsive layout](https://adaptivecards.microsoft.com/?topic=responsive-layout). + /// + [JsonPropertyName("targetWidth")] + public TargetWidth? TargetWidth { get; set; } + + /// + /// Controls whether the element should be used as a sort key by elements that allow sorting across a collection of elements. + /// + [JsonPropertyName("isSortKey")] + public bool? IsSortKey { get; set; } + + /// + /// The text to display. A subset of markdown is supported. + /// + [JsonPropertyName("text")] + public string? Text { get; set; } + + /// + /// The size of the text. + /// + [JsonPropertyName("size")] + public TextSize? Size { get; set; } + + /// + /// The weight of the text. + /// + [JsonPropertyName("weight")] + public TextWeight? Weight { get; set; } + + /// + /// The color of the text. + /// + [JsonPropertyName("color")] + public TextColor? Color { get; set; } + + /// + /// Controls whether the text should be renderer using a subtler variant of the select color. + /// + [JsonPropertyName("isSubtle")] + public bool? IsSubtle { get; set; } + + /// + /// The type of font to use for rendering. + /// + [JsonPropertyName("fontType")] + public FontType? FontType { get; set; } + + /// + /// Controls if the text should wrap. + /// + [JsonPropertyName("wrap")] + public bool? Wrap { get; set; } + + /// + /// The maximum number of lines to display. + /// + [JsonPropertyName("maxLines")] + public float? MaxLines { get; set; } + + /// + /// The style of the text. + /// + [JsonPropertyName("style")] + public StyleEnum? Style { get; set; } + + /// + /// The area of a Layout.AreaGrid layout in which an element should be displayed. + /// + [JsonPropertyName("grid.area")] + public string? GridArea { get; set; } + + /// + /// An alternate element to render if the type of this one is unsupported or if the host application doesn't support all the capabilities specified in the requires property. + /// + [JsonPropertyName("fallback")] + public IUnion? Fallback { get; set; } + + public TextBlock(string text) + { + this.Text = text; + } + + public TextBlock WithId(string value) + { + this.Id = value; + return this; + } + + public TextBlock WithRequires(HostCapabilities value) + { + this.Requires = value; + return this; + } + + public TextBlock WithLang(string value) + { + this.Lang = value; + return this; + } + + public TextBlock WithIsVisible(bool value) + { + this.IsVisible = value; + return this; + } + + public TextBlock WithSeparator(bool value) + { + this.Separator = value; + return this; + } + + public TextBlock WithHeight(ElementHeight value) + { + this.Height = value; + return this; + } + + public TextBlock WithHorizontalAlignment(HorizontalAlignment value) + { + this.HorizontalAlignment = value; + return this; + } + + public TextBlock WithSpacing(Spacing value) + { + this.Spacing = value; + return this; + } + + public TextBlock WithTargetWidth(TargetWidth value) + { + this.TargetWidth = value; + return this; + } + + public TextBlock WithIsSortKey(bool value) + { + this.IsSortKey = value; + return this; + } + + public TextBlock WithText(string value) + { + this.Text = value; + return this; + } + + public TextBlock WithSize(TextSize value) + { + this.Size = value; + return this; + } + + public TextBlock WithWeight(TextWeight value) + { + this.Weight = value; + return this; + } + + public TextBlock WithColor(TextColor value) + { + this.Color = value; + return this; + } + + public TextBlock WithIsSubtle(bool value) + { + this.IsSubtle = value; + return this; + } + + public TextBlock WithFontType(FontType value) + { + this.FontType = value; + return this; + } + + public TextBlock WithWrap(bool value) + { + this.Wrap = value; + return this; + } + + public TextBlock WithMaxLines(float value) + { + this.MaxLines = value; + return this; + } + + public TextBlock WithStyle(StyleEnum value) + { + this.Style = value; + return this; + } + + public TextBlock WithGridArea(string value) + { + this.GridArea = value; + return this; + } + + public TextBlock WithFallback(IUnion value) + { + this.Fallback = value; + return this; + } +} + +/// +/// A set of facts, displayed as a table or a vertical list when horizontal space is constrained. +/// +public class FactSet : CardElement +{ + /// + /// Must be **FactSet**. + /// + [JsonPropertyName("type")] + public string Type { get; } = "FactSet"; + + /// + /// A unique identifier for the element or action. Input elements must have an id, otherwise they will not be validated and their values will not be sent to the Bot. + /// + [JsonPropertyName("id")] + public string? Id { get; set; } + + /// + /// A list of capabilities the element requires the host application to support. If the host application doesn't support at least one of the listed capabilities, the element is not rendered (or its fallback is rendered if provided). + /// + [JsonPropertyName("requires")] + public HostCapabilities? Requires { get; set; } + + /// + /// The locale associated with the element. + /// + [JsonPropertyName("lang")] + public string? Lang { get; set; } + + /// + /// Controls the visibility of the element. + /// + [JsonPropertyName("isVisible")] + public bool? IsVisible { get; set; } + + /// + /// Controls whether a separator line should be displayed above the element to visually separate it from the previous element. No separator will be displayed for the first element in a container, even if this property is set to true. + /// + [JsonPropertyName("separator")] + public bool? Separator { get; set; } + + /// + /// The height of the element. When set to stretch, the element will use the remaining vertical space in its container. + /// + [JsonPropertyName("height")] + public ElementHeight? Height { get; set; } + + /// + /// Controls the amount of space between this element and the previous one. No space will be added for the first element in a container. + /// + [JsonPropertyName("spacing")] + public Spacing? Spacing { get; set; } + + /// + /// Controls for which card width the element should be displayed. If targetWidth isn't specified, the element is rendered at all card widths. Using targetWidth makes it possible to author responsive cards that adapt their layout to the available horizontal space. For more details, see [Responsive layout](https://adaptivecards.microsoft.com/?topic=responsive-layout). + /// + [JsonPropertyName("targetWidth")] + public TargetWidth? TargetWidth { get; set; } + + /// + /// Controls whether the element should be used as a sort key by elements that allow sorting across a collection of elements. + /// + [JsonPropertyName("isSortKey")] + public bool? IsSortKey { get; set; } + + /// + /// The facts in the set. + /// + [JsonPropertyName("facts")] + public IList? Facts { get; set; } + + /// + /// The area of a Layout.AreaGrid layout in which an element should be displayed. + /// + [JsonPropertyName("grid.area")] + public string? GridArea { get; set; } + + /// + /// An alternate element to render if the type of this one is unsupported or if the host application doesn't support all the capabilities specified in the requires property. + /// + [JsonPropertyName("fallback")] + public IUnion? Fallback { get; set; } + + public FactSet(params IList facts) + { + this.Facts = facts; + } + + public FactSet WithId(string value) + { + this.Id = value; + return this; + } + + public FactSet WithRequires(HostCapabilities value) + { + this.Requires = value; + return this; + } + + public FactSet WithLang(string value) + { + this.Lang = value; + return this; + } + + public FactSet WithIsVisible(bool value) + { + this.IsVisible = value; + return this; + } + + public FactSet WithSeparator(bool value) + { + this.Separator = value; + return this; + } + + public FactSet WithHeight(ElementHeight value) + { + this.Height = value; + return this; + } + + public FactSet WithSpacing(Spacing value) + { + this.Spacing = value; + return this; + } + + public FactSet WithTargetWidth(TargetWidth value) + { + this.TargetWidth = value; + return this; + } + + public FactSet WithIsSortKey(bool value) + { + this.IsSortKey = value; + return this; + } + + public FactSet WithFacts(params IList value) + { + this.Facts = value; + return this; + } + + public FactSet WithGridArea(string value) + { + this.GridArea = value; + return this; + } + + public FactSet WithFallback(IUnion value) + { + this.Fallback = value; + return this; + } +} + +/// +/// A fact in a FactSet element. +/// +public class Fact : SerializableObject +{ + /// + /// The fact's title. + /// + [JsonPropertyName("title")] + public string? Title { get; set; } + + /// + /// The fact's value. + /// + [JsonPropertyName("value")] + public string? Value { get; set; } + + public Fact(string title, string value) + { + this.Title = title; + this.Value = value; + } + + public Fact WithTitle(string value) + { + this.Title = value; + return this; + } + + public Fact WithValue(string value) + { + this.Value = value; + return this; + } +} + +/// +/// A set of images, displayed side-by-side and wrapped across multiple rows as needed. +/// +public class ImageSet : CardElement +{ + /// + /// Must be **ImageSet**. + /// + [JsonPropertyName("type")] + public string Type { get; } = "ImageSet"; + + /// + /// A unique identifier for the element or action. Input elements must have an id, otherwise they will not be validated and their values will not be sent to the Bot. + /// + [JsonPropertyName("id")] + public string? Id { get; set; } + + /// + /// A list of capabilities the element requires the host application to support. If the host application doesn't support at least one of the listed capabilities, the element is not rendered (or its fallback is rendered if provided). + /// + [JsonPropertyName("requires")] + public HostCapabilities? Requires { get; set; } + + /// + /// The locale associated with the element. + /// + [JsonPropertyName("lang")] + public string? Lang { get; set; } + + /// + /// Controls the visibility of the element. + /// + [JsonPropertyName("isVisible")] + public bool? IsVisible { get; set; } + + /// + /// Controls whether a separator line should be displayed above the element to visually separate it from the previous element. No separator will be displayed for the first element in a container, even if this property is set to true. + /// + [JsonPropertyName("separator")] + public bool? Separator { get; set; } + + /// + /// The height of the element. When set to stretch, the element will use the remaining vertical space in its container. + /// + [JsonPropertyName("height")] + public ElementHeight? Height { get; set; } + + /// + /// Controls how the element should be horizontally aligned. + /// + [JsonPropertyName("horizontalAlignment")] + public HorizontalAlignment? HorizontalAlignment { get; set; } + + /// + /// Controls the amount of space between this element and the previous one. No space will be added for the first element in a container. + /// + [JsonPropertyName("spacing")] + public Spacing? Spacing { get; set; } + + /// + /// Controls for which card width the element should be displayed. If targetWidth isn't specified, the element is rendered at all card widths. Using targetWidth makes it possible to author responsive cards that adapt their layout to the available horizontal space. For more details, see [Responsive layout](https://adaptivecards.microsoft.com/?topic=responsive-layout). + /// + [JsonPropertyName("targetWidth")] + public TargetWidth? TargetWidth { get; set; } + + /// + /// Controls whether the element should be used as a sort key by elements that allow sorting across a collection of elements. + /// + [JsonPropertyName("isSortKey")] + public bool? IsSortKey { get; set; } + + /// + /// The images in the set. + /// + [JsonPropertyName("images")] + public IList? Images { get; set; } + + /// + /// The size to use to render all images in the set. + /// + [JsonPropertyName("imageSize")] + public ImageSize? ImageSize { get; set; } + + /// + /// The area of a Layout.AreaGrid layout in which an element should be displayed. + /// + [JsonPropertyName("grid.area")] + public string? GridArea { get; set; } + + /// + /// An alternate element to render if the type of this one is unsupported or if the host application doesn't support all the capabilities specified in the requires property. + /// + [JsonPropertyName("fallback")] + public IUnion? Fallback { get; set; } + + public ImageSet(params IList images) + { + this.Images = images; + } + + public ImageSet WithId(string value) + { + this.Id = value; + return this; + } + + public ImageSet WithRequires(HostCapabilities value) + { + this.Requires = value; + return this; + } + + public ImageSet WithLang(string value) + { + this.Lang = value; + return this; + } + + public ImageSet WithIsVisible(bool value) + { + this.IsVisible = value; + return this; + } + + public ImageSet WithSeparator(bool value) + { + this.Separator = value; + return this; + } + + public ImageSet WithHeight(ElementHeight value) + { + this.Height = value; + return this; + } + + public ImageSet WithHorizontalAlignment(HorizontalAlignment value) + { + this.HorizontalAlignment = value; + return this; + } + + public ImageSet WithSpacing(Spacing value) + { + this.Spacing = value; + return this; + } + + public ImageSet WithTargetWidth(TargetWidth value) + { + this.TargetWidth = value; + return this; + } + + public ImageSet WithIsSortKey(bool value) + { + this.IsSortKey = value; + return this; + } + + public ImageSet WithImages(params IList value) + { + this.Images = value; + return this; + } + + public ImageSet WithImageSize(ImageSize value) + { + this.ImageSize = value; + return this; + } + + public ImageSet WithGridArea(string value) + { + this.GridArea = value; + return this; + } + + public ImageSet WithFallback(IUnion value) + { + this.Fallback = value; + return this; + } +} + +/// +/// A standalone image element. +/// +public class Image : CardElement +{ + /// + /// Must be **Image**. + /// + [JsonPropertyName("type")] + public string Type { get; } = "Image"; + + /// + /// A unique identifier for the element or action. Input elements must have an id, otherwise they will not be validated and their values will not be sent to the Bot. + /// + [JsonPropertyName("id")] + public string? Id { get; set; } + + /// + /// A list of capabilities the element requires the host application to support. If the host application doesn't support at least one of the listed capabilities, the element is not rendered (or its fallback is rendered if provided). + /// + [JsonPropertyName("requires")] + public HostCapabilities? Requires { get; set; } + + /// + /// The locale associated with the element. + /// + [JsonPropertyName("lang")] + public string? Lang { get; set; } + + /// + /// Controls the visibility of the element. + /// + [JsonPropertyName("isVisible")] + public bool? IsVisible { get; set; } + + /// + /// Controls whether a separator line should be displayed above the element to visually separate it from the previous element. No separator will be displayed for the first element in a container, even if this property is set to true. + /// + [JsonPropertyName("separator")] + public bool? Separator { get; set; } + + /// + /// Controls how the element should be horizontally aligned. + /// + [JsonPropertyName("horizontalAlignment")] + public HorizontalAlignment? HorizontalAlignment { get; set; } + + /// + /// Controls the amount of space between this element and the previous one. No space will be added for the first element in a container. + /// + [JsonPropertyName("spacing")] + public Spacing? Spacing { get; set; } + + /// + /// Controls for which card width the element should be displayed. If targetWidth isn't specified, the element is rendered at all card widths. Using targetWidth makes it possible to author responsive cards that adapt their layout to the available horizontal space. For more details, see [Responsive layout](https://adaptivecards.microsoft.com/?topic=responsive-layout). + /// + [JsonPropertyName("targetWidth")] + public TargetWidth? TargetWidth { get; set; } + + /// + /// Controls whether the element should be used as a sort key by elements that allow sorting across a collection of elements. + /// + [JsonPropertyName("isSortKey")] + public bool? IsSortKey { get; set; } + + /// + /// The URL (or Base64-encoded Data URI) of the image. Acceptable formats are PNG, JPEG, GIF and SVG. + /// + [JsonPropertyName("url")] + public string? Url { get; set; } + + /// + /// The alternate text for the image, used for accessibility purposes. + /// + [JsonPropertyName("altText")] + public string? AltText { get; set; } + + /// + /// The background color of the image. + /// + [JsonPropertyName("backgroundColor")] + public string? BackgroundColor { get; set; } + + /// + /// The style of the image. + /// + [JsonPropertyName("style")] + public ImageStyle? Style { get; set; } + + /// + /// The size of the image. + /// + [JsonPropertyName("size")] + public Size? Size { get; set; } + + /// + /// The width of the image. + /// + [JsonPropertyName("width")] + public string? Width { get; set; } + + /// + /// An Action that will be invoked when the image is tapped or clicked. Action.ShowCard is not supported. + /// + [JsonPropertyName("selectAction")] + public Action? SelectAction { get; set; } + + /// + /// Controls if the image can be expanded to full screen. + /// + [JsonPropertyName("allowExpand")] + public bool? AllowExpand { get; set; } + + /// + /// Teams-specific metadata associated with the image. + /// + [JsonPropertyName("msTeams")] + public TeamsImageProperties? MsTeams { get; set; } + + /// + /// The height of the image. + /// + [JsonPropertyName("height")] + public string? Height { get; set; } + + /// + /// The area of a Layout.AreaGrid layout in which an element should be displayed. + /// + [JsonPropertyName("grid.area")] + public string? GridArea { get; set; } + + /// + /// An alternate element to render if the type of this one is unsupported or if the host application doesn't support all the capabilities specified in the requires property. + /// + [JsonPropertyName("fallback")] + public IUnion? Fallback { get; set; } + + public Image(string url) + { + this.Url = url; + } + + public Image WithId(string value) + { + this.Id = value; + return this; + } + + public Image WithRequires(HostCapabilities value) + { + this.Requires = value; + return this; + } + + public Image WithLang(string value) + { + this.Lang = value; + return this; + } + + public Image WithIsVisible(bool value) + { + this.IsVisible = value; + return this; + } + + public Image WithSeparator(bool value) + { + this.Separator = value; + return this; + } + + public Image WithHorizontalAlignment(HorizontalAlignment value) + { + this.HorizontalAlignment = value; + return this; + } + + public Image WithSpacing(Spacing value) + { + this.Spacing = value; + return this; + } + + public Image WithTargetWidth(TargetWidth value) + { + this.TargetWidth = value; + return this; + } + + public Image WithIsSortKey(bool value) + { + this.IsSortKey = value; + return this; + } + + public Image WithUrl(string value) + { + this.Url = value; + return this; + } + + public Image WithAltText(string value) + { + this.AltText = value; + return this; + } + + public Image WithBackgroundColor(string value) + { + this.BackgroundColor = value; + return this; + } + + public Image WithStyle(ImageStyle value) + { + this.Style = value; + return this; + } + + public Image WithSize(Size value) + { + this.Size = value; + return this; + } + + public Image WithWidth(string value) + { + this.Width = value; + return this; + } + + public Image WithSelectAction(Action value) + { + this.SelectAction = value; + return this; + } + + public Image WithAllowExpand(bool value) + { + this.AllowExpand = value; + return this; + } + + public Image WithMsTeams(TeamsImageProperties value) + { + this.MsTeams = value; + return this; + } + + public Image WithHeight(string value) + { + this.Height = value; + return this; + } + + public Image WithGridArea(string value) + { + this.GridArea = value; + return this; + } + + public Image WithFallback(IUnion value) + { + this.Fallback = value; + return this; + } +} + +/// +/// Represents a set of Teams-specific properties on an image. +/// +public class TeamsImageProperties : SerializableObject +{ + /// + /// Controls if the image is expandable in Teams. This property is equivalent to the Image.allowExpand property. + /// + [JsonPropertyName("allowExpand")] + public bool? AllowExpand { get; set; } + + public TeamsImageProperties WithAllowExpand(bool value) + { + this.AllowExpand = value; + return this; + } +} + +/// +/// An input to allow the user to enter text. +/// +public class TextInput : CardElement +{ + /// + /// Must be **Input.Text**. + /// + [JsonPropertyName("type")] + public string Type { get; } = "Input.Text"; + + /// + /// A unique identifier for the element or action. Input elements must have an id, otherwise they will not be validated and their values will not be sent to the Bot. + /// + [JsonPropertyName("id")] + public string? Id { get; set; } + + /// + /// A list of capabilities the element requires the host application to support. If the host application doesn't support at least one of the listed capabilities, the element is not rendered (or its fallback is rendered if provided). + /// + [JsonPropertyName("requires")] + public HostCapabilities? Requires { get; set; } + + /// + /// The locale associated with the element. + /// + [JsonPropertyName("lang")] + public string? Lang { get; set; } + + /// + /// Controls the visibility of the element. + /// + [JsonPropertyName("isVisible")] + public bool? IsVisible { get; set; } + + /// + /// Controls whether a separator line should be displayed above the element to visually separate it from the previous element. No separator will be displayed for the first element in a container, even if this property is set to true. + /// + [JsonPropertyName("separator")] + public bool? Separator { get; set; } + + /// + /// The height of the element. When set to stretch, the element will use the remaining vertical space in its container. + /// + [JsonPropertyName("height")] + public ElementHeight? Height { get; set; } + + /// + /// Controls the amount of space between this element and the previous one. No space will be added for the first element in a container. + /// + [JsonPropertyName("spacing")] + public Spacing? Spacing { get; set; } + + /// + /// Controls for which card width the element should be displayed. If targetWidth isn't specified, the element is rendered at all card widths. Using targetWidth makes it possible to author responsive cards that adapt their layout to the available horizontal space. For more details, see [Responsive layout](https://adaptivecards.microsoft.com/?topic=responsive-layout). + /// + [JsonPropertyName("targetWidth")] + public TargetWidth? TargetWidth { get; set; } + + /// + /// Controls whether the element should be used as a sort key by elements that allow sorting across a collection of elements. + /// + [JsonPropertyName("isSortKey")] + public bool? IsSortKey { get; set; } + + /// + /// The label of the input. + /// + /// A label should **always** be provided to ensure the best user experience especially for users of assistive technology. + /// + [JsonPropertyName("label")] + public string? Label { get; set; } + + /// + /// Controls whether the input is required. See [Input validation](https://adaptivecards.microsoft.com/?topic=input-validation) for more details. + /// + [JsonPropertyName("isRequired")] + public bool? IsRequired { get; set; } + + /// + /// The error message to display when the input fails validation. See [Input validation](https://adaptivecards.microsoft.com/?topic=input-validation) for more details. + /// + [JsonPropertyName("errorMessage")] + public string? ErrorMessage { get; set; } + + /// + /// An Action.ResetInputs action that will be executed when the value of the input changes. + /// + [JsonPropertyName("valueChangedAction")] + public ResetInputsAction? ValueChangedAction { get; set; } + + /// + /// The default value of the input. + /// + [JsonPropertyName("value")] + public string? Value { get; set; } + + /// + /// The maximum length of the text in the input. + /// + [JsonPropertyName("maxLength")] + public float? MaxLength { get; set; } + + /// + /// Controls if the input should allow multiple lines of text. + /// + [JsonPropertyName("isMultiline")] + public bool? IsMultiline { get; set; } + + /// + /// The text to display as a placeholder when the user hasn't entered a value. + /// + [JsonPropertyName("placeholder")] + public string? Placeholder { get; set; } + + /// + /// The style of the input. + /// + [JsonPropertyName("style")] + public InputTextStyle? Style { get; set; } + + /// + /// The action that should be displayed as a button alongside the input. Action.ShowCard is not supported. + /// + [JsonPropertyName("inlineAction")] + public Action? InlineAction { get; set; } + + /// + /// The regular expression to validate the input. + /// + [JsonPropertyName("regex")] + public string? Regex { get; set; } + + /// + /// The area of a Layout.AreaGrid layout in which an element should be displayed. + /// + [JsonPropertyName("grid.area")] + public string? GridArea { get; set; } + + /// + /// An alternate element to render if the type of this one is unsupported or if the host application doesn't support all the capabilities specified in the requires property. + /// + [JsonPropertyName("fallback")] + public IUnion? Fallback { get; set; } + + public TextInput WithId(string value) + { + this.Id = value; + return this; + } + + public TextInput WithRequires(HostCapabilities value) + { + this.Requires = value; + return this; + } + + public TextInput WithLang(string value) + { + this.Lang = value; + return this; + } + + public TextInput WithIsVisible(bool value) + { + this.IsVisible = value; + return this; + } + + public TextInput WithSeparator(bool value) + { + this.Separator = value; + return this; + } + + public TextInput WithHeight(ElementHeight value) + { + this.Height = value; + return this; + } + + public TextInput WithSpacing(Spacing value) + { + this.Spacing = value; + return this; + } + + public TextInput WithTargetWidth(TargetWidth value) + { + this.TargetWidth = value; + return this; + } + + public TextInput WithIsSortKey(bool value) + { + this.IsSortKey = value; + return this; + } + + public TextInput WithLabel(string value) + { + this.Label = value; + return this; + } + + public TextInput WithIsRequired(bool value) + { + this.IsRequired = value; + return this; + } + + public TextInput WithErrorMessage(string value) + { + this.ErrorMessage = value; + return this; + } + + public TextInput WithValueChangedAction(ResetInputsAction value) + { + this.ValueChangedAction = value; + return this; + } + + public TextInput WithValue(string value) + { + this.Value = value; + return this; + } + + public TextInput WithMaxLength(float value) + { + this.MaxLength = value; + return this; + } + + public TextInput WithIsMultiline(bool value) + { + this.IsMultiline = value; + return this; + } + + public TextInput WithPlaceholder(string value) + { + this.Placeholder = value; + return this; + } + + public TextInput WithStyle(InputTextStyle value) + { + this.Style = value; + return this; + } + + public TextInput WithInlineAction(Action value) + { + this.InlineAction = value; + return this; + } + + public TextInput WithRegex(string value) + { + this.Regex = value; + return this; + } + + public TextInput WithGridArea(string value) + { + this.GridArea = value; + return this; + } + + public TextInput WithFallback(IUnion value) + { + this.Fallback = value; + return this; + } +} + +/// +/// An input to allow the user to select a date. +/// +public class DateInput : CardElement +{ + /// + /// Must be **Input.Date**. + /// + [JsonPropertyName("type")] + public string Type { get; } = "Input.Date"; + + /// + /// A unique identifier for the element or action. Input elements must have an id, otherwise they will not be validated and their values will not be sent to the Bot. + /// + [JsonPropertyName("id")] + public string? Id { get; set; } + + /// + /// A list of capabilities the element requires the host application to support. If the host application doesn't support at least one of the listed capabilities, the element is not rendered (or its fallback is rendered if provided). + /// + [JsonPropertyName("requires")] + public HostCapabilities? Requires { get; set; } + + /// + /// The locale associated with the element. + /// + [JsonPropertyName("lang")] + public string? Lang { get; set; } + + /// + /// Controls the visibility of the element. + /// + [JsonPropertyName("isVisible")] + public bool? IsVisible { get; set; } + + /// + /// Controls whether a separator line should be displayed above the element to visually separate it from the previous element. No separator will be displayed for the first element in a container, even if this property is set to true. + /// + [JsonPropertyName("separator")] + public bool? Separator { get; set; } + + /// + /// The height of the element. When set to stretch, the element will use the remaining vertical space in its container. + /// + [JsonPropertyName("height")] + public ElementHeight? Height { get; set; } + + /// + /// Controls the amount of space between this element and the previous one. No space will be added for the first element in a container. + /// + [JsonPropertyName("spacing")] + public Spacing? Spacing { get; set; } + + /// + /// Controls for which card width the element should be displayed. If targetWidth isn't specified, the element is rendered at all card widths. Using targetWidth makes it possible to author responsive cards that adapt their layout to the available horizontal space. For more details, see [Responsive layout](https://adaptivecards.microsoft.com/?topic=responsive-layout). + /// + [JsonPropertyName("targetWidth")] + public TargetWidth? TargetWidth { get; set; } + + /// + /// Controls whether the element should be used as a sort key by elements that allow sorting across a collection of elements. + /// + [JsonPropertyName("isSortKey")] + public bool? IsSortKey { get; set; } + + /// + /// The label of the input. + /// + /// A label should **always** be provided to ensure the best user experience especially for users of assistive technology. + /// + [JsonPropertyName("label")] + public string? Label { get; set; } + + /// + /// Controls whether the input is required. See [Input validation](https://adaptivecards.microsoft.com/?topic=input-validation) for more details. + /// + [JsonPropertyName("isRequired")] + public bool? IsRequired { get; set; } + + /// + /// The error message to display when the input fails validation. See [Input validation](https://adaptivecards.microsoft.com/?topic=input-validation) for more details. + /// + [JsonPropertyName("errorMessage")] + public string? ErrorMessage { get; set; } + + /// + /// An Action.ResetInputs action that will be executed when the value of the input changes. + /// + [JsonPropertyName("valueChangedAction")] + public ResetInputsAction? ValueChangedAction { get; set; } + + /// + /// The default value of the input, in the `YYYY-MM-DD` format. + /// + [JsonPropertyName("value")] + public string? Value { get; set; } + + /// + /// The text to display as a placeholder when the user has not selected a date. + /// + [JsonPropertyName("placeholder")] + public string? Placeholder { get; set; } + + /// + /// The minimum date that can be selected. + /// + [JsonPropertyName("min")] + public string? Min { get; set; } + + /// + /// The maximum date that can be selected. + /// + [JsonPropertyName("max")] + public string? Max { get; set; } + + /// + /// The area of a Layout.AreaGrid layout in which an element should be displayed. + /// + [JsonPropertyName("grid.area")] + public string? GridArea { get; set; } + + /// + /// An alternate element to render if the type of this one is unsupported or if the host application doesn't support all the capabilities specified in the requires property. + /// + [JsonPropertyName("fallback")] + public IUnion? Fallback { get; set; } + + public DateInput WithId(string value) + { + this.Id = value; + return this; + } + + public DateInput WithRequires(HostCapabilities value) + { + this.Requires = value; + return this; + } + + public DateInput WithLang(string value) + { + this.Lang = value; + return this; + } + + public DateInput WithIsVisible(bool value) + { + this.IsVisible = value; + return this; + } + + public DateInput WithSeparator(bool value) + { + this.Separator = value; + return this; + } + + public DateInput WithHeight(ElementHeight value) + { + this.Height = value; + return this; + } + + public DateInput WithSpacing(Spacing value) + { + this.Spacing = value; + return this; + } + + public DateInput WithTargetWidth(TargetWidth value) + { + this.TargetWidth = value; + return this; + } + + public DateInput WithIsSortKey(bool value) + { + this.IsSortKey = value; + return this; + } + + public DateInput WithLabel(string value) + { + this.Label = value; + return this; + } + + public DateInput WithIsRequired(bool value) + { + this.IsRequired = value; + return this; + } + + public DateInput WithErrorMessage(string value) + { + this.ErrorMessage = value; + return this; + } + + public DateInput WithValueChangedAction(ResetInputsAction value) + { + this.ValueChangedAction = value; + return this; + } + + public DateInput WithValue(string value) + { + this.Value = value; + return this; + } + + public DateInput WithPlaceholder(string value) + { + this.Placeholder = value; + return this; + } + + public DateInput WithMin(string value) + { + this.Min = value; + return this; + } + + public DateInput WithMax(string value) + { + this.Max = value; + return this; + } + + public DateInput WithGridArea(string value) + { + this.GridArea = value; + return this; + } + + public DateInput WithFallback(IUnion value) + { + this.Fallback = value; + return this; + } +} + +/// +/// An input to allow the user to select a time. +/// +public class TimeInput : CardElement +{ + /// + /// Must be **Input.Time**. + /// + [JsonPropertyName("type")] + public string Type { get; } = "Input.Time"; + + /// + /// A unique identifier for the element or action. Input elements must have an id, otherwise they will not be validated and their values will not be sent to the Bot. + /// + [JsonPropertyName("id")] + public string? Id { get; set; } + + /// + /// A list of capabilities the element requires the host application to support. If the host application doesn't support at least one of the listed capabilities, the element is not rendered (or its fallback is rendered if provided). + /// + [JsonPropertyName("requires")] + public HostCapabilities? Requires { get; set; } + + /// + /// The locale associated with the element. + /// + [JsonPropertyName("lang")] + public string? Lang { get; set; } + + /// + /// Controls the visibility of the element. + /// + [JsonPropertyName("isVisible")] + public bool? IsVisible { get; set; } + + /// + /// Controls whether a separator line should be displayed above the element to visually separate it from the previous element. No separator will be displayed for the first element in a container, even if this property is set to true. + /// + [JsonPropertyName("separator")] + public bool? Separator { get; set; } + + /// + /// The height of the element. When set to stretch, the element will use the remaining vertical space in its container. + /// + [JsonPropertyName("height")] + public ElementHeight? Height { get; set; } + + /// + /// Controls the amount of space between this element and the previous one. No space will be added for the first element in a container. + /// + [JsonPropertyName("spacing")] + public Spacing? Spacing { get; set; } + + /// + /// Controls for which card width the element should be displayed. If targetWidth isn't specified, the element is rendered at all card widths. Using targetWidth makes it possible to author responsive cards that adapt their layout to the available horizontal space. For more details, see [Responsive layout](https://adaptivecards.microsoft.com/?topic=responsive-layout). + /// + [JsonPropertyName("targetWidth")] + public TargetWidth? TargetWidth { get; set; } + + /// + /// Controls whether the element should be used as a sort key by elements that allow sorting across a collection of elements. + /// + [JsonPropertyName("isSortKey")] + public bool? IsSortKey { get; set; } + + /// + /// The label of the input. + /// + /// A label should **always** be provided to ensure the best user experience especially for users of assistive technology. + /// + [JsonPropertyName("label")] + public string? Label { get; set; } + + /// + /// Controls whether the input is required. See [Input validation](https://adaptivecards.microsoft.com/?topic=input-validation) for more details. + /// + [JsonPropertyName("isRequired")] + public bool? IsRequired { get; set; } + + /// + /// The error message to display when the input fails validation. See [Input validation](https://adaptivecards.microsoft.com/?topic=input-validation) for more details. + /// + [JsonPropertyName("errorMessage")] + public string? ErrorMessage { get; set; } + + /// + /// An Action.ResetInputs action that will be executed when the value of the input changes. + /// + [JsonPropertyName("valueChangedAction")] + public ResetInputsAction? ValueChangedAction { get; set; } + + /// + /// The default value of the input, in the `HH:MM` format. + /// + [JsonPropertyName("value")] + public string? Value { get; set; } + + /// + /// The text to display as a placeholder when the user hasn't entered a value. + /// + [JsonPropertyName("placeholder")] + public string? Placeholder { get; set; } + + /// + /// The minimum time that can be selected, in the `HH:MM` format. + /// + [JsonPropertyName("min")] + public string? Min { get; set; } + + /// + /// The maximum time that can be selected, in the `HH:MM` format. + /// + [JsonPropertyName("max")] + public string? Max { get; set; } + + /// + /// The area of a Layout.AreaGrid layout in which an element should be displayed. + /// + [JsonPropertyName("grid.area")] + public string? GridArea { get; set; } + + /// + /// An alternate element to render if the type of this one is unsupported or if the host application doesn't support all the capabilities specified in the requires property. + /// + [JsonPropertyName("fallback")] + public IUnion? Fallback { get; set; } + + public TimeInput WithId(string value) + { + this.Id = value; + return this; + } + + public TimeInput WithRequires(HostCapabilities value) + { + this.Requires = value; + return this; + } + + public TimeInput WithLang(string value) + { + this.Lang = value; + return this; + } + + public TimeInput WithIsVisible(bool value) + { + this.IsVisible = value; + return this; + } + + public TimeInput WithSeparator(bool value) + { + this.Separator = value; + return this; + } + + public TimeInput WithHeight(ElementHeight value) + { + this.Height = value; + return this; + } + + public TimeInput WithSpacing(Spacing value) + { + this.Spacing = value; + return this; + } + + public TimeInput WithTargetWidth(TargetWidth value) + { + this.TargetWidth = value; + return this; + } + + public TimeInput WithIsSortKey(bool value) + { + this.IsSortKey = value; + return this; + } + + public TimeInput WithLabel(string value) + { + this.Label = value; + return this; + } + + public TimeInput WithIsRequired(bool value) + { + this.IsRequired = value; + return this; + } + + public TimeInput WithErrorMessage(string value) + { + this.ErrorMessage = value; + return this; + } + + public TimeInput WithValueChangedAction(ResetInputsAction value) + { + this.ValueChangedAction = value; + return this; + } + + public TimeInput WithValue(string value) + { + this.Value = value; + return this; + } + + public TimeInput WithPlaceholder(string value) + { + this.Placeholder = value; + return this; + } + + public TimeInput WithMin(string value) + { + this.Min = value; + return this; + } + + public TimeInput WithMax(string value) + { + this.Max = value; + return this; + } + + public TimeInput WithGridArea(string value) + { + this.GridArea = value; + return this; + } + + public TimeInput WithFallback(IUnion value) + { + this.Fallback = value; + return this; + } +} + +/// +/// An input to allow the user to enter a number. +/// +public class NumberInput : CardElement +{ + /// + /// Must be **Input.Number**. + /// + [JsonPropertyName("type")] + public string Type { get; } = "Input.Number"; + + /// + /// A unique identifier for the element or action. Input elements must have an id, otherwise they will not be validated and their values will not be sent to the Bot. + /// + [JsonPropertyName("id")] + public string? Id { get; set; } + + /// + /// A list of capabilities the element requires the host application to support. If the host application doesn't support at least one of the listed capabilities, the element is not rendered (or its fallback is rendered if provided). + /// + [JsonPropertyName("requires")] + public HostCapabilities? Requires { get; set; } + + /// + /// The locale associated with the element. + /// + [JsonPropertyName("lang")] + public string? Lang { get; set; } + + /// + /// Controls the visibility of the element. + /// + [JsonPropertyName("isVisible")] + public bool? IsVisible { get; set; } + + /// + /// Controls whether a separator line should be displayed above the element to visually separate it from the previous element. No separator will be displayed for the first element in a container, even if this property is set to true. + /// + [JsonPropertyName("separator")] + public bool? Separator { get; set; } + + /// + /// The height of the element. When set to stretch, the element will use the remaining vertical space in its container. + /// + [JsonPropertyName("height")] + public ElementHeight? Height { get; set; } + + /// + /// Controls the amount of space between this element and the previous one. No space will be added for the first element in a container. + /// + [JsonPropertyName("spacing")] + public Spacing? Spacing { get; set; } + + /// + /// Controls for which card width the element should be displayed. If targetWidth isn't specified, the element is rendered at all card widths. Using targetWidth makes it possible to author responsive cards that adapt their layout to the available horizontal space. For more details, see [Responsive layout](https://adaptivecards.microsoft.com/?topic=responsive-layout). + /// + [JsonPropertyName("targetWidth")] + public TargetWidth? TargetWidth { get; set; } + + /// + /// Controls whether the element should be used as a sort key by elements that allow sorting across a collection of elements. + /// + [JsonPropertyName("isSortKey")] + public bool? IsSortKey { get; set; } + + /// + /// The label of the input. + /// + /// A label should **always** be provided to ensure the best user experience especially for users of assistive technology. + /// + [JsonPropertyName("label")] + public string? Label { get; set; } + + /// + /// Controls whether the input is required. See [Input validation](https://adaptivecards.microsoft.com/?topic=input-validation) for more details. + /// + [JsonPropertyName("isRequired")] + public bool? IsRequired { get; set; } + + /// + /// The error message to display when the input fails validation. See [Input validation](https://adaptivecards.microsoft.com/?topic=input-validation) for more details. + /// + [JsonPropertyName("errorMessage")] + public string? ErrorMessage { get; set; } + + /// + /// An Action.ResetInputs action that will be executed when the value of the input changes. + /// + [JsonPropertyName("valueChangedAction")] + public ResetInputsAction? ValueChangedAction { get; set; } + + /// + /// The default value of the input. + /// + [JsonPropertyName("value")] + public float? Value { get; set; } + + /// + /// The text to display as a placeholder when the user hasn't entered a value. + /// + [JsonPropertyName("placeholder")] + public string? Placeholder { get; set; } + + /// + /// The minimum value that can be entered. + /// + [JsonPropertyName("min")] + public float? Min { get; set; } + + /// + /// The maximum value that can be entered. + /// + [JsonPropertyName("max")] + public float? Max { get; set; } + + /// + /// The area of a Layout.AreaGrid layout in which an element should be displayed. + /// + [JsonPropertyName("grid.area")] + public string? GridArea { get; set; } + + /// + /// An alternate element to render if the type of this one is unsupported or if the host application doesn't support all the capabilities specified in the requires property. + /// + [JsonPropertyName("fallback")] + public IUnion? Fallback { get; set; } + + public NumberInput WithId(string value) + { + this.Id = value; + return this; + } + + public NumberInput WithRequires(HostCapabilities value) + { + this.Requires = value; + return this; + } + + public NumberInput WithLang(string value) + { + this.Lang = value; + return this; + } + + public NumberInput WithIsVisible(bool value) + { + this.IsVisible = value; + return this; + } + + public NumberInput WithSeparator(bool value) + { + this.Separator = value; + return this; + } + + public NumberInput WithHeight(ElementHeight value) + { + this.Height = value; + return this; + } + + public NumberInput WithSpacing(Spacing value) + { + this.Spacing = value; + return this; + } + + public NumberInput WithTargetWidth(TargetWidth value) + { + this.TargetWidth = value; + return this; + } + + public NumberInput WithIsSortKey(bool value) + { + this.IsSortKey = value; + return this; + } + + public NumberInput WithLabel(string value) + { + this.Label = value; + return this; + } + + public NumberInput WithIsRequired(bool value) + { + this.IsRequired = value; + return this; + } + + public NumberInput WithErrorMessage(string value) + { + this.ErrorMessage = value; + return this; + } + + public NumberInput WithValueChangedAction(ResetInputsAction value) + { + this.ValueChangedAction = value; + return this; + } + + public NumberInput WithValue(float value) + { + this.Value = value; + return this; + } + + public NumberInput WithPlaceholder(string value) + { + this.Placeholder = value; + return this; + } + + public NumberInput WithMin(float value) + { + this.Min = value; + return this; + } + + public NumberInput WithMax(float value) + { + this.Max = value; + return this; + } + + public NumberInput WithGridArea(string value) + { + this.GridArea = value; + return this; + } + + public NumberInput WithFallback(IUnion value) + { + this.Fallback = value; + return this; + } +} + +/// +/// An input to allow the user to select between on/off states. +/// +public class ToggleInput : CardElement +{ + /// + /// Must be **Input.Toggle**. + /// + [JsonPropertyName("type")] + public string Type { get; } = "Input.Toggle"; + + /// + /// A unique identifier for the element or action. Input elements must have an id, otherwise they will not be validated and their values will not be sent to the Bot. + /// + [JsonPropertyName("id")] + public string? Id { get; set; } + + /// + /// A list of capabilities the element requires the host application to support. If the host application doesn't support at least one of the listed capabilities, the element is not rendered (or its fallback is rendered if provided). + /// + [JsonPropertyName("requires")] + public HostCapabilities? Requires { get; set; } + + /// + /// The locale associated with the element. + /// + [JsonPropertyName("lang")] + public string? Lang { get; set; } + + /// + /// Controls the visibility of the element. + /// + [JsonPropertyName("isVisible")] + public bool? IsVisible { get; set; } + + /// + /// Controls whether a separator line should be displayed above the element to visually separate it from the previous element. No separator will be displayed for the first element in a container, even if this property is set to true. + /// + [JsonPropertyName("separator")] + public bool? Separator { get; set; } + + /// + /// The height of the element. When set to stretch, the element will use the remaining vertical space in its container. + /// + [JsonPropertyName("height")] + public ElementHeight? Height { get; set; } + + /// + /// Controls the amount of space between this element and the previous one. No space will be added for the first element in a container. + /// + [JsonPropertyName("spacing")] + public Spacing? Spacing { get; set; } + + /// + /// Controls for which card width the element should be displayed. If targetWidth isn't specified, the element is rendered at all card widths. Using targetWidth makes it possible to author responsive cards that adapt their layout to the available horizontal space. For more details, see [Responsive layout](https://adaptivecards.microsoft.com/?topic=responsive-layout). + /// + [JsonPropertyName("targetWidth")] + public TargetWidth? TargetWidth { get; set; } + + /// + /// Controls whether the element should be used as a sort key by elements that allow sorting across a collection of elements. + /// + [JsonPropertyName("isSortKey")] + public bool? IsSortKey { get; set; } + + /// + /// The label of the input. + /// + /// A label should **always** be provided to ensure the best user experience especially for users of assistive technology. + /// + [JsonPropertyName("label")] + public string? Label { get; set; } + + /// + /// Controls whether the input is required. See [Input validation](https://adaptivecards.microsoft.com/?topic=input-validation) for more details. + /// + [JsonPropertyName("isRequired")] + public bool? IsRequired { get; set; } + + /// + /// The error message to display when the input fails validation. See [Input validation](https://adaptivecards.microsoft.com/?topic=input-validation) for more details. + /// + [JsonPropertyName("errorMessage")] + public string? ErrorMessage { get; set; } + + /// + /// An Action.ResetInputs action that will be executed when the value of the input changes. + /// + [JsonPropertyName("valueChangedAction")] + public ResetInputsAction? ValueChangedAction { get; set; } + + /// + /// The default value of the input. + /// + [JsonPropertyName("value")] + public string? Value { get; set; } + + /// + /// The title (caption) to display next to the toggle. + /// + [JsonPropertyName("title")] + public string? Title { get; set; } + + /// + /// The value to send to the Bot when the toggle is on. + /// + [JsonPropertyName("valueOn")] + public string? ValueOn { get; set; } + + /// + /// The value to send to the Bot when the toggle is off. + /// + [JsonPropertyName("valueOff")] + public string? ValueOff { get; set; } + + /// + /// Controls if the title should wrap. + /// + [JsonPropertyName("wrap")] + public bool? Wrap { get; set; } + + /// + /// The area of a Layout.AreaGrid layout in which an element should be displayed. + /// + [JsonPropertyName("grid.area")] + public string? GridArea { get; set; } + + /// + /// An alternate element to render if the type of this one is unsupported or if the host application doesn't support all the capabilities specified in the requires property. + /// + [JsonPropertyName("fallback")] + public IUnion? Fallback { get; set; } + + public ToggleInput(string title) + { + this.Title = title; + } + + public ToggleInput WithId(string value) + { + this.Id = value; + return this; + } + + public ToggleInput WithRequires(HostCapabilities value) + { + this.Requires = value; + return this; + } + + public ToggleInput WithLang(string value) + { + this.Lang = value; + return this; + } + + public ToggleInput WithIsVisible(bool value) + { + this.IsVisible = value; + return this; + } + + public ToggleInput WithSeparator(bool value) + { + this.Separator = value; + return this; + } + + public ToggleInput WithHeight(ElementHeight value) + { + this.Height = value; + return this; + } + + public ToggleInput WithSpacing(Spacing value) + { + this.Spacing = value; + return this; + } + + public ToggleInput WithTargetWidth(TargetWidth value) + { + this.TargetWidth = value; + return this; + } + + public ToggleInput WithIsSortKey(bool value) + { + this.IsSortKey = value; + return this; + } + + public ToggleInput WithLabel(string value) + { + this.Label = value; + return this; + } + + public ToggleInput WithIsRequired(bool value) + { + this.IsRequired = value; + return this; + } + + public ToggleInput WithErrorMessage(string value) + { + this.ErrorMessage = value; + return this; + } + + public ToggleInput WithValueChangedAction(ResetInputsAction value) + { + this.ValueChangedAction = value; + return this; + } + + public ToggleInput WithValue(string value) + { + this.Value = value; + return this; + } + + public ToggleInput WithTitle(string value) + { + this.Title = value; + return this; + } + + public ToggleInput WithValueOn(string value) + { + this.ValueOn = value; + return this; + } + + public ToggleInput WithValueOff(string value) + { + this.ValueOff = value; + return this; + } + + public ToggleInput WithWrap(bool value) + { + this.Wrap = value; + return this; + } + + public ToggleInput WithGridArea(string value) + { + this.GridArea = value; + return this; + } + + public ToggleInput WithFallback(IUnion value) + { + this.Fallback = value; + return this; + } +} + +/// +/// An input to allow the user to select one or more values. +/// +public class ChoiceSetInput : CardElement +{ + /// + /// Must be **Input.ChoiceSet**. + /// + [JsonPropertyName("type")] + public string Type { get; } = "Input.ChoiceSet"; + + /// + /// A unique identifier for the element or action. Input elements must have an id, otherwise they will not be validated and their values will not be sent to the Bot. + /// + [JsonPropertyName("id")] + public string? Id { get; set; } + + /// + /// A list of capabilities the element requires the host application to support. If the host application doesn't support at least one of the listed capabilities, the element is not rendered (or its fallback is rendered if provided). + /// + [JsonPropertyName("requires")] + public HostCapabilities? Requires { get; set; } + + /// + /// The locale associated with the element. + /// + [JsonPropertyName("lang")] + public string? Lang { get; set; } + + /// + /// Controls the visibility of the element. + /// + [JsonPropertyName("isVisible")] + public bool? IsVisible { get; set; } + + /// + /// Controls whether a separator line should be displayed above the element to visually separate it from the previous element. No separator will be displayed for the first element in a container, even if this property is set to true. + /// + [JsonPropertyName("separator")] + public bool? Separator { get; set; } + + /// + /// The height of the element. When set to stretch, the element will use the remaining vertical space in its container. + /// + [JsonPropertyName("height")] + public ElementHeight? Height { get; set; } + + /// + /// Controls the amount of space between this element and the previous one. No space will be added for the first element in a container. + /// + [JsonPropertyName("spacing")] + public Spacing? Spacing { get; set; } + + /// + /// Controls for which card width the element should be displayed. If targetWidth isn't specified, the element is rendered at all card widths. Using targetWidth makes it possible to author responsive cards that adapt their layout to the available horizontal space. For more details, see [Responsive layout](https://adaptivecards.microsoft.com/?topic=responsive-layout). + /// + [JsonPropertyName("targetWidth")] + public TargetWidth? TargetWidth { get; set; } + + /// + /// Controls whether the element should be used as a sort key by elements that allow sorting across a collection of elements. + /// + [JsonPropertyName("isSortKey")] + public bool? IsSortKey { get; set; } + + /// + /// The label of the input. + /// + /// A label should **always** be provided to ensure the best user experience especially for users of assistive technology. + /// + [JsonPropertyName("label")] + public string? Label { get; set; } + + /// + /// Controls whether the input is required. See [Input validation](https://adaptivecards.microsoft.com/?topic=input-validation) for more details. + /// + [JsonPropertyName("isRequired")] + public bool? IsRequired { get; set; } + + /// + /// The error message to display when the input fails validation. See [Input validation](https://adaptivecards.microsoft.com/?topic=input-validation) for more details. + /// + [JsonPropertyName("errorMessage")] + public string? ErrorMessage { get; set; } + + /// + /// An Action.ResetInputs action that will be executed when the value of the input changes. + /// + [JsonPropertyName("valueChangedAction")] + public ResetInputsAction? ValueChangedAction { get; set; } + + /// + /// The default value of the input. + /// + [JsonPropertyName("value")] + public string? Value { get; set; } + + /// + /// The choices associated with the input. + /// + [JsonPropertyName("choices")] + public IList? Choices { get; set; } + + /// + /// A Data.Query object that defines the dataset from which to dynamically fetch the choices for the input. + /// + [JsonPropertyName("choices.data")] + public QueryData? ChoicesData { get; set; } + + /// + /// Controls whether the input should be displayed as a dropdown (compact) or a list of radio buttons or checkboxes (expanded). + /// + [JsonPropertyName("style")] + public StyleEnum? Style { get; set; } + + /// + /// Controls whether multiple choices can be selected. + /// + [JsonPropertyName("isMultiSelect")] + public bool? IsMultiSelect { get; set; } + + /// + /// The text to display as a placeholder when the user has not entered any value. + /// + [JsonPropertyName("placeholder")] + public string? Placeholder { get; set; } + + /// + /// Controls if choice titles should wrap. + /// + [JsonPropertyName("wrap")] + public bool? Wrap { get; set; } + + /// + /// The area of a Layout.AreaGrid layout in which an element should be displayed. + /// + [JsonPropertyName("grid.area")] + public string? GridArea { get; set; } + + /// + /// An alternate element to render if the type of this one is unsupported or if the host application doesn't support all the capabilities specified in the requires property. + /// + [JsonPropertyName("fallback")] + public IUnion? Fallback { get; set; } + + public ChoiceSetInput(params IList choices) + { + this.Choices = choices; + } + + public ChoiceSetInput WithId(string value) + { + this.Id = value; + return this; + } + + public ChoiceSetInput WithRequires(HostCapabilities value) + { + this.Requires = value; + return this; + } + + public ChoiceSetInput WithLang(string value) + { + this.Lang = value; + return this; + } + + public ChoiceSetInput WithIsVisible(bool value) + { + this.IsVisible = value; + return this; + } + + public ChoiceSetInput WithSeparator(bool value) + { + this.Separator = value; + return this; + } + + public ChoiceSetInput WithHeight(ElementHeight value) + { + this.Height = value; + return this; + } + + public ChoiceSetInput WithSpacing(Spacing value) + { + this.Spacing = value; + return this; + } + + public ChoiceSetInput WithTargetWidth(TargetWidth value) + { + this.TargetWidth = value; + return this; + } + + public ChoiceSetInput WithIsSortKey(bool value) + { + this.IsSortKey = value; + return this; + } + + public ChoiceSetInput WithLabel(string value) + { + this.Label = value; + return this; + } + + public ChoiceSetInput WithIsRequired(bool value) + { + this.IsRequired = value; + return this; + } + + public ChoiceSetInput WithErrorMessage(string value) + { + this.ErrorMessage = value; + return this; + } + + public ChoiceSetInput WithValueChangedAction(ResetInputsAction value) + { + this.ValueChangedAction = value; + return this; + } + + public ChoiceSetInput WithValue(string value) + { + this.Value = value; + return this; + } + + public ChoiceSetInput WithChoices(params IList value) + { + this.Choices = value; + return this; + } + + public ChoiceSetInput WithChoicesData(QueryData value) + { + this.ChoicesData = value; + return this; + } + + public ChoiceSetInput WithStyle(StyleEnum value) + { + this.Style = value; + return this; + } + + public ChoiceSetInput WithIsMultiSelect(bool value) + { + this.IsMultiSelect = value; + return this; + } + + public ChoiceSetInput WithPlaceholder(string value) + { + this.Placeholder = value; + return this; + } + + public ChoiceSetInput WithWrap(bool value) + { + this.Wrap = value; + return this; + } + + public ChoiceSetInput WithGridArea(string value) + { + this.GridArea = value; + return this; + } + + public ChoiceSetInput WithFallback(IUnion value) + { + this.Fallback = value; + return this; + } +} + +/// +/// A choice as used by the Input.ChoiceSet input. +/// +public class Choice : SerializableObject +{ + /// + /// The text to display for the choice. + /// + [JsonPropertyName("title")] + public string? Title { get; set; } + + /// + /// The value associated with the choice, as sent to the Bot when an Action.Submit or Action.Execute is invoked + /// + [JsonPropertyName("value")] + public string? Value { get; set; } + + public Choice WithTitle(string value) + { + this.Title = value; + return this; + } + + public Choice WithValue(string value) + { + this.Value = value; + return this; + } +} + +/// +/// Defines a query to dynamically fetch data from a Bot. +/// +public class QueryData : SerializableObject +{ + /// + /// Must be **Data.Query**. + /// + [JsonPropertyName("type")] + public string Type { get; } = "Data.Query"; + + /// + /// The dataset from which to fetch the data. + /// + [JsonPropertyName("dataset")] + public string? Dataset { get; set; } + + /// + /// Controls which inputs are associated with the Data.Query. When a Data.Query is executed, the values of the associated inputs are sent to the Bot, allowing it to perform filtering operations based on the user's input. + /// + [JsonPropertyName("associatedInputs")] + public AssociatedInputs? AssociatedInputs { get; set; } + + /// + /// The maximum number of data items that should be returned by the query. Card authors should not specify this property in their card payload. It is determined by the client and sent to the Bot to enable pagination. + /// + [JsonPropertyName("count")] + public float? Count { get; set; } + + /// + /// The number of data items to be skipped by the query. Card authors should not specify this property in their card payload. It is determined by the client and sent to the Bot to enable pagination. + /// + [JsonPropertyName("skip")] + public float? Skip { get; set; } + + public QueryData WithDataset(string value) + { + this.Dataset = value; + return this; + } + + public QueryData WithAssociatedInputs(AssociatedInputs value) + { + this.AssociatedInputs = value; + return this; + } + + public QueryData WithCount(float value) + { + this.Count = value; + return this; + } + + public QueryData WithSkip(float value) + { + this.Skip = value; + return this; + } +} + +/// +/// An input to allow the user to rate something using stars. +/// +public class RatingInput : CardElement +{ + /// + /// Must be **Input.Rating**. + /// + [JsonPropertyName("type")] + public string Type { get; } = "Input.Rating"; + + /// + /// A unique identifier for the element or action. Input elements must have an id, otherwise they will not be validated and their values will not be sent to the Bot. + /// + [JsonPropertyName("id")] + public string? Id { get; set; } + + /// + /// A list of capabilities the element requires the host application to support. If the host application doesn't support at least one of the listed capabilities, the element is not rendered (or its fallback is rendered if provided). + /// + [JsonPropertyName("requires")] + public HostCapabilities? Requires { get; set; } + + /// + /// The locale associated with the element. + /// + [JsonPropertyName("lang")] + public string? Lang { get; set; } + + /// + /// Controls the visibility of the element. + /// + [JsonPropertyName("isVisible")] + public bool? IsVisible { get; set; } + + /// + /// Controls whether a separator line should be displayed above the element to visually separate it from the previous element. No separator will be displayed for the first element in a container, even if this property is set to true. + /// + [JsonPropertyName("separator")] + public bool? Separator { get; set; } + + /// + /// The height of the element. When set to stretch, the element will use the remaining vertical space in its container. + /// + [JsonPropertyName("height")] + public ElementHeight? Height { get; set; } + + /// + /// Controls the amount of space between this element and the previous one. No space will be added for the first element in a container. + /// + [JsonPropertyName("spacing")] + public Spacing? Spacing { get; set; } + + /// + /// Controls for which card width the element should be displayed. If targetWidth isn't specified, the element is rendered at all card widths. Using targetWidth makes it possible to author responsive cards that adapt their layout to the available horizontal space. For more details, see [Responsive layout](https://adaptivecards.microsoft.com/?topic=responsive-layout). + /// + [JsonPropertyName("targetWidth")] + public TargetWidth? TargetWidth { get; set; } + + /// + /// Controls whether the element should be used as a sort key by elements that allow sorting across a collection of elements. + /// + [JsonPropertyName("isSortKey")] + public bool? IsSortKey { get; set; } + + /// + /// The label of the input. + /// + /// A label should **always** be provided to ensure the best user experience especially for users of assistive technology. + /// + [JsonPropertyName("label")] + public string? Label { get; set; } + + /// + /// Controls whether the input is required. See [Input validation](https://adaptivecards.microsoft.com/?topic=input-validation) for more details. + /// + [JsonPropertyName("isRequired")] + public bool? IsRequired { get; set; } + + /// + /// The error message to display when the input fails validation. See [Input validation](https://adaptivecards.microsoft.com/?topic=input-validation) for more details. + /// + [JsonPropertyName("errorMessage")] + public string? ErrorMessage { get; set; } + + /// + /// An Action.ResetInputs action that will be executed when the value of the input changes. + /// + [JsonPropertyName("valueChangedAction")] + public ResetInputsAction? ValueChangedAction { get; set; } + + /// + /// The default value of the input. + /// + [JsonPropertyName("value")] + public float? Value { get; set; } + + /// + /// The number of stars to display. + /// + [JsonPropertyName("max")] + public float? Max { get; set; } + + /// + /// Controls if the user can select half stars. + /// + [JsonPropertyName("allowHalfSteps")] + public bool? AllowHalfSteps { get; set; } + + /// + /// The size of the stars. + /// + [JsonPropertyName("size")] + public RatingSize? Size { get; set; } + + /// + /// The color of the stars. + /// + [JsonPropertyName("color")] + public RatingColor? Color { get; set; } + + /// + /// The area of a Layout.AreaGrid layout in which an element should be displayed. + /// + [JsonPropertyName("grid.area")] + public string? GridArea { get; set; } + + /// + /// An alternate element to render if the type of this one is unsupported or if the host application doesn't support all the capabilities specified in the requires property. + /// + [JsonPropertyName("fallback")] + public IUnion? Fallback { get; set; } + + public RatingInput WithId(string value) + { + this.Id = value; + return this; + } + + public RatingInput WithRequires(HostCapabilities value) + { + this.Requires = value; + return this; + } + + public RatingInput WithLang(string value) + { + this.Lang = value; + return this; + } + + public RatingInput WithIsVisible(bool value) + { + this.IsVisible = value; + return this; + } + + public RatingInput WithSeparator(bool value) + { + this.Separator = value; + return this; + } + + public RatingInput WithHeight(ElementHeight value) + { + this.Height = value; + return this; + } + + public RatingInput WithSpacing(Spacing value) + { + this.Spacing = value; + return this; + } + + public RatingInput WithTargetWidth(TargetWidth value) + { + this.TargetWidth = value; + return this; + } + + public RatingInput WithIsSortKey(bool value) + { + this.IsSortKey = value; + return this; + } + + public RatingInput WithLabel(string value) + { + this.Label = value; + return this; + } + + public RatingInput WithIsRequired(bool value) + { + this.IsRequired = value; + return this; + } + + public RatingInput WithErrorMessage(string value) + { + this.ErrorMessage = value; + return this; + } + + public RatingInput WithValueChangedAction(ResetInputsAction value) + { + this.ValueChangedAction = value; + return this; + } + + public RatingInput WithValue(float value) + { + this.Value = value; + return this; + } + + public RatingInput WithMax(float value) + { + this.Max = value; + return this; + } + + public RatingInput WithAllowHalfSteps(bool value) + { + this.AllowHalfSteps = value; + return this; + } + + public RatingInput WithSize(RatingSize value) + { + this.Size = value; + return this; + } + + public RatingInput WithColor(RatingColor value) + { + this.Color = value; + return this; + } + + public RatingInput WithGridArea(string value) + { + this.GridArea = value; + return this; + } + + public RatingInput WithFallback(IUnion value) + { + this.Fallback = value; + return this; + } +} + +/// +/// A read-only star rating element, to display the rating of something. +/// +public class Rating : CardElement +{ + /// + /// Must be **Rating**. + /// + [JsonPropertyName("type")] + public string Type { get; } = "Rating"; + + /// + /// A unique identifier for the element or action. Input elements must have an id, otherwise they will not be validated and their values will not be sent to the Bot. + /// + [JsonPropertyName("id")] + public string? Id { get; set; } + + /// + /// A list of capabilities the element requires the host application to support. If the host application doesn't support at least one of the listed capabilities, the element is not rendered (or its fallback is rendered if provided). + /// + [JsonPropertyName("requires")] + public HostCapabilities? Requires { get; set; } + + /// + /// The locale associated with the element. + /// + [JsonPropertyName("lang")] + public string? Lang { get; set; } + + /// + /// Controls the visibility of the element. + /// + [JsonPropertyName("isVisible")] + public bool? IsVisible { get; set; } + + /// + /// Controls whether a separator line should be displayed above the element to visually separate it from the previous element. No separator will be displayed for the first element in a container, even if this property is set to true. + /// + [JsonPropertyName("separator")] + public bool? Separator { get; set; } + + /// + /// The height of the element. When set to stretch, the element will use the remaining vertical space in its container. + /// + [JsonPropertyName("height")] + public ElementHeight? Height { get; set; } + + /// + /// Controls how the element should be horizontally aligned. + /// + [JsonPropertyName("horizontalAlignment")] + public HorizontalAlignment? HorizontalAlignment { get; set; } + + /// + /// Controls the amount of space between this element and the previous one. No space will be added for the first element in a container. + /// + [JsonPropertyName("spacing")] + public Spacing? Spacing { get; set; } + + /// + /// Controls for which card width the element should be displayed. If targetWidth isn't specified, the element is rendered at all card widths. Using targetWidth makes it possible to author responsive cards that adapt their layout to the available horizontal space. For more details, see [Responsive layout](https://adaptivecards.microsoft.com/?topic=responsive-layout). + /// + [JsonPropertyName("targetWidth")] + public TargetWidth? TargetWidth { get; set; } + + /// + /// Controls whether the element should be used as a sort key by elements that allow sorting across a collection of elements. + /// + [JsonPropertyName("isSortKey")] + public bool? IsSortKey { get; set; } + + /// + /// The value of the rating. Must be between 0 and max. + /// + [JsonPropertyName("value")] + public float? Value { get; set; } + + /// + /// The number of "votes" associated with the rating. + /// + [JsonPropertyName("count")] + public float? Count { get; set; } + + /// + /// The number of stars to display. + /// + [JsonPropertyName("max")] + public float? Max { get; set; } + + /// + /// The size of the stars. + /// + [JsonPropertyName("size")] + public RatingSize? Size { get; set; } + + /// + /// The color of the stars. + /// + [JsonPropertyName("color")] + public RatingColor? Color { get; set; } + + /// + /// The style of the stars. + /// + [JsonPropertyName("style")] + public RatingStyle? Style { get; set; } + + /// + /// The area of a Layout.AreaGrid layout in which an element should be displayed. + /// + [JsonPropertyName("grid.area")] + public string? GridArea { get; set; } + + /// + /// An alternate element to render if the type of this one is unsupported or if the host application doesn't support all the capabilities specified in the requires property. + /// + [JsonPropertyName("fallback")] + public IUnion? Fallback { get; set; } + + public Rating WithId(string value) + { + this.Id = value; + return this; + } + + public Rating WithRequires(HostCapabilities value) + { + this.Requires = value; + return this; + } + + public Rating WithLang(string value) + { + this.Lang = value; + return this; + } + + public Rating WithIsVisible(bool value) + { + this.IsVisible = value; + return this; + } + + public Rating WithSeparator(bool value) + { + this.Separator = value; + return this; + } + + public Rating WithHeight(ElementHeight value) + { + this.Height = value; + return this; + } + + public Rating WithHorizontalAlignment(HorizontalAlignment value) + { + this.HorizontalAlignment = value; + return this; + } + + public Rating WithSpacing(Spacing value) + { + this.Spacing = value; + return this; + } + + public Rating WithTargetWidth(TargetWidth value) + { + this.TargetWidth = value; + return this; + } + + public Rating WithIsSortKey(bool value) + { + this.IsSortKey = value; + return this; + } + + public Rating WithValue(float value) + { + this.Value = value; + return this; + } + + public Rating WithCount(float value) + { + this.Count = value; + return this; + } + + public Rating WithMax(float value) + { + this.Max = value; + return this; + } + + public Rating WithSize(RatingSize value) + { + this.Size = value; + return this; + } + + public Rating WithColor(RatingColor value) + { + this.Color = value; + return this; + } + + public Rating WithStyle(RatingStyle value) + { + this.Style = value; + return this; + } + + public Rating WithGridArea(string value) + { + this.GridArea = value; + return this; + } + + public Rating WithFallback(IUnion value) + { + this.Fallback = value; + return this; + } +} + +/// +/// A special type of button with an icon, title and description. +/// +public class CompoundButton : CardElement +{ + /// + /// Must be **CompoundButton**. + /// + [JsonPropertyName("type")] + public string Type { get; } = "CompoundButton"; + + /// + /// A unique identifier for the element or action. Input elements must have an id, otherwise they will not be validated and their values will not be sent to the Bot. + /// + [JsonPropertyName("id")] + public string? Id { get; set; } + + /// + /// A list of capabilities the element requires the host application to support. If the host application doesn't support at least one of the listed capabilities, the element is not rendered (or its fallback is rendered if provided). + /// + [JsonPropertyName("requires")] + public HostCapabilities? Requires { get; set; } + + /// + /// The locale associated with the element. + /// + [JsonPropertyName("lang")] + public string? Lang { get; set; } + + /// + /// Controls the visibility of the element. + /// + [JsonPropertyName("isVisible")] + public bool? IsVisible { get; set; } + + /// + /// Controls whether a separator line should be displayed above the element to visually separate it from the previous element. No separator will be displayed for the first element in a container, even if this property is set to true. + /// + [JsonPropertyName("separator")] + public bool? Separator { get; set; } + + /// + /// The height of the element. When set to stretch, the element will use the remaining vertical space in its container. + /// + [JsonPropertyName("height")] + public ElementHeight? Height { get; set; } + + /// + /// Controls how the element should be horizontally aligned. + /// + [JsonPropertyName("horizontalAlignment")] + public HorizontalAlignment? HorizontalAlignment { get; set; } + + /// + /// Controls the amount of space between this element and the previous one. No space will be added for the first element in a container. + /// + [JsonPropertyName("spacing")] + public Spacing? Spacing { get; set; } + + /// + /// Controls for which card width the element should be displayed. If targetWidth isn't specified, the element is rendered at all card widths. Using targetWidth makes it possible to author responsive cards that adapt their layout to the available horizontal space. For more details, see [Responsive layout](https://adaptivecards.microsoft.com/?topic=responsive-layout). + /// + [JsonPropertyName("targetWidth")] + public TargetWidth? TargetWidth { get; set; } + + /// + /// Controls whether the element should be used as a sort key by elements that allow sorting across a collection of elements. + /// + [JsonPropertyName("isSortKey")] + public bool? IsSortKey { get; set; } + + /// + /// The icon to show on the button. + /// + [JsonPropertyName("icon")] + public IconInfo? Icon { get; set; } + + /// + /// The badge to show on the button. + /// + [JsonPropertyName("badge")] + public string? Badge { get; set; } + + /// + /// The title of the button. + /// + [JsonPropertyName("title")] + public string? Title { get; set; } + + /// + /// The description text of the button. + /// + [JsonPropertyName("description")] + public string? Description { get; set; } + + /// + /// An Action that will be invoked when the button is tapped or clicked. Action.ShowCard is not supported. + /// + [JsonPropertyName("selectAction")] + public Action? SelectAction { get; set; } + + /// + /// The area of a Layout.AreaGrid layout in which an element should be displayed. + /// + [JsonPropertyName("grid.area")] + public string? GridArea { get; set; } + + /// + /// An alternate element to render if the type of this one is unsupported or if the host application doesn't support all the capabilities specified in the requires property. + /// + [JsonPropertyName("fallback")] + public IUnion? Fallback { get; set; } + + public CompoundButton WithId(string value) + { + this.Id = value; + return this; + } + + public CompoundButton WithRequires(HostCapabilities value) + { + this.Requires = value; + return this; + } + + public CompoundButton WithLang(string value) + { + this.Lang = value; + return this; + } + + public CompoundButton WithIsVisible(bool value) + { + this.IsVisible = value; + return this; + } + + public CompoundButton WithSeparator(bool value) + { + this.Separator = value; + return this; + } + + public CompoundButton WithHeight(ElementHeight value) + { + this.Height = value; + return this; + } + + public CompoundButton WithHorizontalAlignment(HorizontalAlignment value) + { + this.HorizontalAlignment = value; + return this; + } + + public CompoundButton WithSpacing(Spacing value) + { + this.Spacing = value; + return this; + } + + public CompoundButton WithTargetWidth(TargetWidth value) + { + this.TargetWidth = value; + return this; + } + + public CompoundButton WithIsSortKey(bool value) + { + this.IsSortKey = value; + return this; + } + + public CompoundButton WithIcon(IconInfo value) + { + this.Icon = value; + return this; + } + + public CompoundButton WithBadge(string value) + { + this.Badge = value; + return this; + } + + public CompoundButton WithTitle(string value) + { + this.Title = value; + return this; + } + + public CompoundButton WithDescription(string value) + { + this.Description = value; + return this; + } + + public CompoundButton WithSelectAction(Action value) + { + this.SelectAction = value; + return this; + } + + public CompoundButton WithGridArea(string value) + { + this.GridArea = value; + return this; + } + + public CompoundButton WithFallback(IUnion value) + { + this.Fallback = value; + return this; + } +} + +/// +/// Defines information about a Fluent icon and how it should be rendered. +/// +public class IconInfo : SerializableObject +{ + /// + /// The name of the icon to display. + /// + [JsonPropertyName("name")] + public string? Name { get; set; } + + /// + /// The size of the icon. + /// + [JsonPropertyName("size")] + public IconSize? Size { get; set; } + + /// + /// The style of the icon. + /// + [JsonPropertyName("style")] + public IconStyle? Style { get; set; } + + /// + /// The color of the icon. + /// + [JsonPropertyName("color")] + public TextColor? Color { get; set; } + + public IconInfo WithName(string value) + { + this.Name = value; + return this; + } + + public IconInfo WithSize(IconSize value) + { + this.Size = value; + return this; + } + + public IconInfo WithStyle(IconStyle value) + { + this.Style = value; + return this; + } + + public IconInfo WithColor(TextColor value) + { + this.Color = value; + return this; + } +} + +/// +/// A standalone icon element. Icons can be picked from the vast [Adaptive Card icon catalog](https://adaptivecards.microsoft.com/?topic=icon-catalog). +/// +public class Icon : CardElement +{ + /// + /// Must be **Icon**. + /// + [JsonPropertyName("type")] + public string Type { get; } = "Icon"; + + /// + /// A unique identifier for the element or action. Input elements must have an id, otherwise they will not be validated and their values will not be sent to the Bot. + /// + [JsonPropertyName("id")] + public string? Id { get; set; } + + /// + /// A list of capabilities the element requires the host application to support. If the host application doesn't support at least one of the listed capabilities, the element is not rendered (or its fallback is rendered if provided). + /// + [JsonPropertyName("requires")] + public HostCapabilities? Requires { get; set; } + + /// + /// The locale associated with the element. + /// + [JsonPropertyName("lang")] + public string? Lang { get; set; } + + /// + /// Controls the visibility of the element. + /// + [JsonPropertyName("isVisible")] + public bool? IsVisible { get; set; } + + /// + /// Controls whether a separator line should be displayed above the element to visually separate it from the previous element. No separator will be displayed for the first element in a container, even if this property is set to true. + /// + [JsonPropertyName("separator")] + public bool? Separator { get; set; } + + /// + /// Controls how the element should be horizontally aligned. + /// + [JsonPropertyName("horizontalAlignment")] + public HorizontalAlignment? HorizontalAlignment { get; set; } + + /// + /// Controls the amount of space between this element and the previous one. No space will be added for the first element in a container. + /// + [JsonPropertyName("spacing")] + public Spacing? Spacing { get; set; } + + /// + /// Controls for which card width the element should be displayed. If targetWidth isn't specified, the element is rendered at all card widths. Using targetWidth makes it possible to author responsive cards that adapt their layout to the available horizontal space. For more details, see [Responsive layout](https://adaptivecards.microsoft.com/?topic=responsive-layout). + /// + [JsonPropertyName("targetWidth")] + public TargetWidth? TargetWidth { get; set; } + + /// + /// Controls whether the element should be used as a sort key by elements that allow sorting across a collection of elements. + /// + [JsonPropertyName("isSortKey")] + public bool? IsSortKey { get; set; } + + /// + /// The name of the icon to display. + /// + [JsonPropertyName("name")] + public string? Name { get; set; } + + /// + /// The size of the icon. + /// + [JsonPropertyName("size")] + public IconSize? Size { get; set; } + + /// + /// The style of the icon. + /// + [JsonPropertyName("style")] + public IconStyle? Style { get; set; } + + /// + /// The color of the icon. + /// + [JsonPropertyName("color")] + public TextColor? Color { get; set; } + + /// + /// An Action that will be invoked when the icon is tapped or clicked. Action.ShowCard is not supported. + /// + [JsonPropertyName("selectAction")] + public Action? SelectAction { get; set; } + + /// + /// The area of a Layout.AreaGrid layout in which an element should be displayed. + /// + [JsonPropertyName("grid.area")] + public string? GridArea { get; set; } + + /// + /// An alternate element to render if the type of this one is unsupported or if the host application doesn't support all the capabilities specified in the requires property. + /// + [JsonPropertyName("fallback")] + public IUnion? Fallback { get; set; } + + public Icon(string name) + { + this.Name = name; + } + + public Icon WithId(string value) + { + this.Id = value; + return this; + } + + public Icon WithRequires(HostCapabilities value) + { + this.Requires = value; + return this; + } + + public Icon WithLang(string value) + { + this.Lang = value; + return this; + } + + public Icon WithIsVisible(bool value) + { + this.IsVisible = value; + return this; + } + + public Icon WithSeparator(bool value) + { + this.Separator = value; + return this; + } + + public Icon WithHorizontalAlignment(HorizontalAlignment value) + { + this.HorizontalAlignment = value; + return this; + } + + public Icon WithSpacing(Spacing value) + { + this.Spacing = value; + return this; + } + + public Icon WithTargetWidth(TargetWidth value) + { + this.TargetWidth = value; + return this; + } + + public Icon WithIsSortKey(bool value) + { + this.IsSortKey = value; + return this; + } + + public Icon WithName(string value) + { + this.Name = value; + return this; + } + + public Icon WithSize(IconSize value) + { + this.Size = value; + return this; + } + + public Icon WithStyle(IconStyle value) + { + this.Style = value; + return this; + } + + public Icon WithColor(TextColor value) + { + this.Color = value; + return this; + } + + public Icon WithSelectAction(Action value) + { + this.SelectAction = value; + return this; + } + + public Icon WithGridArea(string value) + { + this.GridArea = value; + return this; + } + + public Icon WithFallback(IUnion value) + { + this.Fallback = value; + return this; + } +} + +/// +/// A carousel with sliding pages. +/// +public class Carousel : CardElement +{ + /// + /// Must be **Carousel**. + /// + [JsonPropertyName("type")] + public string Type { get; } = "Carousel"; + + /// + /// A unique identifier for the element or action. Input elements must have an id, otherwise they will not be validated and their values will not be sent to the Bot. + /// + [JsonPropertyName("id")] + public string? Id { get; set; } + + /// + /// A list of capabilities the element requires the host application to support. If the host application doesn't support at least one of the listed capabilities, the element is not rendered (or its fallback is rendered if provided). + /// + [JsonPropertyName("requires")] + public HostCapabilities? Requires { get; set; } + + /// + /// The locale associated with the element. + /// + [JsonPropertyName("lang")] + public string? Lang { get; set; } + + /// + /// Controls the visibility of the element. + /// + [JsonPropertyName("isVisible")] + public bool? IsVisible { get; set; } + + /// + /// Controls whether a separator line should be displayed above the element to visually separate it from the previous element. No separator will be displayed for the first element in a container, even if this property is set to true. + /// + [JsonPropertyName("separator")] + public bool? Separator { get; set; } + + /// + /// The height of the element. When set to stretch, the element will use the remaining vertical space in its container. + /// + [JsonPropertyName("height")] + public ElementHeight? Height { get; set; } + + /// + /// Controls the amount of space between this element and the previous one. No space will be added for the first element in a container. + /// + [JsonPropertyName("spacing")] + public Spacing? Spacing { get; set; } + + /// + /// Controls for which card width the element should be displayed. If targetWidth isn't specified, the element is rendered at all card widths. Using targetWidth makes it possible to author responsive cards that adapt their layout to the available horizontal space. For more details, see [Responsive layout](https://adaptivecards.microsoft.com/?topic=responsive-layout). + /// + [JsonPropertyName("targetWidth")] + public TargetWidth? TargetWidth { get; set; } + + /// + /// Controls whether the element should be used as a sort key by elements that allow sorting across a collection of elements. + /// + [JsonPropertyName("isSortKey")] + public bool? IsSortKey { get; set; } + + /// + /// Controls if the container should bleed into its parent. A bleeding container extends into its parent's padding. + /// + [JsonPropertyName("bleed")] + public bool? Bleed { get; set; } + + /// + /// The minimum height, in pixels, of the container, in the `px` format. + /// + [JsonPropertyName("minHeight")] + public string? MinHeight { get; set; } + + /// + /// Controls the type of animation to use to navigate between pages. + /// + [JsonPropertyName("pageAnimation")] + public CarouselPageAnimation? PageAnimation { get; set; } + + /// + /// The area of a Layout.AreaGrid layout in which an element should be displayed. + /// + [JsonPropertyName("grid.area")] + public string? GridArea { get; set; } + + /// + /// An alternate element to render if the type of this one is unsupported or if the host application doesn't support all the capabilities specified in the requires property. + /// + [JsonPropertyName("fallback")] + public IUnion? Fallback { get; set; } + + /// + /// The pages in the carousel. + /// + [JsonPropertyName("pages")] + public IList? Pages { get; set; } + + public Carousel WithId(string value) + { + this.Id = value; + return this; + } + + public Carousel WithRequires(HostCapabilities value) + { + this.Requires = value; + return this; + } + + public Carousel WithLang(string value) + { + this.Lang = value; + return this; + } + + public Carousel WithIsVisible(bool value) + { + this.IsVisible = value; + return this; + } + + public Carousel WithSeparator(bool value) + { + this.Separator = value; + return this; + } + + public Carousel WithHeight(ElementHeight value) + { + this.Height = value; + return this; + } + + public Carousel WithSpacing(Spacing value) + { + this.Spacing = value; + return this; + } + + public Carousel WithTargetWidth(TargetWidth value) + { + this.TargetWidth = value; + return this; + } + + public Carousel WithIsSortKey(bool value) + { + this.IsSortKey = value; + return this; + } + + public Carousel WithBleed(bool value) + { + this.Bleed = value; + return this; + } + + public Carousel WithMinHeight(string value) + { + this.MinHeight = value; + return this; + } + + public Carousel WithPageAnimation(CarouselPageAnimation value) + { + this.PageAnimation = value; + return this; + } + + public Carousel WithGridArea(string value) + { + this.GridArea = value; + return this; + } + + public Carousel WithFallback(IUnion value) + { + this.Fallback = value; + return this; + } + + public Carousel WithPages(params IList value) + { + this.Pages = value; + return this; + } +} + +/// +/// A badge element to show an icon and/or text in a compact form over a colored background. +/// +public class Badge : CardElement +{ + /// + /// Must be **Badge**. + /// + [JsonPropertyName("type")] + public string Type { get; } = "Badge"; + + /// + /// A unique identifier for the element or action. Input elements must have an id, otherwise they will not be validated and their values will not be sent to the Bot. + /// + [JsonPropertyName("id")] + public string? Id { get; set; } + + /// + /// A list of capabilities the element requires the host application to support. If the host application doesn't support at least one of the listed capabilities, the element is not rendered (or its fallback is rendered if provided). + /// + [JsonPropertyName("requires")] + public HostCapabilities? Requires { get; set; } + + /// + /// The locale associated with the element. + /// + [JsonPropertyName("lang")] + public string? Lang { get; set; } + + /// + /// Controls the visibility of the element. + /// + [JsonPropertyName("isVisible")] + public bool? IsVisible { get; set; } + + /// + /// Controls whether a separator line should be displayed above the element to visually separate it from the previous element. No separator will be displayed for the first element in a container, even if this property is set to true. + /// + [JsonPropertyName("separator")] + public bool? Separator { get; set; } + + /// + /// The height of the element. When set to stretch, the element will use the remaining vertical space in its container. + /// + [JsonPropertyName("height")] + public ElementHeight? Height { get; set; } + + /// + /// Controls how the element should be horizontally aligned. + /// + [JsonPropertyName("horizontalAlignment")] + public HorizontalAlignment? HorizontalAlignment { get; set; } + + /// + /// Controls the amount of space between this element and the previous one. No space will be added for the first element in a container. + /// + [JsonPropertyName("spacing")] + public Spacing? Spacing { get; set; } + + /// + /// Controls for which card width the element should be displayed. If targetWidth isn't specified, the element is rendered at all card widths. Using targetWidth makes it possible to author responsive cards that adapt their layout to the available horizontal space. For more details, see [Responsive layout](https://adaptivecards.microsoft.com/?topic=responsive-layout). + /// + [JsonPropertyName("targetWidth")] + public TargetWidth? TargetWidth { get; set; } + + /// + /// Controls whether the element should be used as a sort key by elements that allow sorting across a collection of elements. + /// + [JsonPropertyName("isSortKey")] + public bool? IsSortKey { get; set; } + + /// + /// The text to display. + /// + [JsonPropertyName("text")] + public string? Text { get; set; } + + /// + /// The name of an icon from the [Adaptive Card icon catalog](https://adaptivecards.microsoft.com/?topic=icon-catalog) to display, in the `[,regular|filled]` format. If the style is not specified, the regular style is used. + /// + [JsonPropertyName("icon")] + public string? Icon { get; set; } + + /// + /// Controls the position of the icon. + /// + [JsonPropertyName("iconPosition")] + public BadgeIconPosition? IconPosition { get; set; } + + /// + /// Controls the strength of the background color. + /// + [JsonPropertyName("appearance")] + public BadgeAppearance? Appearance { get; set; } + + /// + /// The size of the badge. + /// + [JsonPropertyName("size")] + public BadgeSize? Size { get; set; } + + /// + /// Controls the shape of the badge. + /// + [JsonPropertyName("shape")] + public BadgeShape? Shape { get; set; } + + /// + /// The style of the badge. + /// + [JsonPropertyName("style")] + public BadgeStyle? Style { get; set; } + + /// + /// Controls the tooltip text to display when the badge is hovered over. + /// + [JsonPropertyName("tooltip")] + public string? Tooltip { get; set; } + + /// + /// The area of a Layout.AreaGrid layout in which an element should be displayed. + /// + [JsonPropertyName("grid.area")] + public string? GridArea { get; set; } + + /// + /// An alternate element to render if the type of this one is unsupported or if the host application doesn't support all the capabilities specified in the requires property. + /// + [JsonPropertyName("fallback")] + public IUnion? Fallback { get; set; } + + public Badge WithId(string value) + { + this.Id = value; + return this; + } + + public Badge WithRequires(HostCapabilities value) + { + this.Requires = value; + return this; + } + + public Badge WithLang(string value) + { + this.Lang = value; + return this; + } + + public Badge WithIsVisible(bool value) + { + this.IsVisible = value; + return this; + } + + public Badge WithSeparator(bool value) + { + this.Separator = value; + return this; + } + + public Badge WithHeight(ElementHeight value) + { + this.Height = value; + return this; + } + + public Badge WithHorizontalAlignment(HorizontalAlignment value) + { + this.HorizontalAlignment = value; + return this; + } + + public Badge WithSpacing(Spacing value) + { + this.Spacing = value; + return this; + } + + public Badge WithTargetWidth(TargetWidth value) + { + this.TargetWidth = value; + return this; + } + + public Badge WithIsSortKey(bool value) + { + this.IsSortKey = value; + return this; + } + + public Badge WithText(string value) + { + this.Text = value; + return this; + } + + public Badge WithIcon(string value) + { + this.Icon = value; + return this; + } + + public Badge WithIconPosition(BadgeIconPosition value) + { + this.IconPosition = value; + return this; + } + + public Badge WithAppearance(BadgeAppearance value) + { + this.Appearance = value; + return this; + } + + public Badge WithSize(BadgeSize value) + { + this.Size = value; + return this; + } + + public Badge WithShape(BadgeShape value) + { + this.Shape = value; + return this; + } + + public Badge WithStyle(BadgeStyle value) + { + this.Style = value; + return this; + } + + public Badge WithTooltip(string value) + { + this.Tooltip = value; + return this; + } + + public Badge WithGridArea(string value) + { + this.GridArea = value; + return this; + } + + public Badge WithFallback(IUnion value) + { + this.Fallback = value; + return this; + } +} + +/// +/// A donut chart. +/// +public class DonutChart : CardElement +{ + /// + /// Must be **Chart.Donut**. + /// + [JsonPropertyName("type")] + public string Type { get; } = "Chart.Donut"; + + /// + /// A unique identifier for the element or action. Input elements must have an id, otherwise they will not be validated and their values will not be sent to the Bot. + /// + [JsonPropertyName("id")] + public string? Id { get; set; } + + /// + /// A list of capabilities the element requires the host application to support. If the host application doesn't support at least one of the listed capabilities, the element is not rendered (or its fallback is rendered if provided). + /// + [JsonPropertyName("requires")] + public HostCapabilities? Requires { get; set; } + + /// + /// The locale associated with the element. + /// + [JsonPropertyName("lang")] + public string? Lang { get; set; } + + /// + /// Controls the visibility of the element. + /// + [JsonPropertyName("isVisible")] + public bool? IsVisible { get; set; } + + /// + /// Controls whether a separator line should be displayed above the element to visually separate it from the previous element. No separator will be displayed for the first element in a container, even if this property is set to true. + /// + [JsonPropertyName("separator")] + public bool? Separator { get; set; } + + /// + /// The height of the element. When set to stretch, the element will use the remaining vertical space in its container. + /// + [JsonPropertyName("height")] + public ElementHeight? Height { get; set; } + + /// + /// Controls how the element should be horizontally aligned. + /// + [JsonPropertyName("horizontalAlignment")] + public HorizontalAlignment? HorizontalAlignment { get; set; } + + /// + /// Controls the amount of space between this element and the previous one. No space will be added for the first element in a container. + /// + [JsonPropertyName("spacing")] + public Spacing? Spacing { get; set; } + + /// + /// Controls for which card width the element should be displayed. If targetWidth isn't specified, the element is rendered at all card widths. Using targetWidth makes it possible to author responsive cards that adapt their layout to the available horizontal space. For more details, see [Responsive layout](https://adaptivecards.microsoft.com/?topic=responsive-layout). + /// + [JsonPropertyName("targetWidth")] + public TargetWidth? TargetWidth { get; set; } + + /// + /// Controls whether the element should be used as a sort key by elements that allow sorting across a collection of elements. + /// + [JsonPropertyName("isSortKey")] + public bool? IsSortKey { get; set; } + + /// + /// The title of the chart. + /// + [JsonPropertyName("title")] + public string? Title { get; set; } + + /// + /// The name of the set of colors to use to render the chart. See [Chart colors reference](https://adaptivecards.microsoft.com/?topic=chart-colors-reference). + /// + [JsonPropertyName("colorSet")] + public ChartColorSet? ColorSet { get; set; } + + /// + /// The data to display in the chart. + /// + [JsonPropertyName("data")] + public IList? Data { get; set; } + + /// + /// The area of a Layout.AreaGrid layout in which an element should be displayed. + /// + [JsonPropertyName("grid.area")] + public string? GridArea { get; set; } + + /// + /// An alternate element to render if the type of this one is unsupported or if the host application doesn't support all the capabilities specified in the requires property. + /// + [JsonPropertyName("fallback")] + public IUnion? Fallback { get; set; } + + public DonutChart WithId(string value) + { + this.Id = value; + return this; + } + + public DonutChart WithRequires(HostCapabilities value) + { + this.Requires = value; + return this; + } + + public DonutChart WithLang(string value) + { + this.Lang = value; + return this; + } + + public DonutChart WithIsVisible(bool value) + { + this.IsVisible = value; + return this; + } + + public DonutChart WithSeparator(bool value) + { + this.Separator = value; + return this; + } + + public DonutChart WithHeight(ElementHeight value) + { + this.Height = value; + return this; + } + + public DonutChart WithHorizontalAlignment(HorizontalAlignment value) + { + this.HorizontalAlignment = value; + return this; + } + + public DonutChart WithSpacing(Spacing value) + { + this.Spacing = value; + return this; + } + + public DonutChart WithTargetWidth(TargetWidth value) + { + this.TargetWidth = value; + return this; + } + + public DonutChart WithIsSortKey(bool value) + { + this.IsSortKey = value; + return this; + } + + public DonutChart WithTitle(string value) + { + this.Title = value; + return this; + } + + public DonutChart WithColorSet(ChartColorSet value) + { + this.ColorSet = value; + return this; + } + + public DonutChart WithData(params IList value) + { + this.Data = value; + return this; + } + + public DonutChart WithGridArea(string value) + { + this.GridArea = value; + return this; + } + + public DonutChart WithFallback(IUnion value) + { + this.Fallback = value; + return this; + } +} + +/// +/// A data point in a Donut chart. +/// +public class DonutChartData : SerializableObject +{ + /// + /// The legend of the chart. + /// + [JsonPropertyName("legend")] + public string? Legend { get; set; } + + /// + /// The value associated with the data point. + /// + [JsonPropertyName("value")] + public float? Value { get; set; } + + /// + /// The color to use for the data point. See [Chart colors reference](https://adaptivecards.microsoft.com/?topic=chart-colors-reference). + /// + [JsonPropertyName("color")] + public ChartColor? Color { get; set; } + + public DonutChartData WithLegend(string value) + { + this.Legend = value; + return this; + } + + public DonutChartData WithValue(float value) + { + this.Value = value; + return this; + } + + public DonutChartData WithColor(ChartColor value) + { + this.Color = value; + return this; + } +} + +/// +/// A pie chart. +/// +public class PieChart : CardElement +{ + /// + /// Must be **Chart.Pie**. + /// + [JsonPropertyName("type")] + public string Type { get; } = "Chart.Pie"; + + /// + /// A unique identifier for the element or action. Input elements must have an id, otherwise they will not be validated and their values will not be sent to the Bot. + /// + [JsonPropertyName("id")] + public string? Id { get; set; } + + /// + /// A list of capabilities the element requires the host application to support. If the host application doesn't support at least one of the listed capabilities, the element is not rendered (or its fallback is rendered if provided). + /// + [JsonPropertyName("requires")] + public HostCapabilities? Requires { get; set; } + + /// + /// The locale associated with the element. + /// + [JsonPropertyName("lang")] + public string? Lang { get; set; } + + /// + /// Controls the visibility of the element. + /// + [JsonPropertyName("isVisible")] + public bool? IsVisible { get; set; } + + /// + /// Controls whether a separator line should be displayed above the element to visually separate it from the previous element. No separator will be displayed for the first element in a container, even if this property is set to true. + /// + [JsonPropertyName("separator")] + public bool? Separator { get; set; } + + /// + /// The height of the element. When set to stretch, the element will use the remaining vertical space in its container. + /// + [JsonPropertyName("height")] + public ElementHeight? Height { get; set; } + + /// + /// Controls how the element should be horizontally aligned. + /// + [JsonPropertyName("horizontalAlignment")] + public HorizontalAlignment? HorizontalAlignment { get; set; } + + /// + /// Controls the amount of space between this element and the previous one. No space will be added for the first element in a container. + /// + [JsonPropertyName("spacing")] + public Spacing? Spacing { get; set; } + + /// + /// Controls for which card width the element should be displayed. If targetWidth isn't specified, the element is rendered at all card widths. Using targetWidth makes it possible to author responsive cards that adapt their layout to the available horizontal space. For more details, see [Responsive layout](https://adaptivecards.microsoft.com/?topic=responsive-layout). + /// + [JsonPropertyName("targetWidth")] + public TargetWidth? TargetWidth { get; set; } + + /// + /// Controls whether the element should be used as a sort key by elements that allow sorting across a collection of elements. + /// + [JsonPropertyName("isSortKey")] + public bool? IsSortKey { get; set; } + + /// + /// The title of the chart. + /// + [JsonPropertyName("title")] + public string? Title { get; set; } + + /// + /// The name of the set of colors to use to render the chart. See [Chart colors reference](https://adaptivecards.microsoft.com/?topic=chart-colors-reference). + /// + [JsonPropertyName("colorSet")] + public ChartColorSet? ColorSet { get; set; } + + /// + /// The data to display in the chart. + /// + [JsonPropertyName("data")] + public IList? Data { get; set; } + + /// + /// The area of a Layout.AreaGrid layout in which an element should be displayed. + /// + [JsonPropertyName("grid.area")] + public string? GridArea { get; set; } + + /// + /// An alternate element to render if the type of this one is unsupported or if the host application doesn't support all the capabilities specified in the requires property. + /// + [JsonPropertyName("fallback")] + public IUnion? Fallback { get; set; } + + public PieChart WithId(string value) + { + this.Id = value; + return this; + } + + public PieChart WithRequires(HostCapabilities value) + { + this.Requires = value; + return this; + } + + public PieChart WithLang(string value) + { + this.Lang = value; + return this; + } + + public PieChart WithIsVisible(bool value) + { + this.IsVisible = value; + return this; + } + + public PieChart WithSeparator(bool value) + { + this.Separator = value; + return this; + } + + public PieChart WithHeight(ElementHeight value) + { + this.Height = value; + return this; + } + + public PieChart WithHorizontalAlignment(HorizontalAlignment value) + { + this.HorizontalAlignment = value; + return this; + } + + public PieChart WithSpacing(Spacing value) + { + this.Spacing = value; + return this; + } + + public PieChart WithTargetWidth(TargetWidth value) + { + this.TargetWidth = value; + return this; + } + + public PieChart WithIsSortKey(bool value) + { + this.IsSortKey = value; + return this; + } + + public PieChart WithTitle(string value) + { + this.Title = value; + return this; + } + + public PieChart WithColorSet(ChartColorSet value) + { + this.ColorSet = value; + return this; + } + + public PieChart WithData(params IList value) + { + this.Data = value; + return this; + } + + public PieChart WithGridArea(string value) + { + this.GridArea = value; + return this; + } + + public PieChart WithFallback(IUnion value) + { + this.Fallback = value; + return this; + } +} + +/// +/// A grouped vertical bar chart. +/// +public class GroupedVerticalBarChart : CardElement +{ + /// + /// Must be **Chart.VerticalBar.Grouped**. + /// + [JsonPropertyName("type")] + public string Type { get; } = "Chart.VerticalBar.Grouped"; + + /// + /// A unique identifier for the element or action. Input elements must have an id, otherwise they will not be validated and their values will not be sent to the Bot. + /// + [JsonPropertyName("id")] + public string? Id { get; set; } + + /// + /// A list of capabilities the element requires the host application to support. If the host application doesn't support at least one of the listed capabilities, the element is not rendered (or its fallback is rendered if provided). + /// + [JsonPropertyName("requires")] + public HostCapabilities? Requires { get; set; } + + /// + /// The locale associated with the element. + /// + [JsonPropertyName("lang")] + public string? Lang { get; set; } + + /// + /// Controls the visibility of the element. + /// + [JsonPropertyName("isVisible")] + public bool? IsVisible { get; set; } + + /// + /// Controls whether a separator line should be displayed above the element to visually separate it from the previous element. No separator will be displayed for the first element in a container, even if this property is set to true. + /// + [JsonPropertyName("separator")] + public bool? Separator { get; set; } + + /// + /// The height of the element. When set to stretch, the element will use the remaining vertical space in its container. + /// + [JsonPropertyName("height")] + public ElementHeight? Height { get; set; } + + /// + /// Controls how the element should be horizontally aligned. + /// + [JsonPropertyName("horizontalAlignment")] + public HorizontalAlignment? HorizontalAlignment { get; set; } + + /// + /// Controls the amount of space between this element and the previous one. No space will be added for the first element in a container. + /// + [JsonPropertyName("spacing")] + public Spacing? Spacing { get; set; } + + /// + /// Controls for which card width the element should be displayed. If targetWidth isn't specified, the element is rendered at all card widths. Using targetWidth makes it possible to author responsive cards that adapt their layout to the available horizontal space. For more details, see [Responsive layout](https://adaptivecards.microsoft.com/?topic=responsive-layout). + /// + [JsonPropertyName("targetWidth")] + public TargetWidth? TargetWidth { get; set; } + + /// + /// Controls whether the element should be used as a sort key by elements that allow sorting across a collection of elements. + /// + [JsonPropertyName("isSortKey")] + public bool? IsSortKey { get; set; } + + /// + /// The title of the chart. + /// + [JsonPropertyName("title")] + public string? Title { get; set; } + + /// + /// The name of the set of colors to use to render the chart. See [Chart colors reference](https://adaptivecards.microsoft.com/?topic=chart-colors-reference). + /// + [JsonPropertyName("colorSet")] + public ChartColorSet? ColorSet { get; set; } + + /// + /// The title of the x axis. + /// + [JsonPropertyName("xAxisTitle")] + public string? XAxisTitle { get; set; } + + /// + /// The title of the y axis. + /// + [JsonPropertyName("yAxisTitle")] + public string? YAxisTitle { get; set; } + + /// + /// The color to use for all data points. See [Chart colors reference](https://adaptivecards.microsoft.com/?topic=chart-colors-reference). + /// + [JsonPropertyName("color")] + public ChartColor? Color { get; set; } + + /// + /// Controls if bars in the chart should be displayed as stacked instead of grouped. + /// + [JsonPropertyName("stacked")] + public bool? Stacked { get; set; } + + /// + /// The data points in a series. + /// + [JsonPropertyName("data")] + public IList? Data { get; set; } + + /// + /// Controls if values should be displayed on each bar. + /// + [JsonPropertyName("showBarValues")] + public bool? ShowBarValues { get; set; } + + /// + /// The area of a Layout.AreaGrid layout in which an element should be displayed. + /// + [JsonPropertyName("grid.area")] + public string? GridArea { get; set; } + + /// + /// An alternate element to render if the type of this one is unsupported or if the host application doesn't support all the capabilities specified in the requires property. + /// + [JsonPropertyName("fallback")] + public IUnion? Fallback { get; set; } + + public GroupedVerticalBarChart WithId(string value) + { + this.Id = value; + return this; + } + + public GroupedVerticalBarChart WithRequires(HostCapabilities value) + { + this.Requires = value; + return this; + } + + public GroupedVerticalBarChart WithLang(string value) + { + this.Lang = value; + return this; + } + + public GroupedVerticalBarChart WithIsVisible(bool value) + { + this.IsVisible = value; + return this; + } + + public GroupedVerticalBarChart WithSeparator(bool value) + { + this.Separator = value; + return this; + } + + public GroupedVerticalBarChart WithHeight(ElementHeight value) + { + this.Height = value; + return this; + } + + public GroupedVerticalBarChart WithHorizontalAlignment(HorizontalAlignment value) + { + this.HorizontalAlignment = value; + return this; + } + + public GroupedVerticalBarChart WithSpacing(Spacing value) + { + this.Spacing = value; + return this; + } + + public GroupedVerticalBarChart WithTargetWidth(TargetWidth value) + { + this.TargetWidth = value; + return this; + } + + public GroupedVerticalBarChart WithIsSortKey(bool value) + { + this.IsSortKey = value; + return this; + } + + public GroupedVerticalBarChart WithTitle(string value) + { + this.Title = value; + return this; + } + + public GroupedVerticalBarChart WithColorSet(ChartColorSet value) + { + this.ColorSet = value; + return this; + } + + public GroupedVerticalBarChart WithXAxisTitle(string value) + { + this.XAxisTitle = value; + return this; + } + + public GroupedVerticalBarChart WithYAxisTitle(string value) + { + this.YAxisTitle = value; + return this; + } + + public GroupedVerticalBarChart WithColor(ChartColor value) + { + this.Color = value; + return this; + } + + public GroupedVerticalBarChart WithStacked(bool value) + { + this.Stacked = value; + return this; + } + + public GroupedVerticalBarChart WithData(params IList value) + { + this.Data = value; + return this; + } + + public GroupedVerticalBarChart WithShowBarValues(bool value) + { + this.ShowBarValues = value; + return this; + } + + public GroupedVerticalBarChart WithGridArea(string value) + { + this.GridArea = value; + return this; + } + + public GroupedVerticalBarChart WithFallback(IUnion value) + { + this.Fallback = value; + return this; + } +} + +/// +/// Represents a series of data points. +/// +public class GroupedVerticalBarChartData : SerializableObject +{ + /// + /// The legend of the chart. + /// + [JsonPropertyName("legend")] + public string? Legend { get; set; } + + /// + /// The data points in the series. + /// + [JsonPropertyName("values")] + public IList? Values { get; set; } + + /// + /// The color to use for all data points in the series. See [Chart colors reference](https://adaptivecards.microsoft.com/?topic=chart-colors-reference). + /// + [JsonPropertyName("color")] + public ChartColor? Color { get; set; } + + public GroupedVerticalBarChartData WithLegend(string value) + { + this.Legend = value; + return this; + } + + public GroupedVerticalBarChartData WithValues(params IList value) + { + this.Values = value; + return this; + } + + public GroupedVerticalBarChartData WithColor(ChartColor value) + { + this.Color = value; + return this; + } +} + +/// +/// A single data point in a bar chart. +/// +public class BarChartDataValue : SerializableObject +{ + /// + /// The x axis value of the data point. + /// + [JsonPropertyName("x")] + public string? X { get; set; } + + /// + /// The y axis value of the data point. + /// + [JsonPropertyName("y")] + public float? Y { get; set; } + + public BarChartDataValue WithX(string value) + { + this.X = value; + return this; + } + + public BarChartDataValue WithY(float value) + { + this.Y = value; + return this; + } +} + +/// +/// A vertical bar chart. +/// +public class VerticalBarChart : CardElement +{ + /// + /// Must be **Chart.VerticalBar**. + /// + [JsonPropertyName("type")] + public string Type { get; } = "Chart.VerticalBar"; + + /// + /// A unique identifier for the element or action. Input elements must have an id, otherwise they will not be validated and their values will not be sent to the Bot. + /// + [JsonPropertyName("id")] + public string? Id { get; set; } + + /// + /// A list of capabilities the element requires the host application to support. If the host application doesn't support at least one of the listed capabilities, the element is not rendered (or its fallback is rendered if provided). + /// + [JsonPropertyName("requires")] + public HostCapabilities? Requires { get; set; } + + /// + /// The locale associated with the element. + /// + [JsonPropertyName("lang")] + public string? Lang { get; set; } + + /// + /// Controls the visibility of the element. + /// + [JsonPropertyName("isVisible")] + public bool? IsVisible { get; set; } + + /// + /// Controls whether a separator line should be displayed above the element to visually separate it from the previous element. No separator will be displayed for the first element in a container, even if this property is set to true. + /// + [JsonPropertyName("separator")] + public bool? Separator { get; set; } + + /// + /// The height of the element. When set to stretch, the element will use the remaining vertical space in its container. + /// + [JsonPropertyName("height")] + public ElementHeight? Height { get; set; } + + /// + /// Controls how the element should be horizontally aligned. + /// + [JsonPropertyName("horizontalAlignment")] + public HorizontalAlignment? HorizontalAlignment { get; set; } + + /// + /// Controls the amount of space between this element and the previous one. No space will be added for the first element in a container. + /// + [JsonPropertyName("spacing")] + public Spacing? Spacing { get; set; } + + /// + /// Controls for which card width the element should be displayed. If targetWidth isn't specified, the element is rendered at all card widths. Using targetWidth makes it possible to author responsive cards that adapt their layout to the available horizontal space. For more details, see [Responsive layout](https://adaptivecards.microsoft.com/?topic=responsive-layout). + /// + [JsonPropertyName("targetWidth")] + public TargetWidth? TargetWidth { get; set; } + + /// + /// Controls whether the element should be used as a sort key by elements that allow sorting across a collection of elements. + /// + [JsonPropertyName("isSortKey")] + public bool? IsSortKey { get; set; } + + /// + /// The title of the chart. + /// + [JsonPropertyName("title")] + public string? Title { get; set; } + + /// + /// The name of the set of colors to use to render the chart. See [Chart colors reference](https://adaptivecards.microsoft.com/?topic=chart-colors-reference). + /// + [JsonPropertyName("colorSet")] + public ChartColorSet? ColorSet { get; set; } + + /// + /// The title of the x axis. + /// + [JsonPropertyName("xAxisTitle")] + public string? XAxisTitle { get; set; } + + /// + /// The title of the y axis. + /// + [JsonPropertyName("yAxisTitle")] + public string? YAxisTitle { get; set; } + + /// + /// The data to display in the chart. + /// + [JsonPropertyName("data")] + public IList? Data { get; set; } + + /// + /// The color to use for all data points. See [Chart colors reference](https://adaptivecards.microsoft.com/?topic=chart-colors-reference). + /// + [JsonPropertyName("color")] + public ChartColor? Color { get; set; } + + /// + /// Controls if the bar values should be displayed. + /// + [JsonPropertyName("showBarValues")] + public bool? ShowBarValues { get; set; } + + /// + /// The area of a Layout.AreaGrid layout in which an element should be displayed. + /// + [JsonPropertyName("grid.area")] + public string? GridArea { get; set; } + + /// + /// An alternate element to render if the type of this one is unsupported or if the host application doesn't support all the capabilities specified in the requires property. + /// + [JsonPropertyName("fallback")] + public IUnion? Fallback { get; set; } + + public VerticalBarChart WithId(string value) + { + this.Id = value; + return this; + } + + public VerticalBarChart WithRequires(HostCapabilities value) + { + this.Requires = value; + return this; + } + + public VerticalBarChart WithLang(string value) + { + this.Lang = value; + return this; + } + + public VerticalBarChart WithIsVisible(bool value) + { + this.IsVisible = value; + return this; + } + + public VerticalBarChart WithSeparator(bool value) + { + this.Separator = value; + return this; + } + + public VerticalBarChart WithHeight(ElementHeight value) + { + this.Height = value; + return this; + } + + public VerticalBarChart WithHorizontalAlignment(HorizontalAlignment value) + { + this.HorizontalAlignment = value; + return this; + } + + public VerticalBarChart WithSpacing(Spacing value) + { + this.Spacing = value; + return this; + } + + public VerticalBarChart WithTargetWidth(TargetWidth value) + { + this.TargetWidth = value; + return this; + } + + public VerticalBarChart WithIsSortKey(bool value) + { + this.IsSortKey = value; + return this; + } + + public VerticalBarChart WithTitle(string value) + { + this.Title = value; + return this; + } + + public VerticalBarChart WithColorSet(ChartColorSet value) + { + this.ColorSet = value; + return this; + } + + public VerticalBarChart WithXAxisTitle(string value) + { + this.XAxisTitle = value; + return this; + } + + public VerticalBarChart WithYAxisTitle(string value) + { + this.YAxisTitle = value; + return this; + } + + public VerticalBarChart WithData(params IList value) + { + this.Data = value; + return this; + } + + public VerticalBarChart WithColor(ChartColor value) + { + this.Color = value; + return this; + } + + public VerticalBarChart WithShowBarValues(bool value) + { + this.ShowBarValues = value; + return this; + } + + public VerticalBarChart WithGridArea(string value) + { + this.GridArea = value; + return this; + } + + public VerticalBarChart WithFallback(IUnion value) + { + this.Fallback = value; + return this; + } +} + +/// +/// Represents a data point in a vertical bar chart. +/// +public class VerticalBarChartDataValue : SerializableObject +{ + /// + /// The x axis value of the data point. + /// + [JsonPropertyName("x")] + public IUnion? X { get; set; } + + /// + /// The y axis value of the data point. + /// + [JsonPropertyName("y")] + public float? Y { get; set; } + + /// + /// The color to use for the bar associated with the data point. See [Chart colors reference](https://adaptivecards.microsoft.com/?topic=chart-colors-reference). + /// + [JsonPropertyName("color")] + public ChartColor? Color { get; set; } + + public VerticalBarChartDataValue WithX(IUnion value) + { + this.X = value; + return this; + } + + public VerticalBarChartDataValue WithY(float value) + { + this.Y = value; + return this; + } + + public VerticalBarChartDataValue WithColor(ChartColor value) + { + this.Color = value; + return this; + } +} + +/// +/// A horizontal bar chart. +/// +public class HorizontalBarChart : CardElement +{ + /// + /// Must be **Chart.HorizontalBar**. + /// + [JsonPropertyName("type")] + public string Type { get; } = "Chart.HorizontalBar"; + + /// + /// A unique identifier for the element or action. Input elements must have an id, otherwise they will not be validated and their values will not be sent to the Bot. + /// + [JsonPropertyName("id")] + public string? Id { get; set; } + + /// + /// A list of capabilities the element requires the host application to support. If the host application doesn't support at least one of the listed capabilities, the element is not rendered (or its fallback is rendered if provided). + /// + [JsonPropertyName("requires")] + public HostCapabilities? Requires { get; set; } + + /// + /// The locale associated with the element. + /// + [JsonPropertyName("lang")] + public string? Lang { get; set; } + + /// + /// Controls the visibility of the element. + /// + [JsonPropertyName("isVisible")] + public bool? IsVisible { get; set; } + + /// + /// Controls whether a separator line should be displayed above the element to visually separate it from the previous element. No separator will be displayed for the first element in a container, even if this property is set to true. + /// + [JsonPropertyName("separator")] + public bool? Separator { get; set; } + + /// + /// The height of the element. When set to stretch, the element will use the remaining vertical space in its container. + /// + [JsonPropertyName("height")] + public ElementHeight? Height { get; set; } + + /// + /// Controls how the element should be horizontally aligned. + /// + [JsonPropertyName("horizontalAlignment")] + public HorizontalAlignment? HorizontalAlignment { get; set; } + + /// + /// Controls the amount of space between this element and the previous one. No space will be added for the first element in a container. + /// + [JsonPropertyName("spacing")] + public Spacing? Spacing { get; set; } + + /// + /// Controls for which card width the element should be displayed. If targetWidth isn't specified, the element is rendered at all card widths. Using targetWidth makes it possible to author responsive cards that adapt their layout to the available horizontal space. For more details, see [Responsive layout](https://adaptivecards.microsoft.com/?topic=responsive-layout). + /// + [JsonPropertyName("targetWidth")] + public TargetWidth? TargetWidth { get; set; } + + /// + /// Controls whether the element should be used as a sort key by elements that allow sorting across a collection of elements. + /// + [JsonPropertyName("isSortKey")] + public bool? IsSortKey { get; set; } + + /// + /// The title of the chart. + /// + [JsonPropertyName("title")] + public string? Title { get; set; } + + /// + /// The name of the set of colors to use to render the chart. See [Chart colors reference](https://adaptivecards.microsoft.com/?topic=chart-colors-reference). + /// + [JsonPropertyName("colorSet")] + public ChartColorSet? ColorSet { get; set; } + + /// + /// The title of the x axis. + /// + [JsonPropertyName("xAxisTitle")] + public string? XAxisTitle { get; set; } + + /// + /// The title of the y axis. + /// + [JsonPropertyName("yAxisTitle")] + public string? YAxisTitle { get; set; } + + /// + /// The color to use for all data points. See [Chart colors reference](https://adaptivecards.microsoft.com/?topic=chart-colors-reference). + /// + [JsonPropertyName("color")] + public ChartColor? Color { get; set; } + + /// + /// The data points in the chart. + /// + [JsonPropertyName("data")] + public IList? Data { get; set; } + + /// + /// Controls how the chart should be visually laid out. + /// + [JsonPropertyName("displayMode")] + public HorizontalBarChartDisplayMode? DisplayMode { get; set; } + + /// + /// The area of a Layout.AreaGrid layout in which an element should be displayed. + /// + [JsonPropertyName("grid.area")] + public string? GridArea { get; set; } + + /// + /// An alternate element to render if the type of this one is unsupported or if the host application doesn't support all the capabilities specified in the requires property. + /// + [JsonPropertyName("fallback")] + public IUnion? Fallback { get; set; } + + public HorizontalBarChart WithId(string value) + { + this.Id = value; + return this; + } + + public HorizontalBarChart WithRequires(HostCapabilities value) + { + this.Requires = value; + return this; + } + + public HorizontalBarChart WithLang(string value) + { + this.Lang = value; + return this; + } + + public HorizontalBarChart WithIsVisible(bool value) + { + this.IsVisible = value; + return this; + } + + public HorizontalBarChart WithSeparator(bool value) + { + this.Separator = value; + return this; + } + + public HorizontalBarChart WithHeight(ElementHeight value) + { + this.Height = value; + return this; + } + + public HorizontalBarChart WithHorizontalAlignment(HorizontalAlignment value) + { + this.HorizontalAlignment = value; + return this; + } + + public HorizontalBarChart WithSpacing(Spacing value) + { + this.Spacing = value; + return this; + } + + public HorizontalBarChart WithTargetWidth(TargetWidth value) + { + this.TargetWidth = value; + return this; + } + + public HorizontalBarChart WithIsSortKey(bool value) + { + this.IsSortKey = value; + return this; + } + + public HorizontalBarChart WithTitle(string value) + { + this.Title = value; + return this; + } + + public HorizontalBarChart WithColorSet(ChartColorSet value) + { + this.ColorSet = value; + return this; + } + + public HorizontalBarChart WithXAxisTitle(string value) + { + this.XAxisTitle = value; + return this; + } + + public HorizontalBarChart WithYAxisTitle(string value) + { + this.YAxisTitle = value; + return this; + } + + public HorizontalBarChart WithColor(ChartColor value) + { + this.Color = value; + return this; + } + + public HorizontalBarChart WithData(params IList value) + { + this.Data = value; + return this; + } + + public HorizontalBarChart WithDisplayMode(HorizontalBarChartDisplayMode value) + { + this.DisplayMode = value; + return this; + } + + public HorizontalBarChart WithGridArea(string value) + { + this.GridArea = value; + return this; + } + + public HorizontalBarChart WithFallback(IUnion value) + { + this.Fallback = value; + return this; + } +} + +/// +/// Represents a single data point in a horizontal bar chart. +/// +public class HorizontalBarChartDataValue : SerializableObject +{ + /// + /// The x axis value of the data point. + /// + [JsonPropertyName("x")] + public string? X { get; set; } + + /// + /// The y axis value of the data point. + /// + [JsonPropertyName("y")] + public float? Y { get; set; } + + /// + /// The color of the bar associated with the data point. See [Chart colors reference](https://adaptivecards.microsoft.com/?topic=chart-colors-reference). + /// + [JsonPropertyName("color")] + public ChartColor? Color { get; set; } + + public HorizontalBarChartDataValue WithX(string value) + { + this.X = value; + return this; + } + + public HorizontalBarChartDataValue WithY(float value) + { + this.Y = value; + return this; + } + + public HorizontalBarChartDataValue WithColor(ChartColor value) + { + this.Color = value; + return this; + } +} + +/// +/// A stacked horizontal bar chart. +/// +public class StackedHorizontalBarChart : CardElement +{ + /// + /// Must be **Chart.HorizontalBar.Stacked**. + /// + [JsonPropertyName("type")] + public string Type { get; } = "Chart.HorizontalBar.Stacked"; + + /// + /// A unique identifier for the element or action. Input elements must have an id, otherwise they will not be validated and their values will not be sent to the Bot. + /// + [JsonPropertyName("id")] + public string? Id { get; set; } + + /// + /// A list of capabilities the element requires the host application to support. If the host application doesn't support at least one of the listed capabilities, the element is not rendered (or its fallback is rendered if provided). + /// + [JsonPropertyName("requires")] + public HostCapabilities? Requires { get; set; } + + /// + /// The locale associated with the element. + /// + [JsonPropertyName("lang")] + public string? Lang { get; set; } + + /// + /// Controls the visibility of the element. + /// + [JsonPropertyName("isVisible")] + public bool? IsVisible { get; set; } + + /// + /// Controls whether a separator line should be displayed above the element to visually separate it from the previous element. No separator will be displayed for the first element in a container, even if this property is set to true. + /// + [JsonPropertyName("separator")] + public bool? Separator { get; set; } + + /// + /// The height of the element. When set to stretch, the element will use the remaining vertical space in its container. + /// + [JsonPropertyName("height")] + public ElementHeight? Height { get; set; } + + /// + /// Controls how the element should be horizontally aligned. + /// + [JsonPropertyName("horizontalAlignment")] + public HorizontalAlignment? HorizontalAlignment { get; set; } + + /// + /// Controls the amount of space between this element and the previous one. No space will be added for the first element in a container. + /// + [JsonPropertyName("spacing")] + public Spacing? Spacing { get; set; } + + /// + /// Controls for which card width the element should be displayed. If targetWidth isn't specified, the element is rendered at all card widths. Using targetWidth makes it possible to author responsive cards that adapt their layout to the available horizontal space. For more details, see [Responsive layout](https://adaptivecards.microsoft.com/?topic=responsive-layout). + /// + [JsonPropertyName("targetWidth")] + public TargetWidth? TargetWidth { get; set; } + + /// + /// Controls whether the element should be used as a sort key by elements that allow sorting across a collection of elements. + /// + [JsonPropertyName("isSortKey")] + public bool? IsSortKey { get; set; } + + /// + /// The title of the chart. + /// + [JsonPropertyName("title")] + public string? Title { get; set; } + + /// + /// The name of the set of colors to use to render the chart. See [Chart colors reference](https://adaptivecards.microsoft.com/?topic=chart-colors-reference). + /// + [JsonPropertyName("colorSet")] + public ChartColorSet? ColorSet { get; set; } + + /// + /// The title of the x axis. + /// + [JsonPropertyName("xAxisTitle")] + public string? XAxisTitle { get; set; } + + /// + /// The title of the y axis. + /// + [JsonPropertyName("yAxisTitle")] + public string? YAxisTitle { get; set; } + + /// + /// The color to use for all data points. See [Chart colors reference](https://adaptivecards.microsoft.com/?topic=chart-colors-reference). + /// + [JsonPropertyName("color")] + public ChartColor? Color { get; set; } + + /// + /// The data to display in the chart. + /// + [JsonPropertyName("data")] + public IList? Data { get; set; } + + /// + /// The area of a Layout.AreaGrid layout in which an element should be displayed. + /// + [JsonPropertyName("grid.area")] + public string? GridArea { get; set; } + + /// + /// An alternate element to render if the type of this one is unsupported or if the host application doesn't support all the capabilities specified in the requires property. + /// + [JsonPropertyName("fallback")] + public IUnion? Fallback { get; set; } + + public StackedHorizontalBarChart WithId(string value) + { + this.Id = value; + return this; + } + + public StackedHorizontalBarChart WithRequires(HostCapabilities value) + { + this.Requires = value; + return this; + } + + public StackedHorizontalBarChart WithLang(string value) + { + this.Lang = value; + return this; + } + + public StackedHorizontalBarChart WithIsVisible(bool value) + { + this.IsVisible = value; + return this; + } + + public StackedHorizontalBarChart WithSeparator(bool value) + { + this.Separator = value; + return this; + } + + public StackedHorizontalBarChart WithHeight(ElementHeight value) + { + this.Height = value; + return this; + } + + public StackedHorizontalBarChart WithHorizontalAlignment(HorizontalAlignment value) + { + this.HorizontalAlignment = value; + return this; + } + + public StackedHorizontalBarChart WithSpacing(Spacing value) + { + this.Spacing = value; + return this; + } + + public StackedHorizontalBarChart WithTargetWidth(TargetWidth value) + { + this.TargetWidth = value; + return this; + } + + public StackedHorizontalBarChart WithIsSortKey(bool value) + { + this.IsSortKey = value; + return this; + } + + public StackedHorizontalBarChart WithTitle(string value) + { + this.Title = value; + return this; + } + + public StackedHorizontalBarChart WithColorSet(ChartColorSet value) + { + this.ColorSet = value; + return this; + } + + public StackedHorizontalBarChart WithXAxisTitle(string value) + { + this.XAxisTitle = value; + return this; + } + + public StackedHorizontalBarChart WithYAxisTitle(string value) + { + this.YAxisTitle = value; + return this; + } + + public StackedHorizontalBarChart WithColor(ChartColor value) + { + this.Color = value; + return this; + } + + public StackedHorizontalBarChart WithData(params IList value) + { + this.Data = value; + return this; + } + + public StackedHorizontalBarChart WithGridArea(string value) + { + this.GridArea = value; + return this; + } + + public StackedHorizontalBarChart WithFallback(IUnion value) + { + this.Fallback = value; + return this; + } +} + +/// +/// Defines the collection of data series to display in as a stacked horizontal bar chart. +/// +public class StackedHorizontalBarChartData : SerializableObject +{ + /// + /// The title of the series. + /// + [JsonPropertyName("title")] + public string? Title { get; set; } + + /// + /// The data points in the series. + /// + [JsonPropertyName("data")] + public IList? Data { get; set; } + + public StackedHorizontalBarChartData WithTitle(string value) + { + this.Title = value; + return this; + } + + public StackedHorizontalBarChartData WithData(params IList value) + { + this.Data = value; + return this; + } +} + +/// +/// A data point in a series. +/// +public class StackedHorizontalBarChartDataPoint : SerializableObject +{ + /// + /// The legend associated with the data point. + /// + [JsonPropertyName("legend")] + public string? Legend { get; set; } + + /// + /// The value of the data point. + /// + [JsonPropertyName("value")] + public float? Value { get; set; } + + /// + /// The color to use to render the bar associated with the data point. See [Chart colors reference](https://adaptivecards.microsoft.com/?topic=chart-colors-reference). + /// + [JsonPropertyName("color")] + public ChartColor? Color { get; set; } + + public StackedHorizontalBarChartDataPoint WithLegend(string value) + { + this.Legend = value; + return this; + } + + public StackedHorizontalBarChartDataPoint WithValue(float value) + { + this.Value = value; + return this; + } + + public StackedHorizontalBarChartDataPoint WithColor(ChartColor value) + { + this.Color = value; + return this; + } +} + +/// +/// A line chart. +/// +public class LineChart : CardElement +{ + /// + /// Must be **Chart.Line**. + /// + [JsonPropertyName("type")] + public string Type { get; } = "Chart.Line"; + + /// + /// A unique identifier for the element or action. Input elements must have an id, otherwise they will not be validated and their values will not be sent to the Bot. + /// + [JsonPropertyName("id")] + public string? Id { get; set; } + + /// + /// A list of capabilities the element requires the host application to support. If the host application doesn't support at least one of the listed capabilities, the element is not rendered (or its fallback is rendered if provided). + /// + [JsonPropertyName("requires")] + public HostCapabilities? Requires { get; set; } + + /// + /// The locale associated with the element. + /// + [JsonPropertyName("lang")] + public string? Lang { get; set; } + + /// + /// Controls the visibility of the element. + /// + [JsonPropertyName("isVisible")] + public bool? IsVisible { get; set; } + + /// + /// Controls whether a separator line should be displayed above the element to visually separate it from the previous element. No separator will be displayed for the first element in a container, even if this property is set to true. + /// + [JsonPropertyName("separator")] + public bool? Separator { get; set; } + + /// + /// The height of the element. When set to stretch, the element will use the remaining vertical space in its container. + /// + [JsonPropertyName("height")] + public ElementHeight? Height { get; set; } + + /// + /// Controls how the element should be horizontally aligned. + /// + [JsonPropertyName("horizontalAlignment")] + public HorizontalAlignment? HorizontalAlignment { get; set; } + + /// + /// Controls the amount of space between this element and the previous one. No space will be added for the first element in a container. + /// + [JsonPropertyName("spacing")] + public Spacing? Spacing { get; set; } + + /// + /// Controls for which card width the element should be displayed. If targetWidth isn't specified, the element is rendered at all card widths. Using targetWidth makes it possible to author responsive cards that adapt their layout to the available horizontal space. For more details, see [Responsive layout](https://adaptivecards.microsoft.com/?topic=responsive-layout). + /// + [JsonPropertyName("targetWidth")] + public TargetWidth? TargetWidth { get; set; } + + /// + /// Controls whether the element should be used as a sort key by elements that allow sorting across a collection of elements. + /// + [JsonPropertyName("isSortKey")] + public bool? IsSortKey { get; set; } + + /// + /// The title of the chart. + /// + [JsonPropertyName("title")] + public string? Title { get; set; } + + /// + /// The name of the set of colors to use to render the chart. See [Chart colors reference](https://adaptivecards.microsoft.com/?topic=chart-colors-reference). + /// + [JsonPropertyName("colorSet")] + public ChartColorSet? ColorSet { get; set; } + + /// + /// The title of the x axis. + /// + [JsonPropertyName("xAxisTitle")] + public string? XAxisTitle { get; set; } + + /// + /// The title of the y axis. + /// + [JsonPropertyName("yAxisTitle")] + public string? YAxisTitle { get; set; } + + /// + /// The color to use for all data points. See [Chart colors reference](https://adaptivecards.microsoft.com/?topic=chart-colors-reference). + /// + [JsonPropertyName("color")] + public ChartColor? Color { get; set; } + + /// + /// The data point series in the line chart. + /// + [JsonPropertyName("data")] + public IList? Data { get; set; } + + /// + /// The area of a Layout.AreaGrid layout in which an element should be displayed. + /// + [JsonPropertyName("grid.area")] + public string? GridArea { get; set; } + + /// + /// An alternate element to render if the type of this one is unsupported or if the host application doesn't support all the capabilities specified in the requires property. + /// + [JsonPropertyName("fallback")] + public IUnion? Fallback { get; set; } + + public LineChart WithId(string value) + { + this.Id = value; + return this; + } + + public LineChart WithRequires(HostCapabilities value) + { + this.Requires = value; + return this; + } + + public LineChart WithLang(string value) + { + this.Lang = value; + return this; + } + + public LineChart WithIsVisible(bool value) + { + this.IsVisible = value; + return this; + } + + public LineChart WithSeparator(bool value) + { + this.Separator = value; + return this; + } + + public LineChart WithHeight(ElementHeight value) + { + this.Height = value; + return this; + } + + public LineChart WithHorizontalAlignment(HorizontalAlignment value) + { + this.HorizontalAlignment = value; + return this; + } + + public LineChart WithSpacing(Spacing value) + { + this.Spacing = value; + return this; + } + + public LineChart WithTargetWidth(TargetWidth value) + { + this.TargetWidth = value; + return this; + } + + public LineChart WithIsSortKey(bool value) + { + this.IsSortKey = value; + return this; + } + + public LineChart WithTitle(string value) + { + this.Title = value; + return this; + } + + public LineChart WithColorSet(ChartColorSet value) + { + this.ColorSet = value; + return this; + } + + public LineChart WithXAxisTitle(string value) + { + this.XAxisTitle = value; + return this; + } + + public LineChart WithYAxisTitle(string value) + { + this.YAxisTitle = value; + return this; + } + + public LineChart WithColor(ChartColor value) + { + this.Color = value; + return this; + } + + public LineChart WithData(params IList value) + { + this.Data = value; + return this; + } + + public LineChart WithGridArea(string value) + { + this.GridArea = value; + return this; + } + + public LineChart WithFallback(IUnion value) + { + this.Fallback = value; + return this; + } +} + +/// +/// Represents a collection of data points series in a line chart. +/// +public class LineChartData : SerializableObject +{ + /// + /// The legend of the chart. + /// + [JsonPropertyName("legend")] + public string? Legend { get; set; } + + /// + /// The data points in the series. + /// + [JsonPropertyName("values")] + public IList? Values { get; set; } + + /// + /// The color all data points in the series. See [Chart colors reference](https://adaptivecards.microsoft.com/?topic=chart-colors-reference). + /// + [JsonPropertyName("color")] + public ChartColor? Color { get; set; } + + public LineChartData WithLegend(string value) + { + this.Legend = value; + return this; + } + + public LineChartData WithValues(params IList value) + { + this.Values = value; + return this; + } + + public LineChartData WithColor(ChartColor value) + { + this.Color = value; + return this; + } +} + +/// +/// Represents a single data point in a line chart. +/// +public class LineChartValue : SerializableObject +{ + /// + /// The x axis value of the data point. + /// + /// If all x values of the x [Chart.Line](https://adaptivecards.microsoft.com/?topic=Chart.Line) are expressed as a number, or if all x values are expressed as a date string in the `YYYY-MM-DD` format, the chart will be rendered as a time series chart, i.e. x axis values will span across the minimum x value to maximum x value range. + /// + /// Otherwise, if x values are represented as a mix of numbers and strings or if at least one x value isn't in the `YYYY-MM-DD` format, the chart will be rendered as a categorical chart, i.e. x axis values will be displayed as categories. + /// + [JsonPropertyName("x")] + public IUnion? X { get; set; } + + /// + /// The y axis value of the data point. + /// + [JsonPropertyName("y")] + public float? Y { get; set; } + + public LineChartValue WithX(IUnion value) + { + this.X = value; + return this; + } + + public LineChartValue WithY(float value) + { + this.Y = value; + return this; + } +} + +/// +/// A gauge chart. +/// +public class GaugeChart : CardElement +{ + /// + /// Must be **Chart.Gauge**. + /// + [JsonPropertyName("type")] + public string Type { get; } = "Chart.Gauge"; + + /// + /// A unique identifier for the element or action. Input elements must have an id, otherwise they will not be validated and their values will not be sent to the Bot. + /// + [JsonPropertyName("id")] + public string? Id { get; set; } + + /// + /// A list of capabilities the element requires the host application to support. If the host application doesn't support at least one of the listed capabilities, the element is not rendered (or its fallback is rendered if provided). + /// + [JsonPropertyName("requires")] + public HostCapabilities? Requires { get; set; } + + /// + /// The locale associated with the element. + /// + [JsonPropertyName("lang")] + public string? Lang { get; set; } + + /// + /// Controls the visibility of the element. + /// + [JsonPropertyName("isVisible")] + public bool? IsVisible { get; set; } + + /// + /// Controls whether a separator line should be displayed above the element to visually separate it from the previous element. No separator will be displayed for the first element in a container, even if this property is set to true. + /// + [JsonPropertyName("separator")] + public bool? Separator { get; set; } + + /// + /// The height of the element. When set to stretch, the element will use the remaining vertical space in its container. + /// + [JsonPropertyName("height")] + public ElementHeight? Height { get; set; } + + /// + /// Controls how the element should be horizontally aligned. + /// + [JsonPropertyName("horizontalAlignment")] + public HorizontalAlignment? HorizontalAlignment { get; set; } + + /// + /// Controls the amount of space between this element and the previous one. No space will be added for the first element in a container. + /// + [JsonPropertyName("spacing")] + public Spacing? Spacing { get; set; } + + /// + /// Controls for which card width the element should be displayed. If targetWidth isn't specified, the element is rendered at all card widths. Using targetWidth makes it possible to author responsive cards that adapt their layout to the available horizontal space. For more details, see [Responsive layout](https://adaptivecards.microsoft.com/?topic=responsive-layout). + /// + [JsonPropertyName("targetWidth")] + public TargetWidth? TargetWidth { get; set; } + + /// + /// Controls whether the element should be used as a sort key by elements that allow sorting across a collection of elements. + /// + [JsonPropertyName("isSortKey")] + public bool? IsSortKey { get; set; } + + /// + /// The title of the chart. + /// + [JsonPropertyName("title")] + public string? Title { get; set; } + + /// + /// The name of the set of colors to use to render the chart. See [Chart colors reference](https://adaptivecards.microsoft.com/?topic=chart-colors-reference). + /// + [JsonPropertyName("colorSet")] + public ChartColorSet? ColorSet { get; set; } + + /// + /// The minimum value of the gauge. + /// + [JsonPropertyName("min")] + public float? Min { get; set; } + + /// + /// The maximum value of the gauge. + /// + [JsonPropertyName("max")] + public float? Max { get; set; } + + /// + /// The sub-label of the gauge. + /// + [JsonPropertyName("subLabel")] + public string? SubLabel { get; set; } + + /// + /// Controls if the min/max values should be displayed. + /// + [JsonPropertyName("showMinMax")] + public bool? ShowMinMax { get; set; } + + /// + /// Controls if the legend should be displayed. + /// + [JsonPropertyName("showLegend")] + public bool? ShowLegend { get; set; } + + /// + /// The segments to display in the gauge. + /// + [JsonPropertyName("segments")] + public IList? Segments { get; set; } + + /// + /// The value of the gauge. + /// + [JsonPropertyName("value")] + public float? Value { get; set; } + + /// + /// The format used to display the gauge's value. + /// + [JsonPropertyName("valueFormat")] + public GaugeChartValueFormat? ValueFormat { get; set; } + + /// + /// The area of a Layout.AreaGrid layout in which an element should be displayed. + /// + [JsonPropertyName("grid.area")] + public string? GridArea { get; set; } + + /// + /// An alternate element to render if the type of this one is unsupported or if the host application doesn't support all the capabilities specified in the requires property. + /// + [JsonPropertyName("fallback")] + public IUnion? Fallback { get; set; } + + public GaugeChart WithId(string value) + { + this.Id = value; + return this; + } + + public GaugeChart WithRequires(HostCapabilities value) + { + this.Requires = value; + return this; + } + + public GaugeChart WithLang(string value) + { + this.Lang = value; + return this; + } + + public GaugeChart WithIsVisible(bool value) + { + this.IsVisible = value; + return this; + } + + public GaugeChart WithSeparator(bool value) + { + this.Separator = value; + return this; + } + + public GaugeChart WithHeight(ElementHeight value) + { + this.Height = value; + return this; + } + + public GaugeChart WithHorizontalAlignment(HorizontalAlignment value) + { + this.HorizontalAlignment = value; + return this; + } + + public GaugeChart WithSpacing(Spacing value) + { + this.Spacing = value; + return this; + } + + public GaugeChart WithTargetWidth(TargetWidth value) + { + this.TargetWidth = value; + return this; + } + + public GaugeChart WithIsSortKey(bool value) + { + this.IsSortKey = value; + return this; + } + + public GaugeChart WithTitle(string value) + { + this.Title = value; + return this; + } + + public GaugeChart WithColorSet(ChartColorSet value) + { + this.ColorSet = value; + return this; + } + + public GaugeChart WithMin(float value) + { + this.Min = value; + return this; + } + + public GaugeChart WithMax(float value) + { + this.Max = value; + return this; + } + + public GaugeChart WithSubLabel(string value) + { + this.SubLabel = value; + return this; + } + + public GaugeChart WithShowMinMax(bool value) + { + this.ShowMinMax = value; + return this; + } + + public GaugeChart WithShowLegend(bool value) + { + this.ShowLegend = value; + return this; + } + + public GaugeChart WithSegments(params IList value) + { + this.Segments = value; + return this; + } + + public GaugeChart WithValue(float value) + { + this.Value = value; + return this; + } + + public GaugeChart WithValueFormat(GaugeChartValueFormat value) + { + this.ValueFormat = value; + return this; + } + + public GaugeChart WithGridArea(string value) + { + this.GridArea = value; + return this; + } + + public GaugeChart WithFallback(IUnion value) + { + this.Fallback = value; + return this; + } +} + +/// +/// The legend of the chart. +/// +public class GaugeChartLegend : SerializableObject +{ + /// + /// The size of the segment. + /// + [JsonPropertyName("size")] + public float? Size { get; set; } + + /// + /// The legend text associated with the segment. + /// + [JsonPropertyName("legend")] + public string? Legend { get; set; } + + /// + /// The color to use for the segment. See [Chart colors reference](https://adaptivecards.microsoft.com/?topic=chart-colors-reference). + /// + [JsonPropertyName("color")] + public ChartColor? Color { get; set; } + + public GaugeChartLegend WithSize(float value) + { + this.Size = value; + return this; + } + + public GaugeChartLegend WithLegend(string value) + { + this.Legend = value; + return this; + } + + public GaugeChartLegend WithColor(ChartColor value) + { + this.Color = value; + return this; + } +} + +/// +/// A formatted and syntax-colored code block. +/// +public class CodeBlock : CardElement +{ + /// + /// Must be **CodeBlock**. + /// + [JsonPropertyName("type")] + public string Type { get; } = "CodeBlock"; + + /// + /// A unique identifier for the element or action. Input elements must have an id, otherwise they will not be validated and their values will not be sent to the Bot. + /// + [JsonPropertyName("id")] + public string? Id { get; set; } + + /// + /// A list of capabilities the element requires the host application to support. If the host application doesn't support at least one of the listed capabilities, the element is not rendered (or its fallback is rendered if provided). + /// + [JsonPropertyName("requires")] + public HostCapabilities? Requires { get; set; } + + /// + /// The locale associated with the element. + /// + [JsonPropertyName("lang")] + public string? Lang { get; set; } + + /// + /// Controls the visibility of the element. + /// + [JsonPropertyName("isVisible")] + public bool? IsVisible { get; set; } + + /// + /// Controls whether a separator line should be displayed above the element to visually separate it from the previous element. No separator will be displayed for the first element in a container, even if this property is set to true. + /// + [JsonPropertyName("separator")] + public bool? Separator { get; set; } + + /// + /// The height of the element. When set to stretch, the element will use the remaining vertical space in its container. + /// + [JsonPropertyName("height")] + public ElementHeight? Height { get; set; } + + /// + /// Controls how the element should be horizontally aligned. + /// + [JsonPropertyName("horizontalAlignment")] + public HorizontalAlignment? HorizontalAlignment { get; set; } + + /// + /// Controls the amount of space between this element and the previous one. No space will be added for the first element in a container. + /// + [JsonPropertyName("spacing")] + public Spacing? Spacing { get; set; } + + /// + /// Controls for which card width the element should be displayed. If targetWidth isn't specified, the element is rendered at all card widths. Using targetWidth makes it possible to author responsive cards that adapt their layout to the available horizontal space. For more details, see [Responsive layout](https://adaptivecards.microsoft.com/?topic=responsive-layout). + /// + [JsonPropertyName("targetWidth")] + public TargetWidth? TargetWidth { get; set; } + + /// + /// Controls whether the element should be used as a sort key by elements that allow sorting across a collection of elements. + /// + [JsonPropertyName("isSortKey")] + public bool? IsSortKey { get; set; } + + /// + /// The code snippet to display. + /// + [JsonPropertyName("codeSnippet")] + public string? CodeSnippet { get; set; } + + /// + /// The language the code snippet is expressed in. + /// + [JsonPropertyName("language")] + public CodeLanguage? Language { get; set; } + + /// + /// A number that represents the line in the file from where the code snippet was extracted. + /// + [JsonPropertyName("startLineNumber")] + public float? StartLineNumber { get; set; } + + /// + /// The area of a Layout.AreaGrid layout in which an element should be displayed. + /// + [JsonPropertyName("grid.area")] + public string? GridArea { get; set; } + + /// + /// An alternate element to render if the type of this one is unsupported or if the host application doesn't support all the capabilities specified in the requires property. + /// + [JsonPropertyName("fallback")] + public IUnion? Fallback { get; set; } + + public CodeBlock WithId(string value) + { + this.Id = value; + return this; + } + + public CodeBlock WithRequires(HostCapabilities value) + { + this.Requires = value; + return this; + } + + public CodeBlock WithLang(string value) + { + this.Lang = value; + return this; + } + + public CodeBlock WithIsVisible(bool value) + { + this.IsVisible = value; + return this; + } + + public CodeBlock WithSeparator(bool value) + { + this.Separator = value; + return this; + } + + public CodeBlock WithHeight(ElementHeight value) + { + this.Height = value; + return this; + } + + public CodeBlock WithHorizontalAlignment(HorizontalAlignment value) + { + this.HorizontalAlignment = value; + return this; + } + + public CodeBlock WithSpacing(Spacing value) + { + this.Spacing = value; + return this; + } + + public CodeBlock WithTargetWidth(TargetWidth value) + { + this.TargetWidth = value; + return this; + } + + public CodeBlock WithIsSortKey(bool value) + { + this.IsSortKey = value; + return this; + } + + public CodeBlock WithCodeSnippet(string value) + { + this.CodeSnippet = value; + return this; + } + + public CodeBlock WithLanguage(CodeLanguage value) + { + this.Language = value; + return this; + } + + public CodeBlock WithStartLineNumber(float value) + { + this.StartLineNumber = value; + return this; + } + + public CodeBlock WithGridArea(string value) + { + this.GridArea = value; + return this; + } + + public CodeBlock WithFallback(IUnion value) + { + this.Fallback = value; + return this; + } +} + +/// +/// Displays a user's information, including their profile picture. +/// +public class ComUserMicrosoftGraphComponent : CardElement +{ + /// + /// Must be **Component**. + /// + [JsonPropertyName("type")] + public string Type { get; } = "Component"; + + /// + /// A unique identifier for the element or action. Input elements must have an id, otherwise they will not be validated and their values will not be sent to the Bot. + /// + [JsonPropertyName("id")] + public string? Id { get; set; } + + /// + /// A list of capabilities the element requires the host application to support. If the host application doesn't support at least one of the listed capabilities, the element is not rendered (or its fallback is rendered if provided). + /// + [JsonPropertyName("requires")] + public HostCapabilities? Requires { get; set; } + + /// + /// The locale associated with the element. + /// + [JsonPropertyName("lang")] + public string? Lang { get; set; } + + /// + /// Controls the visibility of the element. + /// + [JsonPropertyName("isVisible")] + public bool? IsVisible { get; set; } + + /// + /// Controls whether a separator line should be displayed above the element to visually separate it from the previous element. No separator will be displayed for the first element in a container, even if this property is set to true. + /// + [JsonPropertyName("separator")] + public bool? Separator { get; set; } + + /// + /// The height of the element. When set to stretch, the element will use the remaining vertical space in its container. + /// + [JsonPropertyName("height")] + public ElementHeight? Height { get; set; } + + /// + /// Controls how the element should be horizontally aligned. + /// + [JsonPropertyName("horizontalAlignment")] + public HorizontalAlignment? HorizontalAlignment { get; set; } + + /// + /// Controls the amount of space between this element and the previous one. No space will be added for the first element in a container. + /// + [JsonPropertyName("spacing")] + public Spacing? Spacing { get; set; } + + /// + /// Controls for which card width the element should be displayed. If targetWidth isn't specified, the element is rendered at all card widths. Using targetWidth makes it possible to author responsive cards that adapt their layout to the available horizontal space. For more details, see [Responsive layout](https://adaptivecards.microsoft.com/?topic=responsive-layout). + /// + [JsonPropertyName("targetWidth")] + public TargetWidth? TargetWidth { get; set; } + + /// + /// Controls whether the element should be used as a sort key by elements that allow sorting across a collection of elements. + /// + [JsonPropertyName("isSortKey")] + public bool? IsSortKey { get; set; } + + /// + /// Must be **graph.microsoft.com/user**. + /// + [JsonPropertyName("name")] + public string Name { get; } = "graph.microsoft.com/user"; + + /// + /// The properties of the user. + /// + [JsonPropertyName("properties")] + public PersonaProperties? Properties { get; set; } + + /// + /// The area of a Layout.AreaGrid layout in which an element should be displayed. + /// + [JsonPropertyName("grid.area")] + public string? GridArea { get; set; } + + /// + /// An alternate element to render if the type of this one is unsupported or if the host application doesn't support all the capabilities specified in the requires property. + /// + [JsonPropertyName("fallback")] + public IUnion? Fallback { get; set; } + + public ComUserMicrosoftGraphComponent WithId(string value) + { + this.Id = value; + return this; + } + + public ComUserMicrosoftGraphComponent WithRequires(HostCapabilities value) + { + this.Requires = value; + return this; + } + + public ComUserMicrosoftGraphComponent WithLang(string value) + { + this.Lang = value; + return this; + } + + public ComUserMicrosoftGraphComponent WithIsVisible(bool value) + { + this.IsVisible = value; + return this; + } + + public ComUserMicrosoftGraphComponent WithSeparator(bool value) + { + this.Separator = value; + return this; + } + + public ComUserMicrosoftGraphComponent WithHeight(ElementHeight value) + { + this.Height = value; + return this; + } + + public ComUserMicrosoftGraphComponent WithHorizontalAlignment(HorizontalAlignment value) + { + this.HorizontalAlignment = value; + return this; + } + + public ComUserMicrosoftGraphComponent WithSpacing(Spacing value) + { + this.Spacing = value; + return this; + } + + public ComUserMicrosoftGraphComponent WithTargetWidth(TargetWidth value) + { + this.TargetWidth = value; + return this; + } + + public ComUserMicrosoftGraphComponent WithIsSortKey(bool value) + { + this.IsSortKey = value; + return this; + } + + public ComUserMicrosoftGraphComponent WithProperties(PersonaProperties value) + { + this.Properties = value; + return this; + } + + public ComUserMicrosoftGraphComponent WithGridArea(string value) + { + this.GridArea = value; + return this; + } + + public ComUserMicrosoftGraphComponent WithFallback(IUnion value) + { + this.Fallback = value; + return this; + } +} + +/// +/// Represents the properties of a Persona component. +/// +public class PersonaProperties : SerializableObject +{ + /// + /// The UPN of the persona. + /// + [JsonPropertyName("userPrincipalName")] + public string? UserPrincipalName { get; set; } + + /// + /// The display name of the persona. + /// + [JsonPropertyName("displayName")] + public string? DisplayName { get; set; } + + public PersonaProperties WithUserPrincipalName(string value) + { + this.UserPrincipalName = value; + return this; + } + + public PersonaProperties WithDisplayName(string value) + { + this.DisplayName = value; + return this; + } +} + +/// +/// Displays multiple users' information, including their profile pictures. +/// +public class ComUsersMicrosoftGraphComponent : CardElement +{ + /// + /// Must be **Component**. + /// + [JsonPropertyName("type")] + public string Type { get; } = "Component"; + + /// + /// A unique identifier for the element or action. Input elements must have an id, otherwise they will not be validated and their values will not be sent to the Bot. + /// + [JsonPropertyName("id")] + public string? Id { get; set; } + + /// + /// A list of capabilities the element requires the host application to support. If the host application doesn't support at least one of the listed capabilities, the element is not rendered (or its fallback is rendered if provided). + /// + [JsonPropertyName("requires")] + public HostCapabilities? Requires { get; set; } + + /// + /// The locale associated with the element. + /// + [JsonPropertyName("lang")] + public string? Lang { get; set; } + + /// + /// Controls the visibility of the element. + /// + [JsonPropertyName("isVisible")] + public bool? IsVisible { get; set; } + + /// + /// Controls whether a separator line should be displayed above the element to visually separate it from the previous element. No separator will be displayed for the first element in a container, even if this property is set to true. + /// + [JsonPropertyName("separator")] + public bool? Separator { get; set; } + + /// + /// The height of the element. When set to stretch, the element will use the remaining vertical space in its container. + /// + [JsonPropertyName("height")] + public ElementHeight? Height { get; set; } + + /// + /// Controls how the element should be horizontally aligned. + /// + [JsonPropertyName("horizontalAlignment")] + public HorizontalAlignment? HorizontalAlignment { get; set; } + + /// + /// Controls the amount of space between this element and the previous one. No space will be added for the first element in a container. + /// + [JsonPropertyName("spacing")] + public Spacing? Spacing { get; set; } + + /// + /// Controls for which card width the element should be displayed. If targetWidth isn't specified, the element is rendered at all card widths. Using targetWidth makes it possible to author responsive cards that adapt their layout to the available horizontal space. For more details, see [Responsive layout](https://adaptivecards.microsoft.com/?topic=responsive-layout). + /// + [JsonPropertyName("targetWidth")] + public TargetWidth? TargetWidth { get; set; } + + /// + /// Controls whether the element should be used as a sort key by elements that allow sorting across a collection of elements. + /// + [JsonPropertyName("isSortKey")] + public bool? IsSortKey { get; set; } + + /// + /// Must be **graph.microsoft.com/users**. + /// + [JsonPropertyName("name")] + public string Name { get; } = "graph.microsoft.com/users"; + + /// + /// The properties of the set. + /// + [JsonPropertyName("properties")] + public PersonaSetProperties? Properties { get; set; } + + /// + /// The area of a Layout.AreaGrid layout in which an element should be displayed. + /// + [JsonPropertyName("grid.area")] + public string? GridArea { get; set; } + + /// + /// An alternate element to render if the type of this one is unsupported or if the host application doesn't support all the capabilities specified in the requires property. + /// + [JsonPropertyName("fallback")] + public IUnion? Fallback { get; set; } + + public ComUsersMicrosoftGraphComponent WithId(string value) + { + this.Id = value; + return this; + } + + public ComUsersMicrosoftGraphComponent WithRequires(HostCapabilities value) + { + this.Requires = value; + return this; + } + + public ComUsersMicrosoftGraphComponent WithLang(string value) + { + this.Lang = value; + return this; + } + + public ComUsersMicrosoftGraphComponent WithIsVisible(bool value) + { + this.IsVisible = value; + return this; + } + + public ComUsersMicrosoftGraphComponent WithSeparator(bool value) + { + this.Separator = value; + return this; + } + + public ComUsersMicrosoftGraphComponent WithHeight(ElementHeight value) + { + this.Height = value; + return this; + } + + public ComUsersMicrosoftGraphComponent WithHorizontalAlignment(HorizontalAlignment value) + { + this.HorizontalAlignment = value; + return this; + } + + public ComUsersMicrosoftGraphComponent WithSpacing(Spacing value) + { + this.Spacing = value; + return this; + } + + public ComUsersMicrosoftGraphComponent WithTargetWidth(TargetWidth value) + { + this.TargetWidth = value; + return this; + } + + public ComUsersMicrosoftGraphComponent WithIsSortKey(bool value) + { + this.IsSortKey = value; + return this; + } + + public ComUsersMicrosoftGraphComponent WithProperties(PersonaSetProperties value) + { + this.Properties = value; + return this; + } + + public ComUsersMicrosoftGraphComponent WithGridArea(string value) + { + this.GridArea = value; + return this; + } + + public ComUsersMicrosoftGraphComponent WithFallback(IUnion value) + { + this.Fallback = value; + return this; + } +} + +/// +/// Represents the properties of a PersonaSet component. +/// +public class PersonaSetProperties : SerializableObject +{ + /// + /// The users a PersonaSet component should display. + /// + [JsonPropertyName("users")] + public IList? Users { get; set; } + + public PersonaSetProperties WithUsers(params IList value) + { + this.Users = value; + return this; + } +} + +/// +/// Displays information about a generic graph resource. +/// +public class ComResourceMicrosoftGraphComponent : CardElement +{ + /// + /// Must be **Component**. + /// + [JsonPropertyName("type")] + public string Type { get; } = "Component"; + + /// + /// A unique identifier for the element or action. Input elements must have an id, otherwise they will not be validated and their values will not be sent to the Bot. + /// + [JsonPropertyName("id")] + public string? Id { get; set; } + + /// + /// A list of capabilities the element requires the host application to support. If the host application doesn't support at least one of the listed capabilities, the element is not rendered (or its fallback is rendered if provided). + /// + [JsonPropertyName("requires")] + public HostCapabilities? Requires { get; set; } + + /// + /// The locale associated with the element. + /// + [JsonPropertyName("lang")] + public string? Lang { get; set; } + + /// + /// Controls the visibility of the element. + /// + [JsonPropertyName("isVisible")] + public bool? IsVisible { get; set; } + + /// + /// Controls whether a separator line should be displayed above the element to visually separate it from the previous element. No separator will be displayed for the first element in a container, even if this property is set to true. + /// + [JsonPropertyName("separator")] + public bool? Separator { get; set; } + + /// + /// The height of the element. When set to stretch, the element will use the remaining vertical space in its container. + /// + [JsonPropertyName("height")] + public ElementHeight? Height { get; set; } + + /// + /// Controls how the element should be horizontally aligned. + /// + [JsonPropertyName("horizontalAlignment")] + public HorizontalAlignment? HorizontalAlignment { get; set; } + + /// + /// Controls the amount of space between this element and the previous one. No space will be added for the first element in a container. + /// + [JsonPropertyName("spacing")] + public Spacing? Spacing { get; set; } + + /// + /// Controls for which card width the element should be displayed. If targetWidth isn't specified, the element is rendered at all card widths. Using targetWidth makes it possible to author responsive cards that adapt their layout to the available horizontal space. For more details, see [Responsive layout](https://adaptivecards.microsoft.com/?topic=responsive-layout). + /// + [JsonPropertyName("targetWidth")] + public TargetWidth? TargetWidth { get; set; } + + /// + /// Controls whether the element should be used as a sort key by elements that allow sorting across a collection of elements. + /// + [JsonPropertyName("isSortKey")] + public bool? IsSortKey { get; set; } + + /// + /// Must be **graph.microsoft.com/resource**. + /// + [JsonPropertyName("name")] + public string Name { get; } = "graph.microsoft.com/resource"; + + /// + /// The properties of the resource. + /// + [JsonPropertyName("properties")] + public ResourceProperties? Properties { get; set; } + + /// + /// The area of a Layout.AreaGrid layout in which an element should be displayed. + /// + [JsonPropertyName("grid.area")] + public string? GridArea { get; set; } + + /// + /// An alternate element to render if the type of this one is unsupported or if the host application doesn't support all the capabilities specified in the requires property. + /// + [JsonPropertyName("fallback")] + public IUnion? Fallback { get; set; } + + public ComResourceMicrosoftGraphComponent WithId(string value) + { + this.Id = value; + return this; + } + + public ComResourceMicrosoftGraphComponent WithRequires(HostCapabilities value) + { + this.Requires = value; + return this; + } + + public ComResourceMicrosoftGraphComponent WithLang(string value) + { + this.Lang = value; + return this; + } + + public ComResourceMicrosoftGraphComponent WithIsVisible(bool value) + { + this.IsVisible = value; + return this; + } + + public ComResourceMicrosoftGraphComponent WithSeparator(bool value) + { + this.Separator = value; + return this; + } + + public ComResourceMicrosoftGraphComponent WithHeight(ElementHeight value) + { + this.Height = value; + return this; + } + + public ComResourceMicrosoftGraphComponent WithHorizontalAlignment(HorizontalAlignment value) + { + this.HorizontalAlignment = value; + return this; + } + + public ComResourceMicrosoftGraphComponent WithSpacing(Spacing value) + { + this.Spacing = value; + return this; + } + + public ComResourceMicrosoftGraphComponent WithTargetWidth(TargetWidth value) + { + this.TargetWidth = value; + return this; + } + + public ComResourceMicrosoftGraphComponent WithIsSortKey(bool value) + { + this.IsSortKey = value; + return this; + } + + public ComResourceMicrosoftGraphComponent WithProperties(ResourceProperties value) + { + this.Properties = value; + return this; + } + + public ComResourceMicrosoftGraphComponent WithGridArea(string value) + { + this.GridArea = value; + return this; + } + + public ComResourceMicrosoftGraphComponent WithFallback(IUnion value) + { + this.Fallback = value; + return this; + } +} + +/// +/// Represents the properties of a resource component. +/// +public class ResourceProperties : SerializableObject +{ + /// + /// The Id of the resource. + /// + [JsonPropertyName("id")] + public string? Id { get; set; } + + /// + /// The reference to the resource. + /// + [JsonPropertyName("resourceReference")] + public IDictionary? ResourceReference { get; set; } + + /// + /// The visualization of the resource. + /// + [JsonPropertyName("resourceVisualization")] + public ResourceVisualization? ResourceVisualization { get; set; } + + public ResourceProperties WithId(string value) + { + this.Id = value; + return this; + } + + public ResourceProperties WithResourceReference(IDictionary value) + { + this.ResourceReference = value; + return this; + } + + public ResourceProperties WithResourceVisualization(ResourceVisualization value) + { + this.ResourceVisualization = value; + return this; + } +} + +/// +/// Represents a visualization of a resource. +/// +public class ResourceVisualization : SerializableObject +{ + /// + /// The media associated with the resource. + /// + [JsonPropertyName("media")] + public string? Media { get; set; } + + public ResourceVisualization WithMedia(string value) + { + this.Media = value; + return this; + } +} + +/// +/// Displays information about a file resource. +/// +public class ComFileMicrosoftGraphComponent : CardElement +{ + /// + /// Must be **Component**. + /// + [JsonPropertyName("type")] + public string Type { get; } = "Component"; + + /// + /// A unique identifier for the element or action. Input elements must have an id, otherwise they will not be validated and their values will not be sent to the Bot. + /// + [JsonPropertyName("id")] + public string? Id { get; set; } + + /// + /// A list of capabilities the element requires the host application to support. If the host application doesn't support at least one of the listed capabilities, the element is not rendered (or its fallback is rendered if provided). + /// + [JsonPropertyName("requires")] + public HostCapabilities? Requires { get; set; } + + /// + /// The locale associated with the element. + /// + [JsonPropertyName("lang")] + public string? Lang { get; set; } + + /// + /// Controls the visibility of the element. + /// + [JsonPropertyName("isVisible")] + public bool? IsVisible { get; set; } + + /// + /// Controls whether a separator line should be displayed above the element to visually separate it from the previous element. No separator will be displayed for the first element in a container, even if this property is set to true. + /// + [JsonPropertyName("separator")] + public bool? Separator { get; set; } + + /// + /// The height of the element. When set to stretch, the element will use the remaining vertical space in its container. + /// + [JsonPropertyName("height")] + public ElementHeight? Height { get; set; } + + /// + /// Controls how the element should be horizontally aligned. + /// + [JsonPropertyName("horizontalAlignment")] + public HorizontalAlignment? HorizontalAlignment { get; set; } + + /// + /// Controls the amount of space between this element and the previous one. No space will be added for the first element in a container. + /// + [JsonPropertyName("spacing")] + public Spacing? Spacing { get; set; } + + /// + /// Controls for which card width the element should be displayed. If targetWidth isn't specified, the element is rendered at all card widths. Using targetWidth makes it possible to author responsive cards that adapt their layout to the available horizontal space. For more details, see [Responsive layout](https://adaptivecards.microsoft.com/?topic=responsive-layout). + /// + [JsonPropertyName("targetWidth")] + public TargetWidth? TargetWidth { get; set; } + + /// + /// Controls whether the element should be used as a sort key by elements that allow sorting across a collection of elements. + /// + [JsonPropertyName("isSortKey")] + public bool? IsSortKey { get; set; } + + /// + /// Must be **graph.microsoft.com/file**. + /// + [JsonPropertyName("name")] + public string Name { get; } = "graph.microsoft.com/file"; + + /// + /// The properties of the file. + /// + [JsonPropertyName("properties")] + public FileProperties? Properties { get; set; } + + /// + /// The area of a Layout.AreaGrid layout in which an element should be displayed. + /// + [JsonPropertyName("grid.area")] + public string? GridArea { get; set; } + + /// + /// An alternate element to render if the type of this one is unsupported or if the host application doesn't support all the capabilities specified in the requires property. + /// + [JsonPropertyName("fallback")] + public IUnion? Fallback { get; set; } + + public ComFileMicrosoftGraphComponent WithId(string value) + { + this.Id = value; + return this; + } + + public ComFileMicrosoftGraphComponent WithRequires(HostCapabilities value) + { + this.Requires = value; + return this; + } + + public ComFileMicrosoftGraphComponent WithLang(string value) + { + this.Lang = value; + return this; + } + + public ComFileMicrosoftGraphComponent WithIsVisible(bool value) + { + this.IsVisible = value; + return this; + } + + public ComFileMicrosoftGraphComponent WithSeparator(bool value) + { + this.Separator = value; + return this; + } + + public ComFileMicrosoftGraphComponent WithHeight(ElementHeight value) + { + this.Height = value; + return this; + } + + public ComFileMicrosoftGraphComponent WithHorizontalAlignment(HorizontalAlignment value) + { + this.HorizontalAlignment = value; + return this; + } + + public ComFileMicrosoftGraphComponent WithSpacing(Spacing value) + { + this.Spacing = value; + return this; + } + + public ComFileMicrosoftGraphComponent WithTargetWidth(TargetWidth value) + { + this.TargetWidth = value; + return this; + } + + public ComFileMicrosoftGraphComponent WithIsSortKey(bool value) + { + this.IsSortKey = value; + return this; + } + + public ComFileMicrosoftGraphComponent WithProperties(FileProperties value) + { + this.Properties = value; + return this; + } + + public ComFileMicrosoftGraphComponent WithGridArea(string value) + { + this.GridArea = value; + return this; + } + + public ComFileMicrosoftGraphComponent WithFallback(IUnion value) + { + this.Fallback = value; + return this; + } +} + +/// +/// Represents the properties of a file component. +/// +public class FileProperties : SerializableObject +{ + /// + /// The name of the file. + /// + [JsonPropertyName("name")] + public string? Name { get; set; } + + /// + /// The file extension. + /// + [JsonPropertyName("extension")] + public string? Extension { get; set; } + + /// + /// The URL of the file. + /// + [JsonPropertyName("url")] + public string? Url { get; set; } + + public FileProperties WithName(string value) + { + this.Name = value; + return this; + } + + public FileProperties WithExtension(string value) + { + this.Extension = value; + return this; + } + + public FileProperties WithUrl(string value) + { + this.Url = value; + return this; + } +} + +/// +/// Displays information about a calendar event. +/// +public class ComEventMicrosoftGraphComponent : CardElement +{ + /// + /// Must be **Component**. + /// + [JsonPropertyName("type")] + public string Type { get; } = "Component"; + + /// + /// A unique identifier for the element or action. Input elements must have an id, otherwise they will not be validated and their values will not be sent to the Bot. + /// + [JsonPropertyName("id")] + public string? Id { get; set; } + + /// + /// A list of capabilities the element requires the host application to support. If the host application doesn't support at least one of the listed capabilities, the element is not rendered (or its fallback is rendered if provided). + /// + [JsonPropertyName("requires")] + public HostCapabilities? Requires { get; set; } + + /// + /// The locale associated with the element. + /// + [JsonPropertyName("lang")] + public string? Lang { get; set; } + + /// + /// Controls the visibility of the element. + /// + [JsonPropertyName("isVisible")] + public bool? IsVisible { get; set; } + + /// + /// Controls whether a separator line should be displayed above the element to visually separate it from the previous element. No separator will be displayed for the first element in a container, even if this property is set to true. + /// + [JsonPropertyName("separator")] + public bool? Separator { get; set; } + + /// + /// The height of the element. When set to stretch, the element will use the remaining vertical space in its container. + /// + [JsonPropertyName("height")] + public ElementHeight? Height { get; set; } + + /// + /// Controls how the element should be horizontally aligned. + /// + [JsonPropertyName("horizontalAlignment")] + public HorizontalAlignment? HorizontalAlignment { get; set; } + + /// + /// Controls the amount of space between this element and the previous one. No space will be added for the first element in a container. + /// + [JsonPropertyName("spacing")] + public Spacing? Spacing { get; set; } + + /// + /// Controls for which card width the element should be displayed. If targetWidth isn't specified, the element is rendered at all card widths. Using targetWidth makes it possible to author responsive cards that adapt their layout to the available horizontal space. For more details, see [Responsive layout](https://adaptivecards.microsoft.com/?topic=responsive-layout). + /// + [JsonPropertyName("targetWidth")] + public TargetWidth? TargetWidth { get; set; } + + /// + /// Controls whether the element should be used as a sort key by elements that allow sorting across a collection of elements. + /// + [JsonPropertyName("isSortKey")] + public bool? IsSortKey { get; set; } + + /// + /// Must be **graph.microsoft.com/event**. + /// + [JsonPropertyName("name")] + public string Name { get; } = "graph.microsoft.com/event"; + + /// + /// The properties of the event. + /// + [JsonPropertyName("properties")] + public CalendarEventProperties? Properties { get; set; } + + /// + /// The area of a Layout.AreaGrid layout in which an element should be displayed. + /// + [JsonPropertyName("grid.area")] + public string? GridArea { get; set; } + + /// + /// An alternate element to render if the type of this one is unsupported or if the host application doesn't support all the capabilities specified in the requires property. + /// + [JsonPropertyName("fallback")] + public IUnion? Fallback { get; set; } + + public ComEventMicrosoftGraphComponent WithId(string value) + { + this.Id = value; + return this; + } + + public ComEventMicrosoftGraphComponent WithRequires(HostCapabilities value) + { + this.Requires = value; + return this; + } + + public ComEventMicrosoftGraphComponent WithLang(string value) + { + this.Lang = value; + return this; + } + + public ComEventMicrosoftGraphComponent WithIsVisible(bool value) + { + this.IsVisible = value; + return this; + } + + public ComEventMicrosoftGraphComponent WithSeparator(bool value) + { + this.Separator = value; + return this; + } + + public ComEventMicrosoftGraphComponent WithHeight(ElementHeight value) + { + this.Height = value; + return this; + } + + public ComEventMicrosoftGraphComponent WithHorizontalAlignment(HorizontalAlignment value) + { + this.HorizontalAlignment = value; + return this; + } + + public ComEventMicrosoftGraphComponent WithSpacing(Spacing value) + { + this.Spacing = value; + return this; + } + + public ComEventMicrosoftGraphComponent WithTargetWidth(TargetWidth value) + { + this.TargetWidth = value; + return this; + } + + public ComEventMicrosoftGraphComponent WithIsSortKey(bool value) + { + this.IsSortKey = value; + return this; + } + + public ComEventMicrosoftGraphComponent WithProperties(CalendarEventProperties value) + { + this.Properties = value; + return this; + } + + public ComEventMicrosoftGraphComponent WithGridArea(string value) + { + this.GridArea = value; + return this; + } + + public ComEventMicrosoftGraphComponent WithFallback(IUnion value) + { + this.Fallback = value; + return this; + } +} + +/// +/// The properties of a calendar event. +/// +public class CalendarEventProperties : SerializableObject +{ + /// + /// The ID of the event. + /// + [JsonPropertyName("id")] + public string? Id { get; set; } + + /// + /// The title of the event. + /// + [JsonPropertyName("title")] + public string? Title { get; set; } + + /// + /// The start date and time of the event. + /// + [JsonPropertyName("start")] + public string? Start { get; set; } + + /// + /// The end date and time of the event. + /// + [JsonPropertyName("end")] + public string? End { get; set; } + + /// + /// The status of the event. + /// + [JsonPropertyName("status")] + public string? Status { get; set; } + + /// + /// The locations of the event. + /// + [JsonPropertyName("locations")] + public IList? Locations { get; set; } + + /// + /// The URL of the online meeting. + /// + [JsonPropertyName("onlineMeetingUrl")] + public string? OnlineMeetingUrl { get; set; } + + /// + /// Indicates if the event is all day. + /// + [JsonPropertyName("isAllDay")] + public bool? IsAllDay { get; set; } + + /// + /// The extension of the event. + /// + [JsonPropertyName("extension")] + public string? Extension { get; set; } + + /// + /// The URL of the event. + /// + [JsonPropertyName("url")] + public string? Url { get; set; } + + /// + /// The attendees of the event. + /// + [JsonPropertyName("attendees")] + public IList? Attendees { get; set; } + + /// + /// The organizer of the event. + /// + [JsonPropertyName("organizer")] + public CalendarEventAttendee? Organizer { get; set; } + + public CalendarEventProperties WithId(string value) + { + this.Id = value; + return this; + } + + public CalendarEventProperties WithTitle(string value) + { + this.Title = value; + return this; + } + + public CalendarEventProperties WithStart(string value) + { + this.Start = value; + return this; + } + + public CalendarEventProperties WithEnd(string value) + { + this.End = value; + return this; + } + + public CalendarEventProperties WithStatus(string value) + { + this.Status = value; + return this; + } + + public CalendarEventProperties WithLocations(params IList value) + { + this.Locations = value; + return this; + } + + public CalendarEventProperties WithOnlineMeetingUrl(string value) + { + this.OnlineMeetingUrl = value; + return this; + } + + public CalendarEventProperties WithIsAllDay(bool value) + { + this.IsAllDay = value; + return this; + } + + public CalendarEventProperties WithExtension(string value) + { + this.Extension = value; + return this; + } + + public CalendarEventProperties WithUrl(string value) + { + this.Url = value; + return this; + } + + public CalendarEventProperties WithAttendees(params IList value) + { + this.Attendees = value; + return this; + } + + public CalendarEventProperties WithOrganizer(CalendarEventAttendee value) + { + this.Organizer = value; + return this; + } +} + +/// +/// Represents a calendar event attendee. +/// +public class CalendarEventAttendee : SerializableObject +{ + /// + /// The name of the attendee. + /// + [JsonPropertyName("name")] + public string? Name { get; set; } + + /// + /// The email address of the attendee. + /// + [JsonPropertyName("email")] + public string? Email { get; set; } + + /// + /// The title of the attendee. + /// + [JsonPropertyName("title")] + public string? Title { get; set; } + + /// + /// The type of the attendee. + /// + [JsonPropertyName("type")] + public string? Type { get; set; } + + /// + /// The status of the attendee. + /// + [JsonPropertyName("status")] + public string? Status { get; set; } + + public CalendarEventAttendee WithName(string value) + { + this.Name = value; + return this; + } + + public CalendarEventAttendee WithEmail(string value) + { + this.Email = value; + return this; + } + + public CalendarEventAttendee WithTitle(string value) + { + this.Title = value; + return this; + } + + public CalendarEventAttendee WithType(string value) + { + this.Type = value; + return this; + } + + public CalendarEventAttendee WithStatus(string value) + { + this.Status = value; + return this; + } +} + +/// +/// A page inside a Carousel element. +/// +public class CarouselPage : CardElement +{ + /// + /// Must be **CarouselPage**. + /// + [JsonPropertyName("type")] + public string Type { get; } = "CarouselPage"; + + /// + /// A unique identifier for the element or action. Input elements must have an id, otherwise they will not be validated and their values will not be sent to the Bot. + /// + [JsonPropertyName("id")] + public string? Id { get; set; } + + /// + /// A list of capabilities the element requires the host application to support. If the host application doesn't support at least one of the listed capabilities, the element is not rendered (or its fallback is rendered if provided). + /// + [JsonPropertyName("requires")] + public HostCapabilities? Requires { get; set; } + + /// + /// The locale associated with the element. + /// + [JsonPropertyName("lang")] + public string? Lang { get; set; } + + /// + /// Controls the visibility of the element. + /// + [JsonPropertyName("isVisible")] + public bool? IsVisible { get; set; } + + /// + /// The height of the element. When set to stretch, the element will use the remaining vertical space in its container. + /// + [JsonPropertyName("height")] + public ElementHeight? Height { get; set; } + + /// + /// Controls for which card width the element should be displayed. If targetWidth isn't specified, the element is rendered at all card widths. Using targetWidth makes it possible to author responsive cards that adapt their layout to the available horizontal space. For more details, see [Responsive layout](https://adaptivecards.microsoft.com/?topic=responsive-layout). + /// + [JsonPropertyName("targetWidth")] + public TargetWidth? TargetWidth { get; set; } + + /// + /// Controls whether the element should be used as a sort key by elements that allow sorting across a collection of elements. + /// + [JsonPropertyName("isSortKey")] + public bool? IsSortKey { get; set; } + + /// + /// An Action that will be invoked when the element is tapped or clicked. Action.ShowCard is not supported. + /// + [JsonPropertyName("selectAction")] + public Action? SelectAction { get; set; } + + /// + /// The style of the container. Container styles control the colors of the background, border and text inside the container, in such a way that contrast requirements are always met. + /// + [JsonPropertyName("style")] + public ContainerStyle? Style { get; set; } + + /// + /// Controls if a border should be displayed around the container. + /// + [JsonPropertyName("showBorder")] + public bool? ShowBorder { get; set; } + + /// + /// Controls if the container should have rounded corners. + /// + [JsonPropertyName("roundedCorners")] + public bool? RoundedCorners { get; set; } + + /// + /// The layouts associated with the container. The container can dynamically switch from one layout to another as the card's width changes. See [Container layouts](https://adaptivecards.microsoft.com/?topic=container-layouts) for more details. + /// + [JsonPropertyName("layouts")] + public IList? Layouts { get; set; } + + /// + /// The minimum height, in pixels, of the container, in the `px` format. + /// + [JsonPropertyName("minHeight")] + public string? MinHeight { get; set; } + + /// + /// Defines the container's background image. + /// + [JsonPropertyName("backgroundImage")] + public IUnion? BackgroundImage { get; set; } + + /// + /// Controls how the container's content should be vertically aligned. + /// + [JsonPropertyName("verticalContentAlignment")] + public VerticalAlignment? VerticalContentAlignment { get; set; } + + /// + /// Controls if the content of the card is to be rendered left-to-right or right-to-left. + /// + [JsonPropertyName("rtl")] + public bool? Rtl { get; set; } + + /// + /// The maximum height, in pixels, of the container, in the `px` format. When the content of a container exceeds the container's maximum height, a vertical scrollbar is displayed. + /// + [JsonPropertyName("maxHeight")] + public string? MaxHeight { get; set; } + + /// + /// The area of a Layout.AreaGrid layout in which an element should be displayed. + /// + [JsonPropertyName("grid.area")] + public string? GridArea { get; set; } + + /// + /// An alternate element to render if the type of this one is unsupported or if the host application doesn't support all the capabilities specified in the requires property. + /// + [JsonPropertyName("fallback")] + public IUnion? Fallback { get; set; } + + /// + /// The elements in the page. + /// + [JsonPropertyName("items")] + public IList? Items { get; set; } + + public CarouselPage(params IList items) + { + this.Items = items; + } + + public CarouselPage WithId(string value) + { + this.Id = value; + return this; + } + + public CarouselPage WithRequires(HostCapabilities value) + { + this.Requires = value; + return this; + } + + public CarouselPage WithLang(string value) + { + this.Lang = value; + return this; + } + + public CarouselPage WithIsVisible(bool value) + { + this.IsVisible = value; + return this; + } + + public CarouselPage WithHeight(ElementHeight value) + { + this.Height = value; + return this; + } + + public CarouselPage WithTargetWidth(TargetWidth value) + { + this.TargetWidth = value; + return this; + } + + public CarouselPage WithIsSortKey(bool value) + { + this.IsSortKey = value; + return this; + } + + public CarouselPage WithSelectAction(Action value) + { + this.SelectAction = value; + return this; + } + + public CarouselPage WithStyle(ContainerStyle value) + { + this.Style = value; + return this; + } + + public CarouselPage WithShowBorder(bool value) + { + this.ShowBorder = value; + return this; + } + + public CarouselPage WithRoundedCorners(bool value) + { + this.RoundedCorners = value; + return this; + } + + public CarouselPage WithLayouts(params IList value) + { + this.Layouts = value; + return this; + } + + public CarouselPage WithMinHeight(string value) + { + this.MinHeight = value; + return this; + } + + public CarouselPage WithBackgroundImage(IUnion value) + { + this.BackgroundImage = value; + return this; + } + + public CarouselPage WithVerticalContentAlignment(VerticalAlignment value) + { + this.VerticalContentAlignment = value; + return this; + } + + public CarouselPage WithRtl(bool value) + { + this.Rtl = value; + return this; + } + + public CarouselPage WithMaxHeight(string value) + { + this.MaxHeight = value; + return this; + } + + public CarouselPage WithGridArea(string value) + { + this.GridArea = value; + return this; + } + + public CarouselPage WithFallback(IUnion value) + { + this.Fallback = value; + return this; + } + + public CarouselPage WithItems(params IList value) + { + this.Items = value; + return this; + } +} + +/// +/// Represents a row of cells in a table. +/// +public class TableRow : CardElement +{ + /// + /// Must be **TableRow**. + /// + [JsonPropertyName("type")] + public string Type { get; } = "TableRow"; + + /// + /// A unique identifier for the element or action. Input elements must have an id, otherwise they will not be validated and their values will not be sent to the Bot. + /// + [JsonPropertyName("id")] + public string? Id { get; set; } + + /// + /// A list of capabilities the element requires the host application to support. If the host application doesn't support at least one of the listed capabilities, the element is not rendered (or its fallback is rendered if provided). + /// + [JsonPropertyName("requires")] + public HostCapabilities? Requires { get; set; } + + /// + /// The locale associated with the element. + /// + [JsonPropertyName("lang")] + public string? Lang { get; set; } + + /// + /// Controls the visibility of the element. + /// + [JsonPropertyName("isVisible")] + public bool? IsVisible { get; set; } + + /// + /// Controls whether a separator line should be displayed above the element to visually separate it from the previous element. No separator will be displayed for the first element in a container, even if this property is set to true. + /// + [JsonPropertyName("separator")] + public bool? Separator { get; set; } + + /// + /// The height of the element. When set to stretch, the element will use the remaining vertical space in its container. + /// + [JsonPropertyName("height")] + public ElementHeight? Height { get; set; } + + /// + /// Controls how the element should be horizontally aligned. + /// + [JsonPropertyName("horizontalAlignment")] + public HorizontalAlignment? HorizontalAlignment { get; set; } + + /// + /// Controls the amount of space between this element and the previous one. No space will be added for the first element in a container. + /// + [JsonPropertyName("spacing")] + public Spacing? Spacing { get; set; } + + /// + /// Controls for which card width the element should be displayed. If targetWidth isn't specified, the element is rendered at all card widths. Using targetWidth makes it possible to author responsive cards that adapt their layout to the available horizontal space. For more details, see [Responsive layout](https://adaptivecards.microsoft.com/?topic=responsive-layout). + /// + [JsonPropertyName("targetWidth")] + public TargetWidth? TargetWidth { get; set; } + + /// + /// Controls whether the element should be used as a sort key by elements that allow sorting across a collection of elements. + /// + [JsonPropertyName("isSortKey")] + public bool? IsSortKey { get; set; } + + /// + /// Controls if a border should be displayed around the container. + /// + [JsonPropertyName("showBorder")] + public bool? ShowBorder { get; set; } + + /// + /// Controls if the container should have rounded corners. + /// + [JsonPropertyName("roundedCorners")] + public bool? RoundedCorners { get; set; } + + /// + /// The style of the container. Container styles control the colors of the background, border and text inside the container, in such a way that contrast requirements are always met. + /// + [JsonPropertyName("style")] + public ContainerStyle? Style { get; set; } + + /// + /// Controls how the content of every cell in the row should be horizontally aligned by default. This property overrides the horizontalCellContentAlignment property of the table and columns. + /// + [JsonPropertyName("horizontalCellContentAlignment")] + public HorizontalAlignment? HorizontalCellContentAlignment { get; set; } + + /// + /// Controls how the content of every cell in the row should be vertically aligned by default. This property overrides the verticalCellContentAlignment property of the table and columns. + /// + [JsonPropertyName("verticalCellContentAlignment")] + public VerticalAlignment? VerticalCellContentAlignment { get; set; } + + /// + /// The area of a Layout.AreaGrid layout in which an element should be displayed. + /// + [JsonPropertyName("grid.area")] + public string? GridArea { get; set; } + + /// + /// An alternate element to render if the type of this one is unsupported or if the host application doesn't support all the capabilities specified in the requires property. + /// + [JsonPropertyName("fallback")] + public IUnion? Fallback { get; set; } + + /// + /// The cells in the row. + /// + [JsonPropertyName("cells")] + public IList? Cells { get; set; } + + public TableRow WithId(string value) + { + this.Id = value; + return this; + } + + public TableRow WithRequires(HostCapabilities value) + { + this.Requires = value; + return this; + } + + public TableRow WithLang(string value) + { + this.Lang = value; + return this; + } + + public TableRow WithIsVisible(bool value) + { + this.IsVisible = value; + return this; + } + + public TableRow WithSeparator(bool value) + { + this.Separator = value; + return this; + } + + public TableRow WithHeight(ElementHeight value) + { + this.Height = value; + return this; + } + + public TableRow WithHorizontalAlignment(HorizontalAlignment value) + { + this.HorizontalAlignment = value; + return this; + } + + public TableRow WithSpacing(Spacing value) + { + this.Spacing = value; + return this; + } + + public TableRow WithTargetWidth(TargetWidth value) + { + this.TargetWidth = value; + return this; + } + + public TableRow WithIsSortKey(bool value) + { + this.IsSortKey = value; + return this; + } + + public TableRow WithShowBorder(bool value) + { + this.ShowBorder = value; + return this; + } + + public TableRow WithRoundedCorners(bool value) + { + this.RoundedCorners = value; + return this; + } + + public TableRow WithStyle(ContainerStyle value) + { + this.Style = value; + return this; + } + + public TableRow WithHorizontalCellContentAlignment(HorizontalAlignment value) + { + this.HorizontalCellContentAlignment = value; + return this; + } + + public TableRow WithVerticalCellContentAlignment(VerticalAlignment value) + { + this.VerticalCellContentAlignment = value; + return this; + } + + public TableRow WithGridArea(string value) + { + this.GridArea = value; + return this; + } + + public TableRow WithFallback(IUnion value) + { + this.Fallback = value; + return this; + } + + public TableRow WithCells(params IList value) + { + this.Cells = value; + return this; + } +} + +/// +/// Represents a cell in a table row. +/// +public class TableCell : CardElement +{ + /// + /// Must be **TableCell**. + /// + [JsonPropertyName("type")] + public string Type { get; } = "TableCell"; + + /// + /// A unique identifier for the element or action. Input elements must have an id, otherwise they will not be validated and their values will not be sent to the Bot. + /// + [JsonPropertyName("id")] + public string? Id { get; set; } + + /// + /// A list of capabilities the element requires the host application to support. If the host application doesn't support at least one of the listed capabilities, the element is not rendered (or its fallback is rendered if provided). + /// + [JsonPropertyName("requires")] + public HostCapabilities? Requires { get; set; } + + /// + /// The locale associated with the element. + /// + [JsonPropertyName("lang")] + public string? Lang { get; set; } + + /// + /// Controls the visibility of the element. + /// + [JsonPropertyName("isVisible")] + public bool? IsVisible { get; set; } + + /// + /// Controls whether a separator line should be displayed above the element to visually separate it from the previous element. No separator will be displayed for the first element in a container, even if this property is set to true. + /// + [JsonPropertyName("separator")] + public bool? Separator { get; set; } + + /// + /// The height of the element. When set to stretch, the element will use the remaining vertical space in its container. + /// + [JsonPropertyName("height")] + public ElementHeight? Height { get; set; } + + /// + /// Controls the amount of space between this element and the previous one. No space will be added for the first element in a container. + /// + [JsonPropertyName("spacing")] + public Spacing? Spacing { get; set; } + + /// + /// Controls for which card width the element should be displayed. If targetWidth isn't specified, the element is rendered at all card widths. Using targetWidth makes it possible to author responsive cards that adapt their layout to the available horizontal space. For more details, see [Responsive layout](https://adaptivecards.microsoft.com/?topic=responsive-layout). + /// + [JsonPropertyName("targetWidth")] + public TargetWidth? TargetWidth { get; set; } + + /// + /// Controls whether the element should be used as a sort key by elements that allow sorting across a collection of elements. + /// + [JsonPropertyName("isSortKey")] + public bool? IsSortKey { get; set; } + + /// + /// An Action that will be invoked when the element is tapped or clicked. Action.ShowCard is not supported. + /// + [JsonPropertyName("selectAction")] + public Action? SelectAction { get; set; } + + /// + /// The style of the container. Container styles control the colors of the background, border and text inside the container, in such a way that contrast requirements are always met. + /// + [JsonPropertyName("style")] + public ContainerStyle? Style { get; set; } + + /// + /// The layouts associated with the container. The container can dynamically switch from one layout to another as the card's width changes. See [Container layouts](https://adaptivecards.microsoft.com/?topic=container-layouts) for more details. + /// + [JsonPropertyName("layouts")] + public IList? Layouts { get; set; } + + /// + /// Controls if the container should bleed into its parent. A bleeding container extends into its parent's padding. + /// + [JsonPropertyName("bleed")] + public bool? Bleed { get; set; } + + /// + /// The minimum height, in pixels, of the container, in the `px` format. + /// + [JsonPropertyName("minHeight")] + public string? MinHeight { get; set; } + + /// + /// Defines the container's background image. + /// + [JsonPropertyName("backgroundImage")] + public IUnion? BackgroundImage { get; set; } + + /// + /// Controls how the container's content should be vertically aligned. + /// + [JsonPropertyName("verticalContentAlignment")] + public VerticalAlignment? VerticalContentAlignment { get; set; } + + /// + /// Controls if the content of the card is to be rendered left-to-right or right-to-left. + /// + [JsonPropertyName("rtl")] + public bool? Rtl { get; set; } + + /// + /// The maximum height, in pixels, of the container, in the `px` format. When the content of a container exceeds the container's maximum height, a vertical scrollbar is displayed. + /// + [JsonPropertyName("maxHeight")] + public string? MaxHeight { get; set; } + + /// + /// The area of a Layout.AreaGrid layout in which an element should be displayed. + /// + [JsonPropertyName("grid.area")] + public string? GridArea { get; set; } + + /// + /// An alternate element to render if the type of this one is unsupported or if the host application doesn't support all the capabilities specified in the requires property. + /// + [JsonPropertyName("fallback")] + public IUnion? Fallback { get; set; } + + /// + /// The items (elements) in the cell. + /// + [JsonPropertyName("items")] + public IList? Items { get; set; } + + public TableCell(params IList items) + { + this.Items = items; + } + + public TableCell WithId(string value) + { + this.Id = value; + return this; + } + + public TableCell WithRequires(HostCapabilities value) + { + this.Requires = value; + return this; + } + + public TableCell WithLang(string value) + { + this.Lang = value; + return this; + } + + public TableCell WithIsVisible(bool value) + { + this.IsVisible = value; + return this; + } + + public TableCell WithSeparator(bool value) + { + this.Separator = value; + return this; + } + + public TableCell WithHeight(ElementHeight value) + { + this.Height = value; + return this; + } + + public TableCell WithSpacing(Spacing value) + { + this.Spacing = value; + return this; + } + + public TableCell WithTargetWidth(TargetWidth value) + { + this.TargetWidth = value; + return this; + } + + public TableCell WithIsSortKey(bool value) + { + this.IsSortKey = value; + return this; + } + + public TableCell WithSelectAction(Action value) + { + this.SelectAction = value; + return this; + } + + public TableCell WithStyle(ContainerStyle value) + { + this.Style = value; + return this; + } + + public TableCell WithLayouts(params IList value) + { + this.Layouts = value; + return this; + } + + public TableCell WithBleed(bool value) + { + this.Bleed = value; + return this; + } + + public TableCell WithMinHeight(string value) + { + this.MinHeight = value; + return this; + } + + public TableCell WithBackgroundImage(IUnion value) + { + this.BackgroundImage = value; + return this; + } + + public TableCell WithVerticalContentAlignment(VerticalAlignment value) + { + this.VerticalContentAlignment = value; + return this; + } + + public TableCell WithRtl(bool value) + { + this.Rtl = value; + return this; + } + + public TableCell WithMaxHeight(string value) + { + this.MaxHeight = value; + return this; + } + + public TableCell WithGridArea(string value) + { + this.GridArea = value; + return this; + } + + public TableCell WithFallback(IUnion value) + { + this.Fallback = value; + return this; + } + + public TableCell WithItems(params IList value) + { + this.Items = value; + return this; + } +} + +/// +/// A block of text inside a RichTextBlock element. +/// +public class TextRun : CardElement +{ + /// + /// Must be **TextRun**. + /// + [JsonPropertyName("type")] + public string Type { get; } = "TextRun"; + + /// + /// A unique identifier for the element or action. Input elements must have an id, otherwise they will not be validated and their values will not be sent to the Bot. + /// + [JsonPropertyName("id")] + public string? Id { get; set; } + + /// + /// The locale associated with the element. + /// + [JsonPropertyName("lang")] + public string? Lang { get; set; } + + /// + /// Controls the visibility of the element. + /// + [JsonPropertyName("isVisible")] + public bool? IsVisible { get; set; } + + /// + /// Controls whether the element should be used as a sort key by elements that allow sorting across a collection of elements. + /// + [JsonPropertyName("isSortKey")] + public bool? IsSortKey { get; set; } + + /// + /// The text to display. A subset of markdown is supported. + /// + [JsonPropertyName("text")] + public string? Text { get; set; } + + /// + /// The size of the text. + /// + [JsonPropertyName("size")] + public TextSize? Size { get; set; } + + /// + /// The weight of the text. + /// + [JsonPropertyName("weight")] + public TextWeight? Weight { get; set; } + + /// + /// The color of the text. + /// + [JsonPropertyName("color")] + public TextColor? Color { get; set; } + + /// + /// Controls whether the text should be renderer using a subtler variant of the select color. + /// + [JsonPropertyName("isSubtle")] + public bool? IsSubtle { get; set; } + + /// + /// The type of font to use for rendering. + /// + [JsonPropertyName("fontType")] + public FontType? FontType { get; set; } + + /// + /// Controls if the text should be italicized. + /// + [JsonPropertyName("italic")] + public bool? Italic { get; set; } + + /// + /// Controls if the text should be struck through. + /// + [JsonPropertyName("strikethrough")] + public bool? Strikethrough { get; set; } + + /// + /// Controls if the text should be highlighted. + /// + [JsonPropertyName("highlight")] + public bool? Highlight { get; set; } + + /// + /// Controls if the text should be underlined. + /// + [JsonPropertyName("underline")] + public bool? Underline { get; set; } + + /// + /// An Action that will be invoked when the text is tapped or clicked. Action.ShowCard is not supported. + /// + [JsonPropertyName("selectAction")] + public Action? SelectAction { get; set; } + + /// + /// The area of a Layout.AreaGrid layout in which an element should be displayed. + /// + [JsonPropertyName("grid.area")] + public string? GridArea { get; set; } + + /// + /// An alternate element to render if the type of this one is unsupported or if the host application doesn't support all the capabilities specified in the requires property. + /// + [JsonPropertyName("fallback")] + public IUnion? Fallback { get; set; } + + public TextRun(string text) + { + this.Text = text; + } + + public TextRun WithId(string value) + { + this.Id = value; + return this; + } + + public TextRun WithLang(string value) + { + this.Lang = value; + return this; + } + + public TextRun WithIsVisible(bool value) + { + this.IsVisible = value; + return this; + } + + public TextRun WithIsSortKey(bool value) + { + this.IsSortKey = value; + return this; + } + + public TextRun WithText(string value) + { + this.Text = value; + return this; + } + + public TextRun WithSize(TextSize value) + { + this.Size = value; + return this; + } + + public TextRun WithWeight(TextWeight value) + { + this.Weight = value; + return this; + } + + public TextRun WithColor(TextColor value) + { + this.Color = value; + return this; + } + + public TextRun WithIsSubtle(bool value) + { + this.IsSubtle = value; + return this; + } + + public TextRun WithFontType(FontType value) + { + this.FontType = value; + return this; + } + + public TextRun WithItalic(bool value) + { + this.Italic = value; + return this; + } + + public TextRun WithStrikethrough(bool value) + { + this.Strikethrough = value; + return this; + } + + public TextRun WithHighlight(bool value) + { + this.Highlight = value; + return this; + } + + public TextRun WithUnderline(bool value) + { + this.Underline = value; + return this; + } + + public TextRun WithSelectAction(Action value) + { + this.SelectAction = value; + return this; + } + + public TextRun WithGridArea(string value) + { + this.GridArea = value; + return this; + } + + public TextRun WithFallback(IUnion value) + { + this.Fallback = value; + return this; + } +} + +/// +/// A column in a ColumnSet element. +/// +public class Column : CardElement +{ + /// + /// Optional. If specified, must be **Column**. + /// + [JsonPropertyName("type")] + public string Type { get; } = "Column"; + + /// + /// A unique identifier for the element or action. Input elements must have an id, otherwise they will not be validated and their values will not be sent to the Bot. + /// + [JsonPropertyName("id")] + public string? Id { get; set; } + + /// + /// A list of capabilities the element requires the host application to support. If the host application doesn't support at least one of the listed capabilities, the element is not rendered (or its fallback is rendered if provided). + /// + [JsonPropertyName("requires")] + public HostCapabilities? Requires { get; set; } + + /// + /// The locale associated with the element. + /// + [JsonPropertyName("lang")] + public string? Lang { get; set; } + + /// + /// Controls the visibility of the element. + /// + [JsonPropertyName("isVisible")] + public bool? IsVisible { get; set; } + + /// + /// Controls whether a separator line should be displayed above the element to visually separate it from the previous element. No separator will be displayed for the first element in a container, even if this property is set to true. + /// + [JsonPropertyName("separator")] + public bool? Separator { get; set; } + + /// + /// The height of the element. When set to stretch, the element will use the remaining vertical space in its container. + /// + [JsonPropertyName("height")] + public ElementHeight? Height { get; set; } + + /// + /// Controls how the element should be horizontally aligned. + /// + [JsonPropertyName("horizontalAlignment")] + public HorizontalAlignment? HorizontalAlignment { get; set; } + + /// + /// Controls the amount of space between this element and the previous one. No space will be added for the first element in a container. + /// + [JsonPropertyName("spacing")] + public Spacing? Spacing { get; set; } + + /// + /// Controls for which card width the element should be displayed. If targetWidth isn't specified, the element is rendered at all card widths. Using targetWidth makes it possible to author responsive cards that adapt their layout to the available horizontal space. For more details, see [Responsive layout](https://adaptivecards.microsoft.com/?topic=responsive-layout). + /// + [JsonPropertyName("targetWidth")] + public TargetWidth? TargetWidth { get; set; } + + /// + /// Controls whether the element should be used as a sort key by elements that allow sorting across a collection of elements. + /// + [JsonPropertyName("isSortKey")] + public bool? IsSortKey { get; set; } + + /// + /// An Action that will be invoked when the element is tapped or clicked. Action.ShowCard is not supported. + /// + [JsonPropertyName("selectAction")] + public Action? SelectAction { get; set; } + + /// + /// The style of the container. Container styles control the colors of the background, border and text inside the container, in such a way that contrast requirements are always met. + /// + [JsonPropertyName("style")] + public ContainerStyle? Style { get; set; } + + /// + /// Controls if a border should be displayed around the container. + /// + [JsonPropertyName("showBorder")] + public bool? ShowBorder { get; set; } + + /// + /// Controls if the container should have rounded corners. + /// + [JsonPropertyName("roundedCorners")] + public bool? RoundedCorners { get; set; } + + /// + /// The layouts associated with the container. The container can dynamically switch from one layout to another as the card's width changes. See [Container layouts](https://adaptivecards.microsoft.com/?topic=container-layouts) for more details. + /// + [JsonPropertyName("layouts")] + public IList? Layouts { get; set; } + + /// + /// Controls if the container should bleed into its parent. A bleeding container extends into its parent's padding. + /// + [JsonPropertyName("bleed")] + public bool? Bleed { get; set; } + + /// + /// The minimum height, in pixels, of the container, in the `px` format. + /// + [JsonPropertyName("minHeight")] + public string? MinHeight { get; set; } + + /// + /// Defines the container's background image. + /// + [JsonPropertyName("backgroundImage")] + public IUnion? BackgroundImage { get; set; } + + /// + /// Controls how the container's content should be vertically aligned. + /// + [JsonPropertyName("verticalContentAlignment")] + public VerticalAlignment? VerticalContentAlignment { get; set; } + + /// + /// Controls if the content of the card is to be rendered left-to-right or right-to-left. + /// + [JsonPropertyName("rtl")] + public bool? Rtl { get; set; } + + /// + /// The maximum height, in pixels, of the container, in the `px` format. When the content of a container exceeds the container's maximum height, a vertical scrollbar is displayed. + /// + [JsonPropertyName("maxHeight")] + public string? MaxHeight { get; set; } + + /// + /// The width of the column. If expressed as a number, represents the relative weight of the column in the set. If expressed as a string, `auto` will automatically adjust the column's width according to its content, `stretch` will make the column use the remaining horizontal space (shared with other columns with width set to `stretch`) and using the `px` format will give the column an explicit width in pixels. + /// + [JsonPropertyName("width")] + public IUnion? Width { get; set; } + + /// + /// The area of a Layout.AreaGrid layout in which an element should be displayed. + /// + [JsonPropertyName("grid.area")] + public string? GridArea { get; set; } + + /// + /// An alternate element to render if the type of this one is unsupported or if the host application doesn't support all the capabilities specified in the requires property. + /// + [JsonPropertyName("fallback")] + public IUnion? Fallback { get; set; } + + /// + /// The elements in the column. + /// + [JsonPropertyName("items")] + public IList? Items { get; set; } + + public Column(params IList items) + { + this.Items = items; + } + + public Column WithId(string value) + { + this.Id = value; + return this; + } + + public Column WithRequires(HostCapabilities value) + { + this.Requires = value; + return this; + } + + public Column WithLang(string value) + { + this.Lang = value; + return this; + } + + public Column WithIsVisible(bool value) + { + this.IsVisible = value; + return this; + } + + public Column WithSeparator(bool value) + { + this.Separator = value; + return this; + } + + public Column WithHeight(ElementHeight value) + { + this.Height = value; + return this; + } + + public Column WithHorizontalAlignment(HorizontalAlignment value) + { + this.HorizontalAlignment = value; + return this; + } + + public Column WithSpacing(Spacing value) + { + this.Spacing = value; + return this; + } + + public Column WithTargetWidth(TargetWidth value) + { + this.TargetWidth = value; + return this; + } + + public Column WithIsSortKey(bool value) + { + this.IsSortKey = value; + return this; + } + + public Column WithSelectAction(Action value) + { + this.SelectAction = value; + return this; + } + + public Column WithStyle(ContainerStyle value) + { + this.Style = value; + return this; + } + + public Column WithShowBorder(bool value) + { + this.ShowBorder = value; + return this; + } + + public Column WithRoundedCorners(bool value) + { + this.RoundedCorners = value; + return this; + } + + public Column WithLayouts(params IList value) + { + this.Layouts = value; + return this; + } + + public Column WithBleed(bool value) + { + this.Bleed = value; + return this; + } + + public Column WithMinHeight(string value) + { + this.MinHeight = value; + return this; + } + + public Column WithBackgroundImage(IUnion value) + { + this.BackgroundImage = value; + return this; + } + + public Column WithVerticalContentAlignment(VerticalAlignment value) + { + this.VerticalContentAlignment = value; + return this; + } + + public Column WithRtl(bool value) + { + this.Rtl = value; + return this; + } + + public Column WithMaxHeight(string value) + { + this.MaxHeight = value; + return this; + } + + public Column WithWidth(IUnion value) + { + this.Width = value; + return this; + } + + public Column WithGridArea(string value) + { + this.GridArea = value; + return this; + } + + public Column WithFallback(IUnion value) + { + this.Fallback = value; + return this; + } + + public Column WithItems(params IList value) + { + this.Items = value; + return this; + } +} \ No newline at end of file diff --git a/Libraries/Microsoft.Teams.Cards/Element.cs b/Libraries/Microsoft.Teams.Cards/Element.cs deleted file mode 100644 index 13cfeda4..00000000 --- a/Libraries/Microsoft.Teams.Cards/Element.cs +++ /dev/null @@ -1,173 +0,0 @@ -using System.Text.Json; -using System.Text.Json.Serialization; - -namespace Microsoft.Teams.Cards; - -public abstract class Element(CardType type) -{ - /// - /// A unique identifier associated with the item - /// - [JsonPropertyName("id")] - [JsonPropertyOrder(0)] - public string? Id { get; set; } - - /// - /// the element type - /// - [JsonPropertyName("type")] - [JsonPropertyOrder(1)] - public CardType Type { get; set; } = type; - - /// - /// If false, this item will be removed from the visual tree. - /// - [JsonPropertyName("isVisible")] - [JsonPropertyOrder(2)] - public bool? IsVisible { get; set; } - - /// - /// A series of key/value pairs indicating features that the item requires with corresponding minimum version. When a feature is missing or of insufficient version, fallback is triggered. - /// - [JsonPropertyName("requires")] - [JsonPropertyOrder(3)] - public IDictionary? Requires { get; set; } - - /// - /// Specifies the height of the element. - /// - [JsonPropertyName("height")] - [JsonPropertyOrder(4)] - public Height? Height { get; set; } - - /// - /// When `true`, draw a separating line at the top of the element. - /// - [JsonPropertyName("separator")] - [JsonPropertyOrder(5)] - public bool? Separator { get; set; } - - /// - /// Controls the amount of spacing between this element and the preceding element. - /// - [JsonPropertyName("spacing")] - [JsonPropertyOrder(6)] - public Spacing? Spacing { get; set; } - - /// - /// the area of a `Layout.AreaGrid` layout in which an element should be displayed. - /// - [JsonPropertyName("grid.area")] - [JsonPropertyOrder(7)] - public string? GridArea { get; set; } - - /// - /// controls how the element should be horizontally aligned. - /// - [JsonPropertyName("horizontalAlignment")] - [JsonPropertyOrder(8)] - public HorizontalAlignment? HorizontalAlignment { get; set; } - - /// - /// Controls for which card width the element should be displayed. If targetWidth isn't specified, the element is rendered at all card widths. Using targetWidth makes it possible to author responsive cards that adapt their layout to the available horizontal space. - /// - [JsonPropertyName("targetWidth")] - [JsonPropertyOrder(9)] - public TargetWidth? TargetWidth { get; set; } - - /// - /// The locale associated with the element. - /// - [JsonPropertyName("lang")] - [JsonPropertyOrder(10)] - public string? Lang { get; set; } - - /// - /// Describes what to do when an unknown item is encountered or the requires of this or any children can't be met. - /// - [JsonPropertyName("fallback")] - [JsonPropertyOrder(11)] - public Element? Fallback { get; set; } - - public Element WithId(string value) - { - Id = value; - return this; - } - - public Element WithIsVisible(bool value) - { - IsVisible = value; - return this; - } - - public Element WithRequires(IDictionary value) - { - Requires = value; - return this; - } - - public Element WithRequire(string key, string value) - { - Requires ??= new Dictionary(); - Requires.Add(key, value); - return this; - } - - public Element WithHeight(Height value) - { - Height = value; - return this; - } - - public Element WithSeparator(bool value = true) - { - Separator = value; - return this; - } - - public Element WithSpacing(Spacing value) - { - Spacing = value; - return this; - } - - public Element WithGridArea(string value) - { - GridArea = value; - return this; - } - - public Element WithHorizontalAlignment(HorizontalAlignment value) - { - HorizontalAlignment = value; - return this; - } - - public Element WithTargetWidth(TargetWidth value) - { - TargetWidth = value; - return this; - } - - public Element WithLang(string value) - { - Lang = value; - return this; - } - - public Element WithFallback(Element value) - { - Fallback = value; - return this; - } - - public override string ToString() - { - return JsonSerializer.Serialize(this, new JsonSerializerOptions() - { - WriteIndented = true, - DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull - }); - } -} \ No newline at end of file diff --git a/Libraries/Microsoft.Teams.Cards/Inputs/Choice.cs b/Libraries/Microsoft.Teams.Cards/Inputs/Choice.cs deleted file mode 100644 index 661a478a..00000000 --- a/Libraries/Microsoft.Teams.Cards/Inputs/Choice.cs +++ /dev/null @@ -1,50 +0,0 @@ -using System.Text.Json.Serialization; - -namespace Microsoft.Teams.Cards; - -/// -/// Describes a choice for use in a ChoiceSet. -/// -public class Choice -{ - /// - /// Text to display. - /// - [JsonPropertyName("title")] - [JsonPropertyOrder(0)] - public required string Title { get; set; } - - /// - /// The raw value for the choice. NOTE: do not use a `,` in the value, since a `ChoiceSet` with `isMultiSelect` set to `true` returns a comma-delimited string of choice values. - /// - [JsonPropertyName("value")] - [JsonPropertyOrder(1)] - public required string Value { get; set; } -} - -/// -/// The data populated in the event payload for fetching dynamic choices, sent to the card-author to help identify the dataset from which choices might be fetched to be displayed in the dropdown. It might contain auxillary data to limit the maximum number of choices that can be sent and to support pagination. -/// -public class ChoiceDataQuery -{ - /// - /// The dataset to be queried to get the choices. - /// - [JsonPropertyName("dataset")] - [JsonPropertyOrder(0)] - public required string DataSet { get; set; } - - /// - /// The maximum number of choices that should be returned by the query. It can be ignored if the card-author wants to send a different number. - /// - [JsonPropertyName("count")] - [JsonPropertyOrder(1)] - public int? Count { get; set; } - - /// - /// The number of choices to be skipped in the list of choices returned by the query. It can be ignored if the card-author does not want pagination. - /// - [JsonPropertyName("skip")] - [JsonPropertyOrder(2)] - public int? Skip { get; set; } -} \ No newline at end of file diff --git a/Libraries/Microsoft.Teams.Cards/Inputs/ChoiceSetInput.cs b/Libraries/Microsoft.Teams.Cards/Inputs/ChoiceSetInput.cs deleted file mode 100644 index 600bf24e..00000000 --- a/Libraries/Microsoft.Teams.Cards/Inputs/ChoiceSetInput.cs +++ /dev/null @@ -1,128 +0,0 @@ -using System.Text.Json.Serialization; - -using Microsoft.Teams.Common; - -namespace Microsoft.Teams.Cards; - -public partial class CardType : StringEnum -{ - public static readonly CardType ChoiceSetInput = new("Input.ChoiceSet"); - public bool IsChoiceSetInput => ChoiceSetInput.Equals(Value); -} - -/// -/// Style hint for text input. -/// -[JsonConverter(typeof(JsonConverter))] -public partial class ChoiceInputStyle(string value) : StringEnum(value, caseSensitive: false) -{ - public static readonly ChoiceInputStyle Compact = new("compact"); - public bool IsCompact => Compact.Equals(Value); - - public static readonly ChoiceInputStyle Expanded = new("expanded"); - public bool IsExpanded => Expanded.Equals(Value); - - public static readonly ChoiceInputStyle Filtered = new("filtered"); - public bool IsFiltered => Filtered.Equals(Value); -} - -/// -/// Allows a user to input a Choice. -/// -public class ChoiceSetInput(params Choice[] choices) : InputElement(CardType.ChoiceSetInput) -{ - /// - /// Choice options. - /// - [JsonPropertyName("choices")] - [JsonPropertyOrder(18)] - public IList Choices { get; set; } = choices; - - /// - /// Allows dynamic fetching of choices from the bot to be displayed as suggestions in the dropdown when the user types in the input field. - /// - [JsonPropertyName("choices.data")] - [JsonPropertyOrder(19)] - public ChoiceDataQuery? Data { get; set; } - - /// - /// Allow multiple choices to be selected. - /// - [JsonPropertyName("isMultiSelect")] - [JsonPropertyOrder(20)] - public bool? IsMultiSelect { get; set; } - - /// - /// the style of the choice input - /// - [JsonPropertyName("style")] - [JsonPropertyOrder(21)] - public ChoiceInputStyle? Style { get; set; } - - /// - /// The initial choice (or set of choices) that should be selected. For multi-select, specify a comma-separated string of values. - /// - [JsonPropertyName("value")] - [JsonPropertyOrder(22)] - public string? Value { get; set; } - - /// - /// Description of the input desired. Only visible when no selection has been made, the `style` is `compact` and `isMultiSelect` is `false` - /// - [JsonPropertyName("placeholder")] - [JsonPropertyOrder(23)] - public string? Placeholder { get; set; } - - /// - /// If `true`, allow text to wrap. Otherwise, text is clipped. - /// - [JsonPropertyName("wrap")] - [JsonPropertyOrder(24)] - public bool? Wrap { get; set; } - - public ChoiceSetInput WithData(ChoiceDataQuery value) - { - Data = value; - return this; - } - - public ChoiceSetInput WithMultiSelect(bool value = true) - { - IsMultiSelect = value; - return this; - } - - public ChoiceSetInput WithStyle(ChoiceInputStyle value) - { - Style = value; - return this; - } - - public ChoiceSetInput WithValue(string value) - { - Value = value; - return this; - } - - public ChoiceSetInput WithPlaceholder(string value) - { - Placeholder = value; - return this; - } - - public ChoiceSetInput WithWrap(bool value = true) - { - Wrap = value; - return this; - } - - public ChoiceSetInput AddChoices(params Choice[] value) - { - foreach (var choice in value) - { - Choices.Add(choice); - } - - return this; - } -} \ No newline at end of file diff --git a/Libraries/Microsoft.Teams.Cards/Inputs/DateInput.cs b/Libraries/Microsoft.Teams.Cards/Inputs/DateInput.cs deleted file mode 100644 index 857a2248..00000000 --- a/Libraries/Microsoft.Teams.Cards/Inputs/DateInput.cs +++ /dev/null @@ -1,102 +0,0 @@ -using System.Text.Json.Serialization; - -using Microsoft.Teams.Common; - -namespace Microsoft.Teams.Cards; - -public partial class CardType : StringEnum -{ - public static readonly CardType DateInput = new("Input.Date"); - public bool IsDateInput => DateInput.Equals(Value); -} - -/// -/// Lets a user choose a date. -/// -public class DateInput : InputElement -{ - /// - /// Hint of maximum value expressed in YYYY-MM-DD(may be ignored by some clients). - /// - [JsonPropertyName("max")] - [JsonPropertyOrder(18)] - public string? Max { get; set; } - - /// - /// Hint of minimum value expressed in YYYY-MM-DD(may be ignored by some clients). - /// - [JsonPropertyName("min")] - [JsonPropertyOrder(19)] - public string? Min { get; set; } - - /// - /// Description of the input desired. Displayed when no selection has been made. - /// - [JsonPropertyName("placeholder")] - [JsonPropertyOrder(20)] - public string? Placeholder { get; set; } - - /// - /// The initial value for this field expressed in YYYY-MM-DD. - /// - [JsonPropertyName("value")] - [JsonPropertyOrder(21)] - public string? Value { get; set; } - - public DateInput() : base(CardType.DateInput) - { - - } - - public DateInput(string value) : base(CardType.DateInput) - { - Value = value; - } - - public DateInput(DateTime value) : base(CardType.DateInput) - { - Value = value.ToShortDateString(); - } - - public DateInput WithMax(string value) - { - Max = value; - return this; - } - - public DateInput WithMax(DateTime value) - { - Max = value.ToShortDateString(); - return this; - } - - public DateInput WithMin(string value) - { - Min = value; - return this; - } - - public DateInput WithMin(DateTime value) - { - Min = value.ToShortDateString(); - return this; - } - - public DateInput WithPlaceholder(string value) - { - Placeholder = value; - return this; - } - - public DateInput WithValue(string value) - { - Value = value; - return this; - } - - public DateInput WithValue(DateTime value) - { - Value = value.ToShortDateString(); - return this; - } -} \ No newline at end of file diff --git a/Libraries/Microsoft.Teams.Cards/Inputs/InputElement.cs b/Libraries/Microsoft.Teams.Cards/Inputs/InputElement.cs deleted file mode 100644 index 0ad178c3..00000000 --- a/Libraries/Microsoft.Teams.Cards/Inputs/InputElement.cs +++ /dev/null @@ -1,126 +0,0 @@ -using System.Text.Json.Serialization; - -using Microsoft.Teams.Common; - -namespace Microsoft.Teams.Cards; - -/// -/// Determines the position of the label. It can take 'inline' and 'above' values. By default, the label is placed 'above' when label position is not specified. -/// -[JsonConverter(typeof(JsonConverter))] -public partial class InputLabelPosition(string value) : StringEnum(value, caseSensitive: false) -{ - public static readonly InputLabelPosition Inline = new("inline"); - public bool IsInline => Inline.Equals(Value); - - public static readonly InputLabelPosition Above = new("above"); - public bool IsAbove => Above.Equals(Value); -} - -/// -/// Style hint for input fields. Allows input fields to appear as read-only but when user clicks/focuses on the field, it allows them to update those fields. -/// -[JsonConverter(typeof(JsonConverter))] -public partial class InputStyle(string value) : StringEnum(value, caseSensitive: false) -{ - public static readonly InputStyle RevealOnHover = new("revealOnHover"); - public bool IsRevealOnHover => RevealOnHover.Equals(Value); - - public static readonly InputStyle Default = new("default"); - public bool IsDefault => Default.Equals(Value); -} - -/// -/// any element that can accept user input -/// -public abstract class InputElement(CardType type) : Element(type) -{ - /// - /// Error message to display when entered input is invalid - /// - [JsonPropertyName("errorMessage")] - [JsonPropertyOrder(12)] - public string? ErrorMessage { get; set; } - - /// - /// Whether or not this input is required - /// - [JsonPropertyName("isRequired")] - [JsonPropertyOrder(13)] - public bool? IsRequired { get; set; } - - /// - /// Label for this input - /// - [JsonPropertyName("label")] - [JsonPropertyOrder(14)] - public string? Label { get; set; } - - /// - /// Determines the position of the label. It can take 'inline' and 'above' values. By default, the label is placed 'above' when label position is not specified. - /// - [JsonPropertyName("labelPosition")] - [JsonPropertyOrder(15)] - public InputLabelPosition? LabelPosition { get; set; } - - /// - /// Determines the width of the label in percent like 40 or a specific pixel width like ‘40px’ when label is placed inline with the input. labelWidth would be ignored when the label is displayed above the input. - /// - [JsonPropertyName("labelWidth")] - [JsonPropertyOrder(16)] - public IUnion? LabelWidth { get; set; } - - /// - /// Style hint for input fields. Allows input fields to appear as read-only but when user clicks/focuses on the field, it allows them to update those fields. - /// - [JsonPropertyName("inputStyle")] - [JsonPropertyOrder(17)] - public InputStyle? InputStyle { get; set; } - - public InputElement WithError(string value) - { - ErrorMessage = value; - return this; - } - - public InputElement WithRequired(bool value = true) - { - IsRequired = value; - return this; - } - - public InputElement WithLabel(string value, InputLabelPosition? position, IUnion? width) - { - Label = value; - - if (position is not null) - { - LabelPosition = position; - } - - if (width is not null) - { - LabelWidth = width; - } - - return this; - } - - public InputElement WithLabelPosition(InputLabelPosition value) - { - LabelPosition = value; - return this; - } - - public InputElement WithLabelWidth(IUnion value) - { - LabelWidth = value; - return this; - } - - public InputElement WithInputStyle(InputStyle value) - { - InputStyle = value; - return this; - } -} \ No newline at end of file diff --git a/Libraries/Microsoft.Teams.Cards/Inputs/NumberInput.cs b/Libraries/Microsoft.Teams.Cards/Inputs/NumberInput.cs deleted file mode 100644 index 20822fa2..00000000 --- a/Libraries/Microsoft.Teams.Cards/Inputs/NumberInput.cs +++ /dev/null @@ -1,69 +0,0 @@ -using System.Text.Json.Serialization; - -using Microsoft.Teams.Common; - -namespace Microsoft.Teams.Cards; - -public partial class CardType : StringEnum -{ - public static readonly CardType NumberInput = new("Input.Number"); - public bool IsNumberInput => NumberInput.Equals(Value); -} - -/// -/// Allows a user to enter a number. -/// -public class NumberInput(double? value) : InputElement(CardType.NumberInput) -{ - /// - /// Hint of maximum value (may be ignored by some clients). - /// - [JsonPropertyName("max")] - [JsonPropertyOrder(18)] - public double? Max { get; set; } - - /// - /// Hint of minimum value (may be ignored by some clients). - /// - [JsonPropertyName("min")] - [JsonPropertyOrder(19)] - public double? Min { get; set; } - - /// - /// Description of the input desired. Displayed when no selection has been made. - /// - [JsonPropertyName("placeholder")] - [JsonPropertyOrder(20)] - public string? Placeholder { get; set; } - - /// - /// Initial value for this field. - /// - [JsonPropertyName("value")] - [JsonPropertyOrder(21)] - public double? Value { get; set; } = value; - - public NumberInput WithMax(double value) - { - Max = value; - return this; - } - - public NumberInput WithMin(double value) - { - Min = value; - return this; - } - - public NumberInput WithPlaceholder(string value) - { - Placeholder = value; - return this; - } - - public NumberInput WithValue(double value) - { - Value = value; - return this; - } -} \ No newline at end of file diff --git a/Libraries/Microsoft.Teams.Cards/Inputs/TextInput.cs b/Libraries/Microsoft.Teams.Cards/Inputs/TextInput.cs deleted file mode 100644 index f05ce8e3..00000000 --- a/Libraries/Microsoft.Teams.Cards/Inputs/TextInput.cs +++ /dev/null @@ -1,137 +0,0 @@ -using System.Text.Json.Serialization; -using System.Text.RegularExpressions; - -using Microsoft.Teams.Common; - -namespace Microsoft.Teams.Cards; - -public partial class CardType : StringEnum -{ - public static readonly CardType TextInput = new("Input.Text"); - public bool IsTextInput => TextInput.Equals(Value); -} - -/// -/// Style hint for text input. -/// -[JsonConverter(typeof(JsonConverter))] -public partial class TextInputStyle(string value) : StringEnum(value, caseSensitive: false) -{ - public static readonly TextInputStyle Text = new("text"); - public bool IsText => Text.Equals(Value); - - public static readonly TextInputStyle Tel = new("tel"); - public bool IsTel => Tel.Equals(Value); - - public static readonly TextInputStyle Url = new("url"); - public bool IsUrl => Url.Equals(Value); - - public static readonly TextInputStyle Email = new("email"); - public bool IsEmail => Email.Equals(Value); - - public static readonly TextInputStyle Password = new("password"); - public bool IsPassword => Password.Equals(Value); -} - -/// -/// Allows a user to enter text. -/// -public class TextInput(string? value) : InputElement(CardType.TextInput) -{ - /// - /// If `true`, allow multiple lines of input. - /// - [JsonPropertyName("isMultiline")] - [JsonPropertyOrder(18)] - public bool? IsMultiLine { get; set; } - - /// - /// Hint of maximum length characters to collect (may be ignored by some clients). - /// - [JsonPropertyName("maxLength")] - [JsonPropertyOrder(19)] - public int? MaxLength { get; set; } - - /// - /// Description of the input desired. Displayed when no selection has been made. - /// - [JsonPropertyName("placeholder")] - [JsonPropertyOrder(20)] - public string? Placeholder { get; set; } - - /// - /// Regular expression indicating the required format of this text input. - /// - [JsonPropertyName("regex")] - [JsonPropertyOrder(21)] - public string? Regex { get; set; } - - /// - /// Style hint for text input. - /// - [JsonPropertyName("style")] - [JsonPropertyOrder(22)] - public TextInputStyle? Style { get; set; } - - /// - /// The inline action for the input. Typically displayed to the right of the input. It is strongly recommended to provide an icon on the action (which will be displayed instead of the title of the action). - /// - [JsonPropertyName("inlineAction")] - [JsonPropertyOrder(23)] - public Action? InlineAction { get; set; } - - /// - /// The initial value for this field. - /// - [JsonPropertyName("value")] - [JsonPropertyOrder(21)] - public string? Value { get; set; } = value; - - public TextInput WithMultiLine(bool value = true) - { - IsMultiLine = value; - return this; - } - - public TextInput WithMaxLength(int value) - { - MaxLength = value; - return this; - } - - public TextInput WithPlaceholder(string value) - { - Placeholder = value; - return this; - } - - public TextInput WithRegex(string value) - { - Regex = value; - return this; - } - - public TextInput WithRegex(Regex value) - { - Regex = value.ToString(); - return this; - } - - public TextInput WithStyle(TextInputStyle value) - { - Style = value; - return this; - } - - public TextInput WithInlineAction(Action value) - { - InlineAction = value; - return this; - } - - public TextInput WithValue(string value) - { - Value = value; - return this; - } -} \ No newline at end of file diff --git a/Libraries/Microsoft.Teams.Cards/Inputs/TimeInput.cs b/Libraries/Microsoft.Teams.Cards/Inputs/TimeInput.cs deleted file mode 100644 index 78c4cc10..00000000 --- a/Libraries/Microsoft.Teams.Cards/Inputs/TimeInput.cs +++ /dev/null @@ -1,81 +0,0 @@ -using System.Text.Json.Serialization; - -using Microsoft.Teams.Common; - -namespace Microsoft.Teams.Cards; - -public partial class CardType : StringEnum -{ - public static readonly CardType TimeInput = new("Input.Time"); - public bool IsTimeInput => TimeInput.Equals(Value); -} - -/// -/// Lets a user select a time. -/// -public class TimeInput(string? value) : InputElement(CardType.TimeInput) -{ - /// - /// Hint of maximum value expressed in HH:MM (may be ignored by some clients). - /// - [JsonPropertyName("max")] - [JsonPropertyOrder(18)] - public string? Max { get; set; } - - /// - /// Hint of minimum value expressed in HH:MM (may be ignored by some clients). - /// - [JsonPropertyName("min")] - [JsonPropertyOrder(19)] - public string? Min { get; set; } - - /// - /// Description of the input desired. Displayed when no time has been selected. - /// - [JsonPropertyName("placeholder")] - [JsonPropertyOrder(20)] - public string? Placeholder { get; set; } - - /// - /// The initial value for this field expressed in HH:MM. - /// - [JsonPropertyName("value")] - [JsonPropertyOrder(21)] - public string? Value { get; set; } = value; - - public TimeInput WithMax(string value) - { - Max = value; - return this; - } - - public TimeInput WithMax(DateTime value) - { - Max = value.ToShortTimeString(); - return this; - } - - public TimeInput WithMin(string value) - { - Min = value; - return this; - } - - public TimeInput WithMin(DateTime value) - { - Min = value.ToShortTimeString(); - return this; - } - - public TimeInput WithPlaceholder(string value) - { - Placeholder = value; - return this; - } - - public TimeInput WithValue(string value) - { - Value = value; - return this; - } -} \ No newline at end of file diff --git a/Libraries/Microsoft.Teams.Cards/Inputs/ToggleInput.cs b/Libraries/Microsoft.Teams.Cards/Inputs/ToggleInput.cs deleted file mode 100644 index a0f94c11..00000000 --- a/Libraries/Microsoft.Teams.Cards/Inputs/ToggleInput.cs +++ /dev/null @@ -1,111 +0,0 @@ -using System.Text.Json.Serialization; - -using Microsoft.Teams.Common; - -namespace Microsoft.Teams.Cards; - -public partial class CardType : StringEnum -{ - public static readonly CardType ToggleInput = new("Input.Toggle"); - public bool IsToggleInput => ToggleInput.Equals(Value); -} - -/// -/// Allows a user to enter a number. -/// -public class ToggleInput : InputElement -{ - /// - /// Title for the toggle - /// - [JsonPropertyName("title")] - [JsonPropertyOrder(18)] - public string Title { get; set; } - - /// - /// The initial selected value. If you want the toggle to be initially on, set this to the value of valueOn‘s value. - /// - [JsonPropertyName("value")] - [JsonPropertyOrder(19)] - public StringBool? Value { get; set; } - - /// - /// The value when toggle is off - /// - [JsonPropertyName("valueOff")] - [JsonPropertyOrder(20)] - public StringBool? ValueOff { get; set; } - - /// - /// The value when toggle is on - /// - [JsonPropertyName("valueOn")] - [JsonPropertyOrder(21)] - public StringBool? ValueOn { get; set; } - - /// - /// If `true`, allow text to wrap. Otherwise, text is clipped. - /// - [JsonPropertyName("wrap")] - [JsonPropertyOrder(22)] - public bool? Wrap { get; set; } - - public ToggleInput(string title) : base(CardType.ToggleInput) - { - Title = title; - } - - public ToggleInput(string title, bool value) : base(CardType.ToggleInput) - { - Title = title; - Value = value == true ? StringBool.True : StringBool.False; - } - - public ToggleInput(string title, string value) : base(CardType.ToggleInput) - { - Title = title; - Value = new(value); - } - - public ToggleInput WithValue(bool value) - { - Value = value == true ? StringBool.True : StringBool.False; - return this; - } - - public ToggleInput WithValue(string value) - { - Value = new(value); - return this; - } - - public ToggleInput WithValueOff(bool value) - { - ValueOff = value == true ? StringBool.True : StringBool.False; - return this; - } - - public ToggleInput WithValueOff(string value) - { - ValueOff = new(value); - return this; - } - - public ToggleInput WithValueOn(bool value) - { - ValueOn = value == true ? StringBool.True : StringBool.False; - return this; - } - - public ToggleInput WithValueOn(string value) - { - ValueOn = new(value); - return this; - } - - public ToggleInput WithWrap(bool value = true) - { - Wrap = value; - return this; - } -} \ No newline at end of file diff --git a/Libraries/Microsoft.Teams.Cards/Layouts/AreaGridLayout.cs b/Libraries/Microsoft.Teams.Cards/Layouts/AreaGridLayout.cs deleted file mode 100644 index 8e9c2305..00000000 --- a/Libraries/Microsoft.Teams.Cards/Layouts/AreaGridLayout.cs +++ /dev/null @@ -1,170 +0,0 @@ -using System.Text.Json.Serialization; - -using Microsoft.Teams.Common; - -namespace Microsoft.Teams.Cards; - -public partial class CardType : StringEnum -{ - public static readonly CardType AreaGridLayout = new("Layout.AreaGrid"); - public bool IsAreaGridLayout => AreaGridLayout.Equals(Value); -} - -/// -/// A layout that divides a container into named areas into which elements can be placed. -/// -public class AreaGridLayout(params GridArea[] areas) : Layout(CardType.AreaGridLayout) -{ - /// - /// The areas in the grid layout. - /// - [JsonPropertyName("areas")] - [JsonPropertyOrder(2)] - public IList Areas { get; set; } = areas; - - /// - /// The columns in the grid layout, defined as a percentage of the available width or in pixels using the px format. - /// - [JsonPropertyName("columns")] - [JsonPropertyOrder(3)] - public IList> Columns { get; set; } = []; - - /// - /// The space between columns. - /// - [JsonPropertyName("columnSpacing")] - [JsonPropertyOrder(4)] - public Spacing? ColumnSpacing { get; set; } - - /// - /// Controls for which card width the layout should be used. - /// - [JsonPropertyName("rowSpacing")] - [JsonPropertyOrder(5)] - public Spacing? RowSpacing { get; set; } - - public AreaGridLayout WithColumnSpacing(Spacing value) - { - ColumnSpacing = value; - return this; - } - - public AreaGridLayout WithRowSpacing(Spacing value) - { - RowSpacing = value; - return this; - } - - public AreaGridLayout AddAreas(params GridArea[] value) - { - foreach (var area in value) - { - Areas.Add(area); - } - - return this; - } - - public AreaGridLayout AddColumns(params int[] value) - { - foreach (var column in value) - { - Columns.Add(new Union(column)); - } - - return this; - } - - public AreaGridLayout AddColumns(params string[] value) - { - foreach (var column in value) - { - Columns.Add(new Union(column)); - } - - return this; - } -} - -/// -/// Defines an area in a Layout.AreaGrid layout. -/// -public class GridArea -{ - /// - /// The start column index of the area. Column indices start at 1. - /// - [JsonPropertyName("column")] - [JsonPropertyOrder(0)] - public int? Column { get; set; } - - /// - /// Defines how many columns the area should span. - /// - [JsonPropertyName("columnSpan")] - [JsonPropertyOrder(1)] - public int? ColumnSpan { get; set; } - - /// - /// The name of the area. To place an element in this area, set its grid.area property to match the name of the area. - /// - [JsonPropertyName("name")] - [JsonPropertyOrder(2)] - public string? Name { get; set; } - - /// - /// The start row index of the area. Row indices start at 1. - /// - [JsonPropertyName("row")] - [JsonPropertyOrder(3)] - public int? Row { get; set; } - - /// - /// Defines how many rows the area should span. - /// - [JsonPropertyName("rowSpan")] - [JsonPropertyOrder(4)] - public int? RowSpan { get; set; } - - public GridArea WithColumn(int value, int? span) - { - Column = value; - - if (span is not null) - { - ColumnSpan = span; - } - - return this; - } - - public GridArea WithColumnSpan(int value) - { - ColumnSpan = value; - return this; - } - - public GridArea WithName(string value) - { - Name = value; - return this; - } - - public GridArea WithRow(int value, int? span) - { - Row = value; - - if (span is not null) - { - RowSpan = span; - } - - return this; - } - - public GridArea WithRowSpan(int value) - { - RowSpan = value; - return this; - } -} \ No newline at end of file diff --git a/Libraries/Microsoft.Teams.Cards/Layouts/FlowLayout.cs b/Libraries/Microsoft.Teams.Cards/Layouts/FlowLayout.cs deleted file mode 100644 index 04f65e7e..00000000 --- a/Libraries/Microsoft.Teams.Cards/Layouts/FlowLayout.cs +++ /dev/null @@ -1,134 +0,0 @@ -using System.Text.Json.Serialization; - -using Microsoft.Teams.Common; - -namespace Microsoft.Teams.Cards; - -public partial class CardType : StringEnum -{ - public static readonly CardType FlowLayout = new("Layout.Flow"); - public bool IsFlowLayout => FlowLayout.Equals(Value); -} - -/// -/// Controls how item should fit inside the container. -/// -[JsonConverter(typeof(JsonConverter))] -public partial class FlowLayoutItemFit(string value) : StringEnum(value, caseSensitive: false) -{ - public static readonly FlowLayoutItemFit Fit = new("Fit"); - public bool IsFit => Fit.Equals(Value); - - public static readonly FlowLayoutItemFit Fill = new("Fill"); - public bool IsFill => Fill.Equals(Value); -} - -/// -/// A layout that spreads elements horizontally and wraps them across multiple rows, as needed. -/// -public class FlowLayout() : Layout(CardType.FlowLayout) -{ - /// - /// The space between items. - /// - [JsonPropertyName("columnSpacing")] - [JsonPropertyOrder(2)] - public Spacing? ColumnSpacing { get; set; } - - /// - /// Controls how the content of the container should be horizontally aligned. - /// - [JsonPropertyName("horizontalItemsAlignment")] - [JsonPropertyOrder(3)] - public HorizontalAlignment? HorizontalItemsAlignment { get; set; } - - /// - /// Controls how item should fit inside the container. - /// - [JsonPropertyName("itemFit")] - [JsonPropertyOrder(4)] - public FlowLayoutItemFit? ItemFit { get; set; } - - /// - /// The width, in pixels, of each item, in the px format. Should not be used if maxItemWidth and/or minItemWidth are set. - /// - [JsonPropertyName("itemWidth")] - [JsonPropertyOrder(5)] - public string? ItemWidth { get; set; } - - /// - /// The maximum width, in pixels, of each item, in the px format. Should not be used if itemWidth is set. - /// - [JsonPropertyName("maxItemWidth")] - [JsonPropertyOrder(6)] - public string? MaxItemWidth { get; set; } - - /// - /// The minimum width, in pixels, of each item, in the px format. Should not be used if itemWidth is set. - /// - [JsonPropertyName("minItemWidth")] - [JsonPropertyOrder(7)] - public string? MinItemWidth { get; set; } - - /// - /// The space between rows of items. - /// - [JsonPropertyName("rowSpacing")] - [JsonPropertyOrder(8)] - public Spacing? RowSpacing { get; set; } - - /// - /// Controls how the content of the container should be vertically aligned. - /// - [JsonPropertyName("verticalItemsAlignment")] - [JsonPropertyOrder(9)] - public VerticalAlignment? VerticalItemsAlignment { get; set; } - - public FlowLayout WithColumnSpacing(Spacing value) - { - ColumnSpacing = value; - return this; - } - - public FlowLayout WithHorizontalAlignment(HorizontalAlignment value) - { - HorizontalItemsAlignment = value; - return this; - } - - public FlowLayout WithItemFit(FlowLayoutItemFit value) - { - ItemFit = value; - return this; - } - - public FlowLayout WithItemWidth(string value) - { - ItemWidth = value; - return this; - } - - public FlowLayout WithItemMinWidth(string value) - { - MinItemWidth = value; - return this; - } - - public FlowLayout WithItemMaxWidth(string value) - { - MaxItemWidth = value; - return this; - } - - public FlowLayout WithRowSpacing(Spacing value) - { - RowSpacing = value; - return this; - } - - public FlowLayout WithVerticalAlignment(VerticalAlignment value) - { - VerticalItemsAlignment = value; - return this; - } -} \ No newline at end of file diff --git a/Libraries/Microsoft.Teams.Cards/Layouts/Layout.cs b/Libraries/Microsoft.Teams.Cards/Layouts/Layout.cs deleted file mode 100644 index c305f801..00000000 --- a/Libraries/Microsoft.Teams.Cards/Layouts/Layout.cs +++ /dev/null @@ -1,29 +0,0 @@ -using System.Text.Json.Serialization; - -namespace Microsoft.Teams.Cards; - -/// -/// controls how elements are displayed -/// -public abstract class Layout(CardType type) -{ - /// - /// the layout card type - /// - [JsonPropertyName("type")] - [JsonPropertyOrder(0)] - public CardType Type { get; set; } = type; - - /// - /// Controls for which card width the layout should be used. - /// - [JsonPropertyName("targetWidth")] - [JsonPropertyOrder(1)] - public TargetWidth? TargetWidth { get; set; } - - public Layout WithTargetWidth(TargetWidth value) - { - TargetWidth = value; - return this; - } -} \ No newline at end of file diff --git a/Libraries/Microsoft.Teams.Cards/Layouts/StackLayout.cs b/Libraries/Microsoft.Teams.Cards/Layouts/StackLayout.cs deleted file mode 100644 index d7bc7782..00000000 --- a/Libraries/Microsoft.Teams.Cards/Layouts/StackLayout.cs +++ /dev/null @@ -1,16 +0,0 @@ -using Microsoft.Teams.Common; - -namespace Microsoft.Teams.Cards; - -public partial class CardType : StringEnum -{ - public static readonly CardType StackLayout = new("Layout.Stack"); - public bool IsStackLayout => StackLayout.Equals(Value); -} - -/// -/// A layout that stacks elements on top of each other. Layout.Stack is the default layout used by AdaptiveCard and all containers. -/// -public class StackLayout() : Layout(CardType.StackLayout) -{ -} \ No newline at end of file diff --git a/Libraries/Microsoft.Teams.Cards/Medias/BackgroundImage.cs b/Libraries/Microsoft.Teams.Cards/Medias/BackgroundImage.cs deleted file mode 100644 index a7565fb8..00000000 --- a/Libraries/Microsoft.Teams.Cards/Medias/BackgroundImage.cs +++ /dev/null @@ -1,105 +0,0 @@ -using System.Text.Json; -using System.Text.Json.Serialization; - -using Microsoft.Teams.Common; - -namespace Microsoft.Teams.Cards; - -public partial class CardType : StringEnum -{ - public static readonly CardType BackgroundImage = new("BackgroundImage"); - public bool IsBackgroundImage => BackgroundImage.Equals(Value); -} - -/// -/// Describes how the image should fill the area. -/// -[JsonConverter(typeof(JsonConverter))] -public partial class FillMode(string value) : StringEnum(value) -{ - public static readonly FillMode Cover = new("cover"); - public bool IsCover => Cover.Equals(Value); - - public static readonly FillMode Repeat = new("repeat"); - public bool IsRepeat => Repeat.Equals(Value); - - public static readonly FillMode RepeatHorizontally = new("repeatHorizontally"); - public bool IsRepeatHorizontally => RepeatHorizontally.Equals(Value); - - public static readonly FillMode RepeatVertically = new("repeatVertically"); - public bool IsRepeatVertically => RepeatVertically.Equals(Value); -} - -/// -/// Specifies a background image. Acceptable formats are PNG, JPEG, and GIF -/// -public class BackgroundImage(string uri) -{ - /// - /// the card type - /// - [JsonPropertyName("type")] - [JsonPropertyOrder(0)] - public CardType Type { get; set; } = CardType.BackgroundImage; - - /// - /// The URL (or data url) of the image. Acceptable formats are PNG, JPEG, and GIF - /// - [JsonPropertyName("uri")] - [JsonPropertyOrder(1)] - public string Uri { get; set; } = uri; - - /// - /// Describes how the image should fill the area. - /// - [JsonPropertyName("fillMode")] - [JsonPropertyOrder(2)] - public FillMode? FillMode { get; set; } - - /// - /// Describes how the image should be aligned if it must be cropped or if using repeat fill mode. - /// - [JsonPropertyName("horizontalAlignment")] - [JsonPropertyOrder(3)] - public HorizontalAlignment? HorizontalAlignment { get; set; } - - /// - /// Describes how the image should be aligned if it must be cropped or if using repeat fill mode. - /// - [JsonPropertyName("verticalAlignment")] - [JsonPropertyOrder(4)] - public VerticalAlignment? VerticalAlignment { get; set; } - - public BackgroundImage WithUri(string value) - { - Uri = value; - return this; - } - - public BackgroundImage WithFillMode(FillMode value) - { - FillMode = value; - return this; - } - - public BackgroundImage WithHorizontalAlignment(HorizontalAlignment value) - { - HorizontalAlignment = value; - return this; - } - - public BackgroundImage WithVerticalAlignment(VerticalAlignment value) - { - VerticalAlignment = value; - return this; - } - - public override string ToString() - { - return JsonSerializer.Serialize(this, new JsonSerializerOptions() - { - WriteIndented = true, - DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull - }); - } -} \ No newline at end of file diff --git a/Libraries/Microsoft.Teams.Cards/Medias/Badge.cs b/Libraries/Microsoft.Teams.Cards/Medias/Badge.cs deleted file mode 100644 index b7026feb..00000000 --- a/Libraries/Microsoft.Teams.Cards/Medias/Badge.cs +++ /dev/null @@ -1,188 +0,0 @@ -using System.Text.Json.Serialization; - -using Microsoft.Teams.Common; - -namespace Microsoft.Teams.Cards; - -public partial class CardType : StringEnum -{ - public static readonly CardType Badge = new("Badge"); - public bool IsBadge => Badge.Equals(Value); -} - -[JsonConverter(typeof(JsonConverter))] -public partial class BadgeAppearance(string value) : StringEnum(value) -{ - public static readonly BadgeAppearance Filled = new("filled"); - public bool IsFilled => Filled.Equals(Value); - - public static readonly BadgeAppearance Tint = new("tint"); - public bool IsTint => Tint.Equals(Value); -} - -[JsonConverter(typeof(JsonConverter))] -public partial class BadgeStyle(string value) : StringEnum(value) -{ - public static readonly BadgeStyle Default = new("default"); - public bool IsDefault => Default.Equals(Value); - - public static readonly BadgeStyle Subtle = new("subtle"); - public bool IsSubtle => Subtle.Equals(Value); - - public static readonly BadgeStyle Informative = new("informative"); - public bool IsInformative => Informative.Equals(Value); - - public static readonly BadgeStyle Accent = new("accent"); - public bool IsAccent => Accent.Equals(Value); - - public static readonly BadgeStyle Good = new("good"); - public bool IsGood => Good.Equals(Value); - - public static readonly BadgeStyle Attention = new("attention"); - public bool IsAttention => Attention.Equals(Value); - - public static readonly BadgeStyle Warning = new("warning"); - public bool IsWarning => Warning.Equals(Value); -} - -[JsonConverter(typeof(JsonConverter))] -public partial class BadgeShape(string value) : StringEnum(value) -{ - public static readonly BadgeShape Square = new("square"); - public bool IsSquare => Square.Equals(Value); - - public static readonly BadgeShape Rounded = new("rounded"); - public bool IsRounded => Rounded.Equals(Value); - - public static readonly BadgeShape Circular = new("circular"); - public bool IsCircular => Circular.Equals(Value); -} - -[JsonConverter(typeof(JsonConverter))] -public partial class BadgeSize(string value) : StringEnum(value) -{ - public static readonly BadgeSize Medium = new("medium"); - public bool IsMedium => Medium.Equals(Value); - - public static readonly BadgeSize Large = new("large"); - public bool IsLarge => Large.Equals(Value); - - public static readonly BadgeSize ExtraLarge = new("extraLarge"); - public bool IsExtraLarge => ExtraLarge.Equals(Value); -} - -/// -/// A badge element to show an icon and/or text in a compact form over a colored background. -/// -public class Badge() : Element(CardType.Badge) -{ - /// - /// Controls the strength of the background color. - /// - [JsonPropertyName("appearance")] - [JsonPropertyOrder(12)] - public BadgeAppearance? Appearance { get; set; } - - /// - /// The name of the icon to display. - /// - [JsonPropertyName("icon")] - [JsonPropertyOrder(13)] - public string? Icon { get; set; } - - /// - /// Controls the position of the icon. - /// - [JsonPropertyName("iconPosition")] - [JsonPropertyOrder(14)] - public IconPosition? IconPosition { get; set; } - - /// - /// Controls the shape of the badge. - /// - [JsonPropertyName("shape")] - [JsonPropertyOrder(15)] - public BadgeShape? Shape { get; set; } - - /// - /// The size of the badge. - /// - [JsonPropertyName("size")] - [JsonPropertyOrder(16)] - public BadgeSize? Size { get; set; } - - /// - /// The style of the badge. - /// - [JsonPropertyName("style")] - [JsonPropertyOrder(17)] - public BadgeStyle? Style { get; set; } - - /// - /// The text to display. - /// - [JsonPropertyName("text")] - [JsonPropertyOrder(18)] - public string? Text { get; set; } - - /// - /// Controls the tooltip text to display when the badge is hovered over. - /// - [JsonPropertyName("tooltip")] - [JsonPropertyOrder(19)] - public string? Tooltip { get; set; } - - public Badge WithAppearance(BadgeAppearance value) - { - Appearance = value; - return this; - } - - public Badge WithIcon(string value, IconPosition? position) - { - Icon = value; - - if (position is not null) - { - IconPosition = position; - } - - return this; - } - - public Badge WithIconPosition(IconPosition value) - { - IconPosition = value; - return this; - } - - public Badge WithShape(BadgeShape value) - { - Shape = value; - return this; - } - - public Badge WithSize(BadgeSize value) - { - Size = value; - return this; - } - - public Badge WithStyle(BadgeStyle value) - { - Style = value; - return this; - } - - public Badge WithText(string value) - { - Text = value; - return this; - } - - public Badge WithTooltip(string value) - { - Tooltip = value; - return this; - } -} \ No newline at end of file diff --git a/Libraries/Microsoft.Teams.Cards/Medias/CodeBlock.cs b/Libraries/Microsoft.Teams.Cards/Medias/CodeBlock.cs deleted file mode 100644 index ad75dbbb..00000000 --- a/Libraries/Microsoft.Teams.Cards/Medias/CodeBlock.cs +++ /dev/null @@ -1,132 +0,0 @@ -using System.Text.Json.Serialization; - -using Microsoft.Teams.Common; - -namespace Microsoft.Teams.Cards; - -public partial class CardType : StringEnum -{ - public static readonly CardType CodeBlock = new("CodeBlock"); - public bool IsCodeBlock => CodeBlock.Equals(Value); -} - -[JsonConverter(typeof(JsonConverter))] -public partial class CodeLanguage(string value) : StringEnum(value, caseSensitive: false) -{ - public static readonly CodeLanguage Bash = new("Bash"); - public bool IsBash => Bash.Equals(Value); - - public static readonly CodeLanguage C = new("C"); - public bool IsC => C.Equals(Value); - - public static readonly CodeLanguage Cpp = new("Cpp"); - public bool IsCpp => Cpp.Equals(Value); - - public static readonly CodeLanguage CSharp = new("CSharp"); - public bool IsCSharp => CSharp.Equals(Value); - - public static readonly CodeLanguage Css = new("Css"); - public bool IsCss => Css.Equals(Value); - - public static readonly CodeLanguage Dos = new("Dos"); - public bool IsDos => Dos.Equals(Value); - - public static readonly CodeLanguage Go = new("Go"); - public bool IsGo => Go.Equals(Value); - - public static readonly CodeLanguage Graphql = new("Graphql"); - public bool IsGraphql => Graphql.Equals(Value); - - public static readonly CodeLanguage Html = new("Html"); - public bool IsHtml => Html.Equals(Value); - - public static readonly CodeLanguage Java = new("Java"); - public bool IsJava => Java.Equals(Value); - - public static readonly CodeLanguage JavaScript = new("JavaScript"); - public bool IsJavaScript => JavaScript.Equals(Value); - - public static readonly CodeLanguage Json = new("Json"); - public bool IsJson => Json.Equals(Value); - - public static readonly CodeLanguage ObjectiveC = new("ObjectiveC"); - public bool IsObjectiveC => ObjectiveC.Equals(Value); - - public static readonly CodeLanguage Perl = new("Perl"); - public bool IsPerl => Perl.Equals(Value); - - public static readonly CodeLanguage PHP = new("Php"); - public bool IsPHP => PHP.Equals(Value); - - public static readonly CodeLanguage PlainText = new("PlainText"); - public bool IsPlainText => PlainText.Equals(Value); - - public static readonly CodeLanguage PowerShell = new("PowerShell"); - public bool IsPowerShell => PowerShell.Equals(Value); - - public static readonly CodeLanguage Python = new("Python"); - public bool IsPython => Python.Equals(Value); - - public static readonly CodeLanguage SQL = new("Sql"); - public bool IsSQL => SQL.Equals(Value); - - public static readonly CodeLanguage TypeScript = new("TypeScript"); - public bool IsTypeScript => TypeScript.Equals(Value); - - public static readonly CodeLanguage VbNet = new("VbNet"); - public bool IsVbNet => VbNet.Equals(Value); - - public static readonly CodeLanguage Verilog = new("Verilog"); - public bool IsVerilog => Verilog.Equals(Value); - - public static readonly CodeLanguage Vhdl = new("Vhdl"); - public bool IsVhdl => Vhdl.Equals(Value); - - public static readonly CodeLanguage XML = new("Xml"); - public bool IsXML => XML.Equals(Value); -} - -/// -/// Displays a block of code with syntax highlighting -/// -public class CodeBlock() : Element(CardType.CodeBlock) -{ - /// - /// which programming language to use. - /// - [JsonPropertyName("language")] - [JsonPropertyOrder(12)] - public CodeLanguage? Language { get; set; } - - /// - /// code to display/highlight. - /// - [JsonPropertyName("codeSnippet")] - [JsonPropertyOrder(13)] - public string? CodeSnippet { get; set; } - - /// - /// which line number to display on the first line. - /// - [JsonPropertyName("startLineNumber")] - [JsonPropertyOrder(14)] - public int? StartLineNumber { get; set; } - - public CodeBlock WithLanguage(CodeLanguage value) - { - Language = value; - return this; - } - - public CodeBlock WithCode(string value) - { - CodeSnippet = value; - return this; - } - - public CodeBlock WithStartLineNumber(int value) - { - StartLineNumber = value; - return this; - } -} \ No newline at end of file diff --git a/Libraries/Microsoft.Teams.Cards/Medias/Icon.cs b/Libraries/Microsoft.Teams.Cards/Medias/Icon.cs deleted file mode 100644 index e327f071..00000000 --- a/Libraries/Microsoft.Teams.Cards/Medias/Icon.cs +++ /dev/null @@ -1,121 +0,0 @@ -using System.Text.Json.Serialization; - -using Microsoft.Teams.Common; - -namespace Microsoft.Teams.Cards; - -public partial class CardType : StringEnum -{ - public static readonly CardType Icon = new("Icon"); - public bool IsIcon => Icon.Equals(Value); -} - -/// -/// Describes how an icon should be positionally displayed. -/// -[JsonConverter(typeof(JsonConverter))] -public partial class IconPosition(string value) : StringEnum(value) -{ - public static readonly IconPosition Before = new("before"); - public bool IsBefore => Before.Equals(Value); - - public static readonly IconPosition After = new("after"); - public bool IsAfter => After.Equals(Value); -} - -[JsonConverter(typeof(JsonConverter))] -public partial class IconStyle(string value) : StringEnum(value) -{ - public static readonly IconStyle Regular = new("Regular"); - public bool IsRegular => Regular.Equals(Value); - - public static readonly IconStyle Filled = new("Filled"); - public bool IsFilled => Filled.Equals(Value); -} - -[JsonConverter(typeof(JsonConverter))] -public partial class IconSize(string value) : StringEnum(value) -{ - public static readonly IconSize XXSmall = new("xxSmall"); - public bool IsXXSmall => XXSmall.Equals(Value); - - public static readonly IconSize XSmall = new("xSmall"); - public bool IsXSmall => XSmall.Equals(Value); - - public static readonly IconSize Standard = new("Standard"); - public bool IsStandard => Standard.Equals(Value); - - public static readonly IconSize Medium = new("Medium"); - public bool IsMedium => Medium.Equals(Value); - - public static readonly IconSize Large = new("Large"); - public bool IsLarge => Large.Equals(Value); - - public static readonly IconSize XLarge = new("xLarge"); - public bool IsXLarge => XLarge.Equals(Value); - - public static readonly IconSize XXLarge = new("xxLarge"); - public bool IsXXLarge => XXLarge.Equals(Value); -} - -public class Icon(string name) : Element(CardType.Icon) -{ - /// - /// name of the icon. - /// - [JsonPropertyName("name")] - [JsonPropertyOrder(12)] - public string Name { get; set; } = name; - - /// - /// size of the icon. - /// - [JsonPropertyName("size")] - [JsonPropertyOrder(13)] - public IconSize? Size { get; set; } - - /// - /// style of the icon. - /// - [JsonPropertyName("style")] - [JsonPropertyOrder(14)] - public IconStyle? Style { get; set; } - - /// - /// color of the icon. - /// - [JsonPropertyName("color")] - [JsonPropertyOrder(15)] - public Color? Color { get; set; } - - /// - /// select action - /// - [JsonPropertyName("selectAction")] - [JsonPropertyOrder(16)] - public SelectAction? SelectAction { get; set; } - - public Icon WithSize(IconSize value) - { - Size = value; - return this; - } - - public Icon WithStyle(IconStyle value) - { - Style = value; - return this; - } - - public Icon WithColor(Color value) - { - Color = value; - return this; - } - - public Icon WithSelectAction(SelectAction value) - { - SelectAction = value; - return this; - } -} \ No newline at end of file diff --git a/Libraries/Microsoft.Teams.Cards/Medias/Image.cs b/Libraries/Microsoft.Teams.Cards/Medias/Image.cs deleted file mode 100644 index 005b5e5c..00000000 --- a/Libraries/Microsoft.Teams.Cards/Medias/Image.cs +++ /dev/null @@ -1,150 +0,0 @@ -using System.Text.Json.Serialization; - -using Microsoft.Teams.Common; - -namespace Microsoft.Teams.Cards; - -public partial class CardType : StringEnum -{ - public static readonly CardType Image = new("Image"); - public bool IsImage => Image.Equals(Value); -} - -[JsonConverter(typeof(JsonConverter))] -public partial class ImageStyle(string value) : StringEnum(value, caseSensitive: false) -{ - public static readonly ImageStyle Default = new("default"); - public bool IsDefault => Default.Equals(Value); - - public static readonly ImageStyle Person = new("person"); - public bool IsPerson => Person.Equals(Value); -} - -[JsonConverter(typeof(JsonConverter))] -public partial class ImageSize(string value) : StringEnum(value, caseSensitive: false) -{ - public static readonly ImageSize Auto = new("auto"); - public bool IsAuto => Auto.Equals(Value); - - public static readonly ImageSize Stretch = new("stretch"); - public bool IsStretch => Stretch.Equals(Value); - - public static readonly ImageSize Small = new("small"); - public bool IsSmall => Small.Equals(Value); - - public static readonly ImageSize Medium = new("medium"); - public bool IsMedium => Medium.Equals(Value); - - public static readonly ImageSize Large = new("large"); - public bool IsLarge => Large.Equals(Value); -} - -/// -/// Displays an image. Acceptable formats are PNG, JPEG, and GIF -/// -public class Image(string url) : Element(CardType.Image) -{ - /// - /// The URL to the image. Supports data URI in version 1.2+ - /// - [JsonPropertyName("url")] - [JsonPropertyOrder(12)] - public string Url { get; set; } = url; - - /// - /// Alternate text describing the image. - /// - [JsonPropertyName("altText")] - [JsonPropertyOrder(13)] - public string? AltText { get; set; } - - /// - /// Controls if the image can be expanded to full screen. - /// - [JsonPropertyName("allowExpand")] - [JsonPropertyOrder(14)] - public bool? AllowExpand { get; set; } - - /// - /// Applies a background to a transparent image. This property will respect the image style. - /// - [JsonPropertyName("backgroundColor")] - [JsonPropertyOrder(15)] - public string? BackgroundColor { get; set; } - - /// - /// An Action that will be invoked when the Image is tapped or selected. Action.ShowCard is not supported. - /// - [JsonPropertyName("selectAction")] - [JsonPropertyOrder(16)] - public SelectAction? SelectAction { get; set; } - - /// - /// Controls the approximate size of the image. The physical dimensions will vary per host. - /// - [JsonPropertyName("size")] - [JsonPropertyOrder(17)] - public ImageSize? Size { get; set; } - - /// - /// Controls how this Image is displayed. - /// - [JsonPropertyName("style")] - [JsonPropertyOrder(18)] - public ImageStyle? Style { get; set; } - - /// - /// The desired on-screen width of the image, ending in ‘px’. E.g., 50px. This overrides the size property. - /// - [JsonPropertyName("width")] - [JsonPropertyOrder(19)] - public string? Width { get; set; } - - public Image WithUrl(string value) - { - Url = value; - return this; - } - - public Image WithAltText(string value) - { - AltText = value; - return this; - } - - public Image WithAllowExpand(bool value = true) - { - AllowExpand = value; - return this; - } - - public Image WithBackgroundColor(string value) - { - BackgroundColor = value; - return this; - } - - public Image WithSelectAction(SelectAction value) - { - SelectAction = value; - return this; - } - - public Image WithSize(ImageSize value) - { - Size = value; - return this; - } - - public Image WithStyle(ImageStyle value) - { - Style = value; - return this; - } - - public Image WithWidth(string value) - { - Width = value; - return this; - } -} \ No newline at end of file diff --git a/Libraries/Microsoft.Teams.Cards/Medias/Media.cs b/Libraries/Microsoft.Teams.Cards/Medias/Media.cs deleted file mode 100644 index 5a675c2a..00000000 --- a/Libraries/Microsoft.Teams.Cards/Medias/Media.cs +++ /dev/null @@ -1,126 +0,0 @@ -using System.Text.Json.Serialization; - -using Microsoft.Teams.Common; - -namespace Microsoft.Teams.Cards; - -public partial class CardType : StringEnum -{ - public static readonly CardType Media = new("Media"); - public bool IsMedia => Media.Equals(Value); -} - -/// -/// Defines a source for a Media element -/// -public class MediaSource -{ - /// - /// URL to media. Supports data URI in version 1.2+ - /// - [JsonPropertyName("url")] - [JsonPropertyOrder(0)] - public required string Url { get; set; } - - /// - /// Mime type of associated media (e.g. "video/mp4"). For YouTube and other Web video URLs, mimeType can be omitted. - /// - [JsonPropertyName("mimeType")] - [JsonPropertyOrder(1)] - public string? MimeType { get; set; } -} - -/// -/// Defines a source for captions -/// -public class CaptionSource -{ - /// - /// Label of this caption to show to the user. - /// - [JsonPropertyName("label")] - [JsonPropertyOrder(0)] - public required string Label { get; set; } - - /// - /// URL to captions. - /// - [JsonPropertyName("url")] - [JsonPropertyOrder(1)] - public required string Url { get; set; } - - /// - /// Mime type of associated caption file (e.g. "vtt"). For rendering in JavaScript, only "vtt" is supported, for rendering in UWP, "vtt" and "srt" are supported. - /// - [JsonPropertyName("mimeType")] - [JsonPropertyOrder(2)] - public required string MimeType { get; set; } -} - -/// -/// Displays a media player for audio or video content. -/// -public class Media(params MediaSource[] sources) : Element(CardType.Media) -{ - /// - /// URL of an image to display before playing. Supports data URI in version 1.2+. If poster is omitted, the Media element will either use a default poster (controlled by the host application) or will attempt to automatically pull the poster from the target video service when the source URL points to a video from a Web provider such as YouTube. - /// - [JsonPropertyName("poster")] - [JsonPropertyOrder(13)] - public string? Poster { get; set; } - - /// - /// Alternate text describing the audio or video. - /// - [JsonPropertyName("altText")] - [JsonPropertyOrder(14)] - public string? AltText { get; set; } - - /// - /// Array of media sources to attempt to play. - /// - [JsonPropertyName("sources")] - [JsonPropertyOrder(12)] - public IList Sources { get; set; } = sources; - - /// - /// Array of captions sources for the media element to provide. - /// - [JsonPropertyName("captionSources")] - [JsonPropertyOrder(15)] - public IList? CaptionSources { get; set; } - - public Media WithPoster(string value) - { - Poster = value; - return this; - } - - public Media WithAltText(string value) - { - AltText = value; - return this; - } - - public Media AddSources(params MediaSource[] value) - { - foreach (var source in value) - { - Sources.Add(source); - } - - return this; - } - - public Media AddCaptionSources(params CaptionSource[] value) - { - CaptionSources ??= []; - - foreach (var source in value) - { - CaptionSources.Add(source); - } - - return this; - } -} \ No newline at end of file diff --git a/Libraries/Microsoft.Teams.Cards/Medias/ProgressBar.cs b/Libraries/Microsoft.Teams.Cards/Medias/ProgressBar.cs deleted file mode 100644 index 03fe0045..00000000 --- a/Libraries/Microsoft.Teams.Cards/Medias/ProgressBar.cs +++ /dev/null @@ -1,56 +0,0 @@ -using System.Text.Json.Serialization; - -using Microsoft.Teams.Common; - -namespace Microsoft.Teams.Cards; - -public partial class CardType : StringEnum -{ - public static readonly CardType ProgressBar = new("ProgressBar"); - public bool IsProgressBar => ProgressBar.Equals(Value); -} - -/// -/// A progress bar element, to represent a value within a range. -/// -public class ProgressBar() : Element(CardType.ProgressBar) -{ - /// - /// the fill color of the progress bar - /// - [JsonPropertyName("color")] - [JsonPropertyOrder(12)] - public Color? Color { get; set; } - - /// - /// the current progress value - /// - [JsonPropertyName("value")] - [JsonPropertyOrder(13)] - public int? Value { get; set; } - - /// - /// the max progress value - /// - [JsonPropertyName("max")] - [JsonPropertyOrder(14)] - public int? Max { get; set; } - - public ProgressBar WithColor(Color value) - { - Color = value; - return this; - } - - public ProgressBar WithValue(int value) - { - Value = value; - return this; - } - - public ProgressBar WithMax(int value) - { - Max = value; - return this; - } -} \ No newline at end of file diff --git a/Libraries/Microsoft.Teams.Cards/Medias/ProgressRing.cs b/Libraries/Microsoft.Teams.Cards/Medias/ProgressRing.cs deleted file mode 100644 index cbea989d..00000000 --- a/Libraries/Microsoft.Teams.Cards/Medias/ProgressRing.cs +++ /dev/null @@ -1,95 +0,0 @@ -using System.Text.Json.Serialization; - -using Microsoft.Teams.Common; - -namespace Microsoft.Teams.Cards; - -public partial class CardType : StringEnum -{ - public static readonly CardType ProgressRing = new("ProgressRing"); - public bool IsProgressRing => ProgressRing.Equals(Value); -} - -/// -/// Controls the relative position of the label to the progress ring. -/// -[JsonConverter(typeof(JsonConverter))] -public partial class ProgressRingLabelPosition(string value) : StringEnum(value) -{ - public static readonly ProgressRingLabelPosition Before = new("before"); - public bool IsBefore => Before.Equals(Value); - - public static readonly ProgressRingLabelPosition After = new("after"); - public bool IsAfter => After.Equals(Value); - - public static readonly ProgressRingLabelPosition Above = new("above"); - public bool IsAbove => Above.Equals(Value); - - public static readonly ProgressRingLabelPosition Below = new("below"); - public bool IsBelow => Below.Equals(Value); -} - -/// -/// The size of the progress ring. -/// -[JsonConverter(typeof(JsonConverter))] -public partial class ProgressRingSize(string value) : StringEnum(value) -{ - public static readonly ProgressRingSize Tiny = new("tiny"); - public bool IsTiny => Tiny.Equals(Value); - - public static readonly ProgressRingSize Small = new("small"); - public bool IsSmall => Small.Equals(Value); - - public static readonly ProgressRingSize Medium = new("medium"); - public bool IsMedium => Medium.Equals(Value); - - public static readonly ProgressRingSize Large = new("large"); - public bool IsLarge => Large.Equals(Value); -} - -/// -/// A spinning ring element, to indicate progress. -/// -public class ProgressRing() : Element(CardType.ProgressRing) -{ - /// - /// The label of the progress ring. - /// - [JsonPropertyName("label")] - [JsonPropertyOrder(12)] - public string? Label { get; set; } - - /// - /// Controls the relative position of the label to the progress ring. - /// - [JsonPropertyName("labelPosition")] - [JsonPropertyOrder(13)] - public ProgressRingLabelPosition? LabelPosition { get; set; } - - /// - /// The size of the progress ring. - /// - [JsonPropertyName("size")] - [JsonPropertyOrder(14)] - public ProgressRingSize? Size { get; set; } - - public ProgressRing WithLabel(string value, ProgressRingLabelPosition? position) - { - Label = value; - LabelPosition ??= position; - return this; - } - - public ProgressRing WithLabelPosition(ProgressRingLabelPosition value) - { - LabelPosition = value; - return this; - } - - public ProgressRing WithSize(ProgressRingSize value) - { - Size = value; - return this; - } -} \ No newline at end of file diff --git a/Libraries/Microsoft.Teams.Cards/Medias/RichTextBlock.cs b/Libraries/Microsoft.Teams.Cards/Medias/RichTextBlock.cs deleted file mode 100644 index e068c13f..00000000 --- a/Libraries/Microsoft.Teams.Cards/Medias/RichTextBlock.cs +++ /dev/null @@ -1,69 +0,0 @@ -using System.Text.Json.Serialization; - -using Microsoft.Teams.Common; - -namespace Microsoft.Teams.Cards; - -public partial class CardType : StringEnum -{ - public static readonly CardType RichTextBlock = new("RichTextBlock"); - public bool IsRichTextBlock => RichTextBlock.Equals(Value); -} - -/// -/// Defines an array of inlines, allowing for inline text formatting. -/// -public class RichTextBlock : Element -{ - /// - /// The array of inlines. - /// - [JsonPropertyName("inlines")] - [JsonPropertyOrder(12)] - public IList Inlines { get; set; } - - public RichTextBlock() : base(CardType.RichTextBlock) - { - Inlines = []; - } - - public RichTextBlock(params TextRun[] inlines) : base(CardType.RichTextBlock) - { - Inlines = []; - - foreach (var inline in inlines) - { - Inlines.Add(inline); - } - } - - public RichTextBlock(params string[] inlines) : base(CardType.RichTextBlock) - { - Inlines = []; - - foreach (var inline in inlines) - { - Inlines.Add(new TextRun(inline)); - } - } - - public RichTextBlock AddText(params TextRun[] value) - { - foreach (var inline in value) - { - Inlines.Add(inline); - } - - return this; - } - - public RichTextBlock AddText(params string[] value) - { - foreach (var inline in value) - { - Inlines.Add(new TextRun(inline)); - } - - return this; - } -} \ No newline at end of file diff --git a/Libraries/Microsoft.Teams.Cards/Medias/TextBlock.cs b/Libraries/Microsoft.Teams.Cards/Medias/TextBlock.cs deleted file mode 100644 index 946d3be9..00000000 --- a/Libraries/Microsoft.Teams.Cards/Medias/TextBlock.cs +++ /dev/null @@ -1,147 +0,0 @@ -using System.Text.Json.Serialization; - -using Microsoft.Teams.Common; - -namespace Microsoft.Teams.Cards; - -public partial class CardType : StringEnum -{ - public static readonly CardType TextBlock = new("TextBlock"); - public bool IsTextBlock => TextBlock.Equals(Value); -} - -/// -/// The style of this TextBlock for accessibility purposes. -/// -[JsonConverter(typeof(JsonConverter))] -public partial class TextBlockStyle(string value) : StringEnum(value) -{ - public static readonly TextBlockStyle Default = new("default"); - public bool IsDefault => Default.Equals(Value); - - public static readonly TextBlockStyle Heading = new("heading"); - public bool IsHeading => Heading.Equals(Value); -} - -/// -/// Displays text, allowing control over font sizes, weight, and color. -/// -public class TextBlock(string text) : Element(CardType.TextBlock) -{ - /// - /// Text to display. A subset of markdown is supported (https://aka.ms/ACTextFeatures) - /// - [JsonPropertyName("text")] - [JsonPropertyOrder(12)] - public string Text { get; set; } = text; - - /// - /// The style of this TextBlock for accessibility purposes. - /// - [JsonPropertyName("style")] - [JsonPropertyOrder(13)] - public TextBlockStyle? Style { get; set; } - - /// - /// Controls the color of TextBlock elements. - /// - [JsonPropertyName("color")] - [JsonPropertyOrder(14)] - public Color? Color { get; set; } - - /// - /// Type of font to use for rendering - /// - [JsonPropertyName("fontType")] - [JsonPropertyOrder(15)] - public FontType? FontType { get; set; } - - /// - /// If true, displays text slightly toned down to appear less prominent. - /// - [JsonPropertyName("isSubtle")] - [JsonPropertyOrder(16)] - public bool? IsSubtle { get; set; } - - /// - /// Specifies the maximum number of lines to display. - /// - [JsonPropertyName("maxLines")] - [JsonPropertyOrder(17)] - public int? MaxLines { get; set; } - - /// - /// Controls size of text. - /// - [JsonPropertyName("size")] - [JsonPropertyOrder(18)] - public FontSize? Size { get; set; } - - /// - /// Controls the weight of TextBlock elements. - /// - [JsonPropertyName("weight")] - [JsonPropertyOrder(19)] - public FontWeight? Weight { get; set; } - - /// - /// If true, allow text to wrap. Otherwise, text is clipped. - /// - [JsonPropertyName("wrap")] - [JsonPropertyOrder(20)] - public bool? Wrap { get; set; } - - public TextBlock WithStyle(TextBlockStyle value) - { - Style = value; - return this; - } - - public TextBlock WithColor(Color value) - { - Color = value; - return this; - } - - public TextBlock WithFontType(FontType value) - { - FontType = value; - return this; - } - - public TextBlock WithSubtle(bool value = true) - { - IsSubtle = value; - return this; - } - - public TextBlock WithMaxLines(int value) - { - MaxLines = value; - return this; - } - - public TextBlock WithSize(FontSize value) - { - Size = value; - return this; - } - - public TextBlock WithWeight(FontWeight value) - { - Weight = value; - return this; - } - - public TextBlock WithWrap(bool value = true) - { - Wrap = value; - return this; - } - - public TextBlock AddText(params string[] value) - { - Text += string.Join("", value); - return this; - } -} \ No newline at end of file diff --git a/Libraries/Microsoft.Teams.Cards/Medias/TextRun.cs b/Libraries/Microsoft.Teams.Cards/Medias/TextRun.cs deleted file mode 100644 index 2a2774df..00000000 --- a/Libraries/Microsoft.Teams.Cards/Medias/TextRun.cs +++ /dev/null @@ -1,177 +0,0 @@ -using System.Text.Json; -using System.Text.Json.Serialization; - -using Microsoft.Teams.Common; - -namespace Microsoft.Teams.Cards; - -public partial class CardType : StringEnum -{ - public static readonly CardType TextRun = new("TextRun"); - public bool IsTextRun => TextRun.Equals(Value); -} - -/// -/// Defines a single run of formatted text. A TextRun with no properties set can be represented in the json as string containing the text as a shorthand for the json object. These two representations are equivalent. -/// -public class TextRun(string text) -{ - /// - /// the card type - /// - [JsonPropertyName("type")] - [JsonPropertyOrder(0)] - public CardType Type { get; set; } = CardType.TextRun; - - /// - /// Text to display. Markdown is not supported. - /// - [JsonPropertyName("text")] - [JsonPropertyOrder(1)] - public string Text { get; set; } = text; - - /// - /// Controls the color of the text. - /// - [JsonPropertyName("color")] - [JsonPropertyOrder(2)] - public Color? Color { get; set; } - - /// - /// The type of font to use - /// - [JsonPropertyName("fontType")] - [JsonPropertyOrder(3)] - public FontType? FontType { get; set; } - - /// - /// If true, displays the text highlighted. - /// - [JsonPropertyName("highlight")] - [JsonPropertyOrder(4)] - public bool? Highlight { get; set; } - - /// - /// If true, displays text slightly toned down to appear less prominent. - /// - [JsonPropertyName("isSubtle")] - [JsonPropertyOrder(5)] - public bool? IsSubtle { get; set; } - - /// - /// If true, displays the text using italic font. - /// - [JsonPropertyName("italic")] - [JsonPropertyOrder(6)] - public bool? Italic { get; set; } - - /// - /// Action to invoke when this text run is clicked. Visually changes the text run into a hyperlink. Action.ShowCard is not supported. - /// - [JsonPropertyName("selectAction")] - [JsonPropertyOrder(7)] - public SelectAction? SelectAction { get; set; } - - /// - /// Controls size of text. - /// - [JsonPropertyName("size")] - [JsonPropertyOrder(8)] - public FontSize? Size { get; set; } - - /// - /// If true, displays the text with strikethrough. - /// - [JsonPropertyName("strikeThrough")] - [JsonPropertyOrder(9)] - public bool? StrikeThrough { get; set; } - - /// - /// If true, displays the text with an underline. - /// - [JsonPropertyName("underline")] - [JsonPropertyOrder(10)] - public bool? Underline { get; set; } - - /// - /// Controls the weight of the text. - /// - [JsonPropertyName("weight")] - [JsonPropertyOrder(11)] - public FontWeight? Weight { get; set; } - - public TextRun WithColor(Color value) - { - Color = value; - return this; - } - - public TextRun WithFontType(FontType value) - { - FontType = value; - return this; - } - - public TextRun WithHighlight(bool value = true) - { - Highlight = value; - return this; - } - - public TextRun WithSubtle(bool value = true) - { - IsSubtle = value; - return this; - } - - public TextRun WithItalic(bool value = true) - { - Italic = value; - return this; - } - - public TextRun WithSelectAction(SelectAction value) - { - SelectAction = value; - return this; - } - - public TextRun WithSize(FontSize value) - { - Size = value; - return this; - } - - public TextRun WithStrikeThrough(bool value = true) - { - StrikeThrough = value; - return this; - } - - public TextRun WithUnderline(bool value = true) - { - Underline = value; - return this; - } - - public TextRun WithWeight(FontWeight value) - { - Weight = value; - return this; - } - - public TextRun AddText(params string[] value) - { - Text += string.Join("", value); - return this; - } - - public override string ToString() - { - return JsonSerializer.Serialize(this, new JsonSerializerOptions() - { - WriteIndented = true, - DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull - }); - } -} \ No newline at end of file