Merge branch 'master' into development
This commit is contained in:
@@ -398,30 +398,42 @@ public class BotBaseBuilder : IAPIKeySelectionStage, IMessageLoopSelectionStage,
|
||||
|
||||
#region "Step 7 (Language)"
|
||||
|
||||
public IThreadingStage DefaultLanguage()
|
||||
/// <inheritdoc cref="ILanguageSelectionStage.DefaultLanguage"/>
|
||||
public IBuildingStage DefaultLanguage()
|
||||
{
|
||||
return this;
|
||||
}
|
||||
|
||||
public IThreadingStage UseEnglish()
|
||||
/// <inheritdoc cref="ILanguageSelectionStage.UseEnglish"/>
|
||||
public IBuildingStage UseEnglish()
|
||||
{
|
||||
Default.Language = new English();
|
||||
return this;
|
||||
}
|
||||
|
||||
public IThreadingStage UseGerman()
|
||||
/// <inheritdoc cref="ILanguageSelectionStage.UseGerman"/>
|
||||
public IBuildingStage UseGerman()
|
||||
{
|
||||
Default.Language = new German();
|
||||
return this;
|
||||
}
|
||||
|
||||
public IThreadingStage UsePersian()
|
||||
/// <inheritdoc cref="ILanguageSelectionStage.UsePersian"/>
|
||||
public IBuildingStage UsePersian()
|
||||
{
|
||||
Default.Language = new Persian();
|
||||
return this;
|
||||
}
|
||||
|
||||
public IThreadingStage Custom(Localization language)
|
||||
/// <inheritdoc cref="ILanguageSelectionStage.UseRussian"/>
|
||||
public IBuildingStage UseRussian()
|
||||
{
|
||||
Default.Language = new Russian();
|
||||
return this;
|
||||
}
|
||||
|
||||
/// <inheritdoc cref="ILanguageSelectionStage.Custom"/>
|
||||
public IBuildingStage Custom(Localization language)
|
||||
{
|
||||
Default.Language = language;
|
||||
return this;
|
||||
|
||||
@@ -2,35 +2,44 @@
|
||||
|
||||
namespace TelegramBotBase.Builder.Interfaces;
|
||||
|
||||
/// <summary>
|
||||
/// Represents the language selection stage in the localization process.
|
||||
/// </summary>
|
||||
public interface ILanguageSelectionStage
|
||||
{
|
||||
/// <summary>
|
||||
/// Selects the default language for control usage. (English)
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
IThreadingStage DefaultLanguage();
|
||||
/// <returns>The next stage in the building process.</returns>
|
||||
IBuildingStage DefaultLanguage();
|
||||
|
||||
/// <summary>
|
||||
/// Selects english as the default language for control labels.
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
IThreadingStage UseEnglish();
|
||||
/// <returns>The next stage in the building process.</returns>
|
||||
IBuildingStage UseEnglish();
|
||||
|
||||
/// <summary>
|
||||
/// Selects german as the default language for control labels.
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
IThreadingStage UseGerman();
|
||||
/// <returns>The next stage in the building process.</returns>
|
||||
IBuildingStage UseGerman();
|
||||
|
||||
/// <summary>
|
||||
/// Selects persian as the default language for control labels.
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
IThreadingStage UsePersian();
|
||||
/// <returns>The next stage in the building process.</returns>
|
||||
IBuildingStage UsePersian();
|
||||
|
||||
/// <summary>
|
||||
/// Selects russian as the default language for control labels.
|
||||
/// </summary>
|
||||
/// <returns>The next stage in the building process.</returns>
|
||||
IBuildingStage UseRussian();
|
||||
|
||||
/// <summary>
|
||||
/// Selects a custom language as the default language for control labels.
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
IThreadingStage Custom(Localization language);
|
||||
/// <returns>The next stage in the building process.</returns>
|
||||
IBuildingStage Custom(Localization language);
|
||||
}
|
||||
@@ -426,8 +426,6 @@ public class ButtonGrid : ControlBase
|
||||
return;
|
||||
}
|
||||
|
||||
await result.ConfirmAction(ConfirmationText ?? "");
|
||||
|
||||
ButtonRow match = null;
|
||||
var index = -1;
|
||||
|
||||
@@ -462,6 +460,8 @@ public class ButtonGrid : ControlBase
|
||||
check:
|
||||
if (match != null)
|
||||
{
|
||||
await result.ConfirmAction(ConfirmationText ?? "");
|
||||
|
||||
await OnButtonClicked(new ButtonClickedEventArgs(match.GetButtonMatch(result.RawData, false), index,
|
||||
match));
|
||||
|
||||
|
||||
@@ -29,8 +29,6 @@ public class TaggedButtonGrid : MultiView
|
||||
|
||||
public string BackLabel = Default.Language["ButtonGrid_Back"];
|
||||
|
||||
public string CheckAllLabel = Default.Language["ButtonGrid_CheckAll"];
|
||||
|
||||
public string NextPageLabel = Default.Language["ButtonGrid_NextPage"];
|
||||
|
||||
public string NoItemsLabel = Default.Language["ButtonGrid_NoItems"];
|
||||
@@ -39,11 +37,17 @@ public class TaggedButtonGrid : MultiView
|
||||
|
||||
public string SearchLabel = Default.Language["ButtonGrid_SearchFeature"];
|
||||
|
||||
public string UncheckAllLabel = Default.Language["ButtonGrid_UncheckAll"];
|
||||
public string TotalTagsLabel = Default.Language["TaggedButtonGrid_TotalTags"];
|
||||
|
||||
public string CheckedTagsLabel = Default.Language["TaggedButtonGrid_CheckedTags"];
|
||||
|
||||
public string CheckAllLabel = Default.Language["TaggedButtonGrid_CheckAll"];
|
||||
|
||||
public string UncheckAllLabel = Default.Language["TaggedButtonGrid_UncheckAll"];
|
||||
|
||||
public string SearchIcon = Default.Language["ButtonGrid_SearchIcon"];
|
||||
|
||||
public string TagIcon = Default.Language["ButtonGrid_TagIcon"];
|
||||
public string TagIcon = Default.Language["TaggedButtonGrid_TagIcon"];
|
||||
|
||||
public TaggedButtonGrid()
|
||||
{
|
||||
@@ -379,14 +383,6 @@ public class TaggedButtonGrid : MultiView
|
||||
index = br.Item2;
|
||||
}
|
||||
|
||||
|
||||
//var button = HeadLayoutButtonRow?. .FirstOrDefault(a => a.Text.Trim() == result.MessageText)
|
||||
// ?? SubHeadLayoutButtonRow?.FirstOrDefault(a => a.Text.Trim() == result.MessageText);
|
||||
|
||||
// bf.ToList().FirstOrDefault(a => a.Text.Trim() == result.MessageText)
|
||||
|
||||
//var index = bf.FindRowByButton(button);
|
||||
|
||||
check:
|
||||
|
||||
|
||||
@@ -490,10 +486,16 @@ public class TaggedButtonGrid : MultiView
|
||||
if (result.MessageText == CheckAllLabel)
|
||||
{
|
||||
CheckAllTags();
|
||||
Updated();
|
||||
result.Handled = true;
|
||||
return;
|
||||
}
|
||||
else if (result.MessageText == UncheckAllLabel)
|
||||
{
|
||||
UncheckAllTags();
|
||||
Updated();
|
||||
result.Handled = true;
|
||||
return;
|
||||
}
|
||||
|
||||
var i = result.MessageText.LastIndexOf(" ");
|
||||
@@ -569,15 +571,6 @@ public class TaggedButtonGrid : MultiView
|
||||
index = br.Item2;
|
||||
}
|
||||
|
||||
|
||||
//var bf = DataSource.ButtonForm;
|
||||
|
||||
//var button = HeadLayoutButtonRow?.FirstOrDefault(a => a.Value == result.RawData)
|
||||
// ?? SubHeadLayoutButtonRow?.FirstOrDefault(a => a.Value == result.RawData)
|
||||
// ?? bf.ToList().FirstOrDefault(a => a.Value == result.RawData);
|
||||
|
||||
//var index = bf.FindRowByButton(button);
|
||||
|
||||
check:
|
||||
if (match != null)
|
||||
{
|
||||
@@ -619,22 +612,47 @@ public class TaggedButtonGrid : MultiView
|
||||
|
||||
break;
|
||||
|
||||
case "$back$":
|
||||
|
||||
SelectedViewIndex = 0;
|
||||
default:
|
||||
|
||||
if (SelectedViewIndex != 1)
|
||||
return;
|
||||
|
||||
|
||||
switch (result.RawData)
|
||||
{
|
||||
case "$back$":
|
||||
|
||||
SelectedViewIndex = 0;
|
||||
Updated();
|
||||
|
||||
return;
|
||||
|
||||
case "$checkall$":
|
||||
|
||||
CheckAllTags();
|
||||
|
||||
return;
|
||||
|
||||
case "$uncheckall$":
|
||||
|
||||
UncheckAllTags();
|
||||
|
||||
return;
|
||||
|
||||
}
|
||||
|
||||
if (SelectedTags.Contains(result.RawData))
|
||||
{
|
||||
SelectedTags.Remove(result.RawData);
|
||||
}
|
||||
else
|
||||
{
|
||||
SelectedTags.Add(result.RawData);
|
||||
}
|
||||
|
||||
Updated();
|
||||
|
||||
break;
|
||||
|
||||
case "$checkall$":
|
||||
|
||||
CheckAllTags();
|
||||
|
||||
break;
|
||||
|
||||
case "$uncheckall$":
|
||||
|
||||
UncheckAllTags();
|
||||
|
||||
break;
|
||||
}
|
||||
@@ -723,8 +741,10 @@ public class TaggedButtonGrid : MultiView
|
||||
|
||||
if (EnableCheckAllTools)
|
||||
{
|
||||
TagsSubHeadLayoutButtonRow = new ButtonRow(new ButtonBase(CheckAllLabel, "$checkall$"),
|
||||
new ButtonBase(UncheckAllLabel, "$uncheckall$"));
|
||||
TagsSubHeadLayoutButtonRow = new ButtonRow(new ButtonBase(string.Format(TotalTagsLabel, Tags.Count), "$total$"),
|
||||
new ButtonBase(CheckAllLabel, "$checkall$"),
|
||||
new ButtonBase(UncheckAllLabel, "$uncheckall$"),
|
||||
new ButtonBase(string.Format(CheckedTagsLabel, SelectedTags.Count), "checked$"));
|
||||
bf.AddButtonRow(TagsSubHeadLayoutButtonRow);
|
||||
}
|
||||
|
||||
@@ -756,10 +776,6 @@ public class TaggedButtonGrid : MultiView
|
||||
return;
|
||||
}
|
||||
|
||||
//if (bf.Count == 0)
|
||||
// return;
|
||||
|
||||
|
||||
var rkm = (ReplyKeyboardMarkup)bf;
|
||||
rkm.ResizeKeyboard = ResizeKeyboard;
|
||||
rkm.OneTimeKeyboard = OneTimeKeyboard;
|
||||
@@ -881,21 +897,20 @@ public class TaggedButtonGrid : MultiView
|
||||
{
|
||||
Message m = null;
|
||||
|
||||
var form = DataSource.PickItems(CurrentPageIndex * ItemRowsPerPage, ItemRowsPerPage,
|
||||
EnableSearch ? SearchQuery : null);
|
||||
|
||||
//if (this.EnableSearch && this.SearchQuery != null && this.SearchQuery != "")
|
||||
//{
|
||||
// form = form.FilterDuplicate(this.SearchQuery, true);
|
||||
//}
|
||||
//else
|
||||
//{
|
||||
// form = form.Duplicate();
|
||||
//}
|
||||
ButtonForm form = null;
|
||||
|
||||
if (Tags != null && SelectedTags != null)
|
||||
{
|
||||
form = DataSource.PickAllItems(EnableSearch ? SearchQuery : null); //CurrentPageIndex * ItemRowsPerPage, ItemRowsPerPage,
|
||||
|
||||
form = form.TagDuplicate(SelectedTags);
|
||||
|
||||
form = new ButtonForm(form.ToRowList().Skip(CurrentPageIndex * ItemRowsPerPage).Take(ItemRowsPerPage));
|
||||
}
|
||||
else
|
||||
{
|
||||
form = DataSource.PickItems(CurrentPageIndex * ItemRowsPerPage, ItemRowsPerPage,
|
||||
EnableSearch ? SearchQuery : null);
|
||||
}
|
||||
|
||||
if (EnablePaging)
|
||||
|
||||
@@ -23,6 +23,11 @@ public class ButtonForm
|
||||
DependencyControl = control;
|
||||
}
|
||||
|
||||
public ButtonForm(IEnumerable<ButtonRow> rows)
|
||||
{
|
||||
_buttons = rows.ToList();
|
||||
}
|
||||
|
||||
|
||||
public IReplyMarkup Markup { get; set; }
|
||||
|
||||
@@ -149,6 +154,11 @@ public class ButtonForm
|
||||
.Aggregate((a, b) => a.Union(b).ToList());
|
||||
}
|
||||
|
||||
public List<ButtonRow> ToRowList()
|
||||
{
|
||||
return _buttons;
|
||||
}
|
||||
|
||||
public InlineKeyboardButton[][] ToInlineButtonArray()
|
||||
{
|
||||
var ikb = _buttons.Select(a => a.ToArray().Select(b => b.ToInlineButton(this)).ToArray()).ToArray();
|
||||
|
||||
@@ -12,8 +12,10 @@ public sealed class English : Localization
|
||||
Values["ButtonGrid_CurrentPage"] = "Page {0} of {1}";
|
||||
Values["ButtonGrid_SearchFeature"] = "💡 Send a message to filter the list. Click the 🔍 to reset the filter.";
|
||||
Values["ButtonGrid_Back"] = "Back";
|
||||
Values["ButtonGrid_CheckAll"] = "Check all";
|
||||
Values["ButtonGrid_UncheckAll"] = "Uncheck all";
|
||||
Values["TaggedButtonGrid_TotalTags"] = "Total: {0}";
|
||||
Values["TaggedButtonGrid_CheckedTags"] = "Checked: {0}";
|
||||
Values["TaggedButtonGrid_CheckAll"] = "Check all";
|
||||
Values["TaggedButtonGrid_UncheckAll"] = "Uncheck all";
|
||||
Values["CalendarPicker_Title"] = "Pick date";
|
||||
Values["CalendarPicker_PreviousPage"] = "◀️";
|
||||
Values["CalendarPicker_NextPage"] = "▶️";
|
||||
@@ -31,6 +33,6 @@ public sealed class English : Localization
|
||||
Values["PromptDialog_Back"] = "Back";
|
||||
Values["ToggleButton_Changed"] = "Setting changed";
|
||||
Values["ButtonGrid_SearchIcon"] = "🔍";
|
||||
Values["ButtonGrid_TagIcon"] = "📁";
|
||||
Values["TaggedButtonGrid_TagIcon"] = "📁";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,11 +10,12 @@ public sealed class German : Localization
|
||||
Values["ButtonGrid_PreviousPage"] = "◀️";
|
||||
Values["ButtonGrid_NextPage"] = "▶️";
|
||||
Values["ButtonGrid_CurrentPage"] = "Seite {0} von {1}";
|
||||
Values["ButtonGrid_SearchFeature"] =
|
||||
"💡 Sende eine Nachricht um die Liste zu filtern. Klicke die 🔍 um den Filter zurückzusetzen.";
|
||||
Values["ButtonGrid_SearchFeature"] = "💡 Sende eine Nachricht um die Liste zu filtern. Klicke die 🔍 um den Filter zurückzusetzen.";
|
||||
Values["ButtonGrid_Back"] = "Zurück";
|
||||
Values["ButtonGrid_CheckAll"] = "Alle auswählen";
|
||||
Values["ButtonGrid_UncheckAll"] = "Keine auswählen";
|
||||
Values["TaggedButtonGrid_TotalTags"] = "Gesamt: {0}";
|
||||
Values["TaggedButtonGrid_CheckedTags"] = "Ausgewählt: {0}";
|
||||
Values["TaggedButtonGrid_CheckAll"] = "Alle auswählen";
|
||||
Values["TaggedButtonGrid_UncheckAll"] = "Keine auswählen";
|
||||
Values["CalendarPicker_Title"] = "Datum auswählen";
|
||||
Values["CalendarPicker_PreviousPage"] = "◀️";
|
||||
Values["CalendarPicker_NextPage"] = "▶️";
|
||||
@@ -31,5 +32,7 @@ public sealed class German : Localization
|
||||
Values["MultiToggleButton_Changed"] = "Ausgewählt";
|
||||
Values["PromptDialog_Back"] = "Zurück";
|
||||
Values["ToggleButton_Changed"] = "Einstellung geändert";
|
||||
Values["ButtonGrid_SearchIcon"] = "🔍";
|
||||
Values["TaggedButtonGrid_TagIcon"] = "📁";
|
||||
}
|
||||
}
|
||||
@@ -1,37 +1,39 @@
|
||||
namespace TelegramBotBase.Localizations
|
||||
namespace TelegramBotBase.Localizations;
|
||||
|
||||
public sealed class Persian : Localization
|
||||
{
|
||||
public sealed class Persian : Localization
|
||||
public Persian()
|
||||
{
|
||||
public Persian()
|
||||
{
|
||||
Values["Language"] = "فارسی";
|
||||
Values["ButtonGrid_Title"] = "منو";
|
||||
Values["ButtonGrid_NoItems"] = "هیچ آیتمی وجود ندارد.";
|
||||
Values["ButtonGrid_PreviousPage"] = "◀️";
|
||||
Values["ButtonGrid_NextPage"] = "▶️";
|
||||
Values["ButtonGrid_CurrentPage"] = "صفحه ی {0} از {1}";
|
||||
Values["ButtonGrid_SearchFeature"] = "💡 برای فیلتر کردن لیست پیام ارسال کنید. برای بازنشانی فیلتر روی 🔍 کلیک کنید.";
|
||||
Values["ButtonGrid_Back"] = "بازگشت";
|
||||
Values["ButtonGrid_CheckAll"] = "بررسی کردن همه";
|
||||
Values["ButtonGrid_UncheckAll"] = "بررسی نکردن همه";
|
||||
Values["CalendarPicker_Title"] = "تاریخ را انتخاب کنید";
|
||||
Values["CalendarPicker_PreviousPage"] = "◀️";
|
||||
Values["CalendarPicker_NextPage"] = "▶️";
|
||||
Values["TreeView_Title"] = "گره را انتخاب کنید";
|
||||
Values["TreeView_LevelUp"] = "🔼 سطح بالا";
|
||||
Values["ToggleButton_On"] = "روشن";
|
||||
Values["ToggleButton_Off"] = "خاموش";
|
||||
Values["ToggleButton_OnIcon"] = "⚫";
|
||||
Values["ToggleButton_OffIcon"] = "⚪";
|
||||
Values["ToggleButton_Title"] = "تغییر وضعیت";
|
||||
Values["ToggleButton_Changed"] = "انتخاب شده";
|
||||
Values["MultiToggleButton_SelectedIcon"] = "✅";
|
||||
Values["MultiToggleButton_Title"] = "چند تعویض";
|
||||
Values["MultiToggleButton_Changed"] = "انتخاب شده";
|
||||
Values["PromptDialog_Back"] = "بازگشت";
|
||||
Values["ToggleButton_Changed"] = "تنظیمات تغییر کرد";
|
||||
Values["ButtonGrid_SearchIcon"] = "🔍";
|
||||
Values["ButtonGrid_TagIcon"] = "📁";
|
||||
}
|
||||
Values["Language"] = "فارسی";
|
||||
Values["ButtonGrid_Title"] = "منو";
|
||||
Values["ButtonGrid_NoItems"] = "هیچ آیتمی وجود ندارد.";
|
||||
Values["ButtonGrid_PreviousPage"] = "◀️";
|
||||
Values["ButtonGrid_NextPage"] = "▶️";
|
||||
Values["ButtonGrid_CurrentPage"] = "صفحه ی {0} از {1}";
|
||||
Values["ButtonGrid_SearchFeature"] = "💡 برای فیلتر کردن لیست پیام ارسال کنید. برای بازنشانی فیلتر روی 🔍 کلیک کنید.";
|
||||
Values["ButtonGrid_Back"] = "بازگشت";
|
||||
Values["TaggedButtonGrid_TotalTags"] = "Total: {0}";
|
||||
Values["TaggedButtonGrid_CheckedTags"] = "Checked: {0}";
|
||||
Values["TaggedButtonGrid_CheckAll"] = "بررسی کردن همه";
|
||||
Values["TaggedButtonGrid_UncheckAll"] = "بررسی نکردن همه";
|
||||
Values["CalendarPicker_Title"] = "تاریخ را انتخاب کنید";
|
||||
Values["CalendarPicker_PreviousPage"] = "◀️";
|
||||
Values["CalendarPicker_NextPage"] = "▶️";
|
||||
Values["TreeView_Title"] = "گره را انتخاب کنید";
|
||||
Values["TreeView_LevelUp"] = "🔼 سطح بالا";
|
||||
Values["ToggleButton_On"] = "روشن";
|
||||
Values["ToggleButton_Off"] = "خاموش";
|
||||
Values["ToggleButton_OnIcon"] = "⚫";
|
||||
Values["ToggleButton_OffIcon"] = "⚪";
|
||||
Values["ToggleButton_Title"] = "تغییر وضعیت";
|
||||
Values["ToggleButton_Changed"] = "انتخاب شده";
|
||||
Values["MultiToggleButton_SelectedIcon"] = "✅";
|
||||
Values["MultiToggleButton_Title"] = "چند تعویض";
|
||||
Values["MultiToggleButton_Changed"] = "انتخاب شده";
|
||||
Values["PromptDialog_Back"] = "بازگشت";
|
||||
Values["ToggleButton_Changed"] = "تنظیمات تغییر کرد";
|
||||
Values["ButtonGrid_SearchIcon"] = "🔍";
|
||||
Values["TaggedButtonGrid_TagIcon"] = "📁";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,38 @@
|
||||
namespace TelegramBotBase.Localizations;
|
||||
|
||||
public sealed class Russian : Localization
|
||||
{
|
||||
public Russian()
|
||||
{
|
||||
Values["Language"] = "Русский (Russian)";
|
||||
Values["ButtonGrid_Title"] = "Меню";
|
||||
Values["ButtonGrid_NoItems"] = "Нет доступных элементов.";
|
||||
Values["ButtonGrid_PreviousPage"] = "◀️";
|
||||
Values["ButtonGrid_NextPage"] = "▶️";
|
||||
Values["ButtonGrid_CurrentPage"] = "Страница {0} из {1}";
|
||||
Values["ButtonGrid_SearchFeature"] = "💡 Отправьте сообщение, чтобы отфильтровать список. Нажмите на 🔍, чтобы сбросить фильтр.";
|
||||
Values["ButtonGrid_Back"] = "Назад";
|
||||
Values["TaggedButtonGrid_TotalTags"] = "Всего: {0}";
|
||||
Values["TaggedButtonGrid_CheckedTags"] = "Отмечено: {0}";
|
||||
Values["TaggedButtonGrid_CheckAll"] = "Выделить все";
|
||||
Values["TaggedButtonGrid_UncheckAll"] = "Отменить выбор";
|
||||
Values["CalendarPicker_Title"] = "Календарь / Выберите дату";
|
||||
Values["CalendarPicker_PreviousPage"] = "◀️";
|
||||
Values["CalendarPicker_NextPage"] = "▶️";
|
||||
Values["TreeView_Title"] = "Выберите пункт";
|
||||
Values["TreeView_LevelUp"] = "🔼 Обратно";
|
||||
Values["ToggleButton_On"] = "Вкл";
|
||||
Values["ToggleButton_Off"] = "Выкл";
|
||||
Values["ToggleButton_OnIcon"] = "⚫";
|
||||
Values["ToggleButton_OffIcon"] = "⚪";
|
||||
Values["ToggleButton_Title"] = "Переключить";
|
||||
Values["ToggleButton_Changed"] = "Выбрано";
|
||||
Values["MultiToggleButton_SelectedIcon"] = "✅";
|
||||
Values["MultiToggleButton_Title"] = "Множественный выбор";
|
||||
Values["MultiToggleButton_Changed"] = "Выбрано";
|
||||
Values["PromptDialog_Back"] = "Назад";
|
||||
Values["ToggleButton_Changed"] = "Настройки изменены";
|
||||
Values["ButtonGrid_SearchIcon"] = "🔍";
|
||||
Values["TaggedButtonGrid_TagIcon"] = "📁";
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user