diff --git a/docs/404.html b/docs/404.html new file mode 100644 index 0000000..e90a4fd --- /dev/null +++ b/docs/404.html @@ -0,0 +1,33 @@ + + + + + + + + + Coho.UI, WPF Library documentation + + + + +

404

How did we get here?
Take me home
+ + + diff --git a/docs/assets/404.html-60b35caa.js b/docs/assets/404.html-60b35caa.js new file mode 100644 index 0000000..7a25b17 --- /dev/null +++ b/docs/assets/404.html-60b35caa.js @@ -0,0 +1 @@ +const t=JSON.parse('{"key":"v-3706649a","path":"/404.html","title":"","lang":"en-US","frontmatter":{"layout":"NotFound"},"headers":[],"git":{},"filePathRelative":null}');export{t as data}; diff --git a/docs/assets/404.html-76d21eea.js b/docs/assets/404.html-76d21eea.js new file mode 100644 index 0000000..974ebcc --- /dev/null +++ b/docs/assets/404.html-76d21eea.js @@ -0,0 +1 @@ +import{_ as e,o as c,c as t}from"./app-e0605d3e.js";const _={};function o(r,n){return c(),t("div")}const a=e(_,[["render",o],["__file","404.html.vue"]]);export{a as default}; diff --git a/docs/assets/ApplicationWindow.html-9115126c.js b/docs/assets/ApplicationWindow.html-9115126c.js new file mode 100644 index 0000000..3ff5f5b --- /dev/null +++ b/docs/assets/ApplicationWindow.html-9115126c.js @@ -0,0 +1 @@ +const t=JSON.parse('{"key":"v-6119cdde","path":"/windows/ApplicationWindow.html","title":"ApplicationWindow","lang":"en-US","frontmatter":{},"headers":[],"git":{},"filePathRelative":"windows/ApplicationWindow.md"}');export{t as data}; diff --git a/docs/assets/ApplicationWindow.html-d6051307.js b/docs/assets/ApplicationWindow.html-d6051307.js new file mode 100644 index 0000000..eccef16 --- /dev/null +++ b/docs/assets/ApplicationWindow.html-d6051307.js @@ -0,0 +1 @@ +import{_ as e,o as t,c as a,a as o,b as n}from"./app-e0605d3e.js";const i="/Coho.UI/assets/ribbonbarwindow-d80a3311.png",s="/Coho.UI/assets/menubarwindow-7ec05645.png",c={},r=o("h1",{id:"applicationwindow",tabindex:"-1"},[o("a",{class:"header-anchor",href:"#applicationwindow","aria-hidden":"true"},"#"),n(" ApplicationWindow")],-1),l=o("p",null,"The ApplicationWindow base class lets you create the main window of your application that will contain the RibbonBar or the MenuBar.",-1),p=o("p",null,[o("img",{src:i,alt:"PageFabric app uses the RibbonBar"})],-1),d=o("p",null,[o("img",{src:s,alt:"PowerDocs app uses the MenuBar"})],-1),_=[r,l,p,d];function h(u,w){return t(),a("div",null,_)}const m=e(c,[["render",h],["__file","ApplicationWindow.html.vue"]]);export{m as default}; diff --git a/docs/assets/FolderPickerTextbox.html-3cd65330.js b/docs/assets/FolderPickerTextbox.html-3cd65330.js new file mode 100644 index 0000000..470918e --- /dev/null +++ b/docs/assets/FolderPickerTextbox.html-3cd65330.js @@ -0,0 +1,2 @@ +import{_ as e,o as a,c as t,e as r}from"./app-e0605d3e.js";const o={},d=r(`

FolderPickerTextbox Control

Namespace: Coho.UI.Controls.Textboxes, inherits from TextBox

The FolderPickerTextbox is a text box that contains a button that allows the user to open the native folder picker dialog to select a folder.

Properties

Text

Type: string
The value of the text box.

Events

SelectionChanged

Type:EventHandler<string>
This event fires when the users selects a path in the folder picker dialog. The string argument is the selected path.

Examples

Example 1

<textboxes:FolderPickerTextbox x:Name="TbDefaultFolder" Width="240" />
+
`,12),i=[d];function n(c,s){return a(),t("div",null,i)}const l=e(o,[["render",n],["__file","FolderPickerTextbox.html.vue"]]);export{l as default}; diff --git a/docs/assets/FolderPickerTextbox.html-ab0722f6.js b/docs/assets/FolderPickerTextbox.html-ab0722f6.js new file mode 100644 index 0000000..fe98e0c --- /dev/null +++ b/docs/assets/FolderPickerTextbox.html-ab0722f6.js @@ -0,0 +1 @@ +const e=JSON.parse('{"key":"v-0927a752","path":"/controls/FolderPickerTextbox.html","title":"FolderPickerTextbox Control","lang":"en-US","frontmatter":{},"headers":[{"level":2,"title":"Properties","slug":"properties","link":"#properties","children":[{"level":3,"title":"Text","slug":"text","link":"#text","children":[]}]},{"level":2,"title":"Events","slug":"events","link":"#events","children":[{"level":3,"title":"SelectionChanged","slug":"selectionchanged","link":"#selectionchanged","children":[]}]},{"level":2,"title":"Examples","slug":"examples","link":"#examples","children":[{"level":3,"title":"Example 1","slug":"example-1","link":"#example-1","children":[]}]}],"git":{},"filePathRelative":"controls/FolderPickerTextbox.md"}');export{e as data}; diff --git a/docs/assets/GenericPickerTextbox.html-0f50f56d.js b/docs/assets/GenericPickerTextbox.html-0f50f56d.js new file mode 100644 index 0000000..e7401e1 --- /dev/null +++ b/docs/assets/GenericPickerTextbox.html-0f50f56d.js @@ -0,0 +1 @@ +import{_ as e,o as c,c as r}from"./app-e0605d3e.js";const t={};function o(n,_){return c(),r("div")}const s=e(t,[["render",o],["__file","GenericPickerTextbox.html.vue"]]);export{s as default}; diff --git a/docs/assets/GenericPickerTextbox.html-832f12ca.js b/docs/assets/GenericPickerTextbox.html-832f12ca.js new file mode 100644 index 0000000..598fa9b --- /dev/null +++ b/docs/assets/GenericPickerTextbox.html-832f12ca.js @@ -0,0 +1 @@ +const e=JSON.parse('{"key":"v-3dfe4e80","path":"/controls/GenericPickerTextbox.html","title":"","lang":"en-US","frontmatter":{},"headers":[],"git":{},"filePathRelative":"controls/GenericPickerTextbox.md"}');export{e as data}; diff --git a/docs/assets/MasterAccentSplitButton.html-1d4b84a1.js b/docs/assets/MasterAccentSplitButton.html-1d4b84a1.js new file mode 100644 index 0000000..a427936 --- /dev/null +++ b/docs/assets/MasterAccentSplitButton.html-1d4b84a1.js @@ -0,0 +1 @@ +const e=JSON.parse('{"key":"v-2a0d90d9","path":"/controls/MasterAccentSplitButton.html","title":"MasterAccentSplitButton Control","lang":"en-US","frontmatter":{},"headers":[{"level":2,"title":"Properties","slug":"properties","link":"#properties","children":[{"level":3,"title":"DropDownContent","slug":"dropdowncontent","link":"#dropdowncontent","children":[]},{"level":3,"title":"Icon","slug":"icon","link":"#icon","children":[]},{"level":3,"title":"Text","slug":"text","link":"#text","children":[]}]},{"level":2,"title":"Methods","slug":"methods","link":"#methods","children":[]},{"level":2,"title":"Events","slug":"events","link":"#events","children":[{"level":3,"title":"Click","slug":"click","link":"#click","children":[]}]},{"level":2,"title":"Examples","slug":"examples","link":"#examples","children":[{"level":3,"title":"Example 1","slug":"example-1","link":"#example-1","children":[]}]}],"git":{},"filePathRelative":"controls/MasterAccentSplitButton.md"}');export{e as data}; diff --git a/docs/assets/MasterAccentSplitButton.html-71dfd961.js b/docs/assets/MasterAccentSplitButton.html-71dfd961.js new file mode 100644 index 0000000..ca83633 --- /dev/null +++ b/docs/assets/MasterAccentSplitButton.html-71dfd961.js @@ -0,0 +1,9 @@ +import{_ as e,o as t,c as a,e as n}from"./app-e0605d3e.js";const o={},c=n(`

MasterAccentSplitButton Control

Namespace: Coho.UI.Controls.Buttons, inherits from Button

The MasterAccentSplitButton is a button that it usually used to start an activity in the application. For example, in Microsoft Office, you can find them in the Backstage view, to create new documents. It's a split button that uses the AccentColor resource as background. The text uses a semi bold weight. It supports an icon (brush resource).

Properties

Type: object
The content of the dropdown menu.

Icon

Type: brush
The icon to display in the button.

Text

Type: string
The text to display in the button.

Methods

None.

Events

Click

Type: RoutedEventHandler
Occurs when the user clicks the left part of the button.

Examples

Example 1

<buttons:MasterAccentSplitButton Text="Create new" Icon="{DynamicResource IconMagic}" Click="MasterAccentSplitButton_Click">
+   <buttons:MasterAccentSplitButton.DropDownContent>
+      <StackPanel>
+         <MenuItem Header="Item 1" />
+         <MenuItem Header="Item 2" />
+      </StackPanel>
+   </buttons:MasterAccentSplitButton.DropDownContent>
+</buttons:MasterAccentSplitButton>
+
`,18),r=[c];function i(d,s){return t(),a("div",null,r)}const h=e(o,[["render",i],["__file","MasterAccentSplitButton.html.vue"]]);export{h as default}; diff --git a/docs/assets/RibbonExtraButton.html-13adef65.js b/docs/assets/RibbonExtraButton.html-13adef65.js new file mode 100644 index 0000000..d48e38c --- /dev/null +++ b/docs/assets/RibbonExtraButton.html-13adef65.js @@ -0,0 +1 @@ +import{_ as e,o,c as n,a as t,b as r}from"./app-e0605d3e.js";const a={},c=t("h1",{id:"the-ribbonextrabutton-control",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#the-ribbonextrabutton-control","aria-hidden":"true"},"#"),r(" The RibbonExtraButton control")],-1),s=[c];function i(_,b){return o(),n("div",null,s)}const h=e(a,[["render",i],["__file","RibbonExtraButton.html.vue"]]);export{h as default}; diff --git a/docs/assets/RibbonExtraButton.html-c2f4763f.js b/docs/assets/RibbonExtraButton.html-c2f4763f.js new file mode 100644 index 0000000..9c89857 --- /dev/null +++ b/docs/assets/RibbonExtraButton.html-c2f4763f.js @@ -0,0 +1 @@ +const t=JSON.parse('{"key":"v-6d080da6","path":"/controls/RibbonExtraButton.html","title":"The RibbonExtraButton control","lang":"en-US","frontmatter":{},"headers":[],"git":{},"filePathRelative":"controls/RibbonExtraButton.md"}');export{t as data}; diff --git a/docs/assets/SecondaryWindow.html-52f7b390.js b/docs/assets/SecondaryWindow.html-52f7b390.js new file mode 100644 index 0000000..e082cf2 --- /dev/null +++ b/docs/assets/SecondaryWindow.html-52f7b390.js @@ -0,0 +1 @@ +import{_ as o,o as n,c as a,a as e,b as c}from"./app-e0605d3e.js";const d={},t=e("h1",{id:"secondarywindow",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#secondarywindow","aria-hidden":"true"},"#"),c(" SecondaryWindow")],-1),r=e("p",null,"// todo",-1),s=[t,r];function _(i,l){return n(),a("div",null,s)}const f=o(d,[["render",_],["__file","SecondaryWindow.html.vue"]]);export{f as default}; diff --git a/docs/assets/SecondaryWindow.html-7cba5db5.js b/docs/assets/SecondaryWindow.html-7cba5db5.js new file mode 100644 index 0000000..bde03bd --- /dev/null +++ b/docs/assets/SecondaryWindow.html-7cba5db5.js @@ -0,0 +1 @@ +const e=JSON.parse('{"key":"v-4fc0787a","path":"/windows/SecondaryWindow.html","title":"SecondaryWindow","lang":"en-US","frontmatter":{},"headers":[],"git":{},"filePathRelative":"windows/SecondaryWindow.md"}');export{e as data}; diff --git a/docs/assets/TabbedApplicationWindow.html-4ab63ce4.js b/docs/assets/TabbedApplicationWindow.html-4ab63ce4.js new file mode 100644 index 0000000..fec8260 --- /dev/null +++ b/docs/assets/TabbedApplicationWindow.html-4ab63ce4.js @@ -0,0 +1 @@ +import{_ as a,o,c as t,a as e,b as n}from"./app-e0605d3e.js";const i={},c=e("h1",{id:"tabbedapplicationwindow",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#tabbedapplicationwindow","aria-hidden":"true"},"#"),n(" TabbedApplicationWindow")],-1),d=e("p",null,"// todo",-1),s=[c,d];function r(_,l){return o(),t("div",null,s)}const b=a(i,[["render",r],["__file","TabbedApplicationWindow.html.vue"]]);export{b as default}; diff --git a/docs/assets/TabbedApplicationWindow.html-aec0a580.js b/docs/assets/TabbedApplicationWindow.html-aec0a580.js new file mode 100644 index 0000000..36ade46 --- /dev/null +++ b/docs/assets/TabbedApplicationWindow.html-aec0a580.js @@ -0,0 +1 @@ +const a=JSON.parse('{"key":"v-6799920a","path":"/windows/TabbedApplicationWindow.html","title":"TabbedApplicationWindow","lang":"en-US","frontmatter":{},"headers":[],"git":{},"filePathRelative":"windows/TabbedApplicationWindow.md"}');export{a as data}; diff --git a/docs/assets/ThemedInputBox.html-076603e5.js b/docs/assets/ThemedInputBox.html-076603e5.js new file mode 100644 index 0000000..4309abb --- /dev/null +++ b/docs/assets/ThemedInputBox.html-076603e5.js @@ -0,0 +1,7 @@ +import{_ as e,o as t,c as s,e as n}from"./app-e0605d3e.js";const a={},o=n(`

ThemedInputBox dialog

The ThemedInputBox is a dialog that provides a message and a TextBox so that the user can enter text.

Properties

None.

Methods

static string? Show(string message, string title, string defaultValue = "")

Shows a modal dialog using the current theme. Returns a string?.
If the returned value is null, it means that the user selected the Cancel button or closed the dialog.

Arguments

static string? Show(string message, string title, string defaultValue, string defaultButtonText, string secondaryButtonText)

Shows a modal dialog using the current theme. Returns a string?.
If the returned value is null, it means that the user selected the Cancel button or closed the dialog.

Arguments

static string? Show(string message, string title, Window owner, string defaultValue = "", string? defaultButtonText = null, string? secondaryButtonText = null

Shows a modal dialog using the current theme. Returns a MessageBoxResult that represents the choice of the user.
This method can be used to override the default texts and provide a better UX while still using the default framework components.
This method should be used with the MessageBoxButton.YesNoCancel or MessageBoxButton.YesNo arguments. The Yes button will be replaced with the defaultButtonText value, and the No button will be replaced with the secondaryButtonText.

Arguments

Events

None.

Examples

Example 1

This example shows how to use the ThemedInputBox from C# and handle the result.

string? value = ThemedInputBox.Show("Please provide name for this folder:", "Rename folder", this);
+
+if (!string.IsNullOrEmpty(value))
+{
+    // some code to rename a folder
+}
+
`,23),i=[o];function d(r,l){return t(),s("div",null,i)}const c=e(a,[["render",d],["__file","ThemedInputBox.html.vue"]]);export{c as default}; diff --git a/docs/assets/ThemedInputBox.html-d54e6ab2.js b/docs/assets/ThemedInputBox.html-d54e6ab2.js new file mode 100644 index 0000000..21d6119 --- /dev/null +++ b/docs/assets/ThemedInputBox.html-d54e6ab2.js @@ -0,0 +1 @@ +const t=JSON.parse('{"key":"v-6d901540","path":"/dialogs/ThemedInputBox.html","title":"ThemedInputBox dialog","lang":"en-US","frontmatter":{},"headers":[{"level":2,"title":"Properties","slug":"properties","link":"#properties","children":[]},{"level":2,"title":"Methods","slug":"methods","link":"#methods","children":[{"level":3,"title":"static string? Show(string message, string title, string defaultValue = \\"\\")","slug":"static-string-show-string-message-string-title-string-defaultvalue","link":"#static-string-show-string-message-string-title-string-defaultvalue","children":[]},{"level":3,"title":"static string? Show(string message, string title, string defaultValue, string defaultButtonText, string secondaryButtonText)","slug":"static-string-show-string-message-string-title-string-defaultvalue-string-defaultbuttontext-string-secondarybuttontext","link":"#static-string-show-string-message-string-title-string-defaultvalue-string-defaultbuttontext-string-secondarybuttontext","children":[]},{"level":3,"title":"static string? Show(string message, string title, Window owner, string defaultValue = \\"\\", string? defaultButtonText = null, string? secondaryButtonText = null","slug":"static-string-show-string-message-string-title-window-owner-string-defaultvalue-string-defaultbuttontext-null-string-secondarybuttontext-null","link":"#static-string-show-string-message-string-title-window-owner-string-defaultvalue-string-defaultbuttontext-null-string-secondarybuttontext-null","children":[]}]},{"level":2,"title":"Events","slug":"events","link":"#events","children":[]},{"level":2,"title":"Examples","slug":"examples","link":"#examples","children":[{"level":3,"title":"Example 1","slug":"example-1","link":"#example-1","children":[]}]}],"git":{},"filePathRelative":"dialogs/ThemedInputBox.md"}');export{t as data}; diff --git a/docs/assets/ThemedMessageBox.html-e2bb5172.js b/docs/assets/ThemedMessageBox.html-e2bb5172.js new file mode 100644 index 0000000..0bb7c20 --- /dev/null +++ b/docs/assets/ThemedMessageBox.html-e2bb5172.js @@ -0,0 +1 @@ +const t=JSON.parse('{"key":"v-dff51306","path":"/dialogs/ThemedMessageBox.html","title":"ThemedMessageBox dialog","lang":"en-US","frontmatter":{},"headers":[{"level":2,"title":"Properties","slug":"properties","link":"#properties","children":[]},{"level":2,"title":"Methods","slug":"methods","link":"#methods","children":[{"level":3,"title":"static MessageBoxResult Show(string message, string title, MessageBoxButton button)","slug":"static-messageboxresult-show-string-message-string-title-messageboxbutton-button","link":"#static-messageboxresult-show-string-message-string-title-messageboxbutton-button","children":[]},{"level":3,"title":"static MessageBoxResult Show(string message, string title, MessageBoxButton button, string defaultButtonText, string secondaryButtonText)","slug":"static-messageboxresult-show-string-message-string-title-messageboxbutton-button-string-defaultbuttontext-string-secondarybuttontext","link":"#static-messageboxresult-show-string-message-string-title-messageboxbutton-button-string-defaultbuttontext-string-secondarybuttontext","children":[]},{"level":3,"title":"static MessageBoxResult Show(string message, string title, Window owner, MessageBoxButton button, string? defaultButtonText = null, string? secondaryButtonText = null)","slug":"static-messageboxresult-show-string-message-string-title-window-owner-messageboxbutton-button-string-defaultbuttontext-null-string-secondarybuttontext-null","link":"#static-messageboxresult-show-string-message-string-title-window-owner-messageboxbutton-button-string-defaultbuttontext-null-string-secondarybuttontext-null","children":[]}]},{"level":2,"title":"Events","slug":"events","link":"#events","children":[]},{"level":2,"title":"Examples","slug":"examples","link":"#examples","children":[{"level":3,"title":"Example 1","slug":"example-1","link":"#example-1","children":[]}]}],"git":{},"filePathRelative":"dialogs/ThemedMessageBox.md"}');export{t as data}; diff --git a/docs/assets/ThemedMessageBox.html-f133b34a.js b/docs/assets/ThemedMessageBox.html-f133b34a.js new file mode 100644 index 0000000..b0aeb07 --- /dev/null +++ b/docs/assets/ThemedMessageBox.html-f133b34a.js @@ -0,0 +1,15 @@ +import{_ as e,o as t,c as s,e as n}from"./app-e0605d3e.js";const a={},o=n(`

ThemedMessageBox dialog

The ThemedMessageBox is a dialog that replaces the default MessageBox using the current theme.

Properties

None.

Methods

static MessageBoxResult Show(string message, string title, MessageBoxButton button)

Shows a modal dialog using the current theme. Returns a MessageBoxResult that represents the choice of the user.

Arguments

static MessageBoxResult Show(string message, string title, MessageBoxButton button, string defaultButtonText, string secondaryButtonText)

Shows a modal dialog using the current theme. Returns a MessageBoxResult that represents the choice of the user.
This method can be used to override the default texts and provide a better UX while still using the default framework components.
This method should be used with the MessageBoxButton.YesNoCancel or MessageBoxButton.YesNo arguments. The Yes button will be replaced with the defaultButtonText value, and the No button will be replaced with the secondaryButtonText.

Arguments

static MessageBoxResult Show(string message, string title, Window owner, MessageBoxButton button, string? defaultButtonText = null, string? secondaryButtonText = null)

Shows a modal dialog using the current theme. Returns a MessageBoxResult that represents the choice of the user.
This method can be used to override the default texts and provide a better UX while still using the default framework components.
This method should be used with the MessageBoxButton.YesNoCancel or MessageBoxButton.YesNo arguments. The Yes button will be replaced with the defaultButtonText value, and the No button will be replaced with the secondaryButtonText.

Arguments

Events

None.

Examples

Example 1

This example shows how to use the ThemedMessageBox from C# and handle the result.

MessageBoxResult quest = ThemedMessageBox.Show("Do you want to save changes?", "Save changes", MessageBoxButton.YesNoCancel);
+
+switch (quest)
+{
+    case MessageBoxResult.Yes:
+        // Yes button was clicked
+    break;
+    case MessageBoxResult.No:
+        // No button was clicked
+    break;
+    case MessageBoxResult.Cancel:
+        // Cancel button was clicked
+    break;
+}
+
`,23),i=[o];function d(r,l){return t(),s("div",null,i)}const u=e(a,[["render",d],["__file","ThemedMessageBox.html.vue"]]);export{u as default}; diff --git a/docs/assets/ThemedOpenFileDialog.html-247af74d.js b/docs/assets/ThemedOpenFileDialog.html-247af74d.js new file mode 100644 index 0000000..bd7252b --- /dev/null +++ b/docs/assets/ThemedOpenFileDialog.html-247af74d.js @@ -0,0 +1,33 @@ +import{_ as t,r as o,o as i,c as l,a as n,d as p,w as c,b as s,e as a}from"./app-e0605d3e.js";const u={},d=a('

ThemedOpenFileDialog dialog

The ThemedOpenFileDialog is a dialog that replaces the default OpenFileDialog using the current theme.

Properties

None.

Methods

static string? Show(string title, Dictionary<string, string> fileTypes, Window owner)

Opens a dialog that lets the user browse the computer to open an existing file. Returns a string?.
When the result is null, it means that the user has closed the dialog without selecting a file.

Arguments

static string? Show(string title, ThemedSpecialDialogOptions options, Window owner, string? defaultButtonText = null, string? secondaryButtonText = null)

Opens a dialog that lets the user browse the computer to open an existing file. Returns a string?.
When the result is null, it means that the user has closed the dialog without selecting a file.

Arguments

',12),r=n("li",null,[n("code",null,"string"),s(" title : The title of the dialog")],-1),h=n("code",null,"ThemedSpecialDialogOptions",-1),k=n("li",null,[n("code",null,"Window"),s(" owner: The Window that will own the dialog")],-1),m=n("li",null,[n("code",null,"string"),s(" defaultButtonText : The text to display in the default button")],-1),g=n("li",null,[n("code",null,"string"),s(" secondaryButtonText : The text to in the the secondary button")],-1),v=a(`

Events

None.

Examples

Example 1

This example shows how to localize the ThemedOpenFileDialog texts.

public MainWindow()
+{
+  InitializeComponent();
+  Loaded += OnLoaded;
+}
+
+private void OnLoaded(object sender, RoutedEventArgs e)
+{
+  // Set Coho.UI Texts resources from your own localization resources
+  GenericText.Cancel = Localization.Resources.GenericCancel;
+  DialogsText.Open = Localization.Resources.GenericOpen;
+  DialogsText.FileName = Localization.Resources.GenericFileName;
+  DialogsText.FileType = Localization.Resources.GenericFileType;
+
+  ...
+}
+

Example 2

This example shows how to use the ThemedOpenFileDialog from C# and handle the result.

ThemedSpecialDialogOptions options = new ThemedSpecialDialogOptions()
+{
+    FileTypes =
+    {
+        {"All supported file types (*.md;*.pwdp)", "*.md;*.pwdp"},
+        {"Markdown file (*.md)", "*.md"},
+        {"PowerDocs Project file (*.pwdp)", "*.pwdp"}
+    }
+};
+
+string? filePath = ThemedOpenFileDialog.Show(Localization.Resources.MenuOpen, options, this);
+
+if (!string.IsNullOrEmpty(filePath))
+{
+    // open the selected file in your application
+}
+
`,9);function w(b,f){const e=o("RouterLink");return i(),l("div",null,[d,n("ul",null,[r,n("li",null,[p(e,{to:"/classes/ThemedSpecialDialogOptions.html"},{default:c(()=>[h]),_:1}),s(" options : The options to configure the dialog")]),k,m,g]),v])}const T=t(u,[["render",w],["__file","ThemedOpenFileDialog.html.vue"]]);export{T as default}; diff --git a/docs/assets/ThemedOpenFileDialog.html-a55199f6.js b/docs/assets/ThemedOpenFileDialog.html-a55199f6.js new file mode 100644 index 0000000..19075a3 --- /dev/null +++ b/docs/assets/ThemedOpenFileDialog.html-a55199f6.js @@ -0,0 +1 @@ +const t=JSON.parse('{"key":"v-64a25d33","path":"/dialogs/ThemedOpenFileDialog.html","title":"ThemedOpenFileDialog dialog","lang":"en-US","frontmatter":{},"headers":[{"level":2,"title":"Properties","slug":"properties","link":"#properties","children":[]},{"level":2,"title":"Methods","slug":"methods","link":"#methods","children":[{"level":3,"title":"static string? Show(string title, Dictionary fileTypes, Window owner)","slug":"static-string-show-string-title-dictionary-string-string-filetypes-window-owner","link":"#static-string-show-string-title-dictionary-string-string-filetypes-window-owner","children":[]},{"level":3,"title":"static string? Show(string title, ThemedSpecialDialogOptions options, Window owner, string? defaultButtonText = null, string? secondaryButtonText = null)","slug":"static-string-show-string-title-themedspecialdialogoptions-options-window-owner-string-defaultbuttontext-null-string-secondarybuttontext-null","link":"#static-string-show-string-title-themedspecialdialogoptions-options-window-owner-string-defaultbuttontext-null-string-secondarybuttontext-null","children":[]}]},{"level":2,"title":"Events","slug":"events","link":"#events","children":[]},{"level":2,"title":"Examples","slug":"examples","link":"#examples","children":[{"level":3,"title":"Example 1","slug":"example-1","link":"#example-1","children":[]},{"level":3,"title":"Example 2","slug":"example-2","link":"#example-2","children":[]}]}],"git":{},"filePathRelative":"dialogs/ThemedOpenFileDialog.md"}');export{t as data}; diff --git a/docs/assets/ThemedSaveFileDialog.html-89b58548.js b/docs/assets/ThemedSaveFileDialog.html-89b58548.js new file mode 100644 index 0000000..1906d75 --- /dev/null +++ b/docs/assets/ThemedSaveFileDialog.html-89b58548.js @@ -0,0 +1 @@ +const e=JSON.parse('{"key":"v-f832d4c0","path":"/dialogs/ThemedSaveFileDialog.html","title":"ThemedSaveFileDialog dialog","lang":"en-US","frontmatter":{},"headers":[{"level":2,"title":"Properties","slug":"properties","link":"#properties","children":[]},{"level":2,"title":"Methods","slug":"methods","link":"#methods","children":[{"level":3,"title":"Show(string message, string title, MessageBoxButton button)","slug":"show-string-message-string-title-messageboxbutton-button","link":"#show-string-message-string-title-messageboxbutton-button","children":[]}]},{"level":2,"title":"Events","slug":"events","link":"#events","children":[]},{"level":2,"title":"Examples","slug":"examples","link":"#examples","children":[{"level":3,"title":"Example 1","slug":"example-1","link":"#example-1","children":[]}]}],"git":{},"filePathRelative":"dialogs/ThemedSaveFileDialog.md"}');export{e as data}; diff --git a/docs/assets/ThemedSaveFileDialog.html-a5d6aa11.js b/docs/assets/ThemedSaveFileDialog.html-a5d6aa11.js new file mode 100644 index 0000000..6306d1f --- /dev/null +++ b/docs/assets/ThemedSaveFileDialog.html-a5d6aa11.js @@ -0,0 +1,15 @@ +import{_ as n,o as s,c as a,e}from"./app-e0605d3e.js";const t={},o=e(`

ThemedSaveFileDialog dialog

The ThemedSaveFileDialog is a dialog that replaces the default SaveFileDialog using the current theme.

Properties

None.

Methods

Show(string message, string title, MessageBoxButton button)

Shows a modal dialog using the current theme. Returns a MessageBoxResult that represents the choice of the user.

Arguments

Events

None.

Examples

Example 1

This example shows how to use the ThemedMessageBox from C# and handle the result.

string? filePath = ThemedOpenFileDialog.Show("Open file",
+                    new Dictionary<string, string>()
+                    {
+                        {"All supported file types (*.md;*.pwdp)", "*.md;*.pwdp"},
+                        {"Markdown file (*.md)", "*.md"},
+                        {"PowerDocs Project file (*.pwdp)", "*.pwdp"}
+                    }, 
+                    "",
+                    this);
+
+if (!string.IsNullOrEmpty(filePath))
+{
+    // open the selected file in your application
+}
+
`,15),i=[o];function p(c,l){return s(),a("div",null,i)}const d=n(t,[["render",p],["__file","ThemedSaveFileDialog.html.vue"]]);export{d as default}; diff --git a/docs/assets/ThemedSpecialDialogOptions.html-20afc891.js b/docs/assets/ThemedSpecialDialogOptions.html-20afc891.js new file mode 100644 index 0000000..5848723 --- /dev/null +++ b/docs/assets/ThemedSpecialDialogOptions.html-20afc891.js @@ -0,0 +1 @@ +const e=JSON.parse('{"key":"v-dca8df42","path":"/classes/ThemedSpecialDialogOptions.html","title":"ThemedSpecialDialogOptions class","lang":"en-US","frontmatter":{},"headers":[{"level":2,"title":"Properties","slug":"properties","link":"#properties","children":[{"level":3,"title":"DefaultHeight","slug":"defaultheight","link":"#defaultheight","children":[]},{"level":3,"title":"DefaultWidth","slug":"defaultwidth","link":"#defaultwidth","children":[]},{"level":3,"title":"FileTypes","slug":"filetypes","link":"#filetypes","children":[]},{"level":3,"title":"InitialDirectory","slug":"initialdirectory","link":"#initialdirectory","children":[]},{"level":3,"title":"ShowDefaultSpecialFolders","slug":"showdefaultspecialfolders","link":"#showdefaultspecialfolders","children":[]},{"level":3,"title":"ShowNavigationPane","slug":"shownavigationpane","link":"#shownavigationpane","children":[]}]},{"level":2,"title":"Methods","slug":"methods","link":"#methods","children":[]},{"level":2,"title":"Events","slug":"events","link":"#events","children":[]}],"git":{},"filePathRelative":"classes/ThemedSpecialDialogOptions.md"}');export{e as data}; diff --git a/docs/assets/ThemedSpecialDialogOptions.html-e8611b06.js b/docs/assets/ThemedSpecialDialogOptions.html-e8611b06.js new file mode 100644 index 0000000..cd05345 --- /dev/null +++ b/docs/assets/ThemedSpecialDialogOptions.html-e8611b06.js @@ -0,0 +1 @@ +import{_ as i,r as o,o as d,c as r,a as e,b as a,d as s,w as h,e as n}from"./app-e0605d3e.js";const l={},c=e("h1",{id:"themedspecialdialogoptions-class",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#themedspecialdialogoptions-class","aria-hidden":"true"},"#"),a(" ThemedSpecialDialogOptions class")],-1),p=e("code",null,"ThemedOpenFileDialog",-1),f=n('

Properties

DefaultHeight

Type: int
Default value: 650
The DefaultHeight property defines the initial height of the dialog in pixels.

DefaultWidth

Type: int
Default value: 920
The DefaultWidth property defines the initial width of the dialog in pixels.

FileTypes

Type: Dictionary<string, string>
Default value: default
The FileTypes property defines the extensions that are supported by the dialog.

InitialDirectory

Type: string
Default value: String.Empty
The InitialDirectory property defines the first folder to show when the dialog is opened.

ShowDefaultSpecialFolders

Type: bool
Default value: true
The ShowDefaultSpecialFolders property defines if the special folders (Documents, Images, Videos...) section will be displayed. This property has no effect if the ShowNavigationPane property is set to false.

ShowNavigationPane

Type: bool
Default value: true
The ShowNavigationPane property defines if the navigation pane (on the left side) will be displayed.

Methods

None.

Events

None.

',17);function u(g,b){const t=o("RouterLink");return d(),r("div",null,[c,e("p",null,[a("This class is used to configure the behavior of the "),s(t,{to:"/dialogs/ThemedOpenFileDialog.html"},{default:h(()=>[p]),_:1}),a(" dialog.")]),f])}const T=i(l,[["render",u],["__file","ThemedSpecialDialogOptions.html.vue"]]);export{T as default}; diff --git a/docs/assets/acryliccontextmenu.html-5bbdb1ab.js b/docs/assets/acryliccontextmenu.html-5bbdb1ab.js new file mode 100644 index 0000000..ee39fa2 --- /dev/null +++ b/docs/assets/acryliccontextmenu.html-5bbdb1ab.js @@ -0,0 +1 @@ +const e=JSON.parse('{"key":"v-743236a8","path":"/controls/acryliccontextmenu.html","title":"The AcrylicContextMenu control","lang":"en-US","frontmatter":{},"headers":[{"level":2,"title":"Properties","slug":"properties","link":"#properties","children":[]},{"level":2,"title":"Methods","slug":"methods","link":"#methods","children":[]},{"level":2,"title":"Events","slug":"events","link":"#events","children":[]},{"level":2,"title":"Examples","slug":"examples","link":"#examples","children":[]}],"git":{},"filePathRelative":"controls/acryliccontextmenu.md"}');export{e as data}; diff --git a/docs/assets/acryliccontextmenu.html-a33f9884.js b/docs/assets/acryliccontextmenu.html-a33f9884.js new file mode 100644 index 0000000..69b3e82 --- /dev/null +++ b/docs/assets/acryliccontextmenu.html-a33f9884.js @@ -0,0 +1,10 @@ +import{_ as e,o as t,c as n,e as a}from"./app-e0605d3e.js";const o={},r=a(`

The AcrylicContextMenu control

Namespace: Coho.UI.Controls.Menus, inherits from ContextMenu

The AcrylicContextMenu uses the Acrylic texture on Windows 11. It will automatically fallback to a legacy style when it is not available.

Properties

None.

Methods

None.

Events

None.

Examples

This example shows how to attach an AcrylicContextMenu on a Border.

<Border Width="150" Height="150" Background="Silver">
+	<Border.ContextMenu>
+		<menus:AcrylicContextMenu>
+			<MenuItem Header="Test 1"/>
+			<MenuItem Header="Test 2"/>
+			<MenuItem Header="Test 3"/>
+		</menus:AcrylicContextMenu>
+	</Border.ContextMenu>
+</Border>
+
`,12),i=[r];function c(d,l){return t(),n("div",null,i)}const u=e(o,[["render",c],["__file","acryliccontextmenu.html.vue"]]);export{u as default}; diff --git a/docs/assets/announcer.html-7a51f81c.js b/docs/assets/announcer.html-7a51f81c.js new file mode 100644 index 0000000..f98f165 --- /dev/null +++ b/docs/assets/announcer.html-7a51f81c.js @@ -0,0 +1 @@ +const e=JSON.parse('{"key":"v-58f396b0","path":"/controls/announcer.html","title":"Announcer control","lang":"en-US","frontmatter":{},"headers":[{"level":2,"title":"Properties","slug":"properties","link":"#properties","children":[{"level":3,"title":"AnnounceTemplate","slug":"announcetemplate","link":"#announcetemplate","children":[]},{"level":3,"title":"IsLoadingContent","slug":"isloadingcontent","link":"#isloadingcontent","children":[]},{"level":3,"title":"ItemsPerView","slug":"itemsperview","link":"#itemsperview","children":[]},{"level":3,"title":"ItemsSource","slug":"itemssource","link":"#itemssource","children":[]},{"level":3,"title":"Label","slug":"label","link":"#label","children":[]}]},{"level":2,"title":"Methods","slug":"methods","link":"#methods","children":[]},{"level":2,"title":"Events","slug":"events","link":"#events","children":[]},{"level":2,"title":"Examples","slug":"examples","link":"#examples","children":[{"level":3,"title":"Example 1","slug":"example-1","link":"#example-1","children":[]},{"level":3,"title":"Example 2","slug":"example-2","link":"#example-2","children":[]},{"level":3,"title":"Example 3","slug":"example-3","link":"#example-3","children":[]}]}],"git":{},"filePathRelative":"controls/announcer.md"}');export{e as data}; diff --git a/docs/assets/announcer.html-bc04130d.js b/docs/assets/announcer.html-bc04130d.js new file mode 100644 index 0000000..e7b7f4d --- /dev/null +++ b/docs/assets/announcer.html-bc04130d.js @@ -0,0 +1,30 @@ +import{_ as e,o as n,c as a,e as t}from"./app-e0605d3e.js";const s={},o=t(`

Announcer control

Namespace: Coho.UI.Controls.Announcer

The Announcer is a slider that allows you to specify the number of items per page and the template of bound items.

Properties

AnnounceTemplate

Type: DataTemplate
The AnnounceTemplate property defines the template to be used to display items in the slider.

IsLoadingContent

Type: DependencyProperty, bool
The IsLoadingContent property is used to hide control content and display a LoadingRing to indicate that content is being loaded.

ItemsPerView

Type: DependencyProperty, int
The ItemsPerView property is used to set the number of items per page. When there are more items than this value, the user can slide content using the arrows on the top right of the control.

ItemsSource

Type: IEnumerable<object>
The ItemsSource property is used to set the collection of objects to display.

Label

Type: DependencyProperty, string
The Label property is used to set the text displayed at the top of the Announcer control.

Methods

None.

Events

None.

Examples

Example 1

This example shows how to set the AnnounceTemplate property from Xaml.

<announcer:Announcer AnnouncesAreaMargin="0,8,0,0" Margin="0,8" ItemsPerView="4"
+                                     x:Name="AnnouncesPresenter" MinHeight="200">
+                    <announcer:Announcer.AnnounceTemplate>
+                        <DataTemplate>
+                            <Border x:Name="BdrContainer" CornerRadius="6">
+                                <StackPanel>
+                                    <TextBlock Text="{Binding Title}" FontWeight="SemiBold" FontSize="14"
+                                               TextWrapping="Wrap" Margin="0,0,10,0" />
+                                    <TextBlock Text="{Binding Content}"
+                                               TextWrapping="Wrap" Margin="0,0,10,0" />
+                                </StackPanel>
+                            </Border>
+                        </DataTemplate>
+                    </announcer:Announcer.AnnounceTemplate>
+</announcer:Announcer>
+

Example 2

This example shows how to load data from code-behind and set the control in loading mode.

// Put the control in Loading mode, it shows a loading ring
+AnnouncesPresenter.IsLoadingContent = true;
+
+OnlineContentService.GetItems().ContinueWith(r =>
+{
+    // Stop the loading mode to show fetched items
+    AnnouncesPresenter.IsLoadingContent = false;
+    AnnouncesPresenter.ItemsSource = r.Result;
+
+}, TaskScheduler.FromCurrentSynchronizationContext());
+

Example 3

This example shows how to bind a localized string to the Label property in Xaml.

<announcer:Announcer AnnouncesAreaMargin="0,8,0,0" Margin="0,8" ItemsPerView="4"
+                     x:Name="AnnouncesPresenter" MinHeight="200"
+                     Label="{x:Static localization:Resources.OnlineResourcesDescription}">
+</announcer:Announcer>
+
`,28),i=[o];function r(c,d){return n(),a("div",null,i)}const u=e(s,[["render",r],["__file","announcer.html.vue"]]);export{u as default}; diff --git a/docs/assets/app-e0605d3e.js b/docs/assets/app-e0605d3e.js new file mode 100644 index 0000000..606c1ce --- /dev/null +++ b/docs/assets/app-e0605d3e.js @@ -0,0 +1,10 @@ +const ea="modulepreload",ta=function(e){return"/Coho.UI/"+e},Qo={},ie=function(t,n,r){if(!n||n.length===0)return t();const o=document.getElementsByTagName("link");return Promise.all(n.map(s=>{if(s=ta(s),s in Qo)return;Qo[s]=!0;const i=s.endsWith(".css"),l=i?'[rel="stylesheet"]':"";if(!!r)for(let u=o.length-1;u>=0;u--){const f=o[u];if(f.href===s&&(!i||f.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${s}"]${l}`))return;const c=document.createElement("link");if(c.rel=i?"stylesheet":ea,i||(c.as="script",c.crossOrigin=""),c.href=s,document.head.appendChild(c),i)return new Promise((u,f)=>{c.addEventListener("load",u),c.addEventListener("error",()=>f(new Error(`Unable to preload CSS for ${s}`)))})})).then(()=>t()).catch(s=>{const i=new Event("vite:preloadError",{cancelable:!0});if(i.payload=s,window.dispatchEvent(i),!i.defaultPrevented)throw s})};function po(e,t){const n=Object.create(null),r=e.split(",");for(let o=0;o!!n[o.toLowerCase()]:o=>!!n[o]}const Ce={},nn=[],ot=()=>{},na=()=>!1,ra=/^on[^a-z]/,Fn=e=>ra.test(e),mo=e=>e.startsWith("onUpdate:"),Oe=Object.assign,go=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},oa=Object.prototype.hasOwnProperty,ue=(e,t)=>oa.call(e,t),J=Array.isArray,rn=e=>Er(e)==="[object Map]",gi=e=>Er(e)==="[object Set]",re=e=>typeof e=="function",pe=e=>typeof e=="string",vo=e=>typeof e=="symbol",we=e=>e!==null&&typeof e=="object",vi=e=>we(e)&&re(e.then)&&re(e.catch),_i=Object.prototype.toString,Er=e=>_i.call(e),sa=e=>Er(e).slice(8,-1),bi=e=>Er(e)==="[object Object]",_o=e=>pe(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,Tn=po(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),wr=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},ia=/-(\w)/g,ft=wr(e=>e.replace(ia,(t,n)=>n?n.toUpperCase():"")),la=/\B([A-Z])/g,Yt=wr(e=>e.replace(la,"-$1").toLowerCase()),Cr=wr(e=>e.charAt(0).toUpperCase()+e.slice(1)),Nr=wr(e=>e?`on${Cr(e)}`:""),kn=(e,t)=>!Object.is(e,t),Dr=(e,t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,value:n})},aa=e=>{const t=parseFloat(e);return isNaN(t)?e:t},ca=e=>{const t=pe(e)?Number(e):NaN;return isNaN(t)?e:t};let Zo;const Qr=()=>Zo||(Zo=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function Bn(e){if(J(e)){const t={};for(let n=0;n{if(n){const r=n.split(fa);r.length>1&&(t[r[0].trim()]=r[1].trim())}}),t}function We(e){let t="";if(pe(e))t=e;else if(J(e))for(let n=0;npe(e)?e:e==null?"":J(e)||we(e)&&(e.toString===_i||!re(e.toString))?JSON.stringify(e,Ei,2):String(e),Ei=(e,t)=>t&&t.__v_isRef?Ei(e,t.value):rn(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[r,o])=>(n[`${r} =>`]=o,n),{})}:gi(t)?{[`Set(${t.size})`]:[...t.values()]}:we(t)&&!J(t)&&!bi(t)?String(t):t;let Ye;class ga{constructor(t=!1){this.detached=t,this._active=!0,this.effects=[],this.cleanups=[],this.parent=Ye,!t&&Ye&&(this.index=(Ye.scopes||(Ye.scopes=[])).push(this)-1)}get active(){return this._active}run(t){if(this._active){const n=Ye;try{return Ye=this,t()}finally{Ye=n}}}on(){Ye=this}off(){Ye=this.parent}stop(t){if(this._active){let n,r;for(n=0,r=this.effects.length;n{const t=new Set(e);return t.w=0,t.n=0,t},Ci=e=>(e.w&Rt)>0,xi=e=>(e.n&Rt)>0,ba=({deps:e})=>{if(e.length)for(let t=0;t{const{deps:t}=e;if(t.length){let n=0;for(let r=0;r{(u==="length"||u>=a)&&l.push(c)})}else switch(n!==void 0&&l.push(i.get(n)),t){case"add":J(e)?_o(n)&&l.push(i.get("length")):(l.push(i.get(Vt)),rn(e)&&l.push(i.get(Xr)));break;case"delete":J(e)||(l.push(i.get(Vt)),rn(e)&&l.push(i.get(Xr)));break;case"set":rn(e)&&l.push(i.get(Vt));break}if(l.length===1)l[0]&&eo(l[0]);else{const a=[];for(const c of l)c&&a.push(...c);eo(bo(a))}}function eo(e,t){const n=J(e)?e:[...e];for(const r of n)r.computed&&es(r);for(const r of n)r.computed||es(r)}function es(e,t){(e!==nt||e.allowRecurse)&&(e.scheduler?e.scheduler():e.run())}function Ea(e,t){var n;return(n=ar.get(e))==null?void 0:n.get(t)}const wa=po("__proto__,__v_isRef,__isVue"),Si=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(vo)),Ca=Eo(),xa=Eo(!1,!0),Ta=Eo(!0),ts=La();function La(){const e={};return["includes","indexOf","lastIndexOf"].forEach(t=>{e[t]=function(...n){const r=de(this);for(let s=0,i=this.length;s{e[t]=function(...n){pn();const r=de(this)[t].apply(this,n);return mn(),r}}),e}function Sa(e){const t=de(this);return qe(t,"has",e),t.hasOwnProperty(e)}function Eo(e=!1,t=!1){return function(r,o,s){if(o==="__v_isReactive")return!e;if(o==="__v_isReadonly")return e;if(o==="__v_isShallow")return t;if(o==="__v_raw"&&s===(e?t?Ua:Ri:t?ki:Ai).get(r))return r;const i=J(r);if(!e){if(i&&ue(ts,o))return Reflect.get(ts,o,s);if(o==="hasOwnProperty")return Sa}const l=Reflect.get(r,o,s);return(vo(o)?Si.has(o):wa(o))||(e||qe(r,"get",o),t)?l:Ie(l)?i&&_o(o)?l:l.value:we(l)?e?gn(l):zn(l):l}}const Pa=Pi(),Oa=Pi(!0);function Pi(e=!1){return function(n,r,o,s){let i=n[r];if(an(i)&&Ie(i)&&!Ie(o))return!1;if(!e&&(!cr(o)&&!an(o)&&(i=de(i),o=de(o)),!J(n)&&Ie(i)&&!Ie(o)))return i.value=o,!0;const l=J(n)&&_o(r)?Number(r)e,xr=e=>Reflect.getPrototypeOf(e);function qn(e,t,n=!1,r=!1){e=e.__v_raw;const o=de(e),s=de(t);n||(t!==s&&qe(o,"get",t),qe(o,"get",s));const{has:i}=xr(o),l=r?wo:n?To:Rn;if(i.call(o,t))return l(e.get(t));if(i.call(o,s))return l(e.get(s));e!==o&&e.get(t)}function Kn(e,t=!1){const n=this.__v_raw,r=de(n),o=de(e);return t||(e!==o&&qe(r,"has",e),qe(r,"has",o)),e===o?n.has(e):n.has(e)||n.has(o)}function Yn(e,t=!1){return e=e.__v_raw,!t&&qe(de(e),"iterate",Vt),Reflect.get(e,"size",e)}function ns(e){e=de(e);const t=de(this);return xr(t).has.call(t,e)||(t.add(e),_t(t,"add",e,e)),this}function rs(e,t){t=de(t);const n=de(this),{has:r,get:o}=xr(n);let s=r.call(n,e);s||(e=de(e),s=r.call(n,e));const i=o.call(n,e);return n.set(e,t),s?kn(t,i)&&_t(n,"set",e,t):_t(n,"add",e,t),this}function os(e){const t=de(this),{has:n,get:r}=xr(t);let o=n.call(t,e);o||(e=de(e),o=n.call(t,e)),r&&r.call(t,e);const s=t.delete(e);return o&&_t(t,"delete",e,void 0),s}function ss(){const e=de(this),t=e.size!==0,n=e.clear();return t&&_t(e,"clear",void 0,void 0),n}function Gn(e,t){return function(r,o){const s=this,i=s.__v_raw,l=de(i),a=t?wo:e?To:Rn;return!e&&qe(l,"iterate",Vt),i.forEach((c,u)=>r.call(o,a(c),a(u),s))}}function Jn(e,t,n){return function(...r){const o=this.__v_raw,s=de(o),i=rn(s),l=e==="entries"||e===Symbol.iterator&&i,a=e==="keys"&&i,c=o[e](...r),u=n?wo:t?To:Rn;return!t&&qe(s,"iterate",a?Xr:Vt),{next(){const{value:f,done:h}=c.next();return h?{value:f,done:h}:{value:l?[u(f[0]),u(f[1])]:u(f),done:h}},[Symbol.iterator](){return this}}}}function Ct(e){return function(...t){return e==="delete"?!1:this}}function Ma(){const e={get(s){return qn(this,s)},get size(){return Yn(this)},has:Kn,add:ns,set:rs,delete:os,clear:ss,forEach:Gn(!1,!1)},t={get(s){return qn(this,s,!1,!0)},get size(){return Yn(this)},has:Kn,add:ns,set:rs,delete:os,clear:ss,forEach:Gn(!1,!0)},n={get(s){return qn(this,s,!0)},get size(){return Yn(this,!0)},has(s){return Kn.call(this,s,!0)},add:Ct("add"),set:Ct("set"),delete:Ct("delete"),clear:Ct("clear"),forEach:Gn(!0,!1)},r={get(s){return qn(this,s,!0,!0)},get size(){return Yn(this,!0)},has(s){return Kn.call(this,s,!0)},add:Ct("add"),set:Ct("set"),delete:Ct("delete"),clear:Ct("clear"),forEach:Gn(!0,!0)};return["keys","values","entries",Symbol.iterator].forEach(s=>{e[s]=Jn(s,!1,!1),n[s]=Jn(s,!0,!1),t[s]=Jn(s,!1,!0),r[s]=Jn(s,!0,!0)}),[e,n,t,r]}const[Na,Da,Ha,Fa]=Ma();function Co(e,t){const n=t?e?Fa:Ha:e?Da:Na;return(r,o,s)=>o==="__v_isReactive"?!e:o==="__v_isReadonly"?e:o==="__v_raw"?r:Reflect.get(ue(n,o)&&o in r?n:r,o,s)}const Ba={get:Co(!1,!1)},za={get:Co(!1,!0)},ja={get:Co(!0,!1)},Ai=new WeakMap,ki=new WeakMap,Ri=new WeakMap,Ua=new WeakMap;function Va(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function Wa(e){return e.__v_skip||!Object.isExtensible(e)?0:Va(sa(e))}function zn(e){return an(e)?e:xo(e,!1,Oi,Ba,Ai)}function Ii(e){return xo(e,!1,$a,za,ki)}function gn(e){return xo(e,!0,Ia,ja,Ri)}function xo(e,t,n,r,o){if(!we(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const s=o.get(e);if(s)return s;const i=Wa(e);if(i===0)return e;const l=new Proxy(e,i===2?r:n);return o.set(e,l),l}function on(e){return an(e)?on(e.__v_raw):!!(e&&e.__v_isReactive)}function an(e){return!!(e&&e.__v_isReadonly)}function cr(e){return!!(e&&e.__v_isShallow)}function $i(e){return on(e)||an(e)}function de(e){const t=e&&e.__v_raw;return t?de(t):e}function Mi(e){return lr(e,"__v_skip",!0),e}const Rn=e=>we(e)?zn(e):e,To=e=>we(e)?gn(e):e;function Lo(e){At&&nt&&(e=de(e),Li(e.dep||(e.dep=bo())))}function So(e,t){e=de(e);const n=e.dep;n&&eo(n)}function Ie(e){return!!(e&&e.__v_isRef===!0)}function Ee(e){return Ni(e,!1)}function Po(e){return Ni(e,!0)}function Ni(e,t){return Ie(e)?e:new qa(e,t)}class qa{constructor(t,n){this.__v_isShallow=n,this.dep=void 0,this.__v_isRef=!0,this._rawValue=n?t:de(t),this._value=n?t:Rn(t)}get value(){return Lo(this),this._value}set value(t){const n=this.__v_isShallow||cr(t)||an(t);t=n?t:de(t),kn(t,this._rawValue)&&(this._rawValue=t,this._value=n?t:Rn(t),So(this))}}function Z(e){return Ie(e)?e.value:e}const Ka={get:(e,t,n)=>Z(Reflect.get(e,t,n)),set:(e,t,n,r)=>{const o=e[t];return Ie(o)&&!Ie(n)?(o.value=n,!0):Reflect.set(e,t,n,r)}};function Di(e){return on(e)?e:new Proxy(e,Ka)}class Ya{constructor(t){this.dep=void 0,this.__v_isRef=!0;const{get:n,set:r}=t(()=>Lo(this),()=>So(this));this._get=n,this._set=r}get value(){return this._get()}set value(t){this._set(t)}}function Ga(e){return new Ya(e)}function Oo(e){const t=J(e)?new Array(e.length):{};for(const n in e)t[n]=Hi(e,n);return t}class Ja{constructor(t,n,r){this._object=t,this._key=n,this._defaultValue=r,this.__v_isRef=!0}get value(){const t=this._object[this._key];return t===void 0?this._defaultValue:t}set value(t){this._object[this._key]=t}get dep(){return Ea(de(this._object),this._key)}}class Qa{constructor(t){this._getter=t,this.__v_isRef=!0,this.__v_isReadonly=!0}get value(){return this._getter()}}function Za(e,t,n){return Ie(e)?e:re(e)?new Qa(e):we(e)&&arguments.length>1?Hi(e,t,n):Ee(e)}function Hi(e,t,n){const r=e[t];return Ie(r)?r:new Ja(e,t,n)}class Xa{constructor(t,n,r,o){this._setter=n,this.dep=void 0,this.__v_isRef=!0,this.__v_isReadonly=!1,this._dirty=!0,this.effect=new yo(t,()=>{this._dirty||(this._dirty=!0,So(this))}),this.effect.computed=this,this.effect.active=this._cacheable=!o,this.__v_isReadonly=r}get value(){const t=de(this);return Lo(t),(t._dirty||!t._cacheable)&&(t._dirty=!1,t._value=t.effect.run()),t._value}set value(t){this._setter(t)}}function ec(e,t,n=!1){let r,o;const s=re(e);return s?(r=e,o=ot):(r=e.get,o=e.set),new Xa(r,o,s||!o,n)}function kt(e,t,n,r){let o;try{o=r?e(...r):e()}catch(s){jn(s,t,n)}return o}function Ze(e,t,n,r){if(re(e)){const s=kt(e,t,n,r);return s&&vi(s)&&s.catch(i=>{jn(i,t,n)}),s}const o=[];for(let s=0;s>>1;$n(Be[r])ct&&Be.splice(t,1)}function oc(e){J(e)?sn.push(...e):(!mt||!mt.includes(e,e.allowRecurse?Bt+1:Bt))&&sn.push(e),Bi()}function is(e,t=In?ct+1:0){for(;t$n(n)-$n(r)),Bt=0;Bte.id==null?1/0:e.id,sc=(e,t)=>{const n=$n(e)-$n(t);if(n===0){if(e.pre&&!t.pre)return-1;if(t.pre&&!e.pre)return 1}return n};function zi(e){to=!1,In=!0,Be.sort(sc);const t=ot;try{for(ct=0;ctpe(g)?g.trim():g)),f&&(o=n.map(aa))}let l,a=r[l=Nr(t)]||r[l=Nr(ft(t))];!a&&s&&(a=r[l=Nr(Yt(t))]),a&&Ze(a,e,6,o);const c=r[l+"Once"];if(c){if(!e.emitted)e.emitted={};else if(e.emitted[l])return;e.emitted[l]=!0,Ze(c,e,6,o)}}function ji(e,t,n=!1){const r=t.emitsCache,o=r.get(e);if(o!==void 0)return o;const s=e.emits;let i={},l=!1;if(!re(e)){const a=c=>{const u=ji(c,t,!0);u&&(l=!0,Oe(i,u))};!n&&t.mixins.length&&t.mixins.forEach(a),e.extends&&a(e.extends),e.mixins&&e.mixins.forEach(a)}return!s&&!l?(we(e)&&r.set(e,null),null):(J(s)?s.forEach(a=>i[a]=null):Oe(i,s),we(e)&&r.set(e,i),i)}function Sr(e,t){return!e||!Fn(t)?!1:(t=t.slice(2).replace(/Once$/,""),ue(e,t[0].toLowerCase()+t.slice(1))||ue(e,Yt(t))||ue(e,t))}let De=null,Ui=null;function fr(e){const t=De;return De=e,Ui=e&&e.type.__scopeId||null,t}function Ne(e,t=De,n){if(!t||e._n)return e;const r=(...o)=>{r._d&&_s(-1);const s=fr(t);let i;try{i=e(...o)}finally{fr(s),r._d&&_s(1)}return i};return r._n=!0,r._c=!0,r._d=!0,r}function Hr(e){const{type:t,vnode:n,proxy:r,withProxy:o,props:s,propsOptions:[i],slots:l,attrs:a,emit:c,render:u,renderCache:f,data:h,setupState:g,ctx:y,inheritAttrs:w}=e;let L,v;const b=fr(e);try{if(n.shapeFlag&4){const O=o||r;L=tt(u.call(O,O,f,s,g,h,y)),v=a}else{const O=t;L=tt(O.length>1?O(s,{attrs:a,slots:l,emit:c}):O(s,null)),v=t.props?a:lc(a)}}catch(O){Pn.length=0,jn(O,e,1),L=ee(Ge)}let A=L;if(v&&w!==!1){const O=Object.keys(v),{shapeFlag:W}=A;O.length&&W&7&&(i&&O.some(mo)&&(v=ac(v,i)),A=$t(A,v))}return n.dirs&&(A=$t(A),A.dirs=A.dirs?A.dirs.concat(n.dirs):n.dirs),n.transition&&(A.transition=n.transition),L=A,fr(b),L}const lc=e=>{let t;for(const n in e)(n==="class"||n==="style"||Fn(n))&&((t||(t={}))[n]=e[n]);return t},ac=(e,t)=>{const n={};for(const r in e)(!mo(r)||!(r.slice(9)in t))&&(n[r]=e[r]);return n};function cc(e,t,n){const{props:r,children:o,component:s}=e,{props:i,children:l,patchFlag:a}=t,c=s.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&a>=0){if(a&1024)return!0;if(a&16)return r?ls(r,i,c):!!i;if(a&8){const u=t.dynamicProps;for(let f=0;fe.__isSuspense;function Vi(e,t){t&&t.pendingBranch?J(e)?t.effects.push(...e):t.effects.push(e):oc(e)}function Wi(e,t){return ko(e,null,t)}const Qn={};function ut(e,t,n){return ko(e,t,n)}function ko(e,t,{immediate:n,deep:r,flush:o,onTrack:s,onTrigger:i}=Ce){var l;const a=wi()===((l=ke)==null?void 0:l.scope)?ke:null;let c,u=!1,f=!1;if(Ie(e)?(c=()=>e.value,u=cr(e)):on(e)?(c=()=>e,r=!0):J(e)?(f=!0,u=e.some(O=>on(O)||cr(O)),c=()=>e.map(O=>{if(Ie(O))return O.value;if(on(O))return Ut(O);if(re(O))return kt(O,a,2)})):re(e)?t?c=()=>kt(e,a,2):c=()=>{if(!(a&&a.isUnmounted))return h&&h(),Ze(e,a,3,[g])}:c=ot,t&&r){const O=c;c=()=>Ut(O())}let h,g=O=>{h=b.onStop=()=>{kt(O,a,4)}},y;if(fn)if(g=ot,t?n&&Ze(t,a,3,[c(),f?[]:void 0,g]):c(),o==="sync"){const O=iu();y=O.__watcherHandles||(O.__watcherHandles=[])}else return ot;let w=f?new Array(e.length).fill(Qn):Qn;const L=()=>{if(b.active)if(t){const O=b.run();(r||u||(f?O.some((W,X)=>kn(W,w[X])):kn(O,w)))&&(h&&h(),Ze(t,a,3,[O,w===Qn?void 0:f&&w[0]===Qn?[]:w,g]),w=O)}else b.run()};L.allowRecurse=!!t;let v;o==="sync"?v=L:o==="post"?v=()=>Ve(L,a&&a.suspense):(L.pre=!0,a&&(L.id=a.uid),v=()=>Lr(L));const b=new yo(c,v);t?n?L():w=b.run():o==="post"?Ve(b.run.bind(b),a&&a.suspense):b.run();const A=()=>{b.stop(),a&&a.scope&&go(a.scope.effects,b)};return y&&y.push(A),A}function dc(e,t,n){const r=this.proxy,o=pe(e)?e.includes(".")?qi(r,e):()=>r[e]:e.bind(r,r);let s;re(t)?s=t:(s=t.handler,n=t);const i=ke;un(this);const l=ko(o,s.bind(r),n);return i?un(i):qt(),l}function qi(e,t){const n=t.split(".");return()=>{let r=e;for(let o=0;o{Ut(n,t)});else if(bi(e))for(const n in e)Ut(e[n],t);return e}function dr(e,t){const n=De;if(n===null)return e;const r=Rr(n)||n.proxy,o=e.dirs||(e.dirs=[]);for(let s=0;s{e.isMounted=!0}),Or(()=>{e.isUnmounting=!0}),e}const Je=[Function,Array],Ki={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:Je,onEnter:Je,onAfterEnter:Je,onEnterCancelled:Je,onBeforeLeave:Je,onLeave:Je,onAfterLeave:Je,onLeaveCancelled:Je,onBeforeAppear:Je,onAppear:Je,onAfterAppear:Je,onAppearCancelled:Je},pc={name:"BaseTransition",props:Ki,setup(e,{slots:t}){const n=cl(),r=hc();let o;return()=>{const s=t.default&&Gi(t.default(),!0);if(!s||!s.length)return;let i=s[0];if(s.length>1){for(const w of s)if(w.type!==Ge){i=w;break}}const l=de(e),{mode:a}=l;if(r.isLeaving)return Fr(i);const c=as(i);if(!c)return Fr(i);const u=no(c,l,r,n);ro(c,u);const f=n.subTree,h=f&&as(f);let g=!1;const{getTransitionKey:y}=c.type;if(y){const w=y();o===void 0?o=w:w!==o&&(o=w,g=!0)}if(h&&h.type!==Ge&&(!zt(c,h)||g)){const w=no(h,l,r,n);if(ro(h,w),a==="out-in")return r.isLeaving=!0,w.afterLeave=()=>{r.isLeaving=!1,n.update.active!==!1&&n.update()},Fr(i);a==="in-out"&&c.type!==Ge&&(w.delayLeave=(L,v,b)=>{const A=Yi(r,h);A[String(h.key)]=h,L._leaveCb=()=>{v(),L._leaveCb=void 0,delete u.delayedLeave},u.delayedLeave=b})}return i}}},mc=pc;function Yi(e,t){const{leavingVNodes:n}=e;let r=n.get(t.type);return r||(r=Object.create(null),n.set(t.type,r)),r}function no(e,t,n,r){const{appear:o,mode:s,persisted:i=!1,onBeforeEnter:l,onEnter:a,onAfterEnter:c,onEnterCancelled:u,onBeforeLeave:f,onLeave:h,onAfterLeave:g,onLeaveCancelled:y,onBeforeAppear:w,onAppear:L,onAfterAppear:v,onAppearCancelled:b}=t,A=String(e.key),O=Yi(n,e),W=(m,z)=>{m&&Ze(m,r,9,z)},X=(m,z)=>{const D=z[1];W(m,z),J(m)?m.every(K=>K.length<=1)&&D():m.length<=1&&D()},N={mode:s,persisted:i,beforeEnter(m){let z=l;if(!n.isMounted)if(o)z=w||l;else return;m._leaveCb&&m._leaveCb(!0);const D=O[A];D&&zt(e,D)&&D.el._leaveCb&&D.el._leaveCb(),W(z,[m])},enter(m){let z=a,D=c,K=u;if(!n.isMounted)if(o)z=L||a,D=v||c,K=b||u;else return;let T=!1;const R=m._enterCb=I=>{T||(T=!0,I?W(K,[m]):W(D,[m]),N.delayedLeave&&N.delayedLeave(),m._enterCb=void 0)};z?X(z,[m,R]):R()},leave(m,z){const D=String(e.key);if(m._enterCb&&m._enterCb(!0),n.isUnmounting)return z();W(f,[m]);let K=!1;const T=m._leaveCb=R=>{K||(K=!0,z(),R?W(y,[m]):W(g,[m]),m._leaveCb=void 0,O[D]===e&&delete O[D])};O[D]=e,h?X(h,[m,T]):T()},clone(m){return no(m,t,n,r)}};return N}function Fr(e){if(Un(e))return e=$t(e),e.children=null,e}function as(e){return Un(e)?e.children?e.children[0]:void 0:e}function ro(e,t){e.shapeFlag&6&&e.component?ro(e.component.subTree,t):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function Gi(e,t=!1,n){let r=[],o=0;for(let s=0;s1)for(let s=0;sOe({name:e.name},t,{setup:e}))():e}const ln=e=>!!e.type.__asyncLoader;function Ae(e){re(e)&&(e={loader:e});const{loader:t,loadingComponent:n,errorComponent:r,delay:o=200,timeout:s,suspensible:i=!0,onError:l}=e;let a=null,c,u=0;const f=()=>(u++,a=null,h()),h=()=>{let g;return a||(g=a=t().catch(y=>{if(y=y instanceof Error?y:new Error(String(y)),l)return new Promise((w,L)=>{l(y,()=>w(f()),()=>L(y),u+1)});throw y}).then(y=>g!==a&&a?a:(y&&(y.__esModule||y[Symbol.toStringTag]==="Module")&&(y=y.default),c=y,y)))};return he({name:"AsyncComponentWrapper",__asyncLoader:h,get __asyncResolved(){return c},setup(){const g=ke;if(c)return()=>Br(c,g);const y=b=>{a=null,jn(b,g,13,!r)};if(i&&g.suspense||fn)return h().then(b=>()=>Br(b,g)).catch(b=>(y(b),()=>r?ee(r,{error:b}):null));const w=Ee(!1),L=Ee(),v=Ee(!!o);return o&&setTimeout(()=>{v.value=!1},o),s!=null&&setTimeout(()=>{if(!w.value&&!L.value){const b=new Error(`Async component timed out after ${s}ms.`);y(b),L.value=b}},s),h().then(()=>{w.value=!0,g.parent&&Un(g.parent.vnode)&&Lr(g.parent.update)}).catch(b=>{y(b),L.value=b}),()=>{if(w.value&&c)return Br(c,g);if(L.value&&r)return ee(r,{error:L.value});if(n&&!v.value)return ee(n)}}})}function Br(e,t){const{ref:n,props:r,children:o,ce:s}=t.vnode,i=ee(e,r,o);return i.ref=n,i.ce=s,delete t.vnode.ce,i}const Un=e=>e.type.__isKeepAlive;function gc(e,t){Ji(e,"a",t)}function vc(e,t){Ji(e,"da",t)}function Ji(e,t,n=ke){const r=e.__wdc||(e.__wdc=()=>{let o=n;for(;o;){if(o.isDeactivated)return;o=o.parent}return e()});if(Pr(t,r,n),n){let o=n.parent;for(;o&&o.parent;)Un(o.parent.vnode)&&_c(r,t,n,o),o=o.parent}}function _c(e,t,n,r){const o=Pr(t,e,r,!0);Ar(()=>{go(r[t],o)},n)}function Pr(e,t,n=ke,r=!1){if(n){const o=n[e]||(n[e]=[]),s=t.__weh||(t.__weh=(...i)=>{if(n.isUnmounted)return;pn(),un(n);const l=Ze(t,n,e,i);return qt(),mn(),l});return r?o.unshift(s):o.push(s),s}}const yt=e=>(t,n=ke)=>(!fn||e==="sp")&&Pr(e,(...r)=>t(...r),n),bc=yt("bm"),Xe=yt("m"),yc=yt("bu"),Ec=yt("u"),Or=yt("bum"),Ar=yt("um"),wc=yt("sp"),Cc=yt("rtg"),xc=yt("rtc");function Tc(e,t=ke){Pr("ec",e,t)}const Qi="components";function bt(e,t){return Sc(Qi,e,!0,t)||e}const Lc=Symbol.for("v-ndc");function Sc(e,t,n=!0,r=!1){const o=De||ke;if(o){const s=o.type;if(e===Qi){const l=ru(s,!1);if(l&&(l===t||l===ft(t)||l===Cr(ft(t))))return s}const i=cs(o[e]||s[e],t)||cs(o.appContext[e],t);return!i&&r?s:i}}function cs(e,t){return e&&(e[t]||e[ft(t)]||e[Cr(ft(t))])}function It(e,t,n,r){let o;const s=n&&n[r];if(J(e)||pe(e)){o=new Array(e.length);for(let i=0,l=e.length;it(i,l,void 0,s&&s[l]));else{const i=Object.keys(e);o=new Array(i.length);for(let l=0,a=i.length;lgr(t)?!(t.type===Ge||t.type===ye&&!Zi(t.children)):!0)?e:null}const oo=e=>e?ul(e)?Rr(e)||e.proxy:oo(e.parent):null,Ln=Oe(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>oo(e.parent),$root:e=>oo(e.root),$emit:e=>e.emit,$options:e=>Ro(e),$forceUpdate:e=>e.f||(e.f=()=>Lr(e.update)),$nextTick:e=>e.n||(e.n=Tr.bind(e.proxy)),$watch:e=>dc.bind(e)}),zr=(e,t)=>e!==Ce&&!e.__isScriptSetup&&ue(e,t),Pc={get({_:e},t){const{ctx:n,setupState:r,data:o,props:s,accessCache:i,type:l,appContext:a}=e;let c;if(t[0]!=="$"){const g=i[t];if(g!==void 0)switch(g){case 1:return r[t];case 2:return o[t];case 4:return n[t];case 3:return s[t]}else{if(zr(r,t))return i[t]=1,r[t];if(o!==Ce&&ue(o,t))return i[t]=2,o[t];if((c=e.propsOptions[0])&&ue(c,t))return i[t]=3,s[t];if(n!==Ce&&ue(n,t))return i[t]=4,n[t];so&&(i[t]=0)}}const u=Ln[t];let f,h;if(u)return t==="$attrs"&&qe(e,"get",t),u(e);if((f=l.__cssModules)&&(f=f[t]))return f;if(n!==Ce&&ue(n,t))return i[t]=4,n[t];if(h=a.config.globalProperties,ue(h,t))return h[t]},set({_:e},t,n){const{data:r,setupState:o,ctx:s}=e;return zr(o,t)?(o[t]=n,!0):r!==Ce&&ue(r,t)?(r[t]=n,!0):ue(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(s[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:r,appContext:o,propsOptions:s}},i){let l;return!!n[i]||e!==Ce&&ue(e,i)||zr(t,i)||(l=s[0])&&ue(l,i)||ue(r,i)||ue(Ln,i)||ue(o.config.globalProperties,i)},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:ue(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function us(e){return J(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}let so=!0;function Oc(e){const t=Ro(e),n=e.proxy,r=e.ctx;so=!1,t.beforeCreate&&fs(t.beforeCreate,e,"bc");const{data:o,computed:s,methods:i,watch:l,provide:a,inject:c,created:u,beforeMount:f,mounted:h,beforeUpdate:g,updated:y,activated:w,deactivated:L,beforeDestroy:v,beforeUnmount:b,destroyed:A,unmounted:O,render:W,renderTracked:X,renderTriggered:N,errorCaptured:m,serverPrefetch:z,expose:D,inheritAttrs:K,components:T,directives:R,filters:I}=t;if(c&&Ac(c,r,null),i)for(const ne in i){const oe=i[ne];re(oe)&&(r[ne]=oe.bind(n))}if(o){const ne=o.call(n,n);we(ne)&&(e.data=zn(ne))}if(so=!0,s)for(const ne in s){const oe=s[ne],He=re(oe)?oe.bind(n,n):re(oe.get)?oe.get.bind(n,n):ot,Me=!re(oe)&&re(oe.set)?oe.set.bind(n):ot,Ue=j({get:He,set:Me});Object.defineProperty(r,ne,{enumerable:!0,configurable:!0,get:()=>Ue.value,set:Fe=>Ue.value=Fe})}if(l)for(const ne in l)Xi(l[ne],r,n,ne);if(a){const ne=re(a)?a.call(n):a;Reflect.ownKeys(ne).forEach(oe=>{Wt(oe,ne[oe])})}u&&fs(u,e,"c");function U(ne,oe){J(oe)?oe.forEach(He=>ne(He.bind(n))):oe&&ne(oe.bind(n))}if(U(bc,f),U(Xe,h),U(yc,g),U(Ec,y),U(gc,w),U(vc,L),U(Tc,m),U(xc,X),U(Cc,N),U(Or,b),U(Ar,O),U(wc,z),J(D))if(D.length){const ne=e.exposed||(e.exposed={});D.forEach(oe=>{Object.defineProperty(ne,oe,{get:()=>n[oe],set:He=>n[oe]=He})})}else e.exposed||(e.exposed={});W&&e.render===ot&&(e.render=W),K!=null&&(e.inheritAttrs=K),T&&(e.components=T),R&&(e.directives=R)}function Ac(e,t,n=ot){J(e)&&(e=io(e));for(const r in e){const o=e[r];let s;we(o)?"default"in o?s=Pe(o.from||r,o.default,!0):s=Pe(o.from||r):s=Pe(o),Ie(s)?Object.defineProperty(t,r,{enumerable:!0,configurable:!0,get:()=>s.value,set:i=>s.value=i}):t[r]=s}}function fs(e,t,n){Ze(J(e)?e.map(r=>r.bind(t.proxy)):e.bind(t.proxy),t,n)}function Xi(e,t,n,r){const o=r.includes(".")?qi(n,r):()=>n[r];if(pe(e)){const s=t[e];re(s)&&ut(o,s)}else if(re(e))ut(o,e.bind(n));else if(we(e))if(J(e))e.forEach(s=>Xi(s,t,n,r));else{const s=re(e.handler)?e.handler.bind(n):t[e.handler];re(s)&&ut(o,s,e)}}function Ro(e){const t=e.type,{mixins:n,extends:r}=t,{mixins:o,optionsCache:s,config:{optionMergeStrategies:i}}=e.appContext,l=s.get(t);let a;return l?a=l:!o.length&&!n&&!r?a=t:(a={},o.length&&o.forEach(c=>hr(a,c,i,!0)),hr(a,t,i)),we(t)&&s.set(t,a),a}function hr(e,t,n,r=!1){const{mixins:o,extends:s}=t;s&&hr(e,s,n,!0),o&&o.forEach(i=>hr(e,i,n,!0));for(const i in t)if(!(r&&i==="expose")){const l=kc[i]||n&&n[i];e[i]=l?l(e[i],t[i]):t[i]}return e}const kc={data:ds,props:hs,emits:hs,methods:xn,computed:xn,beforeCreate:ze,created:ze,beforeMount:ze,mounted:ze,beforeUpdate:ze,updated:ze,beforeDestroy:ze,beforeUnmount:ze,destroyed:ze,unmounted:ze,activated:ze,deactivated:ze,errorCaptured:ze,serverPrefetch:ze,components:xn,directives:xn,watch:Ic,provide:ds,inject:Rc};function ds(e,t){return t?e?function(){return Oe(re(e)?e.call(this,this):e,re(t)?t.call(this,this):t)}:t:e}function Rc(e,t){return xn(io(e),io(t))}function io(e){if(J(e)){const t={};for(let n=0;n1)return n&&re(t)?t.call(r&&r.proxy):t}}function Nc(e,t,n,r=!1){const o={},s={};lr(s,kr,1),e.propsDefaults=Object.create(null),tl(e,t,o,s);for(const i in e.propsOptions[0])i in o||(o[i]=void 0);n?e.props=r?o:Ii(o):e.type.props?e.props=o:e.props=s,e.attrs=s}function Dc(e,t,n,r){const{props:o,attrs:s,vnode:{patchFlag:i}}=e,l=de(o),[a]=e.propsOptions;let c=!1;if((r||i>0)&&!(i&16)){if(i&8){const u=e.vnode.dynamicProps;for(let f=0;f{a=!0;const[h,g]=nl(f,t,!0);Oe(i,h),g&&l.push(...g)};!n&&t.mixins.length&&t.mixins.forEach(u),e.extends&&u(e.extends),e.mixins&&e.mixins.forEach(u)}if(!s&&!a)return we(e)&&r.set(e,nn),nn;if(J(s))for(let u=0;u-1,g[1]=w<0||y-1||ue(g,"default"))&&l.push(f)}}}const c=[i,l];return we(e)&&r.set(e,c),c}function ps(e){return e[0]!=="$"}function ms(e){const t=e&&e.toString().match(/^\s*(function|class) (\w+)/);return t?t[2]:e===null?"null":""}function gs(e,t){return ms(e)===ms(t)}function vs(e,t){return J(t)?t.findIndex(n=>gs(n,e)):re(t)&&gs(t,e)?0:-1}const rl=e=>e[0]==="_"||e==="$stable",Io=e=>J(e)?e.map(tt):[tt(e)],Hc=(e,t,n)=>{if(t._n)return t;const r=Ne((...o)=>Io(t(...o)),n);return r._c=!1,r},ol=(e,t,n)=>{const r=e._ctx;for(const o in e){if(rl(o))continue;const s=e[o];if(re(s))t[o]=Hc(o,s,r);else if(s!=null){const i=Io(s);t[o]=()=>i}}},sl=(e,t)=>{const n=Io(t);e.slots.default=()=>n},Fc=(e,t)=>{if(e.vnode.shapeFlag&32){const n=t._;n?(e.slots=de(t),lr(t,"_",n)):ol(t,e.slots={})}else e.slots={},t&&sl(e,t);lr(e.slots,kr,1)},Bc=(e,t,n)=>{const{vnode:r,slots:o}=e;let s=!0,i=Ce;if(r.shapeFlag&32){const l=t._;l?n&&l===1?s=!1:(Oe(o,t),!n&&l===1&&delete o._):(s=!t.$stable,ol(t,o)),i=t}else t&&(sl(e,t),i={default:1});if(s)for(const l in o)!rl(l)&&!(l in i)&&delete o[l]};function mr(e,t,n,r,o=!1){if(J(e)){e.forEach((h,g)=>mr(h,t&&(J(t)?t[g]:t),n,r,o));return}if(ln(r)&&!o)return;const s=r.shapeFlag&4?Rr(r.component)||r.component.proxy:r.el,i=o?null:s,{i:l,r:a}=e,c=t&&t.r,u=l.refs===Ce?l.refs={}:l.refs,f=l.setupState;if(c!=null&&c!==a&&(pe(c)?(u[c]=null,ue(f,c)&&(f[c]=null)):Ie(c)&&(c.value=null)),re(a))kt(a,l,12,[i,u]);else{const h=pe(a),g=Ie(a);if(h||g){const y=()=>{if(e.f){const w=h?ue(f,a)?f[a]:u[a]:a.value;o?J(w)&&go(w,s):J(w)?w.includes(s)||w.push(s):h?(u[a]=[s],ue(f,a)&&(f[a]=u[a])):(a.value=[s],e.k&&(u[e.k]=a.value))}else h?(u[a]=i,ue(f,a)&&(f[a]=i)):g&&(a.value=i,e.k&&(u[e.k]=i))};i?(y.id=-1,Ve(y,n)):y()}}}let xt=!1;const Zn=e=>/svg/.test(e.namespaceURI)&&e.tagName!=="foreignObject",Xn=e=>e.nodeType===8;function zc(e){const{mt:t,p:n,o:{patchProp:r,createText:o,nextSibling:s,parentNode:i,remove:l,insert:a,createComment:c}}=e,u=(v,b)=>{if(!b.hasChildNodes()){n(null,v,b),ur(),b._vnode=v;return}xt=!1,f(b.firstChild,v,null,null,null),ur(),b._vnode=v,xt&&console.error("Hydration completed but contains mismatches.")},f=(v,b,A,O,W,X=!1)=>{const N=Xn(v)&&v.data==="[",m=()=>w(v,b,A,O,W,N),{type:z,ref:D,shapeFlag:K,patchFlag:T}=b;let R=v.nodeType;b.el=v,T===-2&&(X=!1,b.dynamicChildren=null);let I=null;switch(z){case cn:R!==3?b.children===""?(a(b.el=o(""),i(v),v),I=v):I=m():(v.data!==b.children&&(xt=!0,v.data=b.children),I=s(v));break;case Ge:R!==8||N?I=m():I=s(v);break;case Sn:if(N&&(v=s(v),R=v.nodeType),R===1||R===3){I=v;const se=!b.children.length;for(let U=0;U{X=X||!!b.dynamicChildren;const{type:N,props:m,patchFlag:z,shapeFlag:D,dirs:K}=b,T=N==="input"&&K||N==="option";if(T||z!==-1){if(K&&at(b,null,A,"created"),m)if(T||!X||z&48)for(const I in m)(T&&I.endsWith("value")||Fn(I)&&!Tn(I))&&r(v,I,null,m[I],!1,void 0,A);else m.onClick&&r(v,"onClick",null,m.onClick,!1,void 0,A);let R;if((R=m&&m.onVnodeBeforeMount)&&Qe(R,A,b),K&&at(b,null,A,"beforeMount"),((R=m&&m.onVnodeMounted)||K)&&Vi(()=>{R&&Qe(R,A,b),K&&at(b,null,A,"mounted")},O),D&16&&!(m&&(m.innerHTML||m.textContent))){let I=g(v.firstChild,b,v,A,O,W,X);for(;I;){xt=!0;const se=I;I=I.nextSibling,l(se)}}else D&8&&v.textContent!==b.children&&(xt=!0,v.textContent=b.children)}return v.nextSibling},g=(v,b,A,O,W,X,N)=>{N=N||!!b.dynamicChildren;const m=b.children,z=m.length;for(let D=0;D{const{slotScopeIds:N}=b;N&&(W=W?W.concat(N):N);const m=i(v),z=g(s(v),b,m,A,O,W,X);return z&&Xn(z)&&z.data==="]"?s(b.anchor=z):(xt=!0,a(b.anchor=c("]"),m,z),z)},w=(v,b,A,O,W,X)=>{if(xt=!0,b.el=null,X){const z=L(v);for(;;){const D=s(v);if(D&&D!==z)l(D);else break}}const N=s(v),m=i(v);return l(v),n(null,b,m,N,A,O,Zn(m),W),N},L=v=>{let b=0;for(;v;)if(v=s(v),v&&Xn(v)&&(v.data==="["&&b++,v.data==="]")){if(b===0)return s(v);b--}return v};return[u,f]}const Ve=Vi;function jc(e){return Uc(e,zc)}function Uc(e,t){const n=Qr();n.__VUE__=!0;const{insert:r,remove:o,patchProp:s,createElement:i,createText:l,createComment:a,setText:c,setElementText:u,parentNode:f,nextSibling:h,setScopeId:g=ot,insertStaticContent:y}=e,w=(d,p,_,E=null,x=null,S=null,H=!1,k=null,M=!!p.dynamicChildren)=>{if(d===p)return;d&&!zt(d,p)&&(E=C(d),Fe(d,x,S,!0),d=null),p.patchFlag===-2&&(M=!1,p.dynamicChildren=null);const{type:P,ref:Y,shapeFlag:V}=p;switch(P){case cn:L(d,p,_,E);break;case Ge:v(d,p,_,E);break;case Sn:d==null&&b(p,_,E,H);break;case ye:T(d,p,_,E,x,S,H,k,M);break;default:V&1?W(d,p,_,E,x,S,H,k,M):V&6?R(d,p,_,E,x,S,H,k,M):(V&64||V&128)&&P.process(d,p,_,E,x,S,H,k,M,$)}Y!=null&&x&&mr(Y,d&&d.ref,S,p||d,!p)},L=(d,p,_,E)=>{if(d==null)r(p.el=l(p.children),_,E);else{const x=p.el=d.el;p.children!==d.children&&c(x,p.children)}},v=(d,p,_,E)=>{d==null?r(p.el=a(p.children||""),_,E):p.el=d.el},b=(d,p,_,E)=>{[d.el,d.anchor]=y(d.children,p,_,E,d.el,d.anchor)},A=({el:d,anchor:p},_,E)=>{let x;for(;d&&d!==p;)x=h(d),r(d,_,E),d=x;r(p,_,E)},O=({el:d,anchor:p})=>{let _;for(;d&&d!==p;)_=h(d),o(d),d=_;o(p)},W=(d,p,_,E,x,S,H,k,M)=>{H=H||p.type==="svg",d==null?X(p,_,E,x,S,H,k,M):z(d,p,x,S,H,k,M)},X=(d,p,_,E,x,S,H,k)=>{let M,P;const{type:Y,props:V,shapeFlag:G,transition:te,dirs:le}=d;if(M=d.el=i(d.type,S,V&&V.is,V),G&8?u(M,d.children):G&16&&m(d.children,M,null,E,x,S&&Y!=="foreignObject",H,k),le&&at(d,null,E,"created"),N(M,d,d.scopeId,H,E),V){for(const ge in V)ge!=="value"&&!Tn(ge)&&s(M,ge,null,V[ge],S,d.children,E,x,$e);"value"in V&&s(M,"value",null,V.value),(P=V.onVnodeBeforeMount)&&Qe(P,E,d)}le&&at(d,null,E,"beforeMount");const _e=(!x||x&&!x.pendingBranch)&&te&&!te.persisted;_e&&te.beforeEnter(M),r(M,p,_),((P=V&&V.onVnodeMounted)||_e||le)&&Ve(()=>{P&&Qe(P,E,d),_e&&te.enter(M),le&&at(d,null,E,"mounted")},x)},N=(d,p,_,E,x)=>{if(_&&g(d,_),E)for(let S=0;S{for(let P=M;P{const k=p.el=d.el;let{patchFlag:M,dynamicChildren:P,dirs:Y}=p;M|=d.patchFlag&16;const V=d.props||Ce,G=p.props||Ce;let te;_&&Nt(_,!1),(te=G.onVnodeBeforeUpdate)&&Qe(te,_,p,d),Y&&at(p,d,_,"beforeUpdate"),_&&Nt(_,!0);const le=x&&p.type!=="foreignObject";if(P?D(d.dynamicChildren,P,k,_,E,le,S):H||oe(d,p,k,null,_,E,le,S,!1),M>0){if(M&16)K(k,p,V,G,_,E,x);else if(M&2&&V.class!==G.class&&s(k,"class",null,G.class,x),M&4&&s(k,"style",V.style,G.style,x),M&8){const _e=p.dynamicProps;for(let ge=0;ge<_e.length;ge++){const Le=_e[ge],et=V[Le],Qt=G[Le];(Qt!==et||Le==="value")&&s(k,Le,et,Qt,x,d.children,_,E,$e)}}M&1&&d.children!==p.children&&u(k,p.children)}else!H&&P==null&&K(k,p,V,G,_,E,x);((te=G.onVnodeUpdated)||Y)&&Ve(()=>{te&&Qe(te,_,p,d),Y&&at(p,d,_,"updated")},E)},D=(d,p,_,E,x,S,H)=>{for(let k=0;k{if(_!==E){if(_!==Ce)for(const k in _)!Tn(k)&&!(k in E)&&s(d,k,_[k],null,H,p.children,x,S,$e);for(const k in E){if(Tn(k))continue;const M=E[k],P=_[k];M!==P&&k!=="value"&&s(d,k,P,M,H,p.children,x,S,$e)}"value"in E&&s(d,"value",_.value,E.value)}},T=(d,p,_,E,x,S,H,k,M)=>{const P=p.el=d?d.el:l(""),Y=p.anchor=d?d.anchor:l("");let{patchFlag:V,dynamicChildren:G,slotScopeIds:te}=p;te&&(k=k?k.concat(te):te),d==null?(r(P,_,E),r(Y,_,E),m(p.children,_,Y,x,S,H,k,M)):V>0&&V&64&&G&&d.dynamicChildren?(D(d.dynamicChildren,G,_,x,S,H,k),(p.key!=null||x&&p===x.subTree)&&il(d,p,!0)):oe(d,p,_,Y,x,S,H,k,M)},R=(d,p,_,E,x,S,H,k,M)=>{p.slotScopeIds=k,d==null?p.shapeFlag&512?x.ctx.activate(p,_,E,H,M):I(p,_,E,x,S,H,M):se(d,p,M)},I=(d,p,_,E,x,S,H)=>{const k=d.component=Zc(d,E,x);if(Un(d)&&(k.ctx.renderer=$),Xc(k),k.asyncDep){if(x&&x.registerDep(k,U),!d.el){const M=k.subTree=ee(Ge);v(null,M,p,_)}return}U(k,d,p,_,x,S,H)},se=(d,p,_)=>{const E=p.component=d.component;if(cc(d,p,_))if(E.asyncDep&&!E.asyncResolved){ne(E,p,_);return}else E.next=p,rc(E.update),E.update();else p.el=d.el,E.vnode=p},U=(d,p,_,E,x,S,H)=>{const k=()=>{if(d.isMounted){let{next:Y,bu:V,u:G,parent:te,vnode:le}=d,_e=Y,ge;Nt(d,!1),Y?(Y.el=le.el,ne(d,Y,H)):Y=le,V&&Dr(V),(ge=Y.props&&Y.props.onVnodeBeforeUpdate)&&Qe(ge,te,Y,le),Nt(d,!0);const Le=Hr(d),et=d.subTree;d.subTree=Le,w(et,Le,f(et.el),C(et),d,x,S),Y.el=Le.el,_e===null&&uc(d,Le.el),G&&Ve(G,x),(ge=Y.props&&Y.props.onVnodeUpdated)&&Ve(()=>Qe(ge,te,Y,le),x)}else{let Y;const{el:V,props:G}=p,{bm:te,m:le,parent:_e}=d,ge=ln(p);if(Nt(d,!1),te&&Dr(te),!ge&&(Y=G&&G.onVnodeBeforeMount)&&Qe(Y,_e,p),Nt(d,!0),V&&ae){const Le=()=>{d.subTree=Hr(d),ae(V,d.subTree,d,x,null)};ge?p.type.__asyncLoader().then(()=>!d.isUnmounted&&Le()):Le()}else{const Le=d.subTree=Hr(d);w(null,Le,_,E,d,x,S),p.el=Le.el}if(le&&Ve(le,x),!ge&&(Y=G&&G.onVnodeMounted)){const Le=p;Ve(()=>Qe(Y,_e,Le),x)}(p.shapeFlag&256||_e&&ln(_e.vnode)&&_e.vnode.shapeFlag&256)&&d.a&&Ve(d.a,x),d.isMounted=!0,p=_=E=null}},M=d.effect=new yo(k,()=>Lr(P),d.scope),P=d.update=()=>M.run();P.id=d.uid,Nt(d,!0),P()},ne=(d,p,_)=>{p.component=d;const E=d.vnode.props;d.vnode=p,d.next=null,Dc(d,p.props,E,_),Bc(d,p.children,_),pn(),is(),mn()},oe=(d,p,_,E,x,S,H,k,M=!1)=>{const P=d&&d.children,Y=d?d.shapeFlag:0,V=p.children,{patchFlag:G,shapeFlag:te}=p;if(G>0){if(G&128){Me(P,V,_,E,x,S,H,k,M);return}else if(G&256){He(P,V,_,E,x,S,H,k,M);return}}te&8?(Y&16&&$e(P,x,S),V!==P&&u(_,V)):Y&16?te&16?Me(P,V,_,E,x,S,H,k,M):$e(P,x,S,!0):(Y&8&&u(_,""),te&16&&m(V,_,E,x,S,H,k,M))},He=(d,p,_,E,x,S,H,k,M)=>{d=d||nn,p=p||nn;const P=d.length,Y=p.length,V=Math.min(P,Y);let G;for(G=0;GY?$e(d,x,S,!0,!1,V):m(p,_,E,x,S,H,k,M,V)},Me=(d,p,_,E,x,S,H,k,M)=>{let P=0;const Y=p.length;let V=d.length-1,G=Y-1;for(;P<=V&&P<=G;){const te=d[P],le=p[P]=M?St(p[P]):tt(p[P]);if(zt(te,le))w(te,le,_,null,x,S,H,k,M);else break;P++}for(;P<=V&&P<=G;){const te=d[V],le=p[G]=M?St(p[G]):tt(p[G]);if(zt(te,le))w(te,le,_,null,x,S,H,k,M);else break;V--,G--}if(P>V){if(P<=G){const te=G+1,le=teG)for(;P<=V;)Fe(d[P],x,S,!0),P++;else{const te=P,le=P,_e=new Map;for(P=le;P<=G;P++){const Ke=p[P]=M?St(p[P]):tt(p[P]);Ke.key!=null&&_e.set(Ke.key,P)}let ge,Le=0;const et=G-le+1;let Qt=!1,Yo=0;const _n=new Array(et);for(P=0;P=et){Fe(Ke,x,S,!0);continue}let lt;if(Ke.key!=null)lt=_e.get(Ke.key);else for(ge=le;ge<=G;ge++)if(_n[ge-le]===0&&zt(Ke,p[ge])){lt=ge;break}lt===void 0?Fe(Ke,x,S,!0):(_n[lt-le]=P+1,lt>=Yo?Yo=lt:Qt=!0,w(Ke,p[lt],_,null,x,S,H,k,M),Le++)}const Go=Qt?Vc(_n):nn;for(ge=Go.length-1,P=et-1;P>=0;P--){const Ke=le+P,lt=p[Ke],Jo=Ke+1{const{el:S,type:H,transition:k,children:M,shapeFlag:P}=d;if(P&6){Ue(d.component.subTree,p,_,E);return}if(P&128){d.suspense.move(p,_,E);return}if(P&64){H.move(d,p,_,$);return}if(H===ye){r(S,p,_);for(let V=0;Vk.enter(S),x);else{const{leave:V,delayLeave:G,afterLeave:te}=k,le=()=>r(S,p,_),_e=()=>{V(S,()=>{le(),te&&te()})};G?G(S,le,_e):_e()}else r(S,p,_)},Fe=(d,p,_,E=!1,x=!1)=>{const{type:S,props:H,ref:k,children:M,dynamicChildren:P,shapeFlag:Y,patchFlag:V,dirs:G}=d;if(k!=null&&mr(k,null,_,d,!0),Y&256){p.ctx.deactivate(d);return}const te=Y&1&&G,le=!ln(d);let _e;if(le&&(_e=H&&H.onVnodeBeforeUnmount)&&Qe(_e,p,d),Y&6)it(d.component,_,E);else{if(Y&128){d.suspense.unmount(_,E);return}te&&at(d,null,p,"beforeUnmount"),Y&64?d.type.remove(d,p,_,x,$,E):P&&(S!==ye||V>0&&V&64)?$e(P,p,_,!1,!0):(S===ye&&V&384||!x&&Y&16)&&$e(M,p,_),E&&Et(d)}(le&&(_e=H&&H.onVnodeUnmounted)||te)&&Ve(()=>{_e&&Qe(_e,p,d),te&&at(d,null,p,"unmounted")},_)},Et=d=>{const{type:p,el:_,anchor:E,transition:x}=d;if(p===ye){wt(_,E);return}if(p===Sn){O(d);return}const S=()=>{o(_),x&&!x.persisted&&x.afterLeave&&x.afterLeave()};if(d.shapeFlag&1&&x&&!x.persisted){const{leave:H,delayLeave:k}=x,M=()=>H(_,S);k?k(d.el,S,M):M()}else S()},wt=(d,p)=>{let _;for(;d!==p;)_=h(d),o(d),d=_;o(p)},it=(d,p,_)=>{const{bum:E,scope:x,update:S,subTree:H,um:k}=d;E&&Dr(E),x.stop(),S&&(S.active=!1,Fe(H,d,p,_)),k&&Ve(k,p),Ve(()=>{d.isUnmounted=!0},p),p&&p.pendingBranch&&!p.isUnmounted&&d.asyncDep&&!d.asyncResolved&&d.suspenseId===p.pendingId&&(p.deps--,p.deps===0&&p.resolve())},$e=(d,p,_,E=!1,x=!1,S=0)=>{for(let H=S;Hd.shapeFlag&6?C(d.component.subTree):d.shapeFlag&128?d.suspense.next():h(d.anchor||d.el),B=(d,p,_)=>{d==null?p._vnode&&Fe(p._vnode,null,null,!0):w(p._vnode||null,d,p,null,null,null,_),is(),ur(),p._vnode=d},$={p:w,um:Fe,m:Ue,r:Et,mt:I,mc:m,pc:oe,pbc:D,n:C,o:e};let q,ae;return t&&([q,ae]=t($)),{render:B,hydrate:q,createApp:Mc(B,q)}}function Nt({effect:e,update:t},n){e.allowRecurse=t.allowRecurse=n}function il(e,t,n=!1){const r=e.children,o=t.children;if(J(r)&&J(o))for(let s=0;s>1,e[n[l]]0&&(t[r]=n[s-1]),n[s]=r)}}for(s=n.length,i=n[s-1];s-- >0;)n[s]=i,i=t[i];return n}const Wc=e=>e.__isTeleport,ye=Symbol.for("v-fgt"),cn=Symbol.for("v-txt"),Ge=Symbol.for("v-cmt"),Sn=Symbol.for("v-stc"),Pn=[];let rt=null;function F(e=!1){Pn.push(rt=e?null:[])}function qc(){Pn.pop(),rt=Pn[Pn.length-1]||null}let Mn=1;function _s(e){Mn+=e}function ll(e){return e.dynamicChildren=Mn>0?rt||nn:null,qc(),Mn>0&&rt&&rt.push(e),e}function Q(e,t,n,r,o,s){return ll(fe(e,t,n,r,o,s,!0))}function Se(e,t,n,r,o){return ll(ee(e,t,n,r,o,!0))}function gr(e){return e?e.__v_isVNode===!0:!1}function zt(e,t){return e.type===t.type&&e.key===t.key}const kr="__vInternal",al=({key:e})=>e??null,sr=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?pe(e)||Ie(e)||re(e)?{i:De,r:e,k:t,f:!!n}:e:null);function fe(e,t=null,n=null,r=0,o=null,s=e===ye?0:1,i=!1,l=!1){const a={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&al(t),ref:t&&sr(t),scopeId:Ui,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetAnchor:null,staticCount:0,shapeFlag:s,patchFlag:r,dynamicProps:o,dynamicChildren:null,appContext:null,ctx:De};return l?($o(a,n),s&128&&e.normalize(a)):n&&(a.shapeFlag|=pe(n)?8:16),Mn>0&&!i&&rt&&(a.patchFlag>0||s&6)&&a.patchFlag!==32&&rt.push(a),a}const ee=Kc;function Kc(e,t=null,n=null,r=0,o=null,s=!1){if((!e||e===Lc)&&(e=Ge),gr(e)){const l=$t(e,t,!0);return n&&$o(l,n),Mn>0&&!s&&rt&&(l.shapeFlag&6?rt[rt.indexOf(e)]=l:rt.push(l)),l.patchFlag|=-2,l}if(ou(e)&&(e=e.__vccOpts),t){t=Yc(t);let{class:l,style:a}=t;l&&!pe(l)&&(t.class=We(l)),we(a)&&($i(a)&&!J(a)&&(a=Oe({},a)),t.style=Bn(a))}const i=pe(e)?1:fc(e)?128:Wc(e)?64:we(e)?4:re(e)?2:0;return fe(e,t,n,r,o,i,s,!0)}function Yc(e){return e?$i(e)||kr in e?Oe({},e):e:null}function $t(e,t,n=!1){const{props:r,ref:o,patchFlag:s,children:i}=e,l=t?ao(r||{},t):r;return{__v_isVNode:!0,__v_skip:!0,type:e.type,props:l,key:l&&al(l),ref:t&&t.ref?n&&o?J(o)?o.concat(sr(t)):[o,sr(t)]:sr(t):o,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:i,target:e.target,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==ye?s===-1?16:s|16:s,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:e.transition,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&$t(e.ssContent),ssFallback:e.ssFallback&&$t(e.ssFallback),el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce}}function Mt(e=" ",t=0){return ee(cn,null,e,t)}function Gc(e,t){const n=ee(Sn,null,e);return n.staticCount=t,n}function Te(e="",t=!1){return t?(F(),Se(Ge,null,e)):ee(Ge,null,e)}function tt(e){return e==null||typeof e=="boolean"?ee(Ge):J(e)?ee(ye,null,e.slice()):typeof e=="object"?St(e):ee(cn,null,String(e))}function St(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:$t(e)}function $o(e,t){let n=0;const{shapeFlag:r}=e;if(t==null)t=null;else if(J(t))n=16;else if(typeof t=="object")if(r&65){const o=t.default;o&&(o._c&&(o._d=!1),$o(e,o()),o._c&&(o._d=!0));return}else{n=32;const o=t._;!o&&!(kr in t)?t._ctx=De:o===3&&De&&(De.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else re(t)?(t={default:t,_ctx:De},n=32):(t=String(t),r&64?(n=16,t=[Mt(t)]):n=8);e.children=t,e.shapeFlag|=n}function ao(...e){const t={};for(let n=0;nke||De;let Mo,Zt,bs="__VUE_INSTANCE_SETTERS__";(Zt=Qr()[bs])||(Zt=Qr()[bs]=[]),Zt.push(e=>ke=e),Mo=e=>{Zt.length>1?Zt.forEach(t=>t(e)):Zt[0](e)};const un=e=>{Mo(e),e.scope.on()},qt=()=>{ke&&ke.scope.off(),Mo(null)};function ul(e){return e.vnode.shapeFlag&4}let fn=!1;function Xc(e,t=!1){fn=t;const{props:n,children:r}=e.vnode,o=ul(e);Nc(e,n,o,t),Fc(e,r);const s=o?eu(e,t):void 0;return fn=!1,s}function eu(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=Mi(new Proxy(e.ctx,Pc));const{setup:r}=n;if(r){const o=e.setupContext=r.length>1?nu(e):null;un(e),pn();const s=kt(r,e,0,[e.props,o]);if(mn(),qt(),vi(s)){if(s.then(qt,qt),t)return s.then(i=>{ys(e,i,t)}).catch(i=>{jn(i,e,0)});e.asyncDep=s}else ys(e,s,t)}else fl(e,t)}function ys(e,t,n){re(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:we(t)&&(e.setupState=Di(t)),fl(e,n)}let Es;function fl(e,t,n){const r=e.type;if(!e.render){if(!t&&Es&&!r.render){const o=r.template||Ro(e).template;if(o){const{isCustomElement:s,compilerOptions:i}=e.appContext.config,{delimiters:l,compilerOptions:a}=r,c=Oe(Oe({isCustomElement:s,delimiters:l},i),a);r.render=Es(o,c)}}e.render=r.render||ot}un(e),pn(),Oc(e),mn(),qt()}function tu(e){return e.attrsProxy||(e.attrsProxy=new Proxy(e.attrs,{get(t,n){return qe(e,"get","$attrs"),t[n]}}))}function nu(e){const t=n=>{e.exposed=n||{}};return{get attrs(){return tu(e)},slots:e.slots,emit:e.emit,expose:t}}function Rr(e){if(e.exposed)return e.exposeProxy||(e.exposeProxy=new Proxy(Di(Mi(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in Ln)return Ln[n](e)},has(t,n){return n in t||n in Ln}}))}function ru(e,t=!0){return re(e)?e.displayName||e.name:e.name||t&&e.__name}function ou(e){return re(e)&&"__vccOpts"in e}const j=(e,t)=>ec(e,t,fn);function ve(e,t,n){const r=arguments.length;return r===2?we(t)&&!J(t)?gr(t)?ee(e,null,[t]):ee(e,t):ee(e,null,t):(r>3?n=Array.prototype.slice.call(arguments,2):r===3&&gr(n)&&(n=[n]),ee(e,t,n))}const su=Symbol.for("v-scx"),iu=()=>Pe(su),lu="3.3.4",au="http://www.w3.org/2000/svg",jt=typeof document<"u"?document:null,ws=jt&&jt.createElement("template"),cu={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,r)=>{const o=t?jt.createElementNS(au,e):jt.createElement(e,n?{is:n}:void 0);return e==="select"&&r&&r.multiple!=null&&o.setAttribute("multiple",r.multiple),o},createText:e=>jt.createTextNode(e),createComment:e=>jt.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>jt.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,r,o,s){const i=n?n.previousSibling:t.lastChild;if(o&&(o===s||o.nextSibling))for(;t.insertBefore(o.cloneNode(!0),n),!(o===s||!(o=o.nextSibling)););else{ws.innerHTML=r?`${e}`:e;const l=ws.content;if(r){const a=l.firstChild;for(;a.firstChild;)l.appendChild(a.firstChild);l.removeChild(a)}t.insertBefore(l,n)}return[i?i.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}};function uu(e,t,n){const r=e._vtc;r&&(t=(t?[t,...r]:[...r]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}function fu(e,t,n){const r=e.style,o=pe(n);if(n&&!o){if(t&&!pe(t))for(const s in t)n[s]==null&&co(r,s,"");for(const s in n)co(r,s,n[s])}else{const s=r.display;o?t!==n&&(r.cssText=n):t&&e.removeAttribute("style"),"_vod"in e&&(r.display=s)}}const Cs=/\s*!important$/;function co(e,t,n){if(J(n))n.forEach(r=>co(e,t,r));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const r=du(e,t);Cs.test(n)?e.setProperty(Yt(r),n.replace(Cs,""),"important"):e[r]=n}}const xs=["Webkit","Moz","ms"],jr={};function du(e,t){const n=jr[t];if(n)return n;let r=ft(t);if(r!=="filter"&&r in e)return jr[t]=r;r=Cr(r);for(let o=0;oUr||(bu.then(()=>Ur=0),Ur=Date.now());function Eu(e,t){const n=r=>{if(!r._vts)r._vts=Date.now();else if(r._vts<=n.attached)return;Ze(wu(r,n.value),t,5,[r])};return n.value=e,n.attached=yu(),n}function wu(e,t){if(J(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(r=>o=>!o._stopped&&r&&r(o))}else return t}const Ss=/^on[a-z]/,Cu=(e,t,n,r,o=!1,s,i,l,a)=>{t==="class"?uu(e,r,o):t==="style"?fu(e,n,r):Fn(t)?mo(t)||vu(e,t,n,r,i):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):xu(e,t,r,o))?pu(e,t,r,s,i,l,a):(t==="true-value"?e._trueValue=r:t==="false-value"&&(e._falseValue=r),hu(e,t,r,o))};function xu(e,t,n,r){return r?!!(t==="innerHTML"||t==="textContent"||t in e&&Ss.test(t)&&re(n)):t==="spellcheck"||t==="draggable"||t==="translate"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA"||Ss.test(t)&&pe(n)?!1:t in e}const Tt="transition",bn="animation",Vn=(e,{slots:t})=>ve(mc,Tu(e),t);Vn.displayName="Transition";const dl={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String};Vn.props=Oe({},Ki,dl);const Dt=(e,t=[])=>{J(e)?e.forEach(n=>n(...t)):e&&e(...t)},Ps=e=>e?J(e)?e.some(t=>t.length>1):e.length>1:!1;function Tu(e){const t={};for(const T in e)T in dl||(t[T]=e[T]);if(e.css===!1)return t;const{name:n="v",type:r,duration:o,enterFromClass:s=`${n}-enter-from`,enterActiveClass:i=`${n}-enter-active`,enterToClass:l=`${n}-enter-to`,appearFromClass:a=s,appearActiveClass:c=i,appearToClass:u=l,leaveFromClass:f=`${n}-leave-from`,leaveActiveClass:h=`${n}-leave-active`,leaveToClass:g=`${n}-leave-to`}=e,y=Lu(o),w=y&&y[0],L=y&&y[1],{onBeforeEnter:v,onEnter:b,onEnterCancelled:A,onLeave:O,onLeaveCancelled:W,onBeforeAppear:X=v,onAppear:N=b,onAppearCancelled:m=A}=t,z=(T,R,I)=>{Ht(T,R?u:l),Ht(T,R?c:i),I&&I()},D=(T,R)=>{T._isLeaving=!1,Ht(T,f),Ht(T,g),Ht(T,h),R&&R()},K=T=>(R,I)=>{const se=T?N:b,U=()=>z(R,T,I);Dt(se,[R,U]),Os(()=>{Ht(R,T?a:s),Lt(R,T?u:l),Ps(se)||As(R,r,w,U)})};return Oe(t,{onBeforeEnter(T){Dt(v,[T]),Lt(T,s),Lt(T,i)},onBeforeAppear(T){Dt(X,[T]),Lt(T,a),Lt(T,c)},onEnter:K(!1),onAppear:K(!0),onLeave(T,R){T._isLeaving=!0;const I=()=>D(T,R);Lt(T,f),Ou(),Lt(T,h),Os(()=>{T._isLeaving&&(Ht(T,f),Lt(T,g),Ps(O)||As(T,r,L,I))}),Dt(O,[T,I])},onEnterCancelled(T){z(T,!1),Dt(A,[T])},onAppearCancelled(T){z(T,!0),Dt(m,[T])},onLeaveCancelled(T){D(T),Dt(W,[T])}})}function Lu(e){if(e==null)return null;if(we(e))return[Vr(e.enter),Vr(e.leave)];{const t=Vr(e);return[t,t]}}function Vr(e){return ca(e)}function Lt(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e._vtc||(e._vtc=new Set)).add(t)}function Ht(e,t){t.split(/\s+/).forEach(r=>r&&e.classList.remove(r));const{_vtc:n}=e;n&&(n.delete(t),n.size||(e._vtc=void 0))}function Os(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let Su=0;function As(e,t,n,r){const o=e._endId=++Su,s=()=>{o===e._endId&&r()};if(n)return setTimeout(s,n);const{type:i,timeout:l,propCount:a}=Pu(e,t);if(!i)return r();const c=i+"end";let u=0;const f=()=>{e.removeEventListener(c,h),s()},h=g=>{g.target===e&&++u>=a&&f()};setTimeout(()=>{u(n[y]||"").split(", "),o=r(`${Tt}Delay`),s=r(`${Tt}Duration`),i=ks(o,s),l=r(`${bn}Delay`),a=r(`${bn}Duration`),c=ks(l,a);let u=null,f=0,h=0;t===Tt?i>0&&(u=Tt,f=i,h=s.length):t===bn?c>0&&(u=bn,f=c,h=a.length):(f=Math.max(i,c),u=f>0?i>c?Tt:bn:null,h=u?u===Tt?s.length:a.length:0);const g=u===Tt&&/\b(transform|all)(,|$)/.test(r(`${Tt}Property`).toString());return{type:u,timeout:f,propCount:h,hasTransform:g}}function ks(e,t){for(;e.lengthRs(n)+Rs(e[r])))}function Rs(e){return Number(e.slice(0,-1).replace(",","."))*1e3}function Ou(){return document.body.offsetHeight}const Au={esc:"escape",space:" ",up:"arrow-up",left:"arrow-left",right:"arrow-right",down:"arrow-down",delete:"backspace"},ku=(e,t)=>n=>{if(!("key"in n))return;const r=Yt(n.key);if(t.some(o=>o===r||Au[o]===r))return e(n)},vr={beforeMount(e,{value:t},{transition:n}){e._vod=e.style.display==="none"?"":e.style.display,n&&t?n.beforeEnter(e):yn(e,t)},mounted(e,{value:t},{transition:n}){n&&t&&n.enter(e)},updated(e,{value:t,oldValue:n},{transition:r}){!t!=!n&&(r?t?(r.beforeEnter(e),yn(e,!0),r.enter(e)):r.leave(e,()=>{yn(e,!1)}):yn(e,t))},beforeUnmount(e,{value:t}){yn(e,t)}};function yn(e,t){e.style.display=t?e._vod:"none"}const Ru=Oe({patchProp:Cu},cu);let Wr,Is=!1;function Iu(){return Wr=Is?Wr:jc(Ru),Is=!0,Wr}const $u=(...e)=>{const t=Iu().createApp(...e),{mount:n}=t;return t.mount=r=>{const o=Mu(r);if(o)return n(o,!0,o instanceof SVGElement)},t};function Mu(e){return pe(e)?document.querySelector(e):e}const Nu={"v-8daa1a0e":()=>ie(()=>import("./index.html-878c2ead.js"),[]).then(({data:e})=>e),"v-50520335":()=>ie(()=>import("./getstarted.html-604d8647.js"),[]).then(({data:e})=>e),"v-58f396b0":()=>ie(()=>import("./announcer.html-7a51f81c.js"),[]).then(({data:e})=>e),"v-743236a8":()=>ie(()=>import("./acryliccontextmenu.html-5bbdb1ab.js"),[]).then(({data:e})=>e),"v-82811736":()=>ie(()=>import("./menubar.html-d4e52ee9.js"),[]).then(({data:e})=>e),"v-6d080da6":()=>ie(()=>import("./RibbonExtraButton.html-c2f4763f.js"),[]).then(({data:e})=>e),"v-0927a752":()=>ie(()=>import("./FolderPickerTextbox.html-ab0722f6.js"),[]).then(({data:e})=>e),"v-3dfe4e80":()=>ie(()=>import("./GenericPickerTextbox.html-832f12ca.js"),[]).then(({data:e})=>e),"v-2a0d90d9":()=>ie(()=>import("./MasterAccentSplitButton.html-1d4b84a1.js"),[]).then(({data:e})=>e),"v-dff51306":()=>ie(()=>import("./ThemedMessageBox.html-e2bb5172.js"),[]).then(({data:e})=>e),"v-6d901540":()=>ie(()=>import("./ThemedInputBox.html-d54e6ab2.js"),[]).then(({data:e})=>e),"v-64a25d33":()=>ie(()=>import("./ThemedOpenFileDialog.html-a55199f6.js"),[]).then(({data:e})=>e),"v-f832d4c0":()=>ie(()=>import("./ThemedSaveFileDialog.html-89b58548.js"),[]).then(({data:e})=>e),"v-6119cdde":()=>ie(()=>import("./ApplicationWindow.html-9115126c.js"),[]).then(({data:e})=>e),"v-4fc0787a":()=>ie(()=>import("./SecondaryWindow.html-7cba5db5.js"),[]).then(({data:e})=>e),"v-6799920a":()=>ie(()=>import("./TabbedApplicationWindow.html-aec0a580.js"),[]).then(({data:e})=>e),"v-74c0b233":()=>ie(()=>import("./omnibar-search-provider.html-81d8f871.js"),[]).then(({data:e})=>e),"v-dca8df42":()=>ie(()=>import("./ThemedSpecialDialogOptions.html-20afc891.js"),[]).then(({data:e})=>e),"v-3706649a":()=>ie(()=>import("./404.html-60b35caa.js"),[]).then(({data:e})=>e)},Du=JSON.parse('{"base":"/Coho.UI/","lang":"en-US","title":"Coho.UI, WPF Library documentation","description":"Coho.UI, WPF Library documentation","head":[],"locales":{}}');var Hu=([e,t,n])=>e==="meta"&&t.name?`${e}.${t.name}`:["title","base"].includes(e)?e:e==="template"&&t.id?`${e}.${t.id}`:JSON.stringify([e,t,n]),Fu=e=>{const t=new Set,n=[];return e.forEach(r=>{const o=Hu(r);t.has(o)||(t.add(o),n.push(r))}),n},Wn=e=>/^(https?:)?\/\//.test(e),Bu=e=>/^mailto:/.test(e),zu=e=>/^tel:/.test(e),No=e=>Object.prototype.toString.call(e)==="[object Object]",hl=e=>e[e.length-1]==="/"?e.slice(0,-1):e,pl=e=>e[0]==="/"?e.slice(1):e,ml=(e,t)=>{const n=Object.keys(e).sort((r,o)=>{const s=o.split("/").length-r.split("/").length;return s!==0?s:o.length-r.length});for(const r of n)if(t.startsWith(r))return r;return"/"};const gl={"v-8daa1a0e":Ae(()=>ie(()=>import("./index.html-0d5731de.js"),[])),"v-50520335":Ae(()=>ie(()=>import("./getstarted.html-18c55845.js"),[])),"v-58f396b0":Ae(()=>ie(()=>import("./announcer.html-bc04130d.js"),[])),"v-743236a8":Ae(()=>ie(()=>import("./acryliccontextmenu.html-a33f9884.js"),[])),"v-82811736":Ae(()=>ie(()=>import("./menubar.html-736f29e5.js"),[])),"v-6d080da6":Ae(()=>ie(()=>import("./RibbonExtraButton.html-13adef65.js"),[])),"v-0927a752":Ae(()=>ie(()=>import("./FolderPickerTextbox.html-3cd65330.js"),[])),"v-3dfe4e80":Ae(()=>ie(()=>import("./GenericPickerTextbox.html-0f50f56d.js"),[])),"v-2a0d90d9":Ae(()=>ie(()=>import("./MasterAccentSplitButton.html-71dfd961.js"),[])),"v-dff51306":Ae(()=>ie(()=>import("./ThemedMessageBox.html-f133b34a.js"),[])),"v-6d901540":Ae(()=>ie(()=>import("./ThemedInputBox.html-076603e5.js"),[])),"v-64a25d33":Ae(()=>ie(()=>import("./ThemedOpenFileDialog.html-247af74d.js"),[])),"v-f832d4c0":Ae(()=>ie(()=>import("./ThemedSaveFileDialog.html-a5d6aa11.js"),[])),"v-6119cdde":Ae(()=>ie(()=>import("./ApplicationWindow.html-d6051307.js"),[])),"v-4fc0787a":Ae(()=>ie(()=>import("./SecondaryWindow.html-52f7b390.js"),[])),"v-6799920a":Ae(()=>ie(()=>import("./TabbedApplicationWindow.html-4ab63ce4.js"),[])),"v-74c0b233":Ae(()=>ie(()=>import("./omnibar-search-provider.html-5e6dc7b7.js"),[])),"v-dca8df42":Ae(()=>ie(()=>import("./ThemedSpecialDialogOptions.html-e8611b06.js"),[])),"v-3706649a":Ae(()=>ie(()=>import("./404.html-76d21eea.js"),[]))};var ju=Symbol(""),Uu=Ee(Nu),vl=gn({key:"",path:"",title:"",lang:"",frontmatter:{},headers:[]}),Pt=Ee(vl),Kt=()=>Pt,_l=Symbol(""),gt=()=>{const e=Pe(_l);if(!e)throw new Error("usePageFrontmatter() is called without provider.");return e},bl=Symbol(""),Vu=()=>{const e=Pe(bl);if(!e)throw new Error("usePageHead() is called without provider.");return e},Wu=Symbol(""),yl=Symbol(""),qu=()=>{const e=Pe(yl);if(!e)throw new Error("usePageLang() is called without provider.");return e},El=Symbol(""),Ku=()=>{const e=Pe(El);if(!e)throw new Error("usePageLayout() is called without provider.");return e},Do=Symbol(""),Ir=()=>{const e=Pe(Do);if(!e)throw new Error("useRouteLocale() is called without provider.");return e},tn=Ee(Du),wl=()=>tn,Cl=Symbol(""),Ho=()=>{const e=Pe(Cl);if(!e)throw new Error("useSiteLocaleData() is called without provider.");return e},Yu=Symbol(""),Gu="Layout",Ju="NotFound",ht=zn({resolveLayouts:e=>e.reduce((t,n)=>({...t,...n.layouts}),{}),resolvePageData:async e=>{const t=Uu.value[e];return await(t==null?void 0:t())??vl},resolvePageFrontmatter:e=>e.frontmatter,resolvePageHead:(e,t,n)=>{const r=pe(t.description)?t.description:n.description,o=[...J(t.head)?t.head:[],...n.head,["title",{},e],["meta",{name:"description",content:r}]];return Fu(o)},resolvePageHeadTitle:(e,t)=>[e.title,t.title].filter(n=>!!n).join(" | "),resolvePageLang:(e,t)=>e.lang||t.lang||"en-US",resolvePageLayout:(e,t)=>{let n;if(e.path){const r=e.frontmatter.layout;pe(r)?n=r:n=Gu}else n=Ju;return t[n]},resolveRouteLocale:(e,t)=>ml(e,t),resolveSiteLocaleData:(e,t)=>({...e,...e.locales[t]})}),Fo=he({name:"ClientOnly",setup(e,t){const n=Ee(!1);return Xe(()=>{n.value=!0}),()=>{var r,o;return n.value?(o=(r=t.slots).default)==null?void 0:o.call(r):null}}}),Qu=he({name:"Content",props:{pageKey:{type:String,required:!1,default:""}},setup(e){const t=Kt(),n=j(()=>gl[e.pageKey||t.value.key]);return()=>n.value?ve(n.value):ve("div","404 Not Found")}}),Gt=(e={})=>e,Bo=e=>Wn(e)?e:`/Coho.UI/${pl(e)}`;function xl(e,t,n){var r,o,s;t===void 0&&(t=50),n===void 0&&(n={});var i=(r=n.isImmediate)!=null&&r,l=(o=n.callback)!=null&&o,a=n.maxWait,c=Date.now(),u=[];function f(){if(a!==void 0){var g=Date.now()-c;if(g+t>=a)return a-g}return t}var h=function(){var g=[].slice.call(arguments),y=this;return new Promise(function(w,L){var v=i&&s===void 0;if(s!==void 0&&clearTimeout(s),s=setTimeout(function(){if(s=void 0,c=Date.now(),!i){var A=e.apply(y,g);l&&l(A),u.forEach(function(O){return(0,O.resolve)(A)}),u=[]}},f()),v){var b=e.apply(y,g);return l&&l(b),w(b)}u.push({resolve:w,reject:L})})};return h.cancel=function(g){s!==void 0&&clearTimeout(s),u.forEach(function(y){return(0,y.reject)(g)}),u=[]},h}/*! + * vue-router v4.2.4 + * (c) 2023 Eduardo San Martin Morote + * @license MIT + */const en=typeof window<"u";function Zu(e){return e.__esModule||e[Symbol.toStringTag]==="Module"}const me=Object.assign;function qr(e,t){const n={};for(const r in t){const o=t[r];n[r]=st(o)?o.map(e):e(o)}return n}const On=()=>{},st=Array.isArray,Xu=/\/$/,ef=e=>e.replace(Xu,"");function Kr(e,t,n="/"){let r,o={},s="",i="";const l=t.indexOf("#");let a=t.indexOf("?");return l=0&&(a=-1),a>-1&&(r=t.slice(0,a),s=t.slice(a+1,l>-1?l:t.length),o=e(s)),l>-1&&(r=r||t.slice(0,l),i=t.slice(l,t.length)),r=of(r??t,n),{fullPath:r+(s&&"?")+s+i,path:r,query:o,hash:i}}function tf(e,t){const n=t.query?e(t.query):"";return t.path+(n&&"?")+n+(t.hash||"")}function $s(e,t){return!t||!e.toLowerCase().startsWith(t.toLowerCase())?e:e.slice(t.length)||"/"}function nf(e,t,n){const r=t.matched.length-1,o=n.matched.length-1;return r>-1&&r===o&&dn(t.matched[r],n.matched[o])&&Tl(t.params,n.params)&&e(t.query)===e(n.query)&&t.hash===n.hash}function dn(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function Tl(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(const n in e)if(!rf(e[n],t[n]))return!1;return!0}function rf(e,t){return st(e)?Ms(e,t):st(t)?Ms(t,e):e===t}function Ms(e,t){return st(t)?e.length===t.length&&e.every((n,r)=>n===t[r]):e.length===1&&e[0]===t}function of(e,t){if(e.startsWith("/"))return e;if(!e)return t;const n=t.split("/"),r=e.split("/"),o=r[r.length-1];(o===".."||o===".")&&r.push("");let s=n.length-1,i,l;for(i=0;i1&&s--;else break;return n.slice(0,s).join("/")+"/"+r.slice(i-(i===r.length?1:0)).join("/")}var Nn;(function(e){e.pop="pop",e.push="push"})(Nn||(Nn={}));var An;(function(e){e.back="back",e.forward="forward",e.unknown=""})(An||(An={}));function sf(e){if(!e)if(en){const t=document.querySelector("base");e=t&&t.getAttribute("href")||"/",e=e.replace(/^\w+:\/\/[^\/]+/,"")}else e="/";return e[0]!=="/"&&e[0]!=="#"&&(e="/"+e),ef(e)}const lf=/^[^#]+#/;function af(e,t){return e.replace(lf,"#")+t}function cf(e,t){const n=document.documentElement.getBoundingClientRect(),r=e.getBoundingClientRect();return{behavior:t.behavior,left:r.left-n.left-(t.left||0),top:r.top-n.top-(t.top||0)}}const $r=()=>({left:window.pageXOffset,top:window.pageYOffset});function uf(e){let t;if("el"in e){const n=e.el,r=typeof n=="string"&&n.startsWith("#"),o=typeof n=="string"?r?document.getElementById(n.slice(1)):document.querySelector(n):n;if(!o)return;t=cf(o,e)}else t=e;"scrollBehavior"in document.documentElement.style?window.scrollTo(t):window.scrollTo(t.left!=null?t.left:window.pageXOffset,t.top!=null?t.top:window.pageYOffset)}function Ns(e,t){return(history.state?history.state.position-t:-1)+e}const uo=new Map;function ff(e,t){uo.set(e,t)}function df(e){const t=uo.get(e);return uo.delete(e),t}let hf=()=>location.protocol+"//"+location.host;function Ll(e,t){const{pathname:n,search:r,hash:o}=t,s=e.indexOf("#");if(s>-1){let l=o.includes(e.slice(s))?e.slice(s).length:1,a=o.slice(l);return a[0]!=="/"&&(a="/"+a),$s(a,"")}return $s(n,e)+r+o}function pf(e,t,n,r){let o=[],s=[],i=null;const l=({state:h})=>{const g=Ll(e,location),y=n.value,w=t.value;let L=0;if(h){if(n.value=g,t.value=h,i&&i===y){i=null;return}L=w?h.position-w.position:0}else r(g);o.forEach(v=>{v(n.value,y,{delta:L,type:Nn.pop,direction:L?L>0?An.forward:An.back:An.unknown})})};function a(){i=n.value}function c(h){o.push(h);const g=()=>{const y=o.indexOf(h);y>-1&&o.splice(y,1)};return s.push(g),g}function u(){const{history:h}=window;h.state&&h.replaceState(me({},h.state,{scroll:$r()}),"")}function f(){for(const h of s)h();s=[],window.removeEventListener("popstate",l),window.removeEventListener("beforeunload",u)}return window.addEventListener("popstate",l),window.addEventListener("beforeunload",u,{passive:!0}),{pauseListeners:a,listen:c,destroy:f}}function Ds(e,t,n,r=!1,o=!1){return{back:e,current:t,forward:n,replaced:r,position:window.history.length,scroll:o?$r():null}}function mf(e){const{history:t,location:n}=window,r={value:Ll(e,n)},o={value:t.state};o.value||s(r.value,{back:null,current:r.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function s(a,c,u){const f=e.indexOf("#"),h=f>-1?(n.host&&document.querySelector("base")?e:e.slice(f))+a:hf()+e+a;try{t[u?"replaceState":"pushState"](c,"",h),o.value=c}catch(g){console.error(g),n[u?"replace":"assign"](h)}}function i(a,c){const u=me({},t.state,Ds(o.value.back,a,o.value.forward,!0),c,{position:o.value.position});s(a,u,!0),r.value=a}function l(a,c){const u=me({},o.value,t.state,{forward:a,scroll:$r()});s(u.current,u,!0);const f=me({},Ds(r.value,a,null),{position:u.position+1},c);s(a,f,!1),r.value=a}return{location:r,state:o,push:l,replace:i}}function gf(e){e=sf(e);const t=mf(e),n=pf(e,t.state,t.location,t.replace);function r(s,i=!0){i||n.pauseListeners(),history.go(s)}const o=me({location:"",base:e,go:r,createHref:af.bind(null,e)},t,n);return Object.defineProperty(o,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(o,"state",{enumerable:!0,get:()=>t.state.value}),o}function vf(e){return typeof e=="string"||e&&typeof e=="object"}function Sl(e){return typeof e=="string"||typeof e=="symbol"}const pt={path:"/",name:void 0,params:{},query:{},hash:"",fullPath:"/",matched:[],meta:{},redirectedFrom:void 0},Pl=Symbol("");var Hs;(function(e){e[e.aborted=4]="aborted",e[e.cancelled=8]="cancelled",e[e.duplicated=16]="duplicated"})(Hs||(Hs={}));function hn(e,t){return me(new Error,{type:e,[Pl]:!0},t)}function dt(e,t){return e instanceof Error&&Pl in e&&(t==null||!!(e.type&t))}const Fs="[^/]+?",_f={sensitive:!1,strict:!1,start:!0,end:!0},bf=/[.+*?^${}()[\]/\\]/g;function yf(e,t){const n=me({},_f,t),r=[];let o=n.start?"^":"";const s=[];for(const c of e){const u=c.length?[]:[90];n.strict&&!c.length&&(o+="/");for(let f=0;ft.length?t.length===1&&t[0]===40+40?1:-1:0}function wf(e,t){let n=0;const r=e.score,o=t.score;for(;n0&&t[t.length-1]<0}const Cf={type:0,value:""},xf=/[a-zA-Z0-9_]/;function Tf(e){if(!e)return[[]];if(e==="/")return[[Cf]];if(!e.startsWith("/"))throw new Error(`Invalid path "${e}"`);function t(g){throw new Error(`ERR (${n})/"${c}": ${g}`)}let n=0,r=n;const o=[];let s;function i(){s&&o.push(s),s=[]}let l=0,a,c="",u="";function f(){c&&(n===0?s.push({type:0,value:c}):n===1||n===2||n===3?(s.length>1&&(a==="*"||a==="+")&&t(`A repeatable param (${c}) must be alone in its segment. eg: '/:ids+.`),s.push({type:1,value:c,regexp:u,repeatable:a==="*"||a==="+",optional:a==="*"||a==="?"})):t("Invalid state to consume buffer"),c="")}function h(){c+=a}for(;l{i(b)}:On}function i(u){if(Sl(u)){const f=r.get(u);f&&(r.delete(u),n.splice(n.indexOf(f),1),f.children.forEach(i),f.alias.forEach(i))}else{const f=n.indexOf(u);f>-1&&(n.splice(f,1),u.record.name&&r.delete(u.record.name),u.children.forEach(i),u.alias.forEach(i))}}function l(){return n}function a(u){let f=0;for(;f=0&&(u.record.path!==n[f].record.path||!Ol(u,n[f]));)f++;n.splice(f,0,u),u.record.name&&!js(u)&&r.set(u.record.name,u)}function c(u,f){let h,g={},y,w;if("name"in u&&u.name){if(h=r.get(u.name),!h)throw hn(1,{location:u});w=h.record.name,g=me(zs(f.params,h.keys.filter(b=>!b.optional).map(b=>b.name)),u.params&&zs(u.params,h.keys.map(b=>b.name))),y=h.stringify(g)}else if("path"in u)y=u.path,h=n.find(b=>b.re.test(y)),h&&(g=h.parse(y),w=h.record.name);else{if(h=f.name?r.get(f.name):n.find(b=>b.re.test(f.path)),!h)throw hn(1,{location:u,currentLocation:f});w=h.record.name,g=me({},f.params,u.params),y=h.stringify(g)}const L=[];let v=h;for(;v;)L.unshift(v.record),v=v.parent;return{name:w,path:y,params:g,matched:L,meta:Af(L)}}return e.forEach(u=>s(u)),{addRoute:s,resolve:c,removeRoute:i,getRoutes:l,getRecordMatcher:o}}function zs(e,t){const n={};for(const r of t)r in e&&(n[r]=e[r]);return n}function Pf(e){return{path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:void 0,beforeEnter:e.beforeEnter,props:Of(e),children:e.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:"components"in e?e.components||null:e.component&&{default:e.component}}}function Of(e){const t={},n=e.props||!1;if("component"in e)t.default=n;else for(const r in e.components)t[r]=typeof n=="object"?n[r]:n;return t}function js(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function Af(e){return e.reduce((t,n)=>me(t,n.meta),{})}function Us(e,t){const n={};for(const r in e)n[r]=r in t?t[r]:e[r];return n}function Ol(e,t){return t.children.some(n=>n===e||Ol(e,n))}const Al=/#/g,kf=/&/g,Rf=/\//g,If=/=/g,$f=/\?/g,kl=/\+/g,Mf=/%5B/g,Nf=/%5D/g,Rl=/%5E/g,Df=/%60/g,Il=/%7B/g,Hf=/%7C/g,$l=/%7D/g,Ff=/%20/g;function zo(e){return encodeURI(""+e).replace(Hf,"|").replace(Mf,"[").replace(Nf,"]")}function Bf(e){return zo(e).replace(Il,"{").replace($l,"}").replace(Rl,"^")}function fo(e){return zo(e).replace(kl,"%2B").replace(Ff,"+").replace(Al,"%23").replace(kf,"%26").replace(Df,"`").replace(Il,"{").replace($l,"}").replace(Rl,"^")}function zf(e){return fo(e).replace(If,"%3D")}function jf(e){return zo(e).replace(Al,"%23").replace($f,"%3F")}function Uf(e){return e==null?"":jf(e).replace(Rf,"%2F")}function _r(e){try{return decodeURIComponent(""+e)}catch{}return""+e}function Vf(e){const t={};if(e===""||e==="?")return t;const r=(e[0]==="?"?e.slice(1):e).split("&");for(let o=0;os&&fo(s)):[r&&fo(r)]).forEach(s=>{s!==void 0&&(t+=(t.length?"&":"")+n,s!=null&&(t+="="+s))})}return t}function Wf(e){const t={};for(const n in e){const r=e[n];r!==void 0&&(t[n]=st(r)?r.map(o=>o==null?null:""+o):r==null?r:""+r)}return t}const qf=Symbol(""),Ws=Symbol(""),Mr=Symbol(""),jo=Symbol(""),ho=Symbol("");function En(){let e=[];function t(r){return e.push(r),()=>{const o=e.indexOf(r);o>-1&&e.splice(o,1)}}function n(){e=[]}return{add:t,list:()=>e.slice(),reset:n}}function Ot(e,t,n,r,o){const s=r&&(r.enterCallbacks[o]=r.enterCallbacks[o]||[]);return()=>new Promise((i,l)=>{const a=f=>{f===!1?l(hn(4,{from:n,to:t})):f instanceof Error?l(f):vf(f)?l(hn(2,{from:t,to:f})):(s&&r.enterCallbacks[o]===s&&typeof f=="function"&&s.push(f),i())},c=e.call(r&&r.instances[o],t,n,a);let u=Promise.resolve(c);e.length<3&&(u=u.then(a)),u.catch(f=>l(f))})}function Yr(e,t,n,r){const o=[];for(const s of e)for(const i in s.components){let l=s.components[i];if(!(t!=="beforeRouteEnter"&&!s.instances[i]))if(Kf(l)){const c=(l.__vccOpts||l)[t];c&&o.push(Ot(c,n,r,s,i))}else{let a=l();o.push(()=>a.then(c=>{if(!c)return Promise.reject(new Error(`Couldn't resolve component "${i}" at "${s.path}"`));const u=Zu(c)?c.default:c;s.components[i]=u;const h=(u.__vccOpts||u)[t];return h&&Ot(h,n,r,s,i)()}))}}return o}function Kf(e){return typeof e=="object"||"displayName"in e||"props"in e||"__vccOpts"in e}function qs(e){const t=Pe(Mr),n=Pe(jo),r=j(()=>t.resolve(Z(e.to))),o=j(()=>{const{matched:a}=r.value,{length:c}=a,u=a[c-1],f=n.matched;if(!u||!f.length)return-1;const h=f.findIndex(dn.bind(null,u));if(h>-1)return h;const g=Ks(a[c-2]);return c>1&&Ks(u)===g&&f[f.length-1].path!==g?f.findIndex(dn.bind(null,a[c-2])):h}),s=j(()=>o.value>-1&&Qf(n.params,r.value.params)),i=j(()=>o.value>-1&&o.value===n.matched.length-1&&Tl(n.params,r.value.params));function l(a={}){return Jf(a)?t[Z(e.replace)?"replace":"push"](Z(e.to)).catch(On):Promise.resolve()}return{route:r,href:j(()=>r.value.href),isActive:s,isExactActive:i,navigate:l}}const Yf=he({name:"RouterLink",compatConfig:{MODE:3},props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:"page"}},useLink:qs,setup(e,{slots:t}){const n=zn(qs(e)),{options:r}=Pe(Mr),o=j(()=>({[Ys(e.activeClass,r.linkActiveClass,"router-link-active")]:n.isActive,[Ys(e.exactActiveClass,r.linkExactActiveClass,"router-link-exact-active")]:n.isExactActive}));return()=>{const s=t.default&&t.default(n);return e.custom?s:ve("a",{"aria-current":n.isExactActive?e.ariaCurrentValue:null,href:n.href,onClick:n.navigate,class:o.value},s)}}}),Gf=Yf;function Jf(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&!(e.button!==void 0&&e.button!==0)){if(e.currentTarget&&e.currentTarget.getAttribute){const t=e.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(t))return}return e.preventDefault&&e.preventDefault(),!0}}function Qf(e,t){for(const n in t){const r=t[n],o=e[n];if(typeof r=="string"){if(r!==o)return!1}else if(!st(o)||o.length!==r.length||r.some((s,i)=>s!==o[i]))return!1}return!0}function Ks(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}const Ys=(e,t,n)=>e??t??n,Zf=he({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:n}){const r=Pe(ho),o=j(()=>e.route||r.value),s=Pe(Ws,0),i=j(()=>{let c=Z(s);const{matched:u}=o.value;let f;for(;(f=u[c])&&!f.components;)c++;return c}),l=j(()=>o.value.matched[i.value]);Wt(Ws,j(()=>i.value+1)),Wt(qf,l),Wt(ho,o);const a=Ee();return ut(()=>[a.value,l.value,e.name],([c,u,f],[h,g,y])=>{u&&(u.instances[f]=c,g&&g!==u&&c&&c===h&&(u.leaveGuards.size||(u.leaveGuards=g.leaveGuards),u.updateGuards.size||(u.updateGuards=g.updateGuards))),c&&u&&(!g||!dn(u,g)||!h)&&(u.enterCallbacks[f]||[]).forEach(w=>w(c))},{flush:"post"}),()=>{const c=o.value,u=e.name,f=l.value,h=f&&f.components[u];if(!h)return Gs(n.default,{Component:h,route:c});const g=f.props[u],y=g?g===!0?c.params:typeof g=="function"?g(c):g:null,L=ve(h,me({},y,t,{onVnodeUnmounted:v=>{v.component.isUnmounted&&(f.instances[u]=null)},ref:a}));return Gs(n.default,{Component:L,route:c})||L}}});function Gs(e,t){if(!e)return null;const n=e(t);return n.length===1?n[0]:n}const Ml=Zf;function Xf(e){const t=Sf(e.routes,e),n=e.parseQuery||Vf,r=e.stringifyQuery||Vs,o=e.history,s=En(),i=En(),l=En(),a=Po(pt);let c=pt;en&&e.scrollBehavior&&"scrollRestoration"in history&&(history.scrollRestoration="manual");const u=qr.bind(null,C=>""+C),f=qr.bind(null,Uf),h=qr.bind(null,_r);function g(C,B){let $,q;return Sl(C)?($=t.getRecordMatcher(C),q=B):q=C,t.addRoute(q,$)}function y(C){const B=t.getRecordMatcher(C);B&&t.removeRoute(B)}function w(){return t.getRoutes().map(C=>C.record)}function L(C){return!!t.getRecordMatcher(C)}function v(C,B){if(B=me({},B||a.value),typeof C=="string"){const _=Kr(n,C,B.path),E=t.resolve({path:_.path},B),x=o.createHref(_.fullPath);return me(_,E,{params:h(E.params),hash:_r(_.hash),redirectedFrom:void 0,href:x})}let $;if("path"in C)$=me({},C,{path:Kr(n,C.path,B.path).path});else{const _=me({},C.params);for(const E in _)_[E]==null&&delete _[E];$=me({},C,{params:f(_)}),B.params=f(B.params)}const q=t.resolve($,B),ae=C.hash||"";q.params=u(h(q.params));const d=tf(r,me({},C,{hash:Bf(ae),path:q.path})),p=o.createHref(d);return me({fullPath:d,hash:ae,query:r===Vs?Wf(C.query):C.query||{}},q,{redirectedFrom:void 0,href:p})}function b(C){return typeof C=="string"?Kr(n,C,a.value.path):me({},C)}function A(C,B){if(c!==C)return hn(8,{from:B,to:C})}function O(C){return N(C)}function W(C){return O(me(b(C),{replace:!0}))}function X(C){const B=C.matched[C.matched.length-1];if(B&&B.redirect){const{redirect:$}=B;let q=typeof $=="function"?$(C):$;return typeof q=="string"&&(q=q.includes("?")||q.includes("#")?q=b(q):{path:q},q.params={}),me({query:C.query,hash:C.hash,params:"path"in q?{}:C.params},q)}}function N(C,B){const $=c=v(C),q=a.value,ae=C.state,d=C.force,p=C.replace===!0,_=X($);if(_)return N(me(b(_),{state:typeof _=="object"?me({},ae,_.state):ae,force:d,replace:p}),B||$);const E=$;E.redirectedFrom=B;let x;return!d&&nf(r,q,$)&&(x=hn(16,{to:E,from:q}),Ue(q,q,!0,!1)),(x?Promise.resolve(x):D(E,q)).catch(S=>dt(S)?dt(S,2)?S:Me(S):oe(S,E,q)).then(S=>{if(S){if(dt(S,2))return N(me({replace:p},b(S.to),{state:typeof S.to=="object"?me({},ae,S.to.state):ae,force:d}),B||E)}else S=T(E,q,!0,p,ae);return K(E,q,S),S})}function m(C,B){const $=A(C,B);return $?Promise.reject($):Promise.resolve()}function z(C){const B=wt.values().next().value;return B&&typeof B.runWithContext=="function"?B.runWithContext(C):C()}function D(C,B){let $;const[q,ae,d]=ed(C,B);$=Yr(q.reverse(),"beforeRouteLeave",C,B);for(const _ of q)_.leaveGuards.forEach(E=>{$.push(Ot(E,C,B))});const p=m.bind(null,C,B);return $.push(p),$e($).then(()=>{$=[];for(const _ of s.list())$.push(Ot(_,C,B));return $.push(p),$e($)}).then(()=>{$=Yr(ae,"beforeRouteUpdate",C,B);for(const _ of ae)_.updateGuards.forEach(E=>{$.push(Ot(E,C,B))});return $.push(p),$e($)}).then(()=>{$=[];for(const _ of d)if(_.beforeEnter)if(st(_.beforeEnter))for(const E of _.beforeEnter)$.push(Ot(E,C,B));else $.push(Ot(_.beforeEnter,C,B));return $.push(p),$e($)}).then(()=>(C.matched.forEach(_=>_.enterCallbacks={}),$=Yr(d,"beforeRouteEnter",C,B),$.push(p),$e($))).then(()=>{$=[];for(const _ of i.list())$.push(Ot(_,C,B));return $.push(p),$e($)}).catch(_=>dt(_,8)?_:Promise.reject(_))}function K(C,B,$){l.list().forEach(q=>z(()=>q(C,B,$)))}function T(C,B,$,q,ae){const d=A(C,B);if(d)return d;const p=B===pt,_=en?history.state:{};$&&(q||p?o.replace(C.fullPath,me({scroll:p&&_&&_.scroll},ae)):o.push(C.fullPath,ae)),a.value=C,Ue(C,B,$,p),Me()}let R;function I(){R||(R=o.listen((C,B,$)=>{if(!it.listening)return;const q=v(C),ae=X(q);if(ae){N(me(ae,{replace:!0}),q).catch(On);return}c=q;const d=a.value;en&&ff(Ns(d.fullPath,$.delta),$r()),D(q,d).catch(p=>dt(p,12)?p:dt(p,2)?(N(p.to,q).then(_=>{dt(_,20)&&!$.delta&&$.type===Nn.pop&&o.go(-1,!1)}).catch(On),Promise.reject()):($.delta&&o.go(-$.delta,!1),oe(p,q,d))).then(p=>{p=p||T(q,d,!1),p&&($.delta&&!dt(p,8)?o.go(-$.delta,!1):$.type===Nn.pop&&dt(p,20)&&o.go(-1,!1)),K(q,d,p)}).catch(On)}))}let se=En(),U=En(),ne;function oe(C,B,$){Me(C);const q=U.list();return q.length?q.forEach(ae=>ae(C,B,$)):console.error(C),Promise.reject(C)}function He(){return ne&&a.value!==pt?Promise.resolve():new Promise((C,B)=>{se.add([C,B])})}function Me(C){return ne||(ne=!C,I(),se.list().forEach(([B,$])=>C?$(C):B()),se.reset()),C}function Ue(C,B,$,q){const{scrollBehavior:ae}=e;if(!en||!ae)return Promise.resolve();const d=!$&&df(Ns(C.fullPath,0))||(q||!$)&&history.state&&history.state.scroll||null;return Tr().then(()=>ae(C,B,d)).then(p=>p&&uf(p)).catch(p=>oe(p,C,B))}const Fe=C=>o.go(C);let Et;const wt=new Set,it={currentRoute:a,listening:!0,addRoute:g,removeRoute:y,hasRoute:L,getRoutes:w,resolve:v,options:e,push:O,replace:W,go:Fe,back:()=>Fe(-1),forward:()=>Fe(1),beforeEach:s.add,beforeResolve:i.add,afterEach:l.add,onError:U.add,isReady:He,install(C){const B=this;C.component("RouterLink",Gf),C.component("RouterView",Ml),C.config.globalProperties.$router=B,Object.defineProperty(C.config.globalProperties,"$route",{enumerable:!0,get:()=>Z(a)}),en&&!Et&&a.value===pt&&(Et=!0,O(o.location).catch(ae=>{}));const $={};for(const ae in pt)Object.defineProperty($,ae,{get:()=>a.value[ae],enumerable:!0});C.provide(Mr,B),C.provide(jo,Ii($)),C.provide(ho,a);const q=C.unmount;wt.add(C),C.unmount=function(){wt.delete(C),wt.size<1&&(c=pt,R&&R(),R=null,a.value=pt,Et=!1,ne=!1),q()}}};function $e(C){return C.reduce((B,$)=>B.then(()=>z($)),Promise.resolve())}return it}function ed(e,t){const n=[],r=[],o=[],s=Math.max(t.matched.length,e.matched.length);for(let i=0;idn(c,l))?r.push(l):n.push(l));const a=e.matched[i];a&&(t.matched.find(c=>dn(c,a))||o.push(a))}return[n,r,o]}function vn(){return Pe(Mr)}function Jt(){return Pe(jo)}const td=({headerLinkSelector:e,headerAnchorSelector:t,delay:n,offset:r=5})=>{const o=vn(),i=xl(()=>{var w,L;const l=Math.max(window.scrollY,document.documentElement.scrollTop,document.body.scrollTop);if(Math.abs(l-0)h.some(b=>b.hash===v.hash));for(let v=0;v=(((w=b.parentElement)==null?void 0:w.offsetTop)??0)-r,W=!A||l<(((L=A.parentElement)==null?void 0:L.offsetTop)??0)-r;if(!(O&&W))continue;const N=decodeURIComponent(o.currentRoute.value.hash),m=decodeURIComponent(b.hash);if(N===m)return;if(f){for(let z=v+1;z{window.addEventListener("scroll",i)}),Or(()=>{window.removeEventListener("scroll",i)})},Js=async(e,t)=>{const{scrollBehavior:n}=e.options;e.options.scrollBehavior=void 0,await e.replace({query:e.currentRoute.value.query,hash:t}).finally(()=>e.options.scrollBehavior=n)},nd="a.sidebar-item",rd=".header-anchor",od=300,sd=5,id=Gt({setup(){td({headerLinkSelector:nd,headerAnchorSelector:rd,delay:od,offset:sd})}}),Qs=()=>window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0,ld=()=>window.scrollTo({top:0,behavior:"smooth"});const ad=he({name:"BackToTop",setup(){const e=Ee(0),t=j(()=>e.value>300),n=xl(()=>{e.value=Qs()},100);Xe(()=>{e.value=Qs(),window.addEventListener("scroll",()=>n())});const r=ve("div",{class:"back-to-top",onClick:ld});return()=>ve(Vn,{name:"back-to-top"},()=>t.value?r:null)}}),cd=Gt({rootComponents:[ad]});const ud=ve("svg",{class:"external-link-icon",xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",x:"0px",y:"0px",viewBox:"0 0 100 100",width:"15",height:"15"},[ve("path",{fill:"currentColor",d:"M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"}),ve("polygon",{fill:"currentColor",points:"45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"})]),fd=he({name:"ExternalLinkIcon",props:{locales:{type:Object,required:!1,default:()=>({})}},setup(e){const t=Ir(),n=j(()=>e.locales[t.value]??{openInNewWindow:"open in new window"});return()=>ve("span",[ud,ve("span",{class:"external-link-icon-sr-only"},n.value.openInNewWindow)])}}),dd={"/":{openInNewWindow:"open in new window"}},hd=Gt({enhance({app:e}){e.component("ExternalLinkIcon",ve(fd,{locales:dd}))}});/*! medium-zoom 1.0.8 | MIT License | https://github.com/francoischalifour/medium-zoom */var Ft=Object.assign||function(e){for(var t=1;t1&&arguments[1]!==void 0?arguments[1]:{},r=window.Promise||function(T){function R(){}T(R,R)},o=function(T){var R=T.target;if(R===z){y();return}A.indexOf(R)!==-1&&w({target:R})},s=function(){if(!(W||!m.original)){var T=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0;Math.abs(X-T)>N.scrollOffset&&setTimeout(y,150)}},i=function(T){var R=T.key||T.keyCode;(R==="Escape"||R==="Esc"||R===27)&&y()},l=function(){var T=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},R=T;if(T.background&&(z.style.background=T.background),T.container&&T.container instanceof Object&&(R.container=Ft({},N.container,T.container)),T.template){var I=ir(T.template)?T.template:document.querySelector(T.template);R.template=I}return N=Ft({},N,R),A.forEach(function(se){se.dispatchEvent(Xt("medium-zoom:update",{detail:{zoom:D}}))}),D},a=function(){var T=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};return e(Ft({},N,T))},c=function(){for(var T=arguments.length,R=Array(T),I=0;I0?R.reduce(function(U,ne){return[].concat(U,Xs(ne))},[]):A;return se.forEach(function(U){U.classList.remove("medium-zoom-image"),U.dispatchEvent(Xt("medium-zoom:detach",{detail:{zoom:D}}))}),A=A.filter(function(U){return se.indexOf(U)===-1}),D},f=function(T,R){var I=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return A.forEach(function(se){se.addEventListener("medium-zoom:"+T,R,I)}),O.push({type:"medium-zoom:"+T,listener:R,options:I}),D},h=function(T,R){var I=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return A.forEach(function(se){se.removeEventListener("medium-zoom:"+T,R,I)}),O=O.filter(function(se){return!(se.type==="medium-zoom:"+T&&se.listener.toString()===R.toString())}),D},g=function(){var T=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},R=T.target,I=function(){var U={width:document.documentElement.clientWidth,height:document.documentElement.clientHeight,left:0,top:0,right:0,bottom:0},ne=void 0,oe=void 0;if(N.container)if(N.container instanceof Object)U=Ft({},U,N.container),ne=U.width-U.left-U.right-N.margin*2,oe=U.height-U.top-U.bottom-N.margin*2;else{var He=ir(N.container)?N.container:document.querySelector(N.container),Me=He.getBoundingClientRect(),Ue=Me.width,Fe=Me.height,Et=Me.left,wt=Me.top;U=Ft({},U,{width:Ue,height:Fe,left:Et,top:wt})}ne=ne||U.width-N.margin*2,oe=oe||U.height-N.margin*2;var it=m.zoomedHd||m.original,$e=Zs(it)?ne:it.naturalWidth||ne,C=Zs(it)?oe:it.naturalHeight||oe,B=it.getBoundingClientRect(),$=B.top,q=B.left,ae=B.width,d=B.height,p=Math.min(Math.max(ae,$e),ne)/ae,_=Math.min(Math.max(d,C),oe)/d,E=Math.min(p,_),x=(-q+(ne-ae)/2+N.margin+U.left)/E,S=(-$+(oe-d)/2+N.margin+U.top)/E,H="scale("+E+") translate3d("+x+"px, "+S+"px, 0)";m.zoomed.style.transform=H,m.zoomedHd&&(m.zoomedHd.style.transform=H)};return new r(function(se){if(R&&A.indexOf(R)===-1){se(D);return}var U=function Ue(){W=!1,m.zoomed.removeEventListener("transitionend",Ue),m.original.dispatchEvent(Xt("medium-zoom:opened",{detail:{zoom:D}})),se(D)};if(m.zoomed){se(D);return}if(R)m.original=R;else if(A.length>0){var ne=A;m.original=ne[0]}else{se(D);return}if(m.original.dispatchEvent(Xt("medium-zoom:open",{detail:{zoom:D}})),X=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0,W=!0,m.zoomed=gd(m.original),document.body.appendChild(z),N.template){var oe=ir(N.template)?N.template:document.querySelector(N.template);m.template=document.createElement("div"),m.template.appendChild(oe.content.cloneNode(!0)),document.body.appendChild(m.template)}if(m.original.parentElement&&m.original.parentElement.tagName==="PICTURE"&&m.original.currentSrc&&(m.zoomed.src=m.original.currentSrc),document.body.appendChild(m.zoomed),window.requestAnimationFrame(function(){document.body.classList.add("medium-zoom--opened")}),m.original.classList.add("medium-zoom-image--hidden"),m.zoomed.classList.add("medium-zoom-image--opened"),m.zoomed.addEventListener("click",y),m.zoomed.addEventListener("transitionend",U),m.original.getAttribute("data-zoom-src")){m.zoomedHd=m.zoomed.cloneNode(),m.zoomedHd.removeAttribute("srcset"),m.zoomedHd.removeAttribute("sizes"),m.zoomedHd.removeAttribute("loading"),m.zoomedHd.src=m.zoomed.getAttribute("data-zoom-src"),m.zoomedHd.onerror=function(){clearInterval(He),console.warn("Unable to reach the zoom image target "+m.zoomedHd.src),m.zoomedHd=null,I()};var He=setInterval(function(){m.zoomedHd.complete&&(clearInterval(He),m.zoomedHd.classList.add("medium-zoom-image--opened"),m.zoomedHd.addEventListener("click",y),document.body.appendChild(m.zoomedHd),I())},10)}else if(m.original.hasAttribute("srcset")){m.zoomedHd=m.zoomed.cloneNode(),m.zoomedHd.removeAttribute("sizes"),m.zoomedHd.removeAttribute("loading");var Me=m.zoomedHd.addEventListener("load",function(){m.zoomedHd.removeEventListener("load",Me),m.zoomedHd.classList.add("medium-zoom-image--opened"),m.zoomedHd.addEventListener("click",y),document.body.appendChild(m.zoomedHd),I()})}else I()})},y=function(){return new r(function(T){if(W||!m.original){T(D);return}var R=function I(){m.original.classList.remove("medium-zoom-image--hidden"),document.body.removeChild(m.zoomed),m.zoomedHd&&document.body.removeChild(m.zoomedHd),document.body.removeChild(z),m.zoomed.classList.remove("medium-zoom-image--opened"),m.template&&document.body.removeChild(m.template),W=!1,m.zoomed.removeEventListener("transitionend",I),m.original.dispatchEvent(Xt("medium-zoom:closed",{detail:{zoom:D}})),m.original=null,m.zoomed=null,m.zoomedHd=null,m.template=null,T(D)};W=!0,document.body.classList.remove("medium-zoom--opened"),m.zoomed.style.transform="",m.zoomedHd&&(m.zoomedHd.style.transform=""),m.template&&(m.template.style.transition="opacity 150ms",m.template.style.opacity=0),m.original.dispatchEvent(Xt("medium-zoom:close",{detail:{zoom:D}})),m.zoomed.addEventListener("transitionend",R)})},w=function(){var T=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},R=T.target;return m.original?y():g({target:R})},L=function(){return N},v=function(){return A},b=function(){return m.original},A=[],O=[],W=!1,X=0,N=n,m={original:null,zoomed:null,zoomedHd:null,template:null};Object.prototype.toString.call(t)==="[object Object]"?N=t:(t||typeof t=="string")&&c(t),N=Ft({margin:0,background:"#fff",scrollOffset:40,container:null,template:null},N);var z=md(N.background);document.addEventListener("click",o),document.addEventListener("keyup",i),document.addEventListener("scroll",s),window.addEventListener("resize",y);var D={open:g,close:y,toggle:w,update:l,clone:a,attach:c,detach:u,on:f,off:h,getOptions:L,getImages:v,getZoomedImage:b};return D};function _d(e,t){t===void 0&&(t={});var n=t.insertAt;if(!(!e||typeof document>"u")){var r=document.head||document.getElementsByTagName("head")[0],o=document.createElement("style");o.type="text/css",n==="top"&&r.firstChild?r.insertBefore(o,r.firstChild):r.appendChild(o),o.styleSheet?o.styleSheet.cssText=e:o.appendChild(document.createTextNode(e))}}var bd=".medium-zoom-overlay{position:fixed;top:0;right:0;bottom:0;left:0;opacity:0;transition:opacity .3s;will-change:opacity}.medium-zoom--opened .medium-zoom-overlay{cursor:pointer;cursor:zoom-out;opacity:1}.medium-zoom-image{cursor:pointer;cursor:zoom-in;transition:transform .3s cubic-bezier(.2,0,.2,1)!important}.medium-zoom-image--hidden{visibility:hidden}.medium-zoom-image--opened{position:relative;cursor:pointer;cursor:zoom-out;will-change:transform}";_d(bd);const yd=vd,Ed=Symbol("mediumZoom");const wd=".theme-default-content > img, .theme-default-content :not(a) > img",Cd={},xd=300,Td=Gt({enhance({app:e,router:t}){const n=yd(Cd);n.refresh=(r=wd)=>{n.detach(),n.attach(r)},e.provide(Ed,n),t.afterEach(()=>{setTimeout(()=>n.refresh(),xd)})}});/** + * NProgress, (c) 2013, 2014 Rico Sta. Cruz - http://ricostacruz.com/nprogress + * @license MIT + */const ce={settings:{minimum:.08,easing:"ease",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,barSelector:'[role="bar"]',parent:"body",template:'
'},status:null,set:e=>{const t=ce.isStarted();e=Gr(e,ce.settings.minimum,1),ce.status=e===1?null:e;const n=ce.render(!t),r=n.querySelector(ce.settings.barSelector),o=ce.settings.speed,s=ce.settings.easing;return n.offsetWidth,Ld(i=>{tr(r,{transform:"translate3d("+ei(e)+"%,0,0)",transition:"all "+o+"ms "+s}),e===1?(tr(n,{transition:"none",opacity:"1"}),n.offsetWidth,setTimeout(function(){tr(n,{transition:"all "+o+"ms linear",opacity:"0"}),setTimeout(function(){ce.remove(),i()},o)},o)):setTimeout(()=>i(),o)}),ce},isStarted:()=>typeof ce.status=="number",start:()=>{ce.status||ce.set(0);const e=()=>{setTimeout(()=>{ce.status&&(ce.trickle(),e())},ce.settings.trickleSpeed)};return ce.settings.trickle&&e(),ce},done:e=>!e&&!ce.status?ce:ce.inc(.3+.5*Math.random()).set(1),inc:e=>{let t=ce.status;return t?(typeof e!="number"&&(e=(1-t)*Gr(Math.random()*t,.1,.95)),t=Gr(t+e,0,.994),ce.set(t)):ce.start()},trickle:()=>ce.inc(Math.random()*ce.settings.trickleRate),render:e=>{if(ce.isRendered())return document.getElementById("nprogress");ti(document.documentElement,"nprogress-busy");const t=document.createElement("div");t.id="nprogress",t.innerHTML=ce.settings.template;const n=t.querySelector(ce.settings.barSelector),r=e?"-100":ei(ce.status||0),o=document.querySelector(ce.settings.parent);return tr(n,{transition:"all 0 linear",transform:"translate3d("+r+"%,0,0)"}),o!==document.body&&ti(o,"nprogress-custom-parent"),o==null||o.appendChild(t),t},remove:()=>{ni(document.documentElement,"nprogress-busy"),ni(document.querySelector(ce.settings.parent),"nprogress-custom-parent");const e=document.getElementById("nprogress");e&&Sd(e)},isRendered:()=>!!document.getElementById("nprogress")},Gr=(e,t,n)=>en?n:e,ei=e=>(-1+e)*100,Ld=function(){const e=[];function t(){const n=e.shift();n&&n(t)}return function(n){e.push(n),e.length===1&&t()}}(),tr=function(){const e=["Webkit","O","Moz","ms"],t={};function n(i){return i.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,function(l,a){return a.toUpperCase()})}function r(i){const l=document.body.style;if(i in l)return i;let a=e.length;const c=i.charAt(0).toUpperCase()+i.slice(1);let u;for(;a--;)if(u=e[a]+c,u in l)return u;return i}function o(i){return i=n(i),t[i]??(t[i]=r(i))}function s(i,l,a){l=o(l),i.style[l]=a}return function(i,l){for(const a in l){const c=l[a];c!==void 0&&Object.prototype.hasOwnProperty.call(l,a)&&s(i,a,c)}}}(),Nl=(e,t)=>(typeof e=="string"?e:Uo(e)).indexOf(" "+t+" ")>=0,ti=(e,t)=>{const n=Uo(e),r=n+t;Nl(n,t)||(e.className=r.substring(1))},ni=(e,t)=>{const n=Uo(e);if(!Nl(e,t))return;const r=n.replace(" "+t+" "," ");e.className=r.substring(1,r.length-1)},Uo=e=>(" "+(e.className||"")+" ").replace(/\s+/gi," "),Sd=e=>{e&&e.parentNode&&e.parentNode.removeChild(e)};const Pd=()=>{Xe(()=>{const e=vn(),t=new Set;t.add(e.currentRoute.value.path),e.beforeEach(n=>{t.has(n.path)||ce.start()}),e.afterEach(n=>{t.add(n.path),ce.done()})})},Od=Gt({setup(){Pd()}}),Ad=JSON.parse(`{"sidebar":[{"text":"","children":[{"text":"Introduction","link":"/index.md","children":[]},{"text":"Getting started","link":"/getstarted.md","children":[]}]},{"text":"Windows","children":[{"text":"ApplicationWindow","link":"/windows/ApplicationWindow.md"},{"text":"SecondaryWindow","link":"/windows/SecondaryWindow.md"},{"text":"TabbedApplicationWindow","link":"/windows/TabbedApplicationWindow.md"}]},{"text":"Controls","children":[{"text":"AcrylicContextMenu","link":"/controls/acryliccontextmenu.md"},{"text":"Announcer","link":"/controls/announcer.md"},{"text":"FolderPickerTextbox","link":"/controls/FolderPickerTextbox.md"},{"text":"MasterAccentSplitButton","link":"/controls/MasterAccentSplitButton.md"}]},{"text":"Themed Dialogs","children":[{"text":"ThemedInputBox","link":"/dialogs/ThemedInputBox.md"},{"text":"ThemedMessageBox","link":"/dialogs/ThemedMessageBox.md"},{"text":"ThemedOpenFileDialog","link":"/dialogs/ThemedOpenFileDialog.md"}]},{"text":"Classes","children":[{"text":"ThemedSpecialDialogOptions","link":"/classes/ThemedSpecialDialogOptions.md"}]},{"text":"How-Tos","children":[{"text":"Build custom search provider for the Omnibar","link":"/howto/omnibar-search-provider.md"}]}],"navbar":[],"locales":{"/":{"selectLanguageName":"English"}},"colorMode":"auto","colorModeSwitch":true,"logo":null,"repo":null,"selectLanguageText":"Languages","selectLanguageAriaLabel":"Select language","sidebarDepth":2,"editLink":true,"editLinkText":"Edit this page","lastUpdated":true,"lastUpdatedText":"Last Updated","contributors":true,"contributorsText":"Contributors","notFound":["There's nothing here.","How did we get here?","That's a Four-Oh-Four.","Looks like we've got some broken links."],"backToHome":"Take me home","openInNewWindow":"open in new window","toggleColorMode":"toggle color mode","toggleSidebar":"toggle sidebar"}`),kd=Ee(Ad),Dl=()=>kd,Hl=Symbol(""),Rd=()=>{const e=Pe(Hl);if(!e)throw new Error("useThemeLocaleData() is called without provider.");return e},Id=(e,t)=>{const{locales:n,...r}=e;return{...r,...n==null?void 0:n[t]}},$d=Gt({enhance({app:e}){const t=Dl(),n=e._context.provides[Do],r=j(()=>Id(t.value,n.value));e.provide(Hl,r),Object.defineProperties(e.config.globalProperties,{$theme:{get(){return t.value}},$themeLocale:{get(){return r.value}}})}}),Md=he({__name:"Badge",props:{type:{type:String,required:!1,default:"tip"},text:{type:String,required:!1,default:""},vertical:{type:String,required:!1,default:void 0}},setup(e){return(t,n)=>(F(),Q("span",{class:We(["badge",e.type]),style:Bn({verticalAlign:e.vertical})},[be(t.$slots,"default",{},()=>[Mt(Re(e.text),1)])],6))}}),xe=(e,t)=>{const n=e.__vccOpts||e;for(const[r,o]of t)n[r]=o;return n},Nd=xe(Md,[["__file","Badge.vue"]]),Dd=he({name:"CodeGroup",slots:Object,setup(e,{slots:t}){const n=Ee(-1),r=Ee([]),o=(l=n.value)=>{l{l>0?n.value=l-1:n.value=r.value.length-1,r.value[n.value].focus()},i=(l,a)=>{l.key===" "||l.key==="Enter"?(l.preventDefault(),n.value=a):l.key==="ArrowRight"?(l.preventDefault(),o(a)):l.key==="ArrowLeft"&&(l.preventDefault(),s(a))};return()=>{var a;const l=(((a=t.default)==null?void 0:a.call(t))||[]).filter(c=>c.type.name==="CodeGroupItem").map(c=>(c.props===null&&(c.props={}),c));return l.length===0?null:(n.value<0||n.value>l.length-1?(n.value=l.findIndex(c=>c.props.active===""||c.props.active===!0),n.value===-1&&(n.value=0)):l.forEach((c,u)=>{c.props.active=u===n.value}),ve("div",{class:"code-group"},[ve("div",{class:"code-group__nav"},ve("ul",{class:"code-group__ul"},l.map((c,u)=>{const f=u===n.value;return ve("li",{class:"code-group__li"},ve("button",{ref:h=>{h&&(r.value[u]=h)},class:{"code-group__nav-tab":!0,"code-group__nav-tab-active":f},ariaPressed:f,ariaExpanded:f,onClick:()=>n.value=u,onKeydown:h=>i(h,u)},c.props.title))}))),l]))}}}),Hd=["aria-selected"],Fd=he({name:"CodeGroupItem"}),Bd=he({...Fd,props:{title:{type:String,required:!0},active:{type:Boolean,required:!1,default:!1}},setup(e){return(t,n)=>(F(),Q("div",{class:We(["code-group-item",{"code-group-item__active":e.active}]),"aria-selected":e.active},[be(t.$slots,"default")],10,Hd))}}),zd=xe(Bd,[["__file","CodeGroupItem.vue"]]);var jd=Object.defineProperty,Ud=Object.defineProperties,Vd=Object.getOwnPropertyDescriptors,ri=Object.getOwnPropertySymbols,Wd=Object.prototype.hasOwnProperty,qd=Object.prototype.propertyIsEnumerable,oi=(e,t,n)=>t in e?jd(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Kd=(e,t)=>{for(var n in t||(t={}))Wd.call(t,n)&&oi(e,n,t[n]);if(ri)for(var n of ri(t))qd.call(t,n)&&oi(e,n,t[n]);return e},Yd=(e,t)=>Ud(e,Vd(t));function si(e,t){var n;const r=Po();return Wi(()=>{r.value=e()},Yd(Kd({},t),{flush:(n=t==null?void 0:t.flush)!=null?n:"sync"})),gn(r)}function Fl(e){return wi()?(_a(e),!0):!1}function Dn(e){return typeof e=="function"?e():Z(e)}const Gd=typeof window<"u",Bl=()=>{};function Jd(e,t){function n(...r){return new Promise((o,s)=>{Promise.resolve(e(()=>t.apply(this,r),{fn:t,thisArg:this,args:r})).then(o).catch(s)})}return n}const zl=e=>e();function Qd(e=zl){const t=Ee(!0);function n(){t.value=!1}function r(){t.value=!0}const o=(...s)=>{t.value&&e(...s)};return{isActive:gn(t),pause:n,resume:r,eventFilter:o}}function Zd(...e){if(e.length!==1)return Za(...e);const t=e[0];return typeof t=="function"?gn(Ga(()=>({get:t,set:Bl}))):Ee(t)}function Xd(e=!1,t={}){const{truthyValue:n=!0,falsyValue:r=!1}=t,o=Ie(e),s=Ee(e);function i(l){if(arguments.length)return s.value=l,s.value;{const a=Dn(n);return s.value=s.value===a?Dn(r):a,s.value}}return o?i:[s,i]}var ii=Object.getOwnPropertySymbols,eh=Object.prototype.hasOwnProperty,th=Object.prototype.propertyIsEnumerable,nh=(e,t)=>{var n={};for(var r in e)eh.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&ii)for(var r of ii(e))t.indexOf(r)<0&&th.call(e,r)&&(n[r]=e[r]);return n};function rh(e,t,n={}){const r=n,{eventFilter:o=zl}=r,s=nh(r,["eventFilter"]);return ut(e,Jd(o,t),s)}var oh=Object.defineProperty,sh=Object.defineProperties,ih=Object.getOwnPropertyDescriptors,br=Object.getOwnPropertySymbols,jl=Object.prototype.hasOwnProperty,Ul=Object.prototype.propertyIsEnumerable,li=(e,t,n)=>t in e?oh(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,lh=(e,t)=>{for(var n in t||(t={}))jl.call(t,n)&&li(e,n,t[n]);if(br)for(var n of br(t))Ul.call(t,n)&&li(e,n,t[n]);return e},ah=(e,t)=>sh(e,ih(t)),ch=(e,t)=>{var n={};for(var r in e)jl.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&br)for(var r of br(e))t.indexOf(r)<0&&Ul.call(e,r)&&(n[r]=e[r]);return n};function uh(e,t,n={}){const r=n,{eventFilter:o}=r,s=ch(r,["eventFilter"]),{eventFilter:i,pause:l,resume:a,isActive:c}=Qd(o);return{stop:rh(e,t,ah(lh({},s),{eventFilter:i})),pause:l,resume:a,isActive:c}}function fh(e){var t;const n=Dn(e);return(t=n==null?void 0:n.$el)!=null?t:n}const yr=Gd?window:void 0;function ai(...e){let t,n,r,o;if(typeof e[0]=="string"||Array.isArray(e[0])?([n,r,o]=e,t=yr):[t,n,r,o]=e,!t)return Bl;Array.isArray(n)||(n=[n]),Array.isArray(r)||(r=[r]);const s=[],i=()=>{s.forEach(u=>u()),s.length=0},l=(u,f,h,g)=>(u.addEventListener(f,h,g),()=>u.removeEventListener(f,h,g)),a=ut(()=>[fh(t),Dn(o)],([u,f])=>{i(),u&&s.push(...n.flatMap(h=>r.map(g=>l(u,h,g,f))))},{immediate:!0,flush:"post"}),c=()=>{a(),i()};return Fl(c),c}function dh(){const e=Ee(!1);return cl()&&Xe(()=>{e.value=!0}),e}function hh(e){const t=dh();return j(()=>(t.value,!!e()))}function ph(e,t={}){const{window:n=yr}=t,r=hh(()=>n&&"matchMedia"in n&&typeof n.matchMedia=="function");let o;const s=Ee(!1),i=()=>{o&&("removeEventListener"in o?o.removeEventListener("change",l):o.removeListener(l))},l=()=>{r.value&&(i(),o=n.matchMedia(Zd(e).value),s.value=!!(o!=null&&o.matches),o&&("addEventListener"in o?o.addEventListener("change",l):o.addListener(l)))};return Wi(l),Fl(()=>i()),s}const nr=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},rr="__vueuse_ssr_handlers__",mh=gh();function gh(){return rr in nr||(nr[rr]=nr[rr]||{}),nr[rr]}function vh(e,t){return mh[e]||t}function _h(e){return e==null?"any":e instanceof Set?"set":e instanceof Map?"map":e instanceof Date?"date":typeof e=="boolean"?"boolean":typeof e=="string"?"string":typeof e=="object"?"object":Number.isNaN(e)?"any":"number"}var bh=Object.defineProperty,ci=Object.getOwnPropertySymbols,yh=Object.prototype.hasOwnProperty,Eh=Object.prototype.propertyIsEnumerable,ui=(e,t,n)=>t in e?bh(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,fi=(e,t)=>{for(var n in t||(t={}))yh.call(t,n)&&ui(e,n,t[n]);if(ci)for(var n of ci(t))Eh.call(t,n)&&ui(e,n,t[n]);return e};const wh={boolean:{read:e=>e==="true",write:e=>String(e)},object:{read:e=>JSON.parse(e),write:e=>JSON.stringify(e)},number:{read:e=>Number.parseFloat(e),write:e=>String(e)},any:{read:e=>e,write:e=>String(e)},string:{read:e=>e,write:e=>String(e)},map:{read:e=>new Map(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e.entries()))},set:{read:e=>new Set(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e))},date:{read:e=>new Date(e),write:e=>e.toISOString()}},di="vueuse-storage";function Ch(e,t,n,r={}){var o;const{flush:s="pre",deep:i=!0,listenToStorageChanges:l=!0,writeDefaults:a=!0,mergeDefaults:c=!1,shallow:u,window:f=yr,eventFilter:h,onError:g=m=>{console.error(m)}}=r,y=(u?Po:Ee)(t);if(!n)try{n=vh("getDefaultStorage",()=>{var m;return(m=yr)==null?void 0:m.localStorage})()}catch(m){g(m)}if(!n)return y;const w=Dn(t),L=_h(w),v=(o=r.serializer)!=null?o:wh[L],{pause:b,resume:A}=uh(y,()=>O(y.value),{flush:s,deep:i,eventFilter:h});return f&&l&&(ai(f,"storage",N),ai(f,di,X)),N(),y;function O(m){try{if(m==null)n.removeItem(e);else{const z=v.write(m),D=n.getItem(e);D!==z&&(n.setItem(e,z),f&&f.dispatchEvent(new CustomEvent(di,{detail:{key:e,oldValue:D,newValue:z,storageArea:n}})))}}catch(z){g(z)}}function W(m){const z=m?m.newValue:n.getItem(e);if(z==null)return a&&w!==null&&n.setItem(e,v.write(w)),w;if(!m&&c){const D=v.read(z);return typeof c=="function"?c(D,w):L==="object"&&!Array.isArray(D)?fi(fi({},w),D):D}else return typeof z!="string"?z:v.read(z)}function X(m){N(m.detail)}function N(m){if(!(m&&m.storageArea!==n)){if(m&&m.key==null){y.value=w;return}if(!(m&&m.key!==e)){b();try{y.value=W(m)}catch(z){g(z)}finally{m?Tr(A):A()}}}}}function xh(e){return ph("(prefers-color-scheme: dark)",e)}const Th=()=>Dl(),je=()=>Rd(),Vl=Symbol(""),Vo=()=>{const e=Pe(Vl);if(!e)throw new Error("useDarkMode() is called without provider.");return e},Lh=()=>{const e=je(),t=xh(),n=Ch("vuepress-color-scheme",e.value.colorMode),r=j({get(){return e.value.colorModeSwitch?n.value==="auto"?t.value:n.value==="dark":e.value.colorMode==="dark"},set(o){o===t.value?n.value="auto":n.value=o?"dark":"light"}});Wt(Vl,r),Sh(r)},Sh=e=>{const t=(n=e.value)=>{const r=window==null?void 0:window.document.querySelector("html");r==null||r.classList.toggle("dark",n)};Xe(()=>{ut(e,t,{immediate:!0})}),Ar(()=>t())},Wl=(...e)=>{const n=vn().resolve(...e),r=n.matched[n.matched.length-1];if(!(r!=null&&r.redirect))return n;const{redirect:o}=r,s=re(o)?o(n):o,i=pe(s)?{path:s}:s;return Wl({hash:n.hash,query:n.query,params:n.params,...i})},Wo=e=>{const t=Wl(encodeURI(e));return{text:t.meta.title||e,link:t.name==="404"?e:t.fullPath}};let Jr=null,wn=null;const Ph={wait:()=>Jr,pending:()=>{Jr=new Promise(e=>wn=e)},resolve:()=>{wn==null||wn(),Jr=null,wn=null}},ql=()=>Ph,Kl=Symbol("sidebarItems"),qo=()=>{const e=Pe(Kl);if(!e)throw new Error("useSidebarItems() is called without provider.");return e},Oh=()=>{const e=je(),t=gt(),n=j(()=>Ah(t.value,e.value));Wt(Kl,n)},Ah=(e,t)=>{const n=e.sidebar??t.sidebar??"auto",r=e.sidebarDepth??t.sidebarDepth??2;return e.home||n===!1?[]:n==="auto"?Rh(r):J(n)?Yl(n,r):No(n)?Ih(n,r):[]},kh=(e,t)=>({text:e.title,link:e.link,children:Ko(e.children,t)}),Ko=(e,t)=>t>0?e.map(n=>kh(n,t-1)):[],Rh=e=>{const t=Kt();return[{text:t.value.title,children:Ko(t.value.headers,e)}]},Yl=(e,t)=>{const n=Jt(),r=Kt(),o=s=>{var l;let i;if(pe(s)?i=Wo(s):i=s,i.children)return{...i,children:i.children.map(a=>o(a))};if(i.link===n.path){const a=((l=r.value.headers[0])==null?void 0:l.level)===1?r.value.headers[0].children:r.value.headers;return{...i,children:Ko(a,t)}}return i};return e.map(s=>o(s))},Ih=(e,t)=>{const n=Jt(),r=ml(e,n.path),o=e[r]??[];return Yl(o,t)},$h="719px",Mh={mobile:$h};var Hn;(function(e){e.MOBILE="mobile"})(Hn||(Hn={}));var mi;const Nh={[Hn.MOBILE]:Number.parseInt((mi=Mh.mobile)==null?void 0:mi.replace("px",""),10)},Gl=(e,t)=>{const n=Nh[e];Number.isInteger(n)&&Xe(()=>{t(n),window.addEventListener("resize",()=>t(n),!1),window.addEventListener("orientationchange",()=>t(n),!1)})},Dh={},Hh={class:"theme-default-content"};function Fh(e,t){const n=bt("Content");return F(),Q("div",Hh,[ee(n)])}const Bh=xe(Dh,[["render",Fh],["__file","HomeContent.vue"]]),zh={key:0,class:"features"},jh=he({__name:"HomeFeatures",setup(e){const t=gt(),n=j(()=>J(t.value.features)?t.value.features:[]);return(r,o)=>n.value.length?(F(),Q("div",zh,[(F(!0),Q(ye,null,It(n.value,s=>(F(),Q("div",{key:s.title,class:"feature"},[fe("h2",null,Re(s.title),1),fe("p",null,Re(s.details),1)]))),128))])):Te("v-if",!0)}}),Uh=xe(jh,[["__file","HomeFeatures.vue"]]),Vh=["innerHTML"],Wh=["textContent"],qh=he({__name:"HomeFooter",setup(e){const t=gt(),n=j(()=>t.value.footer),r=j(()=>t.value.footerHtml);return(o,s)=>n.value?(F(),Q(ye,{key:0},[Te(" eslint-disable-next-line vue/no-v-html "),r.value?(F(),Q("div",{key:0,class:"footer",innerHTML:n.value},null,8,Vh)):(F(),Q("div",{key:1,class:"footer",textContent:Re(n.value)},null,8,Wh))],64)):Te("v-if",!0)}}),Kh=xe(qh,[["__file","HomeFooter.vue"]]),Yh=["href","rel","target","aria-label"],Gh=he({inheritAttrs:!1}),Jh=he({...Gh,__name:"AutoLink",props:{item:{type:Object,required:!0}},setup(e){const t=e,n=Jt(),r=wl(),{item:o}=Oo(t),s=j(()=>Wn(o.value.link)),i=j(()=>Bu(o.value.link)||zu(o.value.link)),l=j(()=>{if(!i.value){if(o.value.target)return o.value.target;if(s.value)return"_blank"}}),a=j(()=>l.value==="_blank"),c=j(()=>!s.value&&!i.value&&!a.value),u=j(()=>{if(!i.value){if(o.value.rel)return o.value.rel;if(a.value)return"noopener noreferrer"}}),f=j(()=>o.value.ariaLabel||o.value.text),h=j(()=>{const w=Object.keys(r.value.locales);return w.length?!w.some(L=>L===o.value.link):o.value.link!=="/"}),g=j(()=>h.value?n.path.startsWith(o.value.link):!1),y=j(()=>c.value?o.value.activeMatch?new RegExp(o.value.activeMatch).test(n.path):g.value:!1);return(w,L)=>{const v=bt("RouterLink"),b=bt("AutoLinkExternalIcon");return c.value?(F(),Se(v,ao({key:0,class:{"router-link-active":y.value},to:Z(o).link,"aria-label":f.value},w.$attrs),{default:Ne(()=>[be(w.$slots,"before"),Mt(" "+Re(Z(o).text)+" ",1),be(w.$slots,"after")]),_:3},16,["class","to","aria-label"])):(F(),Q("a",ao({key:1,class:"external-link",href:Z(o).link,rel:u.value,target:l.value,"aria-label":f.value},w.$attrs),[be(w.$slots,"before"),Mt(" "+Re(Z(o).text)+" ",1),a.value?(F(),Se(b,{key:0})):Te("v-if",!0),be(w.$slots,"after")],16,Yh))}}}),vt=xe(Jh,[["__file","AutoLink.vue"]]),Qh={class:"hero"},Zh={key:0,id:"main-title"},Xh={key:1,class:"description"},ep={key:2,class:"actions"},tp=he({__name:"HomeHero",setup(e){const t=gt(),n=Ho(),r=Vo(),o=j(()=>r.value&&t.value.heroImageDark!==void 0?t.value.heroImageDark:t.value.heroImage),s=j(()=>t.value.heroAlt||l.value||"hero"),i=j(()=>t.value.heroHeight||280),l=j(()=>t.value.heroText===null?null:t.value.heroText||n.value.title||"Hello"),a=j(()=>t.value.tagline===null?null:t.value.tagline||n.value.description||"Welcome to your VuePress site"),c=j(()=>J(t.value.actions)?t.value.actions.map(({text:f,link:h,type:g="primary"})=>({text:f,link:h,type:g})):[]),u=()=>{if(!o.value)return null;const f=ve("img",{src:Bo(o.value),alt:s.value,height:i.value});return t.value.heroImageDark===void 0?f:ve(Fo,()=>f)};return(f,h)=>(F(),Q("header",Qh,[ee(u),l.value?(F(),Q("h1",Zh,Re(l.value),1)):Te("v-if",!0),a.value?(F(),Q("p",Xh,Re(a.value),1)):Te("v-if",!0),c.value.length?(F(),Q("p",ep,[(F(!0),Q(ye,null,It(c.value,g=>(F(),Se(vt,{key:g.text,class:We(["action-button",[g.type]]),item:g},null,8,["class","item"]))),128))])):Te("v-if",!0)]))}}),np=xe(tp,[["__file","HomeHero.vue"]]),rp={class:"home"},op=he({__name:"Home",setup(e){return(t,n)=>(F(),Q("main",rp,[ee(np),ee(Uh),ee(Bh),ee(Kh)]))}}),sp=xe(op,[["__file","Home.vue"]]),ip=he({__name:"NavbarBrand",setup(e){const t=Ir(),n=Ho(),r=je(),o=Vo(),s=j(()=>r.value.home||t.value),i=j(()=>n.value.title),l=j(()=>o.value&&r.value.logoDark!==void 0?r.value.logoDark:r.value.logo),a=()=>{if(!l.value)return null;const c=ve("img",{class:"logo",src:Bo(l.value),alt:i.value});return r.value.logoDark===void 0?c:ve(Fo,()=>c)};return(c,u)=>{const f=bt("RouterLink");return F(),Se(f,{to:s.value},{default:Ne(()=>[ee(a),i.value?(F(),Q("span",{key:0,class:We(["site-name",{"can-hide":l.value}])},Re(i.value),3)):Te("v-if",!0)]),_:1},8,["to"])}}}),lp=xe(ip,[["__file","NavbarBrand.vue"]]),ap=he({__name:"DropdownTransition",setup(e){const t=r=>{r.style.height=r.scrollHeight+"px"},n=r=>{r.style.height=""};return(r,o)=>(F(),Se(Vn,{name:"dropdown",onEnter:t,onAfterEnter:n,onBeforeLeave:t},{default:Ne(()=>[be(r.$slots,"default")]),_:3}))}}),Jl=xe(ap,[["__file","DropdownTransition.vue"]]),cp=["aria-label"],up={class:"title"},fp=fe("span",{class:"arrow down"},null,-1),dp=["aria-label"],hp={class:"title"},pp={class:"navbar-dropdown"},mp={class:"navbar-dropdown-subtitle"},gp={key:1},vp={class:"navbar-dropdown-subitem-wrapper"},_p=he({__name:"NavbarDropdown",props:{item:{type:Object,required:!0}},setup(e){const t=e,{item:n}=Oo(t),r=j(()=>n.value.ariaLabel||n.value.text),o=Ee(!1),s=Jt();ut(()=>s.path,()=>{o.value=!1});const i=a=>{a.detail===0?o.value=!o.value:o.value=!1},l=(a,c)=>c[c.length-1]===a;return(a,c)=>(F(),Q("div",{class:We(["navbar-dropdown-wrapper",{open:o.value}])},[fe("button",{class:"navbar-dropdown-title",type:"button","aria-label":r.value,onClick:i},[fe("span",up,Re(Z(n).text),1),fp],8,cp),fe("button",{class:"navbar-dropdown-title-mobile",type:"button","aria-label":r.value,onClick:c[0]||(c[0]=u=>o.value=!o.value)},[fe("span",hp,Re(Z(n).text),1),fe("span",{class:We(["arrow",o.value?"down":"right"])},null,2)],8,dp),ee(Jl,null,{default:Ne(()=>[dr(fe("ul",pp,[(F(!0),Q(ye,null,It(Z(n).children,u=>(F(),Q("li",{key:u.text,class:"navbar-dropdown-item"},[u.children?(F(),Q(ye,{key:0},[fe("h4",mp,[u.link?(F(),Se(vt,{key:0,item:u,onFocusout:f=>l(u,Z(n).children)&&u.children.length===0&&(o.value=!1)},null,8,["item","onFocusout"])):(F(),Q("span",gp,Re(u.text),1))]),fe("ul",vp,[(F(!0),Q(ye,null,It(u.children,f=>(F(),Q("li",{key:f.link,class:"navbar-dropdown-subitem"},[ee(vt,{item:f,onFocusout:h=>l(f,u.children)&&l(u,Z(n).children)&&(o.value=!1)},null,8,["item","onFocusout"])]))),128))])],64)):(F(),Se(vt,{key:1,item:u,onFocusout:f=>l(u,Z(n).children)&&(o.value=!1)},null,8,["item","onFocusout"]))]))),128))],512),[[vr,o.value]])]),_:1})],2))}}),bp=xe(_p,[["__file","NavbarDropdown.vue"]]),hi=e=>decodeURI(e).replace(/#.*$/,"").replace(/(index)?\.(md|html)$/,""),yp=(e,t)=>{if(t.hash===e)return!0;const n=hi(t.path),r=hi(e);return n===r},Ql=(e,t)=>e.link&&yp(e.link,t)?!0:e.children?e.children.some(n=>Ql(n,t)):!1,Zl=e=>!Wn(e)||/github\.com/.test(e)?"GitHub":/bitbucket\.org/.test(e)?"Bitbucket":/gitlab\.com/.test(e)?"GitLab":/gitee\.com/.test(e)?"Gitee":null,Ep={GitHub:":repo/edit/:branch/:path",GitLab:":repo/-/edit/:branch/:path",Gitee:":repo/edit/:branch/:path",Bitbucket:":repo/src/:branch/:path?mode=edit&spa=0&at=:branch&fileviewer=file-view-default"},wp=({docsRepo:e,editLinkPattern:t})=>{if(t)return t;const n=Zl(e);return n!==null?Ep[n]:null},Cp=({docsRepo:e,docsBranch:t,docsDir:n,filePathRelative:r,editLinkPattern:o})=>{if(!r)return null;const s=wp({docsRepo:e,editLinkPattern:o});return s?s.replace(/:repo/,Wn(e)?e:`https://github.com/${e}`).replace(/:branch/,t).replace(/:path/,pl(`${hl(n)}/${r}`)):null},xp={key:0,class:"navbar-items"},Tp=he({__name:"NavbarItems",setup(e){const t=()=>{const u=vn(),f=Ir(),h=wl(),g=Ho(),y=Th(),w=je();return j(()=>{const L=Object.keys(h.value.locales);if(L.length<2)return[];const v=u.currentRoute.value.path,b=u.currentRoute.value.fullPath;return[{text:`${w.value.selectLanguageText}`,ariaLabel:`${w.value.selectLanguageAriaLabel??w.value.selectLanguageText}`,children:L.map(O=>{var D,K;const W=((D=h.value.locales)==null?void 0:D[O])??{},X=((K=y.value.locales)==null?void 0:K[O])??{},N=`${W.lang}`,m=X.selectLanguageName??N;let z;if(N===g.value.lang)z=b;else{const T=v.replace(f.value,O);u.getRoutes().some(R=>R.path===T)?z=b.replace(v,T):z=X.home??O}return{text:m,link:z}})}]})},n=()=>{const u=je(),f=j(()=>u.value.repo),h=j(()=>f.value?Zl(f.value):null),g=j(()=>f.value&&!Wn(f.value)?`https://github.com/${f.value}`:f.value),y=j(()=>g.value?u.value.repoLabel?u.value.repoLabel:h.value===null?"Source":h.value:null);return j(()=>!g.value||!y.value?[]:[{text:y.value,link:g.value}])},r=u=>pe(u)?Wo(u):u.children?{...u,children:u.children.map(r)}:u,o=()=>{const u=je();return j(()=>(u.value.navbar||[]).map(r))},s=Ee(!1),i=o(),l=t(),a=n(),c=j(()=>[...i.value,...l.value,...a.value]);return Gl(Hn.MOBILE,u=>{window.innerWidthc.value.length?(F(),Q("nav",xp,[(F(!0),Q(ye,null,It(c.value,h=>(F(),Q("div",{key:h.text,class:"navbar-item"},[h.children?(F(),Se(bp,{key:0,item:h,class:We(s.value?"mobile":"")},null,8,["item","class"])):(F(),Se(vt,{key:1,item:h},null,8,["item"]))]))),128))])):Te("v-if",!0)}}),Xl=xe(Tp,[["__file","NavbarItems.vue"]]),Lp=["title"],Sp={class:"icon",focusable:"false",viewBox:"0 0 32 32"},Pp=Gc('',9),Op=[Pp],Ap={class:"icon",focusable:"false",viewBox:"0 0 32 32"},kp=fe("path",{d:"M13.502 5.414a15.075 15.075 0 0 0 11.594 18.194a11.113 11.113 0 0 1-7.975 3.39c-.138 0-.278.005-.418 0a11.094 11.094 0 0 1-3.2-21.584M14.98 3a1.002 1.002 0 0 0-.175.016a13.096 13.096 0 0 0 1.825 25.981c.164.006.328 0 .49 0a13.072 13.072 0 0 0 10.703-5.555a1.01 1.01 0 0 0-.783-1.565A13.08 13.08 0 0 1 15.89 4.38A1.015 1.015 0 0 0 14.98 3z",fill:"currentColor"},null,-1),Rp=[kp],Ip=he({__name:"ToggleColorModeButton",setup(e){const t=je(),n=Vo(),r=()=>{n.value=!n.value};return(o,s)=>(F(),Q("button",{class:"toggle-color-mode-button",title:Z(t).toggleColorMode,onClick:r},[dr((F(),Q("svg",Sp,Op,512)),[[vr,!Z(n)]]),dr((F(),Q("svg",Ap,Rp,512)),[[vr,Z(n)]])],8,Lp))}}),$p=xe(Ip,[["__file","ToggleColorModeButton.vue"]]),Mp=["title"],Np=fe("div",{class:"icon","aria-hidden":"true"},[fe("span"),fe("span"),fe("span")],-1),Dp=[Np],Hp=he({__name:"ToggleSidebarButton",emits:["toggle"],setup(e){const t=je();return(n,r)=>(F(),Q("div",{class:"toggle-sidebar-button",title:Z(t).toggleSidebar,"aria-expanded":"false",role:"button",tabindex:"0",onClick:r[0]||(r[0]=o=>n.$emit("toggle"))},Dp,8,Mp))}}),Fp=xe(Hp,[["__file","ToggleSidebarButton.vue"]]),Bp=he({__name:"Navbar",emits:["toggle-sidebar"],setup(e){const t=je(),n=Ee(null),r=Ee(null),o=Ee(0),s=j(()=>o.value?{maxWidth:o.value+"px"}:{});Gl(Hn.MOBILE,l=>{var c;const a=i(n.value,"paddingLeft")+i(n.value,"paddingRight");window.innerWidth{const c=bt("NavbarSearch");return F(),Q("header",{ref_key:"navbar",ref:n,class:"navbar"},[ee(Fp,{onToggle:a[0]||(a[0]=u=>l.$emit("toggle-sidebar"))}),fe("span",{ref_key:"navbarBrand",ref:r},[ee(lp)],512),fe("div",{class:"navbar-items-wrapper",style:Bn(s.value)},[be(l.$slots,"before"),ee(Xl,{class:"can-hide"}),be(l.$slots,"after"),Z(t).colorModeSwitch?(F(),Se($p,{key:0})):Te("v-if",!0),ee(c)],4)],512)}}}),zp=xe(Bp,[["__file","Navbar.vue"]]),jp={class:"page-meta"},Up={key:0,class:"meta-item edit-link"},Vp={key:1,class:"meta-item last-updated"},Wp={class:"meta-item-label"},qp={class:"meta-item-info"},Kp={key:2,class:"meta-item contributors"},Yp={class:"meta-item-label"},Gp={class:"meta-item-info"},Jp=["title"],Qp=he({__name:"PageMeta",setup(e){const t=()=>{const a=je(),c=Kt(),u=gt();return j(()=>{if(!(u.value.editLink??a.value.editLink??!0))return null;const{repo:h,docsRepo:g=h,docsBranch:y="main",docsDir:w="",editLinkText:L}=a.value;if(!g)return null;const v=Cp({docsRepo:g,docsBranch:y,docsDir:w,filePathRelative:c.value.filePathRelative,editLinkPattern:u.value.editLinkPattern??a.value.editLinkPattern});return v?{text:L??"Edit this page",link:v}:null})},n=()=>{const a=je(),c=Kt(),u=gt();return j(()=>{var g,y;return!(u.value.lastUpdated??a.value.lastUpdated??!0)||!((g=c.value.git)!=null&&g.updatedTime)?null:new Date((y=c.value.git)==null?void 0:y.updatedTime).toLocaleString()})},r=()=>{const a=je(),c=Kt(),u=gt();return j(()=>{var h;return u.value.contributors??a.value.contributors??!0?((h=c.value.git)==null?void 0:h.contributors)??null:null})},o=je(),s=t(),i=n(),l=r();return(a,c)=>{const u=bt("ClientOnly");return F(),Q("footer",jp,[Z(s)?(F(),Q("div",Up,[ee(vt,{class:"meta-item-label",item:Z(s)},null,8,["item"])])):Te("v-if",!0),Z(i)?(F(),Q("div",Vp,[fe("span",Wp,Re(Z(o).lastUpdatedText)+": ",1),ee(u,null,{default:Ne(()=>[fe("span",qp,Re(Z(i)),1)]),_:1})])):Te("v-if",!0),Z(l)&&Z(l).length?(F(),Q("div",Kp,[fe("span",Yp,Re(Z(o).contributorsText)+": ",1),fe("span",Gp,[(F(!0),Q(ye,null,It(Z(l),(f,h)=>(F(),Q(ye,{key:h},[fe("span",{class:"contributor",title:`email: ${f.email}`},Re(f.name),9,Jp),h!==Z(l).length-1?(F(),Q(ye,{key:0},[Mt(", ")],64)):Te("v-if",!0)],64))),128))])])):Te("v-if",!0)])}}}),Zp=xe(Qp,[["__file","PageMeta.vue"]]),Xp={key:0,class:"page-nav"},em={class:"inner"},tm={key:0,class:"prev"},nm={key:1,class:"next"},rm=he({__name:"PageNav",setup(e){const t=a=>a===!1?null:pe(a)?Wo(a):No(a)?a:!1,n=(a,c,u)=>{const f=a.findIndex(h=>h.link===c);if(f!==-1){const h=a[f+u];return h!=null&&h.link?h:null}for(const h of a)if(h.children){const g=n(h.children,c,u);if(g)return g}return null},r=gt(),o=qo(),s=Jt(),i=j(()=>{const a=t(r.value.prev);return a!==!1?a:n(o.value,s.path,-1)}),l=j(()=>{const a=t(r.value.next);return a!==!1?a:n(o.value,s.path,1)});return(a,c)=>i.value||l.value?(F(),Q("nav",Xp,[fe("p",em,[i.value?(F(),Q("span",tm,[ee(vt,{item:i.value},null,8,["item"])])):Te("v-if",!0),l.value?(F(),Q("span",nm,[ee(vt,{item:l.value},null,8,["item"])])):Te("v-if",!0)])])):Te("v-if",!0)}}),om=xe(rm,[["__file","PageNav.vue"]]),sm={class:"page"},im={class:"theme-default-content"},lm=he({__name:"Page",setup(e){return(t,n)=>{const r=bt("Content");return F(),Q("main",sm,[be(t.$slots,"top"),fe("div",im,[be(t.$slots,"content-top"),ee(r),be(t.$slots,"content-bottom")]),ee(Zp),ee(om),be(t.$slots,"bottom")])}}}),am=xe(lm,[["__file","Page.vue"]]),cm=["onKeydown"],um={class:"sidebar-item-children"},fm=he({__name:"SidebarItem",props:{item:{type:Object,required:!0},depth:{type:Number,required:!1,default:0}},setup(e){const t=e,{item:n,depth:r}=Oo(t),o=Jt(),s=vn(),i=j(()=>Ql(n.value,o)),l=j(()=>({"sidebar-item":!0,"sidebar-heading":r.value===0,active:i.value,collapsible:n.value.collapsible})),a=j(()=>n.value.collapsible?i.value:!0),[c,u]=Xd(a.value),f=g=>{n.value.collapsible&&(g.preventDefault(),u())},h=s.afterEach(g=>{Tr(()=>{c.value=a.value})});return Or(()=>{h()}),(g,y)=>{var L;const w=bt("SidebarItem",!0);return F(),Q("li",null,[Z(n).link?(F(),Se(vt,{key:0,class:We(l.value),item:Z(n)},null,8,["class","item"])):(F(),Q("p",{key:1,tabindex:"0",class:We(l.value),onClick:f,onKeydown:ku(f,["enter"])},[Mt(Re(Z(n).text)+" ",1),Z(n).collapsible?(F(),Q("span",{key:0,class:We(["arrow",Z(c)?"down":"right"])},null,2)):Te("v-if",!0)],42,cm)),(L=Z(n).children)!=null&&L.length?(F(),Se(Jl,{key:2},{default:Ne(()=>[dr(fe("ul",um,[(F(!0),Q(ye,null,It(Z(n).children,v=>(F(),Se(w,{key:`${Z(r)}${v.text}${v.link}`,item:v,depth:Z(r)+1},null,8,["item","depth"]))),128))],512),[[vr,Z(c)]])]),_:1})):Te("v-if",!0)])}}}),dm=xe(fm,[["__file","SidebarItem.vue"]]),hm={key:0,class:"sidebar-items"},pm=he({__name:"SidebarItems",setup(e){const t=Jt(),n=qo();return Xe(()=>{ut(()=>t.hash,r=>{const o=document.querySelector(".sidebar");if(!o)return;const s=document.querySelector(`.sidebar a.sidebar-item[href="${t.path}${r}"]`);if(!s)return;const{top:i,height:l}=o.getBoundingClientRect(),{top:a,height:c}=s.getBoundingClientRect();ai+l&&s.scrollIntoView(!1)})}),(r,o)=>Z(n).length?(F(),Q("ul",hm,[(F(!0),Q(ye,null,It(Z(n),s=>(F(),Se(dm,{key:`${s.text}${s.link}`,item:s},null,8,["item"]))),128))])):Te("v-if",!0)}}),mm=xe(pm,[["__file","SidebarItems.vue"]]),gm={class:"sidebar"},vm=he({__name:"Sidebar",setup(e){return(t,n)=>(F(),Q("aside",gm,[ee(Xl),be(t.$slots,"top"),ee(mm),be(t.$slots,"bottom")]))}}),_m=xe(vm,[["__file","Sidebar.vue"]]),bm=he({__name:"Layout",setup(e){const t=Kt(),n=gt(),r=je(),o=j(()=>n.value.navbar!==!1&&r.value.navbar!==!1),s=qo(),i=Ee(!1),l=L=>{i.value=typeof L=="boolean"?L:!i.value},a={x:0,y:0},c=L=>{a.x=L.changedTouches[0].clientX,a.y=L.changedTouches[0].clientY},u=L=>{const v=L.changedTouches[0].clientX-a.x,b=L.changedTouches[0].clientY-a.y;Math.abs(v)>Math.abs(b)&&Math.abs(v)>40&&(v>0&&a.x<=80?l(!0):l(!1))},f=j(()=>[{"no-navbar":!o.value,"no-sidebar":!s.value.length,"sidebar-open":i.value},n.value.pageClass]);let h;Xe(()=>{h=vn().afterEach(()=>{l(!1)})}),Ar(()=>{h()});const g=ql(),y=g.resolve,w=g.pending;return(L,v)=>(F(),Q("div",{class:We(["theme-container",f.value]),onTouchstart:c,onTouchend:u},[be(L.$slots,"navbar",{},()=>[o.value?(F(),Se(zp,{key:0,onToggleSidebar:l},{before:Ne(()=>[be(L.$slots,"navbar-before")]),after:Ne(()=>[be(L.$slots,"navbar-after")]),_:3})):Te("v-if",!0)]),fe("div",{class:"sidebar-mask",onClick:v[0]||(v[0]=b=>l(!1))}),be(L.$slots,"sidebar",{},()=>[ee(_m,null,{top:Ne(()=>[be(L.$slots,"sidebar-top")]),bottom:Ne(()=>[be(L.$slots,"sidebar-bottom")]),_:3})]),be(L.$slots,"page",{},()=>[Z(n).home?(F(),Se(sp,{key:0})):(F(),Se(Vn,{key:1,name:"fade-slide-y",mode:"out-in",onBeforeEnter:Z(y),onBeforeLeave:Z(w)},{default:Ne(()=>[(F(),Se(am,{key:Z(t).path},{top:Ne(()=>[be(L.$slots,"page-top")]),"content-top":Ne(()=>[be(L.$slots,"page-content-top")]),"content-bottom":Ne(()=>[be(L.$slots,"page-content-bottom")]),bottom:Ne(()=>[be(L.$slots,"page-bottom")]),_:3}))]),_:3},8,["onBeforeEnter","onBeforeLeave"]))])],34))}}),ym=xe(bm,[["__file","Layout.vue"]]),Em={class:"theme-container"},wm={class:"page"},Cm={class:"theme-default-content"},xm=fe("h1",null,"404",-1),Tm=he({__name:"NotFound",setup(e){const t=Ir(),n=je(),r=n.value.notFound??["Not Found"],o=()=>r[Math.floor(Math.random()*r.length)],s=n.value.home??t.value,i=n.value.backToHome??"Back to home";return(l,a)=>{const c=bt("RouterLink");return F(),Q("div",Em,[fe("main",wm,[fe("div",Cm,[xm,fe("blockquote",null,Re(o()),1),ee(c,{to:Z(s)},{default:Ne(()=>[Mt(Re(Z(i)),1)]),_:1},8,["to"])])])])}}}),Lm=xe(Tm,[["__file","NotFound.vue"]]);const Sm=Gt({enhance({app:e,router:t}){e.component("Badge",Nd),e.component("CodeGroup",Dd),e.component("CodeGroupItem",zd),e.component("AutoLinkExternalIcon",()=>{const r=e.component("ExternalLinkIcon");return r?ve(r):null}),e.component("NavbarSearch",()=>{const r=e.component("Docsearch")||e.component("SearchBox");return r?ve(r):null});const n=t.options.scrollBehavior;t.options.scrollBehavior=async(...r)=>(await ql().wait(),n(...r))},setup(){Lh(),Oh()},layouts:{Layout:ym,NotFound:Lm}}),or=[id,cd,hd,Td,Od,$d,Sm],Pm=[["v-8daa1a0e","/",{title:"Coho.UI Documentation"},["/index.md"]],["v-50520335","/getstarted.html",{title:"Getting started with Coho.UI"},[":md"]],["v-58f396b0","/controls/announcer.html",{title:"Announcer control"},[":md"]],["v-743236a8","/controls/acryliccontextmenu.html",{title:"The AcrylicContextMenu control"},[":md"]],["v-82811736","/controls/menubar.html",{title:"The MenuBar control"},[":md"]],["v-6d080da6","/controls/RibbonExtraButton.html",{title:"The RibbonExtraButton control"},[":md"]],["v-0927a752","/controls/FolderPickerTextbox.html",{title:"FolderPickerTextbox Control"},[":md"]],["v-3dfe4e80","/controls/GenericPickerTextbox.html",{title:""},[":md"]],["v-2a0d90d9","/controls/MasterAccentSplitButton.html",{title:"MasterAccentSplitButton Control"},[":md"]],["v-dff51306","/dialogs/ThemedMessageBox.html",{title:"ThemedMessageBox dialog"},[":md"]],["v-6d901540","/dialogs/ThemedInputBox.html",{title:"ThemedInputBox dialog"},[":md"]],["v-64a25d33","/dialogs/ThemedOpenFileDialog.html",{title:"ThemedOpenFileDialog dialog"},[":md"]],["v-f832d4c0","/dialogs/ThemedSaveFileDialog.html",{title:"ThemedSaveFileDialog dialog"},[":md"]],["v-6119cdde","/windows/ApplicationWindow.html",{title:"ApplicationWindow"},[":md"]],["v-4fc0787a","/windows/SecondaryWindow.html",{title:"SecondaryWindow"},[":md"]],["v-6799920a","/windows/TabbedApplicationWindow.html",{title:"TabbedApplicationWindow"},[":md"]],["v-74c0b233","/howto/omnibar-search-provider.html",{title:"Build custom search provider for the Omnibar"},[":md"]],["v-dca8df42","/classes/ThemedSpecialDialogOptions.html",{title:"ThemedSpecialDialogOptions class"},[":md"]],["v-3706649a","/404.html",{title:""},[]]];var pi=he({name:"Vuepress",setup(){const e=Ku();return()=>ve(e.value)}}),Om=()=>Pm.reduce((e,[t,n,r,o])=>(e.push({name:t,path:n,component:pi,meta:r},{path:n.endsWith("/")?n+"index.html":n.substring(0,n.length-5),redirect:n},...o.map(s=>({path:s===":md"?n.substring(0,n.length-5)+".md":s,redirect:n}))),e),[{name:"404",path:"/:catchAll(.*)",component:pi}]),Am=gf,km=()=>{const e=Xf({history:Am(hl("/Coho.UI/")),routes:Om(),scrollBehavior:(t,n,r)=>r||(t.hash?{el:t.hash}:{top:0})});return e.beforeResolve(async(t,n)=>{var r;(t.path!==n.path||n===pt)&&([Pt.value]=await Promise.all([ht.resolvePageData(t.name),(r=gl[t.name])==null?void 0:r.__asyncLoader()]))}),e},Rm=e=>{e.component("ClientOnly",Fo),e.component("Content",Qu)},Im=(e,t,n)=>{const r=j(()=>ht.resolveLayouts(n)),o=si(()=>t.currentRoute.value.path),s=si(()=>ht.resolveRouteLocale(tn.value.locales,o.value)),i=j(()=>ht.resolveSiteLocaleData(tn.value,s.value)),l=j(()=>ht.resolvePageFrontmatter(Pt.value)),a=j(()=>ht.resolvePageHeadTitle(Pt.value,i.value)),c=j(()=>ht.resolvePageHead(a.value,l.value,i.value)),u=j(()=>ht.resolvePageLang(Pt.value,i.value)),f=j(()=>ht.resolvePageLayout(Pt.value,r.value));return e.provide(ju,r),e.provide(_l,l),e.provide(Wu,a),e.provide(bl,c),e.provide(yl,u),e.provide(El,f),e.provide(Do,s),e.provide(Cl,i),Object.defineProperties(e.config.globalProperties,{$frontmatter:{get:()=>l.value},$head:{get:()=>c.value},$headTitle:{get:()=>a.value},$lang:{get:()=>u.value},$page:{get:()=>Pt.value},$routeLocale:{get:()=>s.value},$site:{get:()=>tn.value},$siteLocale:{get:()=>i.value},$withBase:{get:()=>Bo}}),{layouts:r,pageData:Pt,pageFrontmatter:l,pageHead:c,pageHeadTitle:a,pageLang:u,pageLayout:f,routeLocale:s,siteData:tn,siteLocaleData:i}},$m=()=>{const e=Vu(),t=qu(),n=Ee([]),r=()=>{e.value.forEach(s=>{const i=Mm(s);i&&n.value.push(i)})},o=()=>{document.documentElement.lang=t.value,n.value.forEach(s=>{s.parentNode===document.head&&document.head.removeChild(s)}),n.value.splice(0,n.value.length),e.value.forEach(s=>{const i=Nm(s);i!==null&&(document.head.appendChild(i),n.value.push(i))})};Wt(Yu,o),Xe(()=>{r(),o(),ut(()=>e.value,o)})},Mm=([e,t,n=""])=>{const r=Object.entries(t).map(([l,a])=>pe(a)?`[${l}=${JSON.stringify(a)}]`:a===!0?`[${l}]`:"").join(""),o=`head > ${e}${r}`;return Array.from(document.querySelectorAll(o)).find(l=>l.innerText===n)||null},Nm=([e,t,n])=>{if(!pe(e))return null;const r=document.createElement(e);return No(t)&&Object.entries(t).forEach(([o,s])=>{pe(s)?r.setAttribute(o,s):s===!0&&r.setAttribute(o,"")}),pe(n)&&r.appendChild(document.createTextNode(n)),r},Dm=$u,Hm=async()=>{var n;const e=Dm({name:"VuepressApp",setup(){var r;$m();for(const o of or)(r=o.setup)==null||r.call(o);return()=>[ve(Ml),...or.flatMap(({rootComponents:o=[]})=>o.map(s=>ve(s)))]}}),t=km();Rm(e),Im(e,t,or);for(const r of or)await((n=r.enhance)==null?void 0:n.call(r,{app:e,router:t,siteData:tn}));return e.use(t),{app:e,router:t}};Hm().then(({app:e,router:t})=>{t.isReady().then(()=>{e.mount("#app")})});export{xe as _,fe as a,Mt as b,Q as c,Hm as createVueApp,ee as d,Gc as e,F as o,bt as r,Ne as w}; diff --git a/docs/assets/back-to-top-8efcbe56.svg b/docs/assets/back-to-top-8efcbe56.svg new file mode 100644 index 0000000..8323678 --- /dev/null +++ b/docs/assets/back-to-top-8efcbe56.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/assets/getstarted.html-18c55845.js b/docs/assets/getstarted.html-18c55845.js new file mode 100644 index 0000000..cdbcaac --- /dev/null +++ b/docs/assets/getstarted.html-18c55845.js @@ -0,0 +1,33 @@ +import{_ as s,r as o,o as a,c as i,a as e,b as n,d as l,e as r}from"./app-e0605d3e.js";const c={},u=e("h1",{id:"getting-started-with-coho-ui",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#getting-started-with-coho-ui","aria-hidden":"true"},"#"),n(" Getting started with Coho.UI")],-1),d={href:"https://www.nuget.org/packages/Coho.UI/",target:"_blank",rel:"noopener noreferrer"},p=r(`

Define your theme

Have a look at the sample application, the file App.xaml contains all the required resources to make it work nicely. Just change the brushes to make it yours.

You must define the Font Family and Font size to use.

  • FontFamily AppFont: Defines the font to use in the UI.
  • system:Double AppFontSize: Defines the font size to use in the UI.

Example:

<FontFamily x:Key="AppFont">Segoe UI Variable Display,Segoe UI</FontFamily>
+<system:Double x:Key="AppFontSize">14</system:Double>
+

You must define your color theme using specified resource names.

  • Color ChromeBorderActiveColor: Defines the color of the window border when it is active.
  • Brush AccentColor: Defines the accent color to be used on various UI elements.
  • Brush AccentColorDark: Defines the darker accent color to be used on various UI elements (used for hover state for example).
  • Brush AccentColorDarker: Defines the even darker accent color to be used on various UI elements (used for pressed state for example).
  • Brush IconsAccentColor: Defines the color to be used in Coho.UI bundled isons.
  • Brush AccentButtonBorderColor: Defines the brush to be used for border on buttons that use the PrimaryButton style.

Example:

<Color x:Key="ChromeBorderActiveColor">#038387</Color>
+<LinearGradientBrush x:Key="AccentButtonBorderColor" StartPoint="0,0.9" EndPoint="0,1">
+   <GradientStop Color="#038387" Offset="0" />
+   <GradientStop Color="#026163" Offset="1" />
+</LinearGradientBrush>
+
+<SolidColorBrush x:Key="AccentColor" Color="#038387" />
+<SolidColorBrush x:Key="TitleBarAccentedColor" Color="#038387" />
+<SolidColorBrush x:Key="IconsAccentColor" Color="#038387" />
+<SolidColorBrush x:Key="AccentColorDark" Color="#026163" />
+<SolidColorBrush x:Key="AccentColorDarker" Color="#024D4F" />
+

Configure the UIController (NEW in V2)

public MainWindow()
+{
+    InitializeComponent();
+
+    // Example: Register a custom resource file to be used only in Dark mode
+    // For example, your own implementation of Dark Theme
+    UIController.RegisterThemedMergedResourceName("/DarkTheme.xaml", ThemeScheme.Dark);
+    
+    // Example: Register a custom resource file to be used only in Light mode
+    // For example, your own implementation of Light Theme
+    UIController.RegisterThemedMergedResourceName("/LightTheme.xaml", ThemeScheme.Light);
+    
+    // Example: Register a custom resource file to be loaded in ANY mode (null in argument 2)
+    // The resource will be reloaded when the user switches the theme to ensure dynamic resources are correct
+    UIController.RegisterThemedMergedResourceName("/Styles/Icons.xaml", null);
+
+    // This line is important, we want the app to start with Ligth theme
+    UIController.Init(ThemeScheme.Light);
+}
+
`,12);function m(h,v){const t=o("ExternalLinkIcon");return a(),i("div",null,[u,e("p",null,[e("a",d,[n("https://www.nuget.org/packages/Coho.UI/"),l(t)])]),p])}const k=s(c,[["render",m],["__file","getstarted.html.vue"]]);export{k as default}; diff --git a/docs/assets/getstarted.html-604d8647.js b/docs/assets/getstarted.html-604d8647.js new file mode 100644 index 0000000..e437016 --- /dev/null +++ b/docs/assets/getstarted.html-604d8647.js @@ -0,0 +1 @@ +const e=JSON.parse('{"key":"v-50520335","path":"/getstarted.html","title":"Getting started with Coho.UI","lang":"en-US","frontmatter":{},"headers":[{"level":2,"title":"Define your theme","slug":"define-your-theme","link":"#define-your-theme","children":[]},{"level":2,"title":"Configure the UIController (NEW in V2)","slug":"configure-the-uicontroller-new-in-v2","link":"#configure-the-uicontroller-new-in-v2","children":[]}],"git":{},"filePathRelative":"getstarted.md"}');export{e as data}; diff --git a/docs/assets/index.html-0d5731de.js b/docs/assets/index.html-0d5731de.js new file mode 100644 index 0000000..b0aca2b --- /dev/null +++ b/docs/assets/index.html-0d5731de.js @@ -0,0 +1 @@ +import{_ as t,r as n,o as r,c,a as e,b as o,d as s,e as i}from"./app-e0605d3e.js";const d={},h=e("h1",{id:"coho-ui-documentation",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#coho-ui-documentation","aria-hidden":"true"},"#"),o(" Coho.UI Documentation")],-1),u={href:"https://www.nuget.org/packages/Coho.UI/",target:"_blank",rel:"noopener noreferrer"},l=i('

Introduction to V2

The V2 contains a lot of new things, but also breaking changes. Please read this page before you update your projects.

Breaking changes

  • The Icon property of MenuItem is now supposed to be a Brush object.
',4);function p(_,g){const a=n("ExternalLinkIcon");return r(),c("div",null,[h,e("p",null,[e("a",u,[o("https://www.nuget.org/packages/Coho.UI/"),s(a)])]),l])}const b=t(d,[["render",p],["__file","index.html.vue"]]);export{b as default}; diff --git a/docs/assets/index.html-878c2ead.js b/docs/assets/index.html-878c2ead.js new file mode 100644 index 0000000..12a3333 --- /dev/null +++ b/docs/assets/index.html-878c2ead.js @@ -0,0 +1 @@ +const e=JSON.parse('{"key":"v-8daa1a0e","path":"/","title":"Coho.UI Documentation","lang":"en-US","frontmatter":{},"headers":[{"level":2,"title":"Introduction to V2","slug":"introduction-to-v2","link":"#introduction-to-v2","children":[{"level":3,"title":"Breaking changes","slug":"breaking-changes","link":"#breaking-changes","children":[]}]}],"git":{},"filePathRelative":"index.md"}');export{e as data}; diff --git a/docs/assets/menubar.html-736f29e5.js b/docs/assets/menubar.html-736f29e5.js new file mode 100644 index 0000000..1dd1696 --- /dev/null +++ b/docs/assets/menubar.html-736f29e5.js @@ -0,0 +1,15 @@ +import{_ as e,o as a,c as t,e as n}from"./app-e0605d3e.js";const i={},d=n(`

The MenuBar control

Namespace: Coho.UI.Controls.Menus

Properties

ExtraButtons

Type: List<UIElement>

QatCommands

Type: List<UIElement>

ShowQAT

Type: Bool

ShowQATLabels

Type: Bool

EnableAnimations

Type: Bool

Methods

GetCommandIdentifier(MenuItem cmd)

Returns the identifier of the provided MenuItem. It is used to memorize the Quick Access Toolbar commands for example.

Arguments

  • MenuItem cmd: The menu item you want to get the unique identifier.
    Note: The MenuItem must have a Name property set to work properly.

Exceptions

  • NullReferenceException: Occurs when the provided cmd has no FrameworkElement.Name property.

Events

None.

Examples

<menus:MenuBar ShowQAT="True" x:Name="MainMenuBar">
+
+    <menus:MenuBar.ExtraButtons>
+        <ui3:RibbonExtraButton Text="Publish"
+                               IsPrimary="true" Icon="{x:Null}"
+                               Padding="6,4"
+                               Margin="8,0,0,0" />
+    </menus:MenuBar.ExtraButtons>
+
+    <MenuItem Header="{x:Static localization:Resources.MenuFile}">
+        <MenuItem Header="{x:Static localization:Resources.MenuNew}">
+        </MenuItem>
+    </MenuItem>
+</menus:MenuBar>
+
`,24),r=[d];function o(s,c){return a(),t("div",null,r)}const u=e(i,[["render",o],["__file","menubar.html.vue"]]);export{u as default}; diff --git a/docs/assets/menubar.html-d4e52ee9.js b/docs/assets/menubar.html-d4e52ee9.js new file mode 100644 index 0000000..4435240 --- /dev/null +++ b/docs/assets/menubar.html-d4e52ee9.js @@ -0,0 +1 @@ +const e=JSON.parse('{"key":"v-82811736","path":"/controls/menubar.html","title":"The MenuBar control","lang":"en-US","frontmatter":{},"headers":[{"level":2,"title":"Properties","slug":"properties","link":"#properties","children":[{"level":3,"title":"ExtraButtons","slug":"extrabuttons","link":"#extrabuttons","children":[]},{"level":3,"title":"QatCommands","slug":"qatcommands","link":"#qatcommands","children":[]},{"level":3,"title":"ShowQAT","slug":"showqat","link":"#showqat","children":[]},{"level":3,"title":"ShowQATLabels","slug":"showqatlabels","link":"#showqatlabels","children":[]},{"level":3,"title":"EnableAnimations","slug":"enableanimations","link":"#enableanimations","children":[]}]},{"level":2,"title":"Methods","slug":"methods","link":"#methods","children":[{"level":3,"title":"GetCommandIdentifier(MenuItem cmd)","slug":"getcommandidentifier-menuitem-cmd","link":"#getcommandidentifier-menuitem-cmd","children":[]}]},{"level":2,"title":"Events","slug":"events","link":"#events","children":[]},{"level":2,"title":"Examples","slug":"examples","link":"#examples","children":[]}],"git":{},"filePathRelative":"controls/menubar.md"}');export{e as data}; diff --git a/docs/assets/menubarwindow-7ec05645.png b/docs/assets/menubarwindow-7ec05645.png new file mode 100644 index 0000000..8389035 Binary files /dev/null and b/docs/assets/menubarwindow-7ec05645.png differ diff --git a/docs/assets/omnibar-search-provider.html-5e6dc7b7.js b/docs/assets/omnibar-search-provider.html-5e6dc7b7.js new file mode 100644 index 0000000..5f8342f --- /dev/null +++ b/docs/assets/omnibar-search-provider.html-5e6dc7b7.js @@ -0,0 +1,49 @@ +import{_ as n,o as s,c as a,e}from"./app-e0605d3e.js";const t={},c=e(`

Build custom search provider for the Omnibar

The ApplicationWindow provides an Omnibar search bar in the window chrome title bar. By default it will search through the ribbon commands to provide the user a quick and easy access.
You can extend this feature by adding you own search provider. For example, you may want to help your users to find files in a project, or any other item that your application manages.
This article will help you create and register a new search provider for the built-in omnibar search.

The service class

Your custom search provider must inherit from OmnibarSearchServiceBase.
This is a typical content of a custom search provider:

public class CustomOmnibarSearchService : OmnibarSearchServiceBase
+{
+    // The text that will be displayed in the drop down popup
+    public override string DisplayName
+    {
+        get
+        {
+            return "Search in files...";
+        }
+    }
+
+    // The icon that will be shown next to the text above
+    public override Brush Icon
+    {
+        get
+        {
+            return Brushes.Transparent;
+        }
+    }
+
+    // The results to show after the user has launched your search provider
+    public override IEnumerable<OmnibarSearchResult> ExecuteSearch(string terms)
+    {
+        // Perform your search operation using the argument "terms" that contains the text typed by the user.
+        // Then return the list of results.
+    }
+}
+

Once registered, this search provider will look like this:
image

Register your service provider

To make the application know your custom search provider, you have to register it using the OmnibarSearchService.RegisterOmnibarSearchService() method in the Window_Loaded event.

private void MainWindow_Loaded(object sender, RoutedEventArgs e)
+{
+    ...
+    // Register your custom service in the Window_Loaded event
+    OmnibarSearchService.RegisterOmnibarSearchService(new CustomOmnibarSearchService());
+}
+

Handle the search result click

After the search, when the user clicks a result in the drop down list, the event OmnibarSearchService.SearchResultClicked is raised. You can listen to it to perform the corresponding action.

private void MainWindow_Loaded(object sender, RoutedEventArgs e)
+{
+    ...
+    OmnibarSearchService.RegisterOmnibarSearchService(new CustomOmnibarSearchService());
+    
+    // Add this line to handle the click event on a search result.
+    OmnibarSearchService.SearchResultClicked += OmnibarSearchServiceOnSearchResultClicked;
+}
+
+private void OmnibarSearchServiceOnSearchResultClicked(object? sender, OmnibarSearchResult e)
+{
+    // Do something with the result that the user has selected.
+    MessageBox.Show("You clicked " + e.CommandTabName);
+}
+
+
`,12),i=[c];function o(r,p){return s(),a("div",null,i)}const u=n(t,[["render",o],["__file","omnibar-search-provider.html.vue"]]);export{u as default}; diff --git a/docs/assets/omnibar-search-provider.html-81d8f871.js b/docs/assets/omnibar-search-provider.html-81d8f871.js new file mode 100644 index 0000000..edb83da --- /dev/null +++ b/docs/assets/omnibar-search-provider.html-81d8f871.js @@ -0,0 +1 @@ +const e=JSON.parse('{"key":"v-74c0b233","path":"/howto/omnibar-search-provider.html","title":"Build custom search provider for the Omnibar","lang":"en-US","frontmatter":{},"headers":[{"level":2,"title":"The service class","slug":"the-service-class","link":"#the-service-class","children":[]},{"level":2,"title":"Register your service provider","slug":"register-your-service-provider","link":"#register-your-service-provider","children":[]},{"level":2,"title":"Handle the search result click","slug":"handle-the-search-result-click","link":"#handle-the-search-result-click","children":[]}],"git":{},"filePathRelative":"howto/omnibar-search-provider.md"}');export{e as data}; diff --git a/docs/assets/ribbonbarwindow-d80a3311.png b/docs/assets/ribbonbarwindow-d80a3311.png new file mode 100644 index 0000000..89c9a14 Binary files /dev/null and b/docs/assets/ribbonbarwindow-d80a3311.png differ diff --git a/docs/assets/style-c2e86e58.css b/docs/assets/style-c2e86e58.css new file mode 100644 index 0000000..7a5b386 --- /dev/null +++ b/docs/assets/style-c2e86e58.css @@ -0,0 +1 @@ +:root{--back-to-top-z-index: 5;--back-to-top-color: #3eaf7c;--back-to-top-color-hover: #71cda3}.back-to-top{cursor:pointer;position:fixed;bottom:2rem;right:2.5rem;width:2rem;height:1.2rem;background-color:var(--back-to-top-color);-webkit-mask:url(/Coho.UI/assets/back-to-top-8efcbe56.svg) no-repeat;mask:url(/Coho.UI/assets/back-to-top-8efcbe56.svg) no-repeat;z-index:var(--back-to-top-z-index)}.back-to-top:hover{background-color:var(--back-to-top-color-hover)}@media (max-width: 959px){.back-to-top{display:none}}@media print{.back-to-top{display:none}}.back-to-top-enter-active,.back-to-top-leave-active{transition:opacity .3s}.back-to-top-enter-from,.back-to-top-leave-to{opacity:0}:root{--external-link-icon-color: #aaa}.external-link-icon{position:relative;display:inline-block;color:var(--external-link-icon-color);vertical-align:middle;top:-1px}@media print{.external-link-icon{display:none}}.external-link-icon-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0;-webkit-user-select:none;-moz-user-select:none;user-select:none}:root{--medium-zoom-z-index: 100;--medium-zoom-bg-color: #ffffff;--medium-zoom-opacity: 1}.medium-zoom-overlay{background-color:var(--medium-zoom-bg-color)!important;z-index:var(--medium-zoom-z-index)}.medium-zoom-overlay~img{z-index:calc(var(--medium-zoom-z-index) + 1)}.medium-zoom--opened .medium-zoom-overlay{opacity:var(--medium-zoom-opacity)}:root{--nprogress-color: #29d;--nprogress-z-index: 1031}#nprogress{pointer-events:none}#nprogress .bar{background:var(--nprogress-color);position:fixed;z-index:var(--nprogress-z-index);top:0;left:0;width:100%;height:2px}:root{--c-brand: #3eaf7c;--c-brand-light: #4abf8a;--c-bg: #ffffff;--c-bg-light: #f3f4f5;--c-bg-lighter: #eeeeee;--c-bg-dark: #ebebec;--c-bg-darker: #e6e6e6;--c-bg-navbar: var(--c-bg);--c-bg-sidebar: var(--c-bg);--c-bg-arrow: #cccccc;--c-text: #2c3e50;--c-text-accent: var(--c-brand);--c-text-light: #3a5169;--c-text-lighter: #4e6e8e;--c-text-lightest: #6a8bad;--c-text-quote: #999999;--c-border: #eaecef;--c-border-dark: #dfe2e5;--c-tip: #42b983;--c-tip-bg: var(--c-bg-light);--c-tip-title: var(--c-text);--c-tip-text: var(--c-text);--c-tip-text-accent: var(--c-text-accent);--c-warning: #ffc310;--c-warning-bg: #fffae3;--c-warning-bg-light: #fff3ba;--c-warning-bg-lighter: #fff0b0;--c-warning-border-dark: #f7dc91;--c-warning-details-bg: #fff5ca;--c-warning-title: #f1b300;--c-warning-text: #746000;--c-warning-text-accent: #edb100;--c-warning-text-light: #c1971c;--c-warning-text-quote: #ccab49;--c-danger: #f11e37;--c-danger-bg: #ffe0e0;--c-danger-bg-light: #ffcfde;--c-danger-bg-lighter: #ffc9c9;--c-danger-border-dark: #f1abab;--c-danger-details-bg: #ffd4d4;--c-danger-title: #ed1e2c;--c-danger-text: #660000;--c-danger-text-accent: #bd1a1a;--c-danger-text-light: #b5474d;--c-danger-text-quote: #c15b5b;--c-details-bg: #eeeeee;--c-badge-tip: var(--c-tip);--c-badge-warning: #ecc808;--c-badge-warning-text: var(--c-bg);--c-badge-danger: #dc2626;--c-badge-danger-text: var(--c-bg);--t-color: .3s ease;--t-transform: .3s ease;--code-bg-color: #282c34;--code-hl-bg-color: rgba(0, 0, 0, .66);--code-ln-color: #9e9e9e;--code-ln-wrapper-width: 3.5rem;--font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;--font-family-code: Consolas, Monaco, "Andale Mono", "Ubuntu Mono", monospace;--navbar-height: 3.6rem;--navbar-padding-v: .7rem;--navbar-padding-h: 1.5rem;--sidebar-width: 20rem;--sidebar-width-mobile: calc(var(--sidebar-width) * .82);--content-width: 740px;--homepage-width: 960px}html.dark{--c-brand: #3aa675;--c-brand-light: #349469;--c-bg: #22272e;--c-bg-light: #2b313a;--c-bg-lighter: #262c34;--c-bg-dark: #343b44;--c-bg-darker: #37404c;--c-text: #adbac7;--c-text-light: #96a7b7;--c-text-lighter: #8b9eb0;--c-text-lightest: #8094a8;--c-border: #3e4c5a;--c-border-dark: #34404c;--c-tip: #318a62;--c-warning: #e0ad15;--c-warning-bg: #2d2f2d;--c-warning-bg-light: #423e2a;--c-warning-bg-lighter: #44442f;--c-warning-border-dark: #957c35;--c-warning-details-bg: #39392d;--c-warning-title: #fdca31;--c-warning-text: #d8d96d;--c-warning-text-accent: #ffbf00;--c-warning-text-light: #ddb84b;--c-warning-text-quote: #ccab49;--c-danger: #fc1e38;--c-danger-bg: #39232c;--c-danger-bg-light: #4b2b35;--c-danger-bg-lighter: #553040;--c-danger-border-dark: #a25151;--c-danger-details-bg: #482936;--c-danger-title: #fc2d3b;--c-danger-text: #ea9ca0;--c-danger-text-accent: #fd3636;--c-danger-text-light: #d9777c;--c-danger-text-quote: #d56b6b;--c-details-bg: #323843;--c-badge-warning: var(--c-warning);--c-badge-warning-text: #3c2e05;--c-badge-danger: var(--c-danger);--c-badge-danger-text: #401416;--code-hl-bg-color: #363b46}html.dark .DocSearch{--docsearch-logo-color: var(--c-text);--docsearch-modal-shadow: inset 1px 1px 0 0 #2c2e40, 0 3px 8px 0 #000309;--docsearch-key-shadow: inset 0 -2px 0 0 #282d55, inset 0 0 1px 1px #51577d, 0 2px 2px 0 rgba(3, 4, 9, .3);--docsearch-key-gradient: linear-gradient(-225deg, #444950, #1c1e21);--docsearch-footer-shadow: inset 0 1px 0 0 rgba(73, 76, 106, .5), 0 -4px 8px 0 rgba(0, 0, 0, .2)}html,body{padding:0;margin:0;background-color:var(--c-bg);transition:background-color var(--t-color)}html.dark{color-scheme:dark}html{font-size:16px}body{font-family:var(--font-family);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-size:1rem;color:var(--c-text)}a{font-weight:500;color:var(--c-text-accent);text-decoration:none;overflow-wrap:break-word}p a code{font-weight:400;color:var(--c-text-accent)}kbd{font-family:var(--font-family-code);color:var(--c-text);background:var(--c-bg-lighter);border:solid .15rem var(--c-border-dark);border-bottom:solid .25rem var(--c-border-dark);border-radius:.15rem;padding:0 .15em}code{font-family:var(--font-family-code);color:var(--c-text-lighter);padding:.25rem .5rem;margin:0;font-size:.85em;background-color:var(--c-bg-light);border-radius:3px;overflow-wrap:break-word;transition:background-color var(--t-color)}blockquote{font-size:1rem;color:var(--c-text-quote);border-left:.2rem solid var(--c-border-dark);margin:1rem 0;padding:.25rem 0 .25rem 1rem;overflow-wrap:break-word}blockquote>p{margin:0}ul,ol{padding-left:1.2em}strong{font-weight:600}h1,h2,h3,h4,h5,h6{font-weight:600;line-height:1.25;overflow-wrap:break-word}h1:focus-visible,h2:focus-visible,h3:focus-visible,h4:focus-visible,h5:focus-visible,h6:focus-visible{outline:none}h1:hover .header-anchor,h2:hover .header-anchor,h3:hover .header-anchor,h4:hover .header-anchor,h5:hover .header-anchor,h6:hover .header-anchor{opacity:1}h1{font-size:2.2rem}h2{font-size:1.65rem;padding-bottom:.3rem;border-bottom:1px solid var(--c-border);transition:border-color var(--t-color)}h3{font-size:1.35rem}h4{font-size:1.15rem}h5{font-size:1.05rem}h6{font-size:1rem}a.header-anchor{font-size:.85em;float:left;margin-left:-.87em;padding-right:.23em;margin-top:.125em;opacity:0;-webkit-user-select:none;-moz-user-select:none;user-select:none}@media print{a.header-anchor{display:none}}a.header-anchor:hover{text-decoration:none}a.header-anchor:focus-visible{opacity:1}@media print{a[href^="http://"]:after,a[href^="https://"]:after{content:" (" attr(href) ") "}}p,ul,ol{line-height:1.7;overflow-wrap:break-word}hr{border:0;border-top:1px solid var(--c-border)}table{border-collapse:collapse;margin:1rem 0;display:block;overflow-x:auto;transition:border-color var(--t-color)}tr{border-top:1px solid var(--c-border-dark);transition:border-color var(--t-color)}tr:nth-child(2n){background-color:var(--c-bg-light);transition:background-color var(--t-color)}tr:nth-child(2n) code{background-color:var(--c-bg-dark)}th,td{padding:.6em 1em;border:1px solid var(--c-border-dark);transition:border-color var(--t-color)}.arrow{display:inline-block;width:0;height:0}.arrow.up{border-left:4px solid transparent;border-right:4px solid transparent;border-bottom:6px solid var(--c-bg-arrow)}.arrow.down{border-left:4px solid transparent;border-right:4px solid transparent;border-top:6px solid var(--c-bg-arrow)}.arrow.right{border-top:4px solid transparent;border-bottom:4px solid transparent;border-left:6px solid var(--c-bg-arrow)}.arrow.left{border-top:4px solid transparent;border-bottom:4px solid transparent;border-right:6px solid var(--c-bg-arrow)}.badge{display:inline-block;font-size:14px;font-weight:600;height:18px;line-height:18px;border-radius:3px;padding:0 6px;color:var(--c-bg);vertical-align:top;transition:color var(--t-color),background-color var(--t-color)}.badge.tip{background-color:var(--c-badge-tip)}.badge.warning{background-color:var(--c-badge-warning);color:var(--c-badge-warning-text)}.badge.danger{background-color:var(--c-badge-danger);color:var(--c-badge-danger-text)}.badge+.badge{margin-left:5px}code[class*=language-],pre[class*=language-]{color:#ccc;background:none;font-family:var(--font-family-code);font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;hyphens:none}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto}:not(pre)>code[class*=language-],pre[class*=language-]{background:#2d2d2d}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.comment,.token.block-comment,.token.prolog,.token.doctype,.token.cdata{color:#999}.token.punctuation{color:#ccc}.token.tag,.token.attr-name,.token.namespace,.token.deleted{color:#ec5975}.token.function-name{color:#6196cc}.token.boolean,.token.number,.token.function{color:#f08d49}.token.property,.token.class-name,.token.constant,.token.symbol{color:#f8c555}.token.selector,.token.important,.token.atrule,.token.keyword,.token.builtin{color:#cc99cd}.token.string,.token.char,.token.attr-value,.token.regex,.token.variable{color:#7ec699}.token.operator,.token.entity,.token.url{color:#67cdcc}.token.important,.token.bold{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}.token.inserted{color:#3eaf7c}.theme-default-content pre,.theme-default-content pre[class*=language-]{line-height:1.375;padding:1.3rem 1.5rem;margin:.85rem 0;border-radius:6px;overflow:auto}.theme-default-content pre code,.theme-default-content pre[class*=language-] code{color:#fff;padding:0;background-color:transparent!important;border-radius:0;overflow-wrap:unset;-webkit-font-smoothing:auto;-moz-osx-font-smoothing:auto}.theme-default-content .line-number{font-family:var(--font-family-code)}div[class*=language-]{position:relative;background-color:var(--code-bg-color);border-radius:6px}div[class*=language-]:before{content:attr(data-ext);position:absolute;z-index:3;top:.8em;right:1em;font-size:.75rem;color:var(--code-ln-color)}div[class*=language-] pre,div[class*=language-] pre[class*=language-]{background:transparent!important;position:relative;z-index:1}div[class*=language-] .highlight-lines{-webkit-user-select:none;-moz-user-select:none;user-select:none;padding-top:1.3rem;position:absolute;top:0;left:0;width:100%;line-height:1.375}div[class*=language-] .highlight-lines .highlight-line{background-color:var(--code-hl-bg-color)}div[class*=language-]:not(.line-numbers-mode) .line-numbers{display:none}div[class*=language-].line-numbers-mode .highlight-lines .highlight-line{position:relative}div[class*=language-].line-numbers-mode .highlight-lines .highlight-line:before{content:" ";position:absolute;z-index:2;left:0;top:0;display:block;width:var(--code-ln-wrapper-width);height:100%}div[class*=language-].line-numbers-mode pre{margin-left:var(--code-ln-wrapper-width);padding-left:1rem;vertical-align:middle}div[class*=language-].line-numbers-mode .line-numbers{position:absolute;top:0;width:var(--code-ln-wrapper-width);text-align:center;color:var(--code-ln-color);padding-top:1.25rem;line-height:1.375;counter-reset:line-number}div[class*=language-].line-numbers-mode .line-numbers .line-number{position:relative;z-index:3;-webkit-user-select:none;-moz-user-select:none;user-select:none;height:1.375em}div[class*=language-].line-numbers-mode .line-numbers .line-number:before{counter-increment:line-number;content:counter(line-number);font-size:.85em}div[class*=language-].line-numbers-mode:after{content:"";position:absolute;top:0;left:0;width:var(--code-ln-wrapper-width);height:100%;border-radius:6px 0 0 6px;border-right:1px solid var(--code-hl-bg-color)}@media (max-width: 419px){.theme-default-content div[class*=language-]{margin:.85rem -1.5rem;border-radius:0}}.code-group__nav{margin-top:.85rem;margin-bottom:calc(-1.7rem - 6px);padding-bottom:calc(1.7rem - 6px);padding-left:10px;padding-top:10px;border-top-left-radius:6px;border-top-right-radius:6px;background-color:var(--code-bg-color)}.code-group__ul{margin:auto 0;padding-left:0;display:inline-flex;list-style:none}.code-group__nav-tab{border:0;padding:5px;cursor:pointer;background-color:transparent;font-size:.85em;line-height:1.4;color:#ffffffe6;font-weight:600}.code-group__nav-tab:focus{outline:none}.code-group__nav-tab:focus-visible{outline:1px solid rgba(255,255,255,.9)}.code-group__nav-tab-active{border-bottom:var(--c-brand) 1px solid}@media (max-width: 419px){.code-group__nav{margin-left:-1.5rem;margin-right:-1.5rem;border-radius:0}}.code-group-item{display:none}.code-group-item__active{display:block}.code-group-item>pre{background-color:orange}.custom-container{transition:color var(--t-color),border-color var(--t-color),background-color var(--t-color)}.custom-container .custom-container-title{font-weight:600}.custom-container .custom-container-title:not(:only-child){margin-bottom:-.4rem}.custom-container.tip,.custom-container.warning,.custom-container.danger{padding:.1rem 1.5rem;border-left-width:.5rem;border-left-style:solid;margin:1rem 0}.custom-container.tip{border-color:var(--c-tip);background-color:var(--c-tip-bg);color:var(--c-tip-text)}.custom-container.tip .custom-container-title{color:var(--c-tip-title)}.custom-container.tip a{color:var(--c-tip-text-accent)}.custom-container.tip code{background-color:var(--c-bg-dark)}.custom-container.warning{border-color:var(--c-warning);background-color:var(--c-warning-bg);color:var(--c-warning-text)}.custom-container.warning .custom-container-title{color:var(--c-warning-title)}.custom-container.warning a{color:var(--c-warning-text-accent)}.custom-container.warning blockquote{border-left-color:var(--c-warning-border-dark);color:var(--c-warning-text-quote)}.custom-container.warning code{color:var(--c-warning-text-light);background-color:var(--c-warning-bg-light)}.custom-container.warning details{background-color:var(--c-warning-details-bg)}.custom-container.warning details code{background-color:var(--c-warning-bg-lighter)}.custom-container.warning .external-link-icon{--external-link-icon-color: var(--c-warning-text-quote)}.custom-container.danger{border-color:var(--c-danger);background-color:var(--c-danger-bg);color:var(--c-danger-text)}.custom-container.danger .custom-container-title{color:var(--c-danger-title)}.custom-container.danger a{color:var(--c-danger-text-accent)}.custom-container.danger blockquote{border-left-color:var(--c-danger-border-dark);color:var(--c-danger-text-quote)}.custom-container.danger code{color:var(--c-danger-text-light);background-color:var(--c-danger-bg-light)}.custom-container.danger details{background-color:var(--c-danger-details-bg)}.custom-container.danger details code{background-color:var(--c-danger-bg-lighter)}.custom-container.danger .external-link-icon{--external-link-icon-color: var(--c-danger-text-quote)}.custom-container.details{display:block;position:relative;border-radius:2px;margin:1.6em 0;padding:1.6em;background-color:var(--c-details-bg)}.custom-container.details code{background-color:var(--c-bg-darker)}.custom-container.details h4{margin-top:0}.custom-container.details figure:last-child,.custom-container.details p:last-child{margin-bottom:0;padding-bottom:0}.custom-container.details summary{outline:none;cursor:pointer}.home{padding:var(--navbar-height) 2rem 0;max-width:var(--homepage-width);margin:0 auto;display:block}.home .hero{text-align:center}.home .hero img{max-width:100%;max-height:280px;display:block;margin:3rem auto 1.5rem}.home .hero h1{font-size:3rem}.home .hero h1,.home .hero .description,.home .hero .actions{margin:1.8rem auto}.home .hero .actions{display:flex;flex-wrap:wrap;gap:1rem;justify-content:center}.home .hero .description{max-width:35rem;font-size:1.6rem;line-height:1.3;color:var(--c-text-lightest)}.home .hero .action-button{display:inline-block;font-size:1.2rem;padding:.8rem 1.6rem;border-width:2px;border-style:solid;border-radius:4px;transition:background-color var(--t-color);box-sizing:border-box}.home .hero .action-button.primary{color:var(--c-bg);background-color:var(--c-brand);border-color:var(--c-brand)}.home .hero .action-button.primary:hover{background-color:var(--c-brand-light)}.home .hero .action-button.secondary{color:var(--c-brand);background-color:var(--c-bg);border-color:var(--c-brand)}.home .hero .action-button.secondary:hover{color:var(--c-bg);background-color:var(--c-brand-light)}.home .features{border-top:1px solid var(--c-border);transition:border-color var(--t-color);padding:1.2rem 0;margin-top:2.5rem;display:flex;flex-wrap:wrap;align-items:flex-start;align-content:stretch;justify-content:space-between}.home .feature{flex-grow:1;flex-basis:30%;max-width:30%}.home .feature h2{font-size:1.4rem;font-weight:500;border-bottom:none;padding-bottom:0;color:var(--c-text-light)}.home .feature p{color:var(--c-text-lighter)}.home .theme-default-content{padding:0;margin:0}.home .footer{padding:2.5rem;border-top:1px solid var(--c-border);text-align:center;color:var(--c-text-lighter);transition:border-color var(--t-color)}@media (max-width: 719px){.home .features{flex-direction:column}.home .feature{max-width:100%;padding:0 2.5rem}}@media (max-width: 419px){.home{padding-left:1.5rem;padding-right:1.5rem}.home .hero img{max-height:210px;margin:2rem auto 1.2rem}.home .hero h1{font-size:2rem}.home .hero h1,.home .hero .description,.home .hero .actions{margin:1.2rem auto}.home .hero .description{font-size:1.2rem}.home .hero .action-button{font-size:1rem;padding:.6rem 1.2rem}.home .feature h2{font-size:1.25rem}}.page{padding-top:var(--navbar-height);padding-left:var(--sidebar-width)}.navbar{position:fixed;z-index:20;top:0;left:0;right:0;height:var(--navbar-height);box-sizing:border-box;border-bottom:1px solid var(--c-border);background-color:var(--c-bg-navbar);transition:background-color var(--t-color),border-color var(--t-color)}.sidebar{font-size:16px;width:var(--sidebar-width);position:fixed;z-index:10;margin:0;top:var(--navbar-height);left:0;bottom:0;box-sizing:border-box;border-right:1px solid var(--c-border);overflow-y:auto;scrollbar-width:thin;scrollbar-color:var(--c-brand) var(--c-border);background-color:var(--c-bg-sidebar);transition:transform var(--t-transform),background-color var(--t-color),border-color var(--t-color)}.sidebar::-webkit-scrollbar{width:7px}.sidebar::-webkit-scrollbar-track{background-color:var(--c-border)}.sidebar::-webkit-scrollbar-thumb{background-color:var(--c-brand)}.sidebar-mask{position:fixed;z-index:9;top:0;left:0;width:100vw;height:100vh;display:none}.theme-container.sidebar-open .sidebar-mask{display:block}.theme-container.sidebar-open .navbar>.toggle-sidebar-button .icon span:nth-child(1){transform:rotate(45deg) translate3d(5.5px,5.5px,0)}.theme-container.sidebar-open .navbar>.toggle-sidebar-button .icon span:nth-child(2){transform:scale3d(0,1,1)}.theme-container.sidebar-open .navbar>.toggle-sidebar-button .icon span:nth-child(3){transform:rotate(-45deg) translate3d(6px,-6px,0)}.theme-container.sidebar-open .navbar>.toggle-sidebar-button .icon span:nth-child(1),.theme-container.sidebar-open .navbar>.toggle-sidebar-button .icon span:nth-child(3){transform-origin:center}.theme-container.no-navbar .theme-default-content h1,.theme-container.no-navbar .theme-default-content h2,.theme-container.no-navbar .theme-default-content h3,.theme-container.no-navbar .theme-default-content h4,.theme-container.no-navbar .theme-default-content h5,.theme-container.no-navbar .theme-default-content h6{margin-top:1.5rem;padding-top:0}.theme-container.no-navbar .page{padding-top:0}.theme-container.no-navbar .sidebar{top:0}.theme-container.no-sidebar .sidebar{display:none}@media (max-width: 719px){.theme-container.no-sidebar .sidebar{display:block}}.theme-container.no-sidebar .page{padding-left:0}.theme-default-content a:hover{text-decoration:underline}.theme-default-content img{max-width:100%}.theme-default-content h1,.theme-default-content h2,.theme-default-content h3,.theme-default-content h4,.theme-default-content h5,.theme-default-content h6{margin-top:calc(.5rem - var(--navbar-height));padding-top:calc(1rem + var(--navbar-height));margin-bottom:0}.theme-default-content h1:first-child,.theme-default-content h2:first-child,.theme-default-content h3:first-child,.theme-default-content h4:first-child,.theme-default-content h5:first-child,.theme-default-content h6:first-child{margin-bottom:1rem}.theme-default-content h1:first-child+p,.theme-default-content h1:first-child+pre,.theme-default-content h1:first-child+.custom-container,.theme-default-content h2:first-child+p,.theme-default-content h2:first-child+pre,.theme-default-content h2:first-child+.custom-container,.theme-default-content h3:first-child+p,.theme-default-content h3:first-child+pre,.theme-default-content h3:first-child+.custom-container,.theme-default-content h4:first-child+p,.theme-default-content h4:first-child+pre,.theme-default-content h4:first-child+.custom-container,.theme-default-content h5:first-child+p,.theme-default-content h5:first-child+pre,.theme-default-content h5:first-child+.custom-container,.theme-default-content h6:first-child+p,.theme-default-content h6:first-child+pre,.theme-default-content h6:first-child+.custom-container{margin-top:2rem}@media (max-width: 959px){.sidebar{font-size:15px;width:var(--sidebar-width-mobile)}.page{padding-left:var(--sidebar-width-mobile)}}@media (max-width: 719px){.sidebar{top:0;padding-top:var(--navbar-height);transform:translate(-100%)}.page{padding-left:0}.theme-container.sidebar-open .sidebar{transform:translate(0)}.theme-container.no-navbar .sidebar{padding-top:0}}@media (max-width: 419px){h1{font-size:1.9rem}}.navbar{--navbar-line-height: calc( var(--navbar-height) - 2 * var(--navbar-padding-v) );padding:var(--navbar-padding-v) var(--navbar-padding-h);line-height:var(--navbar-line-height)}.navbar .logo{height:var(--navbar-line-height);margin-right:var(--navbar-padding-v);vertical-align:top}.navbar .site-name{font-size:1.3rem;font-weight:600;color:var(--c-text);position:relative}.navbar .navbar-items-wrapper{display:flex;position:absolute;box-sizing:border-box;top:var(--navbar-padding-v);right:var(--navbar-padding-h);height:var(--navbar-line-height);padding-left:var(--navbar-padding-h);white-space:nowrap;font-size:.9rem}.navbar .navbar-items-wrapper .search-box{flex:0 0 auto;vertical-align:top}@media screen and (max-width: 719px){.navbar{padding-left:4rem}.navbar .site-name{display:block;width:calc(100vw - 11rem);overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.navbar .can-hide{display:none}}.navbar-items{display:inline-block}@media print{.navbar-items{display:none}}.navbar-items a{display:inline-block;line-height:1.4rem;color:inherit}.navbar-items a:hover,.navbar-items a.router-link-active{color:var(--c-text)}.navbar-items .navbar-item{position:relative;display:inline-block;margin-left:1.5rem;line-height:var(--navbar-line-height)}.navbar-items .navbar-item:first-child{margin-left:0}.navbar-items .navbar-item>a:hover,.navbar-items .navbar-item>a.router-link-active{margin-bottom:-2px;border-bottom:2px solid var(--c-text-accent)}@media (max-width: 719px){.navbar-items .navbar-item{margin-left:0}.navbar-items .navbar-item>a:hover,.navbar-items .navbar-item>a.router-link-active{margin-bottom:0;border-bottom:none}.navbar-items a:hover,.navbar-items a.router-link-active{color:var(--c-text-accent)}}.toggle-sidebar-button{position:absolute;top:.6rem;left:1rem;display:none;padding:.6rem;cursor:pointer}.toggle-sidebar-button .icon{display:flex;flex-direction:column;justify-content:center;align-items:center;width:1.25rem;height:1.25rem;cursor:inherit}.toggle-sidebar-button .icon span{display:inline-block;width:100%;height:2px;border-radius:2px;background-color:var(--c-text);transition:transform var(--t-transform)}.toggle-sidebar-button .icon span:nth-child(2){margin:6px 0}@media screen and (max-width: 719px){.toggle-sidebar-button{display:block}}.toggle-color-mode-button{display:flex;margin:auto;margin-left:1rem;border:0;background:none;color:var(--c-text);opacity:.8;cursor:pointer}@media print{.toggle-color-mode-button{display:none}}.toggle-color-mode-button:hover{opacity:1}.toggle-color-mode-button .icon{width:1.25rem;height:1.25rem}.DocSearch{transition:background-color var(--t-color)}.navbar-dropdown-wrapper{cursor:pointer}.navbar-dropdown-wrapper .navbar-dropdown-title,.navbar-dropdown-wrapper .navbar-dropdown-title-mobile{display:block;font-size:.9rem;font-family:inherit;cursor:inherit;padding:inherit;line-height:1.4rem;background:transparent;border:none;font-weight:500;color:var(--c-text)}.navbar-dropdown-wrapper .navbar-dropdown-title:hover,.navbar-dropdown-wrapper .navbar-dropdown-title-mobile:hover{border-color:transparent}.navbar-dropdown-wrapper .navbar-dropdown-title .arrow,.navbar-dropdown-wrapper .navbar-dropdown-title-mobile .arrow{vertical-align:middle;margin-top:-1px;margin-left:.4rem}.navbar-dropdown-wrapper .navbar-dropdown-title-mobile{display:none;font-weight:600;font-size:inherit}.navbar-dropdown-wrapper .navbar-dropdown-title-mobile:hover{color:var(--c-text-accent)}.navbar-dropdown-wrapper .navbar-dropdown .navbar-dropdown-item{color:inherit;line-height:1.7rem}.navbar-dropdown-wrapper .navbar-dropdown .navbar-dropdown-item .navbar-dropdown-subtitle{margin:.45rem 0 0;border-top:1px solid var(--c-border);padding:1rem 0 .45rem;font-size:.9rem}.navbar-dropdown-wrapper .navbar-dropdown .navbar-dropdown-item .navbar-dropdown-subtitle>span{padding:0 1.5rem 0 1.25rem}.navbar-dropdown-wrapper .navbar-dropdown .navbar-dropdown-item .navbar-dropdown-subtitle>a{font-weight:inherit}.navbar-dropdown-wrapper .navbar-dropdown .navbar-dropdown-item .navbar-dropdown-subtitle>a.router-link-active:after{display:none}.navbar-dropdown-wrapper .navbar-dropdown .navbar-dropdown-item .navbar-dropdown-subitem-wrapper{padding:0;list-style:none}.navbar-dropdown-wrapper .navbar-dropdown .navbar-dropdown-item .navbar-dropdown-subitem-wrapper .navbar-dropdown-subitem{font-size:.9em}.navbar-dropdown-wrapper .navbar-dropdown .navbar-dropdown-item a{display:block;line-height:1.7rem;position:relative;border-bottom:none;font-weight:400;margin-bottom:0;padding:0 1.5rem 0 1.25rem}.navbar-dropdown-wrapper .navbar-dropdown .navbar-dropdown-item a:hover,.navbar-dropdown-wrapper .navbar-dropdown .navbar-dropdown-item a.router-link-active{color:var(--c-text-accent)}.navbar-dropdown-wrapper .navbar-dropdown .navbar-dropdown-item a.router-link-active:after{content:"";width:0;height:0;border-left:5px solid var(--c-text-accent);border-top:3px solid transparent;border-bottom:3px solid transparent;position:absolute;top:calc(50% - 2px);left:9px}.navbar-dropdown-wrapper .navbar-dropdown .navbar-dropdown-item:first-child .navbar-dropdown-subtitle{margin-top:0;padding-top:0;border-top:0}.navbar-dropdown-wrapper.mobile.open .navbar-dropdown-title,.navbar-dropdown-wrapper.mobile.open .navbar-dropdown-title-mobile{margin-bottom:.5rem}.navbar-dropdown-wrapper.mobile .navbar-dropdown-title,.navbar-dropdown-wrapper.mobile .navbar-dropdown-title-mobile{display:none}.navbar-dropdown-wrapper.mobile .navbar-dropdown-title-mobile{display:block}.navbar-dropdown-wrapper.mobile .navbar-dropdown{transition:height .1s ease-out;overflow:hidden}.navbar-dropdown-wrapper.mobile .navbar-dropdown .navbar-dropdown-item .navbar-dropdown-subtitle{border-top:0;margin-top:0;padding-top:0;padding-bottom:0}.navbar-dropdown-wrapper.mobile .navbar-dropdown .navbar-dropdown-item .navbar-dropdown-subtitle,.navbar-dropdown-wrapper.mobile .navbar-dropdown .navbar-dropdown-item>a{font-size:15px;line-height:2rem}.navbar-dropdown-wrapper.mobile .navbar-dropdown .navbar-dropdown-item .navbar-dropdown-subitem{font-size:14px;padding-left:1rem}.navbar-dropdown-wrapper:not(.mobile){height:1.8rem}.navbar-dropdown-wrapper:not(.mobile):hover .navbar-dropdown,.navbar-dropdown-wrapper:not(.mobile).open .navbar-dropdown{display:block!important}.navbar-dropdown-wrapper:not(.mobile).open:blur{display:none}.navbar-dropdown-wrapper:not(.mobile) .navbar-dropdown{display:none;height:auto!important;box-sizing:border-box;max-height:calc(100vh - 2.7rem);overflow-y:auto;position:absolute;top:100%;right:0;background-color:var(--c-bg-navbar);padding:.6rem 0;border:1px solid var(--c-border);border-bottom-color:var(--c-border-dark);text-align:left;border-radius:.25rem;white-space:nowrap;margin:0}.page{padding-bottom:2rem;display:block}.page .theme-default-content{max-width:var(--content-width);margin:0 auto;padding:2rem 2.5rem;padding-top:0}@media (max-width: 959px){.page .theme-default-content{padding:2rem}}@media (max-width: 419px){.page .theme-default-content{padding:1.5rem}}.page-meta{max-width:var(--content-width);margin:0 auto;padding:1rem 2.5rem;overflow:auto}@media (max-width: 959px){.page-meta{padding:2rem}}@media (max-width: 419px){.page-meta{padding:1.5rem}}.page-meta .meta-item{cursor:default;margin-top:.8rem}.page-meta .meta-item .meta-item-label{font-weight:500;color:var(--c-text-lighter)}.page-meta .meta-item .meta-item-info{font-weight:400;color:var(--c-text-quote)}.page-meta .edit-link{display:inline-block;margin-right:.25rem}@media print{.page-meta .edit-link{display:none}}.page-meta .last-updated{float:right}@media (max-width: 719px){.page-meta .last-updated{font-size:.8em;float:none}.page-meta .contributors{font-size:.8em}}.page-nav{max-width:var(--content-width);margin:0 auto;padding:1rem 2.5rem 2rem;padding-bottom:0}@media (max-width: 959px){.page-nav{padding:2rem}}@media (max-width: 419px){.page-nav{padding:1.5rem}}.page-nav .inner{min-height:2rem;margin-top:0;border-top:1px solid var(--c-border);transition:border-color var(--t-color);padding-top:1rem;overflow:auto}.page-nav .prev a:before{content:"←"}.page-nav .next{float:right}.page-nav .next a:after{content:"→"}.sidebar ul{padding:0;margin:0;list-style-type:none}.sidebar a{display:inline-block}.sidebar .navbar-items{display:none;border-bottom:1px solid var(--c-border);transition:border-color var(--t-color);padding:.5rem 0 .75rem}.sidebar .navbar-items a{font-weight:600}.sidebar .navbar-items .navbar-item{display:block;line-height:1.25rem;font-size:1.1em;padding:.5rem 0 .5rem 1.5rem}.sidebar .sidebar-items{padding:1.5rem 0}@media (max-width: 719px){.sidebar .navbar-items{display:block}.sidebar .navbar-items .navbar-dropdown-wrapper .navbar-dropdown .navbar-dropdown-item a.router-link-active:after{top:calc(1rem - 2px)}.sidebar .sidebar-items{padding:1rem 0}}.sidebar-item{cursor:default;border-left:.25rem solid transparent;color:var(--c-text)}.sidebar-item:focus-visible{outline-width:1px;outline-offset:-1px}.sidebar-item.active:not(p.sidebar-heading){font-weight:600;color:var(--c-text-accent);border-left-color:var(--c-text-accent)}.sidebar-item.sidebar-heading{transition:color .15s ease;font-size:1.1em;font-weight:700;padding:.35rem 1.5rem .35rem 1.25rem;width:100%;box-sizing:border-box;margin:0}.sidebar-item.sidebar-heading+.sidebar-item-children{transition:height .1s ease-out;overflow:hidden;margin-bottom:.75rem}.sidebar-item.collapsible{cursor:pointer}.sidebar-item.collapsible .arrow{position:relative;top:-.12em;left:.5em}.sidebar-item:not(.sidebar-heading){font-size:1em;font-weight:400;display:inline-block;margin:0;padding:.35rem 1rem .35rem 2rem;line-height:1.4;width:100%;box-sizing:border-box}.sidebar-item:not(.sidebar-heading)+.sidebar-item-children{padding-left:1rem;font-size:.95em}.sidebar-item-children .sidebar-item-children .sidebar-item:not(.sidebar-heading){padding:.25rem 1rem .25rem 1.75rem}.sidebar-item-children .sidebar-item-children .sidebar-item:not(.sidebar-heading).active{font-weight:500;border-left-color:transparent}a.sidebar-heading+.sidebar-item-children .sidebar-item:not(.sidebar-heading).active{border-left-color:transparent}a.sidebar-item{cursor:pointer}a.sidebar-item:hover{color:var(--c-text-accent)}.table-of-contents .badge{vertical-align:middle}.dropdown-enter-from,.dropdown-leave-to{height:0!important}.fade-slide-y-enter-active{transition:all .2s ease}.fade-slide-y-leave-active{transition:all .2s cubic-bezier(1,.5,.8,1)}.fade-slide-y-enter-from,.fade-slide-y-leave-to{transform:translateY(10px);opacity:0}:root{--c-brand: #1965C0;--c-brand-light: #1965C0;--c-bg: #ffffff;--c-bg-light: #f3f4f5;--c-bg-lighter: #eeeeee;--c-bg-dark: #ebebec;--c-bg-darker: #e6e6e6;--c-bg-navbar: var(--c-bg);--c-bg-sidebar: var(--c-bg);--c-bg-arrow: #cccccc;--c-text: #2c3e50;--c-text-accent: var(--c-brand);--c-text-light: #3a5169;--c-text-lighter: #4e6e8e;--c-text-lightest: #6a8bad;--c-text-quote: #999999;--c-border: #eaecef;--c-border-dark: #dfe2e5;--c-tip: #1965C0;--c-tip-bg: var(--c-bg-light);--c-tip-title: var(--c-text);--c-tip-text: var(--c-text);--c-tip-text-accent: var(--c-text-accent);--c-warning: #ffc310;--c-warning-bg: #fffae3;--c-warning-bg-light: #fff3ba;--c-warning-bg-lighter: #fff0b0;--c-warning-border-dark: #f7dc91;--c-warning-details-bg: #fff5ca;--c-warning-title: #f1b300;--c-warning-text: #746000;--c-warning-text-accent: #edb100;--c-warning-text-light: #c1971c;--c-warning-text-quote: #ccab49;--c-danger: #f11e37;--c-danger-bg: #ffe0e0;--c-danger-bg-light: #ffcfde;--c-danger-bg-lighter: #ffc9c9;--c-danger-border-dark: #f1abab;--c-danger-details-bg: #ffd4d4;--c-danger-title: #ed1e2c;--c-danger-text: #660000;--c-danger-text-accent: #bd1a1a;--c-danger-text-light: #b5474d;--c-danger-text-quote: #c15b5b;--c-details-bg: #eeeeee;--c-badge-tip: var(--c-tip);--c-badge-warning: #ecc808;--c-badge-warning-text: var(--c-bg);--c-badge-danger: #dc2626;--c-badge-danger-text: var(--c-bg);--t-color: .3s ease;--t-transform: .3s ease;--code-bg-color: #282c34;--code-hl-bg-color: rgba(0, 0, 0, .66);--code-ln-color: #9e9e9e;--code-ln-wrapper-width: 3.5rem;--font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;--font-family-code: Consolas, Monaco, "Andale Mono", "Ubuntu Mono", monospace;--navbar-height: 3.6rem;--navbar-padding-v: .7rem;--navbar-padding-h: 1.5rem;--sidebar-width: 20rem;--sidebar-width-mobile: calc(var(--sidebar-width) * .82);--content-width: 900px;--homepage-width: 960px}.back-to-top{--back-to-top-color: var(--c-brand);--back-to-top-color-hover: var(--c-brand-light)}.DocSearch{--docsearch-primary-color: var(--c-brand);--docsearch-text-color: var(--c-text);--docsearch-highlight-color: var(--c-brand);--docsearch-muted-color: var(--c-text-quote);--docsearch-container-background: rgba(9, 10, 17, .8);--docsearch-modal-background: var(--c-bg-light);--docsearch-searchbox-background: var(--c-bg-lighter);--docsearch-searchbox-focus-background: var(--c-bg);--docsearch-searchbox-shadow: inset 0 0 0 2px var(--c-brand);--docsearch-hit-color: var(--c-text-light);--docsearch-hit-active-color: var(--c-bg);--docsearch-hit-background: var(--c-bg);--docsearch-hit-shadow: 0 1px 3px 0 var(--c-border-dark);--docsearch-footer-background: var(--c-bg)}.external-link-icon{--external-link-icon-color: var(--c-text-quote)}.medium-zoom-overlay{--medium-zoom-bg-color: var(--c-bg)}#nprogress{--nprogress-color: var(--c-brand)}.pwa-popup{--pwa-popup-text-color: var(--c-text);--pwa-popup-bg-color: var(--c-bg);--pwa-popup-border-color: var(--c-brand);--pwa-popup-shadow: 0 4px 16px var(--c-brand);--pwa-popup-btn-text-color: var(--c-bg);--pwa-popup-btn-bg-color: var(--c-brand);--pwa-popup-btn-hover-bg-color: var(--c-brand-light)}.search-box{--search-bg-color: var(--c-bg);--search-accent-color: var(--c-brand);--search-text-color: var(--c-text);--search-border-color: var(--c-border);--search-item-text-color: var(--c-text-lighter);--search-item-focus-bg-color: var(--c-bg-light)} diff --git a/docs/classes/ThemedSpecialDialogOptions.html b/docs/classes/ThemedSpecialDialogOptions.html new file mode 100644 index 0000000..e9e63ea --- /dev/null +++ b/docs/classes/ThemedSpecialDialogOptions.html @@ -0,0 +1,33 @@ + + + + + + + + + ThemedSpecialDialogOptions class | Coho.UI, WPF Library documentation + + + + +

ThemedSpecialDialogOptions class

This class is used to configure the behavior of the ThemedOpenFileDialog dialog.

Properties

DefaultHeight

Type: int
Default value: 650
The DefaultHeight property defines the initial height of the dialog in pixels.

DefaultWidth

Type: int
Default value: 920
The DefaultWidth property defines the initial width of the dialog in pixels.

FileTypes

Type: Dictionary<string, string>
Default value: default
The FileTypes property defines the extensions that are supported by the dialog.

InitialDirectory

Type: string
Default value: String.Empty
The InitialDirectory property defines the first folder to show when the dialog is opened.

ShowDefaultSpecialFolders

Type: bool
Default value: true
The ShowDefaultSpecialFolders property defines if the special folders (Documents, Images, Videos...) section will be displayed. This property has no effect if the ShowNavigationPane property is set to false.

ShowNavigationPane

Type: bool
Default value: true
The ShowNavigationPane property defines if the navigation pane (on the left side) will be displayed.

Methods

None.

Events

None.

+ + + diff --git a/docs/controls/FolderPickerTextbox.html b/docs/controls/FolderPickerTextbox.html new file mode 100644 index 0000000..de4b691 --- /dev/null +++ b/docs/controls/FolderPickerTextbox.html @@ -0,0 +1,34 @@ + + + + + + + + + FolderPickerTextbox Control | Coho.UI, WPF Library documentation + + + + +

FolderPickerTextbox Control

Namespace: Coho.UI.Controls.Textboxes, inherits from TextBox

The FolderPickerTextbox is a text box that contains a button that allows the user to open the native folder picker dialog to select a folder.

Properties

Text

Type: string
The value of the text box.

Events

SelectionChanged

Type:EventHandler<string>
This event fires when the users selects a path in the folder picker dialog. The string argument is the selected path.

Examples

Example 1

<textboxes:FolderPickerTextbox x:Name="TbDefaultFolder" Width="240" />
+
+ + + diff --git a/docs/controls/GenericPickerTextbox.html b/docs/controls/GenericPickerTextbox.html new file mode 100644 index 0000000..b6d6dbe --- /dev/null +++ b/docs/controls/GenericPickerTextbox.html @@ -0,0 +1,33 @@ + + + + + + + + + Coho.UI, WPF Library documentation + + + + + + + + diff --git a/docs/controls/MasterAccentSplitButton.html b/docs/controls/MasterAccentSplitButton.html new file mode 100644 index 0000000..31b3167 --- /dev/null +++ b/docs/controls/MasterAccentSplitButton.html @@ -0,0 +1,41 @@ + + + + + + + + + MasterAccentSplitButton Control | Coho.UI, WPF Library documentation + + + + +

MasterAccentSplitButton Control

Namespace: Coho.UI.Controls.Buttons, inherits from Button

The MasterAccentSplitButton is a button that it usually used to start an activity in the application. For example, in Microsoft Office, you can find them in the Backstage view, to create new documents. It's a split button that uses the AccentColor resource as background. The text uses a semi bold weight. It supports an icon (brush resource).

Properties

Type: object
The content of the dropdown menu.

Icon

Type: brush
The icon to display in the button.

Text

Type: string
The text to display in the button.

Methods

None.

Events

Click

Type: RoutedEventHandler
Occurs when the user clicks the left part of the button.

Examples

Example 1

<buttons:MasterAccentSplitButton Text="Create new" Icon="{DynamicResource IconMagic}" Click="MasterAccentSplitButton_Click">
+   <buttons:MasterAccentSplitButton.DropDownContent>
+      <StackPanel>
+         <MenuItem Header="Item 1" />
+         <MenuItem Header="Item 2" />
+      </StackPanel>
+   </buttons:MasterAccentSplitButton.DropDownContent>
+</buttons:MasterAccentSplitButton>
+
+ + + diff --git a/docs/controls/RibbonExtraButton.html b/docs/controls/RibbonExtraButton.html new file mode 100644 index 0000000..3209eb8 --- /dev/null +++ b/docs/controls/RibbonExtraButton.html @@ -0,0 +1,33 @@ + + + + + + + + + The RibbonExtraButton control | Coho.UI, WPF Library documentation + + + + + + + + diff --git a/docs/controls/acryliccontextmenu.html b/docs/controls/acryliccontextmenu.html new file mode 100644 index 0000000..5af05fd --- /dev/null +++ b/docs/controls/acryliccontextmenu.html @@ -0,0 +1,42 @@ + + + + + + + + + The AcrylicContextMenu control | Coho.UI, WPF Library documentation + + + + +

The AcrylicContextMenu control

Namespace: Coho.UI.Controls.Menus, inherits from ContextMenu

The AcrylicContextMenu uses the Acrylic texture on Windows 11. It will automatically fallback to a legacy style when it is not available.

Properties

None.

Methods

None.

Events

None.

Examples

This example shows how to attach an AcrylicContextMenu on a Border.

<Border Width="150" Height="150" Background="Silver">
+	<Border.ContextMenu>
+		<menus:AcrylicContextMenu>
+			<MenuItem Header="Test 1"/>
+			<MenuItem Header="Test 2"/>
+			<MenuItem Header="Test 3"/>
+		</menus:AcrylicContextMenu>
+	</Border.ContextMenu>
+</Border>
+
+ + + diff --git a/docs/controls/announcer.html b/docs/controls/announcer.html new file mode 100644 index 0000000..90db746 --- /dev/null +++ b/docs/controls/announcer.html @@ -0,0 +1,62 @@ + + + + + + + + + Announcer control | Coho.UI, WPF Library documentation + + + + +

Announcer control

Namespace: Coho.UI.Controls.Announcer

The Announcer is a slider that allows you to specify the number of items per page and the template of bound items.

Properties

AnnounceTemplate

Type: DataTemplate
The AnnounceTemplate property defines the template to be used to display items in the slider.

IsLoadingContent

Type: DependencyProperty, bool
The IsLoadingContent property is used to hide control content and display a LoadingRing to indicate that content is being loaded.

ItemsPerView

Type: DependencyProperty, int
The ItemsPerView property is used to set the number of items per page. When there are more items than this value, the user can slide content using the arrows on the top right of the control.

ItemsSource

Type: IEnumerable<object>
The ItemsSource property is used to set the collection of objects to display.

Label

Type: DependencyProperty, string
The Label property is used to set the text displayed at the top of the Announcer control.

Methods

None.

Events

None.

Examples

Example 1

This example shows how to set the AnnounceTemplate property from Xaml.

<announcer:Announcer AnnouncesAreaMargin="0,8,0,0" Margin="0,8" ItemsPerView="4"
+                                     x:Name="AnnouncesPresenter" MinHeight="200">
+                    <announcer:Announcer.AnnounceTemplate>
+                        <DataTemplate>
+                            <Border x:Name="BdrContainer" CornerRadius="6">
+                                <StackPanel>
+                                    <TextBlock Text="{Binding Title}" FontWeight="SemiBold" FontSize="14"
+                                               TextWrapping="Wrap" Margin="0,0,10,0" />
+                                    <TextBlock Text="{Binding Content}"
+                                               TextWrapping="Wrap" Margin="0,0,10,0" />
+                                </StackPanel>
+                            </Border>
+                        </DataTemplate>
+                    </announcer:Announcer.AnnounceTemplate>
+</announcer:Announcer>
+

Example 2

This example shows how to load data from code-behind and set the control in loading mode.

// Put the control in Loading mode, it shows a loading ring
+AnnouncesPresenter.IsLoadingContent = true;
+
+OnlineContentService.GetItems().ContinueWith(r =>
+{
+    // Stop the loading mode to show fetched items
+    AnnouncesPresenter.IsLoadingContent = false;
+    AnnouncesPresenter.ItemsSource = r.Result;
+
+}, TaskScheduler.FromCurrentSynchronizationContext());
+

Example 3

This example shows how to bind a localized string to the Label property in Xaml.

<announcer:Announcer AnnouncesAreaMargin="0,8,0,0" Margin="0,8" ItemsPerView="4"
+                     x:Name="AnnouncesPresenter" MinHeight="200"
+                     Label="{x:Static localization:Resources.OnlineResourcesDescription}">
+</announcer:Announcer>
+
+ + + diff --git a/docs/controls/menubar.html b/docs/controls/menubar.html new file mode 100644 index 0000000..21ec948 --- /dev/null +++ b/docs/controls/menubar.html @@ -0,0 +1,47 @@ + + + + + + + + + The MenuBar control | Coho.UI, WPF Library documentation + + + + +

The MenuBar control

Namespace: Coho.UI.Controls.Menus

Properties

ExtraButtons

Type: List<UIElement>

QatCommands

Type: List<UIElement>

ShowQAT

Type: Bool

ShowQATLabels

Type: Bool

EnableAnimations

Type: Bool

Methods

GetCommandIdentifier(MenuItem cmd)

Returns the identifier of the provided MenuItem. It is used to memorize the Quick Access Toolbar commands for example.

Arguments

  • MenuItem cmd: The menu item you want to get the unique identifier.
    Note: The MenuItem must have a Name property set to work properly.

Exceptions

  • NullReferenceException: Occurs when the provided cmd has no FrameworkElement.Name property.

Events

None.

Examples

<menus:MenuBar ShowQAT="True" x:Name="MainMenuBar">
+
+    <menus:MenuBar.ExtraButtons>
+        <ui3:RibbonExtraButton Text="Publish"
+                               IsPrimary="true" Icon="{x:Null}"
+                               Padding="6,4"
+                               Margin="8,0,0,0" />
+    </menus:MenuBar.ExtraButtons>
+
+    <MenuItem Header="{x:Static localization:Resources.MenuFile}">
+        <MenuItem Header="{x:Static localization:Resources.MenuNew}">
+        </MenuItem>
+    </MenuItem>
+</menus:MenuBar>
+
+ + + diff --git a/docs/dialogs/ThemedInputBox.html b/docs/dialogs/ThemedInputBox.html new file mode 100644 index 0000000..c79088e --- /dev/null +++ b/docs/dialogs/ThemedInputBox.html @@ -0,0 +1,39 @@ + + + + + + + + + ThemedInputBox dialog | Coho.UI, WPF Library documentation + + + + +

ThemedInputBox dialog

The ThemedInputBox is a dialog that provides a message and a TextBox so that the user can enter text.

Properties

None.

Methods

static string? Show(string message, string title, string defaultValue = "")

Shows a modal dialog using the current theme. Returns a string?.
If the returned value is null, it means that the user selected the Cancel button or closed the dialog.

Arguments

  • string message : The message to display.
  • string title : The title of the dialog.
  • string defaultValue : The text to write in the TextBox by default when the dialog opens.

static string? Show(string message, string title, string defaultValue, string defaultButtonText, string secondaryButtonText)

Shows a modal dialog using the current theme. Returns a string?.
If the returned value is null, it means that the user selected the Cancel button or closed the dialog.

Arguments

  • string message : The message to display.
  • string title : The title of the dialog.
  • string defaultValue : The text to write in the TextBox by default when the dialog opens.
  • string defaultButtonText : The text to display in the default button.
  • string secondaryButtonText : The text to in the the secondary button.

static string? Show(string message, string title, Window owner, string defaultValue = "", string? defaultButtonText = null, string? secondaryButtonText = null

Shows a modal dialog using the current theme. Returns a MessageBoxResult that represents the choice of the user.
This method can be used to override the default texts and provide a better UX while still using the default framework components.
This method should be used with the MessageBoxButton.YesNoCancel or MessageBoxButton.YesNo arguments. The Yes button will be replaced with the defaultButtonText value, and the No button will be replaced with the secondaryButtonText.

Arguments

  • string message : The message to display.
  • string title : The title of the dialog.
  • Window owner : The window that owns the dialog; used for the modal behavior.
  • string defaultValue : The text to write in the TextBox by default when the dialog opens.
  • string defaultButtonText : The text to display in the default button.
  • string secondaryButtonText : The text to in the the secondary button.

Events

None.

Examples

Example 1

This example shows how to use the ThemedInputBox from C# and handle the result.

string? value = ThemedInputBox.Show("Please provide name for this folder:", "Rename folder", this);
+
+if (!string.IsNullOrEmpty(value))
+{
+    // some code to rename a folder
+}
+
+ + + diff --git a/docs/dialogs/ThemedMessageBox.html b/docs/dialogs/ThemedMessageBox.html new file mode 100644 index 0000000..97b6a95 --- /dev/null +++ b/docs/dialogs/ThemedMessageBox.html @@ -0,0 +1,47 @@ + + + + + + + + + ThemedMessageBox dialog | Coho.UI, WPF Library documentation + + + + +

ThemedMessageBox dialog

The ThemedMessageBox is a dialog that replaces the default MessageBox using the current theme.

Properties

None.

Methods

static MessageBoxResult Show(string message, string title, MessageBoxButton button)

Shows a modal dialog using the current theme. Returns a MessageBoxResult that represents the choice of the user.

Arguments

  • string message : The message to display
  • string title : The title of the dialog
  • MessageBoxButton button : The buttons to display

static MessageBoxResult Show(string message, string title, MessageBoxButton button, string defaultButtonText, string secondaryButtonText)

Shows a modal dialog using the current theme. Returns a MessageBoxResult that represents the choice of the user.
This method can be used to override the default texts and provide a better UX while still using the default framework components.
This method should be used with the MessageBoxButton.YesNoCancel or MessageBoxButton.YesNo arguments. The Yes button will be replaced with the defaultButtonText value, and the No button will be replaced with the secondaryButtonText.

Arguments

  • string message : The message to display
  • string title : The title of the dialog
  • MessageBoxButton : The buttons to display
  • string defaultButtonText : The text to display in the default button (the Yes button when using MessageBoxButton.YesNoCancel or MessageBoxButton.YesNo)
  • string secondaryButtonText : The text to in the the secondary button (the No button when using MessageBoxButton.YesNoCancel or MessageBoxButton.YesNo)

static MessageBoxResult Show(string message, string title, Window owner, MessageBoxButton button, string? defaultButtonText = null, string? secondaryButtonText = null)

Shows a modal dialog using the current theme. Returns a MessageBoxResult that represents the choice of the user.
This method can be used to override the default texts and provide a better UX while still using the default framework components.
This method should be used with the MessageBoxButton.YesNoCancel or MessageBoxButton.YesNo arguments. The Yes button will be replaced with the defaultButtonText value, and the No button will be replaced with the secondaryButtonText.

Arguments

  • string message : The message to display
  • Window owner: The Window that will own the dialog
  • string title : The title of the dialog
  • MessageBoxButton : The buttons to display
  • string defaultButtonText : The text to display in the default button (the Yes button when using MessageBoxButton.YesNoCancel or MessageBoxButton.YesNo)
  • string secondaryButtonText : The text to in the the secondary button (the No button when using MessageBoxButton.YesNoCancel or MessageBoxButton.YesNo)

Events

None.

Examples

Example 1

This example shows how to use the ThemedMessageBox from C# and handle the result.

MessageBoxResult quest = ThemedMessageBox.Show("Do you want to save changes?", "Save changes", MessageBoxButton.YesNoCancel);
+
+switch (quest)
+{
+    case MessageBoxResult.Yes:
+        // Yes button was clicked
+    break;
+    case MessageBoxResult.No:
+        // No button was clicked
+    break;
+    case MessageBoxResult.Cancel:
+        // Cancel button was clicked
+    break;
+}
+
+ + + diff --git a/docs/dialogs/ThemedOpenFileDialog.html b/docs/dialogs/ThemedOpenFileDialog.html new file mode 100644 index 0000000..5a70cd8 --- /dev/null +++ b/docs/dialogs/ThemedOpenFileDialog.html @@ -0,0 +1,65 @@ + + + + + + + + + ThemedOpenFileDialog dialog | Coho.UI, WPF Library documentation + + + + +

ThemedOpenFileDialog dialog

The ThemedOpenFileDialog is a dialog that replaces the default OpenFileDialog using the current theme.

Properties

None.

Methods

static string? Show(string title, Dictionary<string, string> fileTypes, Window owner)

Opens a dialog that lets the user browse the computer to open an existing file. Returns a string?.
When the result is null, it means that the user has closed the dialog without selecting a file.

Arguments

  • string title : The title of the dialog
  • Dictionary<string, string> fileTypes : The supported extensions
  • Window owner: The Window that will own the dialog

static string? Show(string title, ThemedSpecialDialogOptions options, Window owner, string? defaultButtonText = null, string? secondaryButtonText = null)

Opens a dialog that lets the user browse the computer to open an existing file. Returns a string?.
When the result is null, it means that the user has closed the dialog without selecting a file.

Arguments

  • string title : The title of the dialog
  • ThemedSpecialDialogOptions options : The options to configure the dialog
  • Window owner: The Window that will own the dialog
  • string defaultButtonText : The text to display in the default button
  • string secondaryButtonText : The text to in the the secondary button

Events

None.

Examples

Example 1

This example shows how to localize the ThemedOpenFileDialog texts.

public MainWindow()
+{
+  InitializeComponent();
+  Loaded += OnLoaded;
+}
+
+private void OnLoaded(object sender, RoutedEventArgs e)
+{
+  // Set Coho.UI Texts resources from your own localization resources
+  GenericText.Cancel = Localization.Resources.GenericCancel;
+  DialogsText.Open = Localization.Resources.GenericOpen;
+  DialogsText.FileName = Localization.Resources.GenericFileName;
+  DialogsText.FileType = Localization.Resources.GenericFileType;
+
+  ...
+}
+

Example 2

This example shows how to use the ThemedOpenFileDialog from C# and handle the result.

ThemedSpecialDialogOptions options = new ThemedSpecialDialogOptions()
+{
+    FileTypes =
+    {
+        {"All supported file types (*.md;*.pwdp)", "*.md;*.pwdp"},
+        {"Markdown file (*.md)", "*.md"},
+        {"PowerDocs Project file (*.pwdp)", "*.pwdp"}
+    }
+};
+
+string? filePath = ThemedOpenFileDialog.Show(Localization.Resources.MenuOpen, options, this);
+
+if (!string.IsNullOrEmpty(filePath))
+{
+    // open the selected file in your application
+}
+
+ + + diff --git a/docs/dialogs/ThemedSaveFileDialog.html b/docs/dialogs/ThemedSaveFileDialog.html new file mode 100644 index 0000000..2b64a73 --- /dev/null +++ b/docs/dialogs/ThemedSaveFileDialog.html @@ -0,0 +1,47 @@ + + + + + + + + + ThemedSaveFileDialog dialog | Coho.UI, WPF Library documentation + + + + +

ThemedSaveFileDialog dialog

The ThemedSaveFileDialog is a dialog that replaces the default SaveFileDialog using the current theme.

Properties

None.

Methods

Show(string message, string title, MessageBoxButton button)

Shows a modal dialog using the current theme. Returns a MessageBoxResult that represents the choice of the user.

Arguments

  • string message : The message to display
  • string title : The title of the dialog
  • MessageBoxButton button : The buttons to display

Events

None.

Examples

Example 1

This example shows how to use the ThemedMessageBox from C# and handle the result.

string? filePath = ThemedOpenFileDialog.Show("Open file",
+                    new Dictionary<string, string>()
+                    {
+                        {"All supported file types (*.md;*.pwdp)", "*.md;*.pwdp"},
+                        {"Markdown file (*.md)", "*.md"},
+                        {"PowerDocs Project file (*.pwdp)", "*.pwdp"}
+                    }, 
+                    "",
+                    this);
+
+if (!string.IsNullOrEmpty(filePath))
+{
+    // open the selected file in your application
+}
+
+ + + diff --git a/docs/getstarted.html b/docs/getstarted.html new file mode 100644 index 0000000..f85a79b --- /dev/null +++ b/docs/getstarted.html @@ -0,0 +1,65 @@ + + + + + + + + + Getting started with Coho.UI | Coho.UI, WPF Library documentation + + + + +

Getting started with Coho.UI

https://www.nuget.org/packages/Coho.UI/open in new window

Define your theme

Have a look at the sample application, the file App.xaml contains all the required resources to make it work nicely. Just change the brushes to make it yours.

You must define the Font Family and Font size to use.

  • FontFamily AppFont: Defines the font to use in the UI.
  • system:Double AppFontSize: Defines the font size to use in the UI.

Example:

<FontFamily x:Key="AppFont">Segoe UI Variable Display,Segoe UI</FontFamily>
+<system:Double x:Key="AppFontSize">14</system:Double>
+

You must define your color theme using specified resource names.

  • Color ChromeBorderActiveColor: Defines the color of the window border when it is active.
  • Brush AccentColor: Defines the accent color to be used on various UI elements.
  • Brush AccentColorDark: Defines the darker accent color to be used on various UI elements (used for hover state for example).
  • Brush AccentColorDarker: Defines the even darker accent color to be used on various UI elements (used for pressed state for example).
  • Brush IconsAccentColor: Defines the color to be used in Coho.UI bundled isons.
  • Brush AccentButtonBorderColor: Defines the brush to be used for border on buttons that use the PrimaryButton style.

Example:

<Color x:Key="ChromeBorderActiveColor">#038387</Color>
+<LinearGradientBrush x:Key="AccentButtonBorderColor" StartPoint="0,0.9" EndPoint="0,1">
+   <GradientStop Color="#038387" Offset="0" />
+   <GradientStop Color="#026163" Offset="1" />
+</LinearGradientBrush>
+
+<SolidColorBrush x:Key="AccentColor" Color="#038387" />
+<SolidColorBrush x:Key="TitleBarAccentedColor" Color="#038387" />
+<SolidColorBrush x:Key="IconsAccentColor" Color="#038387" />
+<SolidColorBrush x:Key="AccentColorDark" Color="#026163" />
+<SolidColorBrush x:Key="AccentColorDarker" Color="#024D4F" />
+

Configure the UIController (NEW in V2)

public MainWindow()
+{
+    InitializeComponent();
+
+    // Example: Register a custom resource file to be used only in Dark mode
+    // For example, your own implementation of Dark Theme
+    UIController.RegisterThemedMergedResourceName("/DarkTheme.xaml", ThemeScheme.Dark);
+    
+    // Example: Register a custom resource file to be used only in Light mode
+    // For example, your own implementation of Light Theme
+    UIController.RegisterThemedMergedResourceName("/LightTheme.xaml", ThemeScheme.Light);
+    
+    // Example: Register a custom resource file to be loaded in ANY mode (null in argument 2)
+    // The resource will be reloaded when the user switches the theme to ensure dynamic resources are correct
+    UIController.RegisterThemedMergedResourceName("/Styles/Icons.xaml", null);
+
+    // This line is important, we want the app to start with Ligth theme
+    UIController.Init(ThemeScheme.Light);
+}
+
+ + + diff --git a/docs/howto/omnibar-search-provider.html b/docs/howto/omnibar-search-provider.html new file mode 100644 index 0000000..37cb53b --- /dev/null +++ b/docs/howto/omnibar-search-provider.html @@ -0,0 +1,81 @@ + + + + + + + + + Build custom search provider for the Omnibar | Coho.UI, WPF Library documentation + + + + +

Build custom search provider for the Omnibar

The ApplicationWindow provides an Omnibar search bar in the window chrome title bar. By default it will search through the ribbon commands to provide the user a quick and easy access.
You can extend this feature by adding you own search provider. For example, you may want to help your users to find files in a project, or any other item that your application manages.
This article will help you create and register a new search provider for the built-in omnibar search.

The service class

Your custom search provider must inherit from OmnibarSearchServiceBase.
This is a typical content of a custom search provider:

public class CustomOmnibarSearchService : OmnibarSearchServiceBase
+{
+    // The text that will be displayed in the drop down popup
+    public override string DisplayName
+    {
+        get
+        {
+            return "Search in files...";
+        }
+    }
+
+    // The icon that will be shown next to the text above
+    public override Brush Icon
+    {
+        get
+        {
+            return Brushes.Transparent;
+        }
+    }
+
+    // The results to show after the user has launched your search provider
+    public override IEnumerable<OmnibarSearchResult> ExecuteSearch(string terms)
+    {
+        // Perform your search operation using the argument "terms" that contains the text typed by the user.
+        // Then return the list of results.
+    }
+}
+

Once registered, this search provider will look like this:
image

Register your service provider

To make the application know your custom search provider, you have to register it using the OmnibarSearchService.RegisterOmnibarSearchService() method in the Window_Loaded event.

private void MainWindow_Loaded(object sender, RoutedEventArgs e)
+{
+    ...
+    // Register your custom service in the Window_Loaded event
+    OmnibarSearchService.RegisterOmnibarSearchService(new CustomOmnibarSearchService());
+}
+

Handle the search result click

After the search, when the user clicks a result in the drop down list, the event OmnibarSearchService.SearchResultClicked is raised. You can listen to it to perform the corresponding action.

private void MainWindow_Loaded(object sender, RoutedEventArgs e)
+{
+    ...
+    OmnibarSearchService.RegisterOmnibarSearchService(new CustomOmnibarSearchService());
+    
+    // Add this line to handle the click event on a search result.
+    OmnibarSearchService.SearchResultClicked += OmnibarSearchServiceOnSearchResultClicked;
+}
+
+private void OmnibarSearchServiceOnSearchResultClicked(object? sender, OmnibarSearchResult e)
+{
+    // Do something with the result that the user has selected.
+    MessageBox.Show("You clicked " + e.CommandTabName);
+}
+
+
+ + + diff --git a/docs/index.html b/docs/index.html index 53a90bf..63836dc 100644 --- a/docs/index.html +++ b/docs/index.html @@ -1 +1,33 @@ -Empty + + + + + + + + + Coho.UI Documentation | Coho.UI, WPF Library documentation + + + + +

Coho.UI Documentation

https://www.nuget.org/packages/Coho.UI/open in new window

Introduction to V2

The V2 contains a lot of new things, but also breaking changes. Please read this page before you update your projects.

Breaking changes

  • The Icon property of MenuItem is now supposed to be a Brush object.
+ + + diff --git a/docs/windows/ApplicationWindow.html b/docs/windows/ApplicationWindow.html new file mode 100644 index 0000000..2ec4ecb --- /dev/null +++ b/docs/windows/ApplicationWindow.html @@ -0,0 +1,33 @@ + + + + + + + + + ApplicationWindow | Coho.UI, WPF Library documentation + + + + + + + + diff --git a/docs/windows/SecondaryWindow.html b/docs/windows/SecondaryWindow.html new file mode 100644 index 0000000..05402ab --- /dev/null +++ b/docs/windows/SecondaryWindow.html @@ -0,0 +1,33 @@ + + + + + + + + + SecondaryWindow | Coho.UI, WPF Library documentation + + + + + + + + diff --git a/docs/windows/TabbedApplicationWindow.html b/docs/windows/TabbedApplicationWindow.html new file mode 100644 index 0000000..70c3e3a --- /dev/null +++ b/docs/windows/TabbedApplicationWindow.html @@ -0,0 +1,33 @@ + + + + + + + + + TabbedApplicationWindow | Coho.UI, WPF Library documentation + + + + + + + +