Merge branch '13-publishing-combined-app' into 'main'

Resolve "Publishing combined app"

Closes #13, #24, #27, and #28

See merge request products/mindwork-ai-studio!1
This commit is contained in:
Thorsten 2024-05-18 19:54:54 +00:00
commit e28c2e2c10
322 changed files with 1538 additions and 11275 deletions

View File

@ -1,152 +0,0 @@
using Microsoft.AspNetCore.Components.Web;
namespace MudBlazor;
public partial class MudCodeHighlight : MudComponentBase, IDisposable
{
private ElementReference _ref;
private CodeBlockTheme _theme;
private IMudMarkdownThemeService? _themeService;
private bool _isFirstThemeSet;
/// <summary>
/// Code text to render
/// </summary>
[Parameter]
public string Text { get; set; } = string.Empty;
/// <summary>
/// Language of the <see cref="Text"/>
/// </summary>
[Parameter]
public string Language { get; set; } = string.Empty;
/// <summary>
/// Theme of the code block.<br/>
/// Browse available themes here: https://highlightjs.org/static/demo/ <br/>
/// Default is <see cref="CodeBlockTheme.Default"/>
/// </summary>
#if NET7_0
#pragma warning disable BL0007
#endif
[Parameter]
public CodeBlockTheme Theme
{
get => _theme;
set
{
if (_theme == value)
return;
_theme = value;
Task.Run(SetThemeAsync);
}
}
#if NET7_0
#pragma warning restore BL0007
#endif
[Inject]
private IJSRuntime Js { get; init; } = default!;
[Inject]
private IServiceProvider? ServiceProvider { get; init; }
public void Dispose()
{
if (_themeService != null)
_themeService.CodeBlockThemeChanged -= OnCodeBlockThemeChanged;
GC.SuppressFinalize(this);
}
protected override bool ShouldRender() =>
!string.IsNullOrEmpty(Text);
protected override void BuildRenderTree(RenderTreeBuilder builder)
{
var i = 0;
builder.OpenElement(i++, "div");
builder.AddAttribute(i++, "class", "snippet-clipboard-content overflow-auto");
// Copy button
builder.OpenComponent<MudIconButton>(i++);
builder.AddAttribute(i++, nameof(MudIconButton.Icon), Icons.Material.Rounded.ContentCopy);
builder.AddAttribute(i++, nameof(MudIconButton.Variant), Variant.Filled);
builder.AddAttribute(i++, nameof(MudIconButton.Color), Color.Primary);
builder.AddAttribute(i++, nameof(MudIconButton.Size), Size.Medium);
builder.AddAttribute(i++, nameof(MudIconButton.Class), "snippet-clipboard-copy-icon m-2");
builder.AddAttribute(i++, nameof(MudIconButton.OnClick), EventCallback.Factory.Create<MouseEventArgs>(this, CopyTextToClipboardAsync));
builder.CloseComponent();
// Code block
builder.OpenElement(i++, "pre");
builder.OpenElement(i++, "code");
if (!string.IsNullOrEmpty(Language))
builder.AddAttribute(i++, "class", $"language-{Language}");
builder.AddElementReferenceCapture(i++, x => _ref = x);
builder.AddContent(i++, Text);
builder.CloseElement();
builder.CloseElement();
builder.CloseElement();
}
protected override void OnInitialized()
{
base.OnInitialized();
_themeService = ServiceProvider?.GetService<IMudMarkdownThemeService>();
if (_themeService != null)
_themeService.CodeBlockThemeChanged += OnCodeBlockThemeChanged;
}
protected override async Task OnAfterRenderAsync(bool firstRender)
{
if (!firstRender)
return;
await Js.InvokeVoidAsync("highlightCodeElement", _ref)
.ConfigureAwait(false);
if (!_isFirstThemeSet)
{
await SetThemeAsync()
.ConfigureAwait(false);
}
}
private void OnCodeBlockThemeChanged(object? sender, CodeBlockTheme e) =>
Theme = e;
private async Task SetThemeAsync()
{
var stylesheetPath = Theme.GetStylesheetPath();
await Js.InvokeVoidAsync("setHighlightStylesheet", stylesheetPath)
.ConfigureAwait(false);
_isFirstThemeSet = true;
}
private async Task CopyTextToClipboardAsync(MouseEventArgs args)
{
var ok = await Js.InvokeAsync<bool>("copyTextToClipboard", Text)
.ConfigureAwait(false);
if (ok)
return;
var clipboardService = ServiceProvider?.GetService<IMudMarkdownClipboardService>();
if (clipboardService != null)
{
await clipboardService.CopyToClipboardAsync(Text)
.ConfigureAwait(false);
}
}
}

View File

@ -1,76 +0,0 @@
namespace MudBlazor;
internal sealed class MudLinkButton : MudComponentBase
{
private string Classname =>
new CssBuilder("mud-typography mud-link")
.AddClass($"mud-{Color.ToDescriptionString()}-text")
.AddClass($"mud-link-underline-{Underline.ToDescriptionString()}")
.AddClass($"mud-typography-{Typo.ToDescriptionString()}")
.AddClass("mud-link-disabled", IsDisabled)
.AddClass(Class)
.Build();
/// <summary>
/// The color of the component. It supports the theme colors.
/// </summary>
[Parameter]
public Color Color { get; set; } = Color.Primary;
/// <summary>
/// Typography variant to use.
/// </summary>
[Parameter]
public Typo Typo { get; set; } = Typo.body1;
/// <summary>
/// Controls when the link should have an underline.
/// </summary>
[Parameter]
public Underline Underline { get; set; } = Underline.Hover;
/// <summary>
/// If true, the navlink will be disabled.
/// </summary>
[Parameter]
public bool IsDisabled { get; set; }
/// <summary>
/// Child content of component.
/// </summary>
[Parameter]
public RenderFragment? ChildContent { get; set; }
/// <summary>
/// Command executed on click
/// </summary>
[Parameter]
public ICommand? Command { get; set; }
/// <summary>
/// Parameter passed to the command
/// </summary>
[Parameter]
public object? CommandParameter { get; set; }
protected override void BuildRenderTree(RenderTreeBuilder builder)
{
var i = 0;
builder.OpenElement(i++, "span");
builder.AddAttribute(i++, "class", Classname);
builder.AddAttribute(i++, "style", Style);
builder.AddAttribute(i++, "onclick", EventCallback.Factory.Create(this, OnClick));
builder.AddContent(i++, ChildContent);
builder.CloseElement();
}
private void OnClick()
{
if (IsDisabled)
return;
if (Command?.CanExecute(CommandParameter) ?? false)
Command.Execute(CommandParameter);
}
}

View File

@ -1,77 +0,0 @@
namespace MudBlazor;
/// <summary>
/// For some reason MudExpansionPanels eternally tried to dispose all panels, therefore, RenderFragment was called infinitely<br/>
/// Created this component in order to bypass that weird behaviour
/// </summary>
internal sealed class MudMarkdownDetails : ComponentBase
{
private int _elementIndex;
[Parameter]
public RenderFragment? TitleContent { get; set; }
[Parameter]
public RenderFragment? ChildContent { get; set; }
private bool IsExpanded { get; set; }
private string IconClasses => new CssBuilder("mud-expand-panel-icon")
.AddClass("mud-transform", IsExpanded)
.Build();
protected override void BuildRenderTree(RenderTreeBuilder builder)
{
_elementIndex = 0;
builder.OpenElement(_elementIndex++, "div");
builder.AddAttribute(_elementIndex++, "class", "mud-expand-panel mud-elevation-1 mud-expand-panel-border");
BuildTitle(builder);
BuildContent(builder);
builder.CloseElement();
}
private void BuildTitle(RenderTreeBuilder builder)
{
builder.OpenElement(_elementIndex++, "div");
builder.AddAttribute(_elementIndex++, "class", "mud-expand-panel-header mud-ripple");
builder.AddAttribute(_elementIndex++, "onclick", EventCallback.Factory.Create(this, OnHeaderClick));
// Text
builder.OpenElement(_elementIndex++, "div");
builder.AddAttribute(_elementIndex++, "class", "mud-expand-panel-text");
builder.AddContent(_elementIndex++, TitleContent);
builder.CloseElement();
// Collapse icon
builder.OpenComponent<MudIcon>(_elementIndex++);
builder.AddAttribute(_elementIndex++, nameof(MudIcon.Icon), Icons.Material.Filled.ExpandMore);
builder.AddAttribute(_elementIndex++, "class", IconClasses);
builder.CloseComponent();
builder.CloseElement();
}
private void BuildContent(RenderTreeBuilder builder)
{
builder.OpenComponent<MudCollapse>(_elementIndex++);
builder.AddAttribute(_elementIndex++, nameof(MudCollapse.Expanded), IsExpanded);
builder.AddAttribute(_elementIndex++, nameof(MudCollapse.ChildContent), (RenderFragment)(contentBuilder =>
{
contentBuilder.OpenElement(_elementIndex++, "div");
contentBuilder.AddAttribute(_elementIndex++, "class", "mud-expand-panel-content");
contentBuilder.AddContent(_elementIndex++, ChildContent);
contentBuilder.CloseElement();
}));
builder.CloseComponent();
}
private void OnHeaderClick()
{
IsExpanded = !IsExpanded;
}
}

View File

@ -1,64 +0,0 @@
namespace MudBlazor;
internal sealed class MudMathJax : ComponentBase
{
private const string ScriptId = "mudblazor-markdown-mathjax";
[Parameter]
public string Delimiter { get; set; } = string.Empty;
[Parameter]
public StringSlice Value { get; set; }
[Inject]
private IJSRuntime Js { get; init; } = default!;
protected override void BuildRenderTree(RenderTreeBuilder builder)
{
var elementIndex = 0;
var delimiter = GetDelimiter(Delimiter);
builder.AddContent(elementIndex++, delimiter.Start);
builder.AddContent(elementIndex++, Value);
builder.AddContent(elementIndex, delimiter.End);
}
protected override async Task OnAfterRenderAsync(bool firstRender)
{
if (firstRender)
{
await Js.InvokeVoidAsync("appendMathJaxScript", ScriptId)
.ConfigureAwait(false);
}
await Js.InvokeVoidAsync("refreshMathJaxScript")
.ConfigureAwait(false);
}
private static MathDelimiter GetDelimiter(in string delimiter) =>
delimiter switch
{
"$" => new MathDelimiter("\\(", "\\)"),
"$$" => new MathDelimiter(delimiter),
_ => new MathDelimiter(delimiter)
};
private readonly ref struct MathDelimiter
{
public MathDelimiter(string delimiter)
{
Start = End = delimiter;
}
public MathDelimiter(string start, string end)
{
Start = start;
End = end;
}
public string Start { get; }
public string End { get; }
}
}

View File

@ -1,247 +0,0 @@
namespace MudBlazor;
public enum CodeBlockTheme : ushort
{
Default = 0,
A11yDark,
A11yLight,
Agate,
AnOldHope,
Androidstudio,
ArduinoLight,
Arta,
Ascetic,
AtomOneDarkReasonable,
AtomOneDark,
AtomOneLight,
BrownPaper,
CodepenEmbed,
ColorBrewer,
Dark,
Devibeans,
Docco,
Far,
Foundation,
GithubDarkDimmed,
GithubDark,
Github,
Gml,
Googlecode,
GradientDark,
GradientLight,
Grayscale,
Hybrid,
Idea,
IrBlack,
IsblEditorDark,
IsblEditorLight,
KimbieDark,
KimbieLight,
Lightfair,
Lioshi,
Magula,
MonoBlue,
MonokaiSublime,
Monokai,
NightOwl,
NnfxDark,
NnfxLight,
Nord,
Obsidian,
ParaisoDark,
ParaisoLight,
Pojoaque,
Purebasic,
QtcreatorDark,
QtcreatorLight,
Rainbow,
Routeros,
SchoolBook,
ShadesOfPurple,
Srcery,
StackoverflowDark,
StackoverflowLight,
Sunburst,
TomorrowNightBlue,
TomorrowNightBright,
Vs,
Vs2015,
Xcode,
Xt256,
ApathyBase16,
ApprenticeBase16,
AshesBase16,
AtelierCaveLightBase16,
AtelierCaveBase16,
AtelierDuneLightBase16,
AtelierDuneBase16,
AtelierEstuaryLightBase16,
AtelierEstuaryBase16,
AtelierForestLightBase16,
AtelierForestBase16,
AtelierHeathLightBase16,
AtelierHeathBase16,
AtelierLakesideLightBase16,
AtelierLakesideBase16,
AtelierPlateauLightBase16,
AtelierPlateauBase16,
AtelierSavannaLightBase16,
AtelierSavannaBase16,
AtelierSeasideLightBase16,
AtelierSeasideBase16,
AtelierSulphurpoolLightBase16,
AtelierSulphurpoolBase16,
AtlasBase16,
BespinBase16,
BlackMetalBathoryBase16,
BlackMetalBurzumBase16,
BlackMetalDarkFuneralBase16,
BlackMetalGorgorothBase16,
BlackMetalImmortalBase16,
BlackMetalKholdBase16,
BlackMetalMardukBase16,
BlackMetalMayhemBase16,
BlackMetalNileBase16,
BlackMetalVenomBase16,
BlackMetalBase16,
BrewerBase16,
BrightBase16,
BrogrammerBase16,
BrushTreesDarkBase16,
BrushTreesBase16,
ChalkBase16,
CircusBase16,
ClassicDarkBase16,
ClassicLightBase16,
CodeschoolBase16,
ColorsBase16,
CupcakeBase16,
CupertinoBase16,
DanqingBase16,
DarculaBase16,
DarkVioletBase16,
DarkmossBase16,
DarktoothBase16,
DecafBase16,
DefaultDarkBase16,
DefaultLightBase16,
DirtyseaBase16,
DraculaBase16,
EdgeDarkBase16,
EdgeLightBase16,
EightiesBase16,
EmbersBase16,
EquilibriumDarkBase16,
EquilibriumGrayDarkBase16,
EquilibriumGrayLightBase16,
EquilibriumLightBase16,
EspressoBase16,
EvaDimBase16,
EvaBase16,
FlatBase16,
FramerBase16,
FruitSodaBase16,
GigavoltBase16,
GithubBase16,
GoogleDarkBase16,
GoogleLightBase16,
GrayscaleDarkBase16,
GrayscaleLightBase16,
GreenScreenBase16,
GruvboxDarkHardBase16,
GruvboxDarkMediumBase16,
GruvboxDarkPaleBase16,
GruvboxDarkSoftBase16,
GruvboxLightHardBase16,
GruvboxLightMediumBase16,
GruvboxLightSoftBase16,
HardcoreBase16,
Harmonic16DarkBase16,
Harmonic16LightBase16,
HeetchDarkBase16,
HeetchLightBase16,
HeliosBase16,
HopscotchBase16,
HorizonDarkBase16,
HorizonLightBase16,
HumanoidDarkBase16,
HumanoidLightBase16,
IaDarkBase16,
IaLightBase16,
IcyDarkBase16,
IrBlackBase16,
IsotopeBase16,
KimberBase16,
LondonTubeBase16,
MacintoshBase16,
MarrakeshBase16,
MateriaBase16,
MaterialDarkerBase16,
MaterialLighterBase16,
MaterialPalenightBase16,
MaterialVividBase16,
MaterialBase16,
MellowPurpleBase16,
MexicoLightBase16,
MochaBase16,
MonokaiBase16,
NebulaBase16,
NordBase16,
NovaBase16,
OceanBase16,
OceanicnextBase16,
OneLightBase16,
OnedarkBase16,
OutrunDarkBase16,
PapercolorDarkBase16,
PapercolorLightBase16,
ParaisoBase16,
PasqueBase16,
PhdBase16,
PicoBase16,
PopBase16,
PorpleBase16,
QualiaBase16,
RailscastsBase16,
RebeccaBase16,
RosPineDawnBase16,
RosPineMoonBase16,
RosPineBase16,
SagelightBase16,
SandcastleBase16,
SetiUiBase16,
ShapeshifterBase16,
SilkDarkBase16,
SilkLightBase16,
SnazzyBase16,
SolarFlareLightBase16,
SolarFlareBase16,
SolarizedDarkBase16,
SolarizedLightBase16,
SpacemacsBase16,
SummercampBase16,
SummerfruitDarkBase16,
SummerfruitLightBase16,
SynthMidnightTerminalDarkBase16,
SynthMidnightTerminalLightBase16,
T3024Base16,
TangoBase16,
TenderBase16,
TomorrowNightBase16,
TomorrowBase16,
TwilightBase16,
UnikittyDarkBase16,
UnikittyLightBase16,
VulcanBase16,
Windows10LightBase16,
Windows10Base16,
Windows95LightBase16,
Windows95Base16,
WindowsHighContrastLightBase16,
WindowsHighContrastBase16,
WindowsNtLightBase16,
WindowsNtBase16,
WoodlandBase16,
XcodeDuskBase16,
ZenburnBase16
}

View File

@ -1,252 +0,0 @@
namespace MudBlazor;
internal static class CodeBlockThemeEx
{
public static string GetStylesheetPath(this CodeBlockTheme @this) =>
@this switch
{
CodeBlockTheme.A11yDark => "a11y-dark.min.css",
CodeBlockTheme.A11yLight => "a11y-light.min.css",
CodeBlockTheme.Agate => "agate.min.css",
CodeBlockTheme.AnOldHope => "an-old-hope.min.css",
CodeBlockTheme.Androidstudio => "androidstudio.min.css",
CodeBlockTheme.ArduinoLight => "arduino-light.min.css",
CodeBlockTheme.Arta => "arta.min.css",
CodeBlockTheme.Ascetic => "ascetic.min.css",
CodeBlockTheme.AtomOneDarkReasonable => "atom-one-dark-reasonable.min.css",
CodeBlockTheme.AtomOneDark => "atom-one-dark.min.css",
CodeBlockTheme.AtomOneLight => "atom-one-light.min.css",
CodeBlockTheme.BrownPaper => "brown-paper.min.css",
CodeBlockTheme.CodepenEmbed => "codepen-embed.min.css",
CodeBlockTheme.ColorBrewer => "color-brewer.min.css",
CodeBlockTheme.Dark => "dark.min.css",
CodeBlockTheme.Default => "default.min.css",
CodeBlockTheme.Devibeans => "devibeans.min.css",
CodeBlockTheme.Docco => "docco.min.css",
CodeBlockTheme.Far => "far.min.css",
CodeBlockTheme.Foundation => "foundation.min.css",
CodeBlockTheme.GithubDarkDimmed => "github-dark-dimmed.min.css",
CodeBlockTheme.GithubDark => "github-dark.min.css",
CodeBlockTheme.Github => "github.min.css",
CodeBlockTheme.Gml => "gml.min.css",
CodeBlockTheme.Googlecode => "googlecode.min.css",
CodeBlockTheme.GradientDark => "gradient-dark.min.css",
CodeBlockTheme.GradientLight => "gradient-light.min.css",
CodeBlockTheme.Grayscale => "grayscale.min.css",
CodeBlockTheme.Hybrid => "hybrid.min.css",
CodeBlockTheme.Idea => "idea.min.css",
CodeBlockTheme.IrBlack => "ir-black.min.css",
CodeBlockTheme.IsblEditorDark => "isbl-editor-dark.min.css",
CodeBlockTheme.IsblEditorLight => "isbl-editor-light.min.css",
CodeBlockTheme.KimbieDark => "kimbie-dark.min.css",
CodeBlockTheme.KimbieLight => "kimbie-light.min.css",
CodeBlockTheme.Lightfair => "lightfair.min.css",
CodeBlockTheme.Lioshi => "lioshi.min.css",
CodeBlockTheme.Magula => "magula.min.css",
CodeBlockTheme.MonoBlue => "mono-blue.min.css",
CodeBlockTheme.MonokaiSublime => "monokai-sublime.min.css",
CodeBlockTheme.Monokai => "monokai.min.css",
CodeBlockTheme.NightOwl => "night-owl.min.css",
CodeBlockTheme.NnfxDark => "nnfx-dark.min.css",
CodeBlockTheme.NnfxLight => "nnfx-light.min.css",
CodeBlockTheme.Nord => "nord.min.css",
CodeBlockTheme.Obsidian => "obsidian.min.css",
CodeBlockTheme.ParaisoDark => "paraiso-dark.min.css",
CodeBlockTheme.ParaisoLight => "paraiso-light.min.css",
CodeBlockTheme.Pojoaque => "pojoaque.min.css",
CodeBlockTheme.Purebasic => "purebasic.min.css",
CodeBlockTheme.QtcreatorDark => "qtcreator-dark.min.css",
CodeBlockTheme.QtcreatorLight => "qtcreator-light.min.css",
CodeBlockTheme.Rainbow => "rainbow.min.css",
CodeBlockTheme.Routeros => "routeros.min.css",
CodeBlockTheme.SchoolBook => "school-book.min.css",
CodeBlockTheme.ShadesOfPurple => "shades-of-purple.min.css",
CodeBlockTheme.Srcery => "srcery.min.css",
CodeBlockTheme.StackoverflowDark => "stackoverflow-dark.min.css",
CodeBlockTheme.StackoverflowLight => "stackoverflow-light.min.css",
CodeBlockTheme.Sunburst => "sunburst.min.css",
CodeBlockTheme.TomorrowNightBlue => "tomorrow-night-blue.min.css",
CodeBlockTheme.TomorrowNightBright => "tomorrow-night-bright.min.css",
CodeBlockTheme.Vs => "vs.min.css",
CodeBlockTheme.Vs2015 => "vs2015.min.css",
CodeBlockTheme.Xcode => "xcode.min.css",
CodeBlockTheme.Xt256 => "xt256.min.css",
CodeBlockTheme.ApathyBase16 => "base16/apathy.min.css",
CodeBlockTheme.ApprenticeBase16 => "base16/apprentice.min.css",
CodeBlockTheme.AshesBase16 => "base16/ashes.min.css",
CodeBlockTheme.AtelierCaveLightBase16 => "base16/atelier-cave-light.min.css",
CodeBlockTheme.AtelierCaveBase16 => "base16/atelier-cave.min.css",
CodeBlockTheme.AtelierDuneLightBase16 => "base16/atelier-dune-light.min.css",
CodeBlockTheme.AtelierDuneBase16 => "base16/atelier-dune.min.css",
CodeBlockTheme.AtelierEstuaryLightBase16 => "base16/atelier-estuary-light.min.css",
CodeBlockTheme.AtelierEstuaryBase16 => "base16/atelier-estuary.min.css",
CodeBlockTheme.AtelierForestLightBase16 => "base16/atelier-forest-light.min.css",
CodeBlockTheme.AtelierForestBase16 => "base16/atelier-forest.min.css",
CodeBlockTheme.AtelierHeathLightBase16 => "base16/atelier-heath-light.min.css",
CodeBlockTheme.AtelierHeathBase16 => "base16/atelier-heath.min.css",
CodeBlockTheme.AtelierLakesideLightBase16 => "base16/atelier-lakeside-light.min.css",
CodeBlockTheme.AtelierLakesideBase16 => "base16/atelier-lakeside.min.css",
CodeBlockTheme.AtelierPlateauLightBase16 => "base16/atelier-plateau-light.min.css",
CodeBlockTheme.AtelierPlateauBase16 => "base16/atelier-plateau.min.css",
CodeBlockTheme.AtelierSavannaLightBase16 => "base16/atelier-savanna-light.min.css",
CodeBlockTheme.AtelierSavannaBase16 => "base16/atelier-savanna.min.css",
CodeBlockTheme.AtelierSeasideLightBase16 => "base16/atelier-seaside-light.min.css",
CodeBlockTheme.AtelierSeasideBase16 => "base16/atelier-seaside.min.css",
CodeBlockTheme.AtelierSulphurpoolLightBase16 => "base16/atelier-sulphurpool-light.min.css",
CodeBlockTheme.AtelierSulphurpoolBase16 => "base16/atelier-sulphurpool.min.css",
CodeBlockTheme.AtlasBase16 => "base16/atlas.min.css",
CodeBlockTheme.BespinBase16 => "base16/bespin.min.css",
CodeBlockTheme.BlackMetalBathoryBase16 => "base16/black-metal-bathory.min.css",
CodeBlockTheme.BlackMetalBurzumBase16 => "base16/black-metal-burzum.min.css",
CodeBlockTheme.BlackMetalDarkFuneralBase16 => "base16/black-metal-dark-funeral.min.css",
CodeBlockTheme.BlackMetalGorgorothBase16 => "base16/black-metal-gorgoroth.min.css",
CodeBlockTheme.BlackMetalImmortalBase16 => "base16/black-metal-immortal.min.css",
CodeBlockTheme.BlackMetalKholdBase16 => "base16/black-metal-khold.min.css",
CodeBlockTheme.BlackMetalMardukBase16 => "base16/black-metal-marduk.min.css",
CodeBlockTheme.BlackMetalMayhemBase16 => "base16/black-metal-mayhem.min.css",
CodeBlockTheme.BlackMetalNileBase16 => "base16/black-metal-nile.min.css",
CodeBlockTheme.BlackMetalVenomBase16 => "base16/black-metal-venom.min.css",
CodeBlockTheme.BlackMetalBase16 => "base16/black-metal.min.css",
CodeBlockTheme.BrewerBase16 => "base16/brewer.min.css",
CodeBlockTheme.BrightBase16 => "base16/bright.min.css",
CodeBlockTheme.BrogrammerBase16 => "base16/brogrammer.min.css",
CodeBlockTheme.BrushTreesDarkBase16 => "base16/brush-trees-dark.min.css",
CodeBlockTheme.BrushTreesBase16 => "base16/brush-trees.min.css",
CodeBlockTheme.ChalkBase16 => "base16/chalk.min.css",
CodeBlockTheme.CircusBase16 => "base16/circus.min.css",
CodeBlockTheme.ClassicDarkBase16 => "base16/classic-dark.min.css",
CodeBlockTheme.ClassicLightBase16 => "base16/classic-light.min.css",
CodeBlockTheme.CodeschoolBase16 => "base16/codeschool.min.css",
CodeBlockTheme.ColorsBase16 => "base16/colors.min.css",
CodeBlockTheme.CupcakeBase16 => "base16/cupcake.min.css",
CodeBlockTheme.CupertinoBase16 => "base16/cupertino.min.css",
CodeBlockTheme.DanqingBase16 => "base16/danqing.min.css",
CodeBlockTheme.DarculaBase16 => "base16/darcula.min.css",
CodeBlockTheme.DarkVioletBase16 => "base16/dark-violet.min.css",
CodeBlockTheme.DarkmossBase16 => "base16/darkmoss.min.css",
CodeBlockTheme.DarktoothBase16 => "base16/darktooth.min.css",
CodeBlockTheme.DecafBase16 => "base16/decaf.min.css",
CodeBlockTheme.DefaultDarkBase16 => "base16/default-dark.min.css",
CodeBlockTheme.DefaultLightBase16 => "base16/default-light.min.css",
CodeBlockTheme.DirtyseaBase16 => "base16/dirtysea.min.css",
CodeBlockTheme.DraculaBase16 => "base16/dracula.min.css",
CodeBlockTheme.EdgeDarkBase16 => "base16/edge-dark.min.css",
CodeBlockTheme.EdgeLightBase16 => "base16/edge-light.min.css",
CodeBlockTheme.EightiesBase16 => "base16/eighties.min.css",
CodeBlockTheme.EmbersBase16 => "base16/embers.min.css",
CodeBlockTheme.EquilibriumDarkBase16 => "base16/equilibrium-dark.min.css",
CodeBlockTheme.EquilibriumGrayDarkBase16 => "base16/equilibrium-gray-dark.min.css",
CodeBlockTheme.EquilibriumGrayLightBase16 => "base16/equilibrium-gray-light.min.css",
CodeBlockTheme.EquilibriumLightBase16 => "base16/equilibrium-light.min.css",
CodeBlockTheme.EspressoBase16 => "base16/espresso.min.css",
CodeBlockTheme.EvaDimBase16 => "base16/eva-dim.min.css",
CodeBlockTheme.EvaBase16 => "base16/eva.min.css",
CodeBlockTheme.FlatBase16 => "base16/flat.min.css",
CodeBlockTheme.FramerBase16 => "base16/framer.min.css",
CodeBlockTheme.FruitSodaBase16 => "base16/fruit-soda.min.css",
CodeBlockTheme.GigavoltBase16 => "base16/gigavolt.min.css",
CodeBlockTheme.GithubBase16 => "base16/github.min.css",
CodeBlockTheme.GoogleDarkBase16 => "base16/google-dark.min.css",
CodeBlockTheme.GoogleLightBase16 => "base16/google-light.min.css",
CodeBlockTheme.GrayscaleDarkBase16 => "base16/grayscale-dark.min.css",
CodeBlockTheme.GrayscaleLightBase16 => "base16/grayscale-light.min.css",
CodeBlockTheme.GreenScreenBase16 => "base16/green-screen.min.css",
CodeBlockTheme.GruvboxDarkHardBase16 => "base16/gruvbox-dark-hard.min.css",
CodeBlockTheme.GruvboxDarkMediumBase16 => "base16/gruvbox-dark-medium.min.css",
CodeBlockTheme.GruvboxDarkPaleBase16 => "base16/gruvbox-dark-pale.min.css",
CodeBlockTheme.GruvboxDarkSoftBase16 => "base16/gruvbox-dark-soft.min.css",
CodeBlockTheme.GruvboxLightHardBase16 => "base16/gruvbox-light-hard.min.css",
CodeBlockTheme.GruvboxLightMediumBase16 => "base16/gruvbox-light-medium.min.css",
CodeBlockTheme.GruvboxLightSoftBase16 => "base16/gruvbox-light-soft.min.css",
CodeBlockTheme.HardcoreBase16 => "base16/hardcore.min.css",
CodeBlockTheme.Harmonic16DarkBase16 => "base16/harmonic16-dark.min.css",
CodeBlockTheme.Harmonic16LightBase16 => "base16/harmonic16-light.min.css",
CodeBlockTheme.HeetchDarkBase16 => "base16/heetch-dark.min.css",
CodeBlockTheme.HeetchLightBase16 => "base16/heetch-light.min.css",
CodeBlockTheme.HeliosBase16 => "base16/helios.min.css",
CodeBlockTheme.HopscotchBase16 => "base16/hopscotch.min.css",
CodeBlockTheme.HorizonDarkBase16 => "base16/horizon-dark.min.css",
CodeBlockTheme.HorizonLightBase16 => "base16/horizon-light.min.css",
CodeBlockTheme.HumanoidDarkBase16 => "base16/humanoid-dark.min.css",
CodeBlockTheme.HumanoidLightBase16 => "base16/humanoid-light.min.css",
CodeBlockTheme.IaDarkBase16 => "base16/ia-dark.min.css",
CodeBlockTheme.IaLightBase16 => "base16/ia-light.min.css",
CodeBlockTheme.IcyDarkBase16 => "base16/icy-dark.min.css",
CodeBlockTheme.IrBlackBase16 => "base16/ir-black.min.css",
CodeBlockTheme.IsotopeBase16 => "base16/isotope.min.css",
CodeBlockTheme.KimberBase16 => "base16/kimber.min.css",
CodeBlockTheme.LondonTubeBase16 => "base16/london-tube.min.css",
CodeBlockTheme.MacintoshBase16 => "base16/macintosh.min.css",
CodeBlockTheme.MarrakeshBase16 => "base16/marrakesh.min.css",
CodeBlockTheme.MateriaBase16 => "base16/materia.min.css",
CodeBlockTheme.MaterialDarkerBase16 => "base16/material-darker.min.css",
CodeBlockTheme.MaterialLighterBase16 => "base16/material-lighter.min.css",
CodeBlockTheme.MaterialPalenightBase16 => "base16/material-palenight.min.css",
CodeBlockTheme.MaterialVividBase16 => "base16/material-vivid.min.css",
CodeBlockTheme.MaterialBase16 => "base16/material.min.css",
CodeBlockTheme.MellowPurpleBase16 => "base16/mellow-purple.min.css",
CodeBlockTheme.MexicoLightBase16 => "base16/mexico-light.min.css",
CodeBlockTheme.MochaBase16 => "base16/mocha.min.css",
CodeBlockTheme.MonokaiBase16 => "base16/monokai.min.css",
CodeBlockTheme.NebulaBase16 => "base16/nebula.min.css",
CodeBlockTheme.NordBase16 => "base16/nord.min.css",
CodeBlockTheme.NovaBase16 => "base16/nova.min.css",
CodeBlockTheme.OceanBase16 => "base16/ocean.min.css",
CodeBlockTheme.OceanicnextBase16 => "base16/oceanicnext.min.css",
CodeBlockTheme.OneLightBase16 => "base16/one-light.min.css",
CodeBlockTheme.OnedarkBase16 => "base16/onedark.min.css",
CodeBlockTheme.OutrunDarkBase16 => "base16/outrun-dark.min.css",
CodeBlockTheme.PapercolorDarkBase16 => "base16/papercolor-dark.min.css",
CodeBlockTheme.PapercolorLightBase16 => "base16/papercolor-light.min.css",
CodeBlockTheme.ParaisoBase16 => "base16/paraiso.min.css",
CodeBlockTheme.PasqueBase16 => "base16/pasque.min.css",
CodeBlockTheme.PhdBase16 => "base16/phd.min.css",
CodeBlockTheme.PicoBase16 => "base16/pico.min.css",
CodeBlockTheme.PopBase16 => "base16/pop.min.css",
CodeBlockTheme.PorpleBase16 => "base16/porple.min.css",
CodeBlockTheme.QualiaBase16 => "base16/qualia.min.css",
CodeBlockTheme.RailscastsBase16 => "base16/railscasts.min.css",
CodeBlockTheme.RebeccaBase16 => "base16/rebecca.min.css",
CodeBlockTheme.RosPineDawnBase16 => "base16/ros-pine-dawn.min.css",
CodeBlockTheme.RosPineMoonBase16 => "base16/ros-pine-moon.min.css",
CodeBlockTheme.RosPineBase16 => "base16/ros-pine.min.css",
CodeBlockTheme.SagelightBase16 => "base16/sagelight.min.css",
CodeBlockTheme.SandcastleBase16 => "base16/sandcastle.min.css",
CodeBlockTheme.SetiUiBase16 => "base16/seti-ui.min.css",
CodeBlockTheme.ShapeshifterBase16 => "base16/shapeshifter.min.css",
CodeBlockTheme.SilkDarkBase16 => "base16/silk-dark.min.css",
CodeBlockTheme.SilkLightBase16 => "base16/silk-light.min.css",
CodeBlockTheme.SnazzyBase16 => "base16/snazzy.min.css",
CodeBlockTheme.SolarFlareLightBase16 => "base16/solar-flare-light.min.css",
CodeBlockTheme.SolarFlareBase16 => "base16/solar-flare.min.css",
CodeBlockTheme.SolarizedDarkBase16 => "base16/solarized-dark.min.css",
CodeBlockTheme.SolarizedLightBase16 => "base16/solarized-light.min.css",
CodeBlockTheme.SpacemacsBase16 => "base16/spacemacs.min.css",
CodeBlockTheme.SummercampBase16 => "base16/summercamp.min.css",
CodeBlockTheme.SummerfruitDarkBase16 => "base16/summerfruit-dark.min.css",
CodeBlockTheme.SummerfruitLightBase16 => "base16/summerfruit-light.min.css",
CodeBlockTheme.SynthMidnightTerminalDarkBase16 => "base16/synth-midnight-terminal-dark.min.css",
CodeBlockTheme.SynthMidnightTerminalLightBase16 => "base16/synth-midnight-terminal-light.min.css",
CodeBlockTheme.T3024Base16 => "base16/t3024.min.css",
CodeBlockTheme.TangoBase16 => "base16/tango.min.css",
CodeBlockTheme.TenderBase16 => "base16/tender.min.css",
CodeBlockTheme.TomorrowNightBase16 => "base16/tomorrow-night.min.css",
CodeBlockTheme.TomorrowBase16 => "base16/tomorrow.min.css",
CodeBlockTheme.TwilightBase16 => "base16/twilight.min.css",
CodeBlockTheme.UnikittyDarkBase16 => "base16/unikitty-dark.min.css",
CodeBlockTheme.UnikittyLightBase16 => "base16/unikitty-light.min.css",
CodeBlockTheme.VulcanBase16 => "base16/vulcan.min.css",
CodeBlockTheme.Windows10LightBase16 => "base16/windows-10-light.min.css",
CodeBlockTheme.Windows10Base16 => "base16/windows-10.min.css",
CodeBlockTheme.Windows95LightBase16 => "base16/windows-95-light.min.css",
CodeBlockTheme.Windows95Base16 => "base16/windows-95.min.css",
CodeBlockTheme.WindowsHighContrastLightBase16 => "base16/windows-high-contrast-light.min.css",
CodeBlockTheme.WindowsHighContrastBase16 => "base16/windows-high-contrast.min.css",
CodeBlockTheme.WindowsNtLightBase16 => "base16/windows-nt-light.min.css",
CodeBlockTheme.WindowsNtBase16 => "base16/windows-nt.min.css",
CodeBlockTheme.WoodlandBase16 => "base16/woodland.min.css",
CodeBlockTheme.XcodeDuskBase16 => "base16/xcode-dusk.min.css",
CodeBlockTheme.ZenburnBase16 => "base16/zenburn.min.css",
_ => string.Empty
};
}

View File

@ -1,25 +0,0 @@
using Markdig.Syntax.Inlines;
namespace MudBlazor;
internal static class EmphasisInlineEx
{
public static bool TryGetEmphasisElement(this EmphasisInline emphasis, out string value)
{
const string italics = "i", bold = "b";
value = emphasis.DelimiterChar switch
{
'*' => emphasis.DelimiterCount switch
{
1 => italics,
2 => bold,
_ => string.Empty
},
'_' => italics,
_ => string.Empty
};
return !string.IsNullOrEmpty(value);
}
}

View File

@ -1,30 +0,0 @@
using System.Text;
using Markdig.Syntax;
namespace MudBlazor;
internal static class FencedCodeBlockEx
{
public static string CreateCodeBlockText(this FencedCodeBlock @this)
{
if (@this.Lines.Count == 0)
return string.Empty;
var sb = new StringBuilder();
foreach (var line in @this.Lines)
{
var str = line.ToString();
if (string.IsNullOrEmpty(str))
continue;
if (sb.Length != 0)
sb.AppendLine();
sb.Append(str);
}
return sb.ToString();
}
}

View File

@ -1,45 +0,0 @@
using Markdig.Helpers;
using Markdig.Syntax;
using Markdig.Syntax.Inlines;
namespace MudBlazor;
internal static class HeadingBlockEx
{
private const char JoinChar = '-';
private static readonly string[] EscapeChars = { "+", ":", "&" };
public static string? BuildIdString(this HeadingBlock @this)
{
if (@this.Inline == null)
return null;
var slices = @this.Inline
.Select(static x => x.GetStringContent())
.Where(static x => x.Length > 0);
return string.Join(JoinChar, slices);
}
private static string GetStringContent(this Inline @this)
{
var slice = @this switch
{
LiteralInline x => x.Content,
_ => StringSlice.Empty
};
return PrepareStringContent(slice.ToString());
}
private static string PrepareStringContent(this string @this)
{
var words = @this.Split(' ', StringSplitOptions.RemoveEmptyEntries);
var str = string.Join(JoinChar, words).ToLower();
for (var i = 0; i < EscapeChars.Length; i++)
str = str.Replace(EscapeChars[i], string.Empty);
return str;
}
}

View File

@ -1,25 +0,0 @@
using Markdig.Syntax;
namespace MudBlazor;
internal static class HtmlBlockEx
{
public static bool TryGetDetails(this HtmlBlock @this, out HtmlDetailsData htmlDetailsData)
{
htmlDetailsData = new HtmlDetailsData();
// Closing `>` for <details> is missing because there might be attributes for this tag
if (!@this.Lines.StartsAndEndsWith("<details", "</details>", out var range))
return false;
// Closing `>` for <summary> is missing because there might be attributes for this tag
var summaryEndIndex = @this.Lines.TryGetContent("<summary", "</summary>", range.Start, out var headerContent);
if (summaryEndIndex.Line == -1)
return false;
var dataContent = @this.Lines.GetContent(summaryEndIndex, range.End);
htmlDetailsData = new HtmlDetailsData(headerContent, dataContent);
return true;
}
}

View File

@ -1,13 +0,0 @@
using Markdig.Extensions.Mathematics;
namespace MudBlazor;
internal static class MathInlineEx
{
public static string GetDelimiter(this MathInline @this) =>
string.Create(@this.DelimiterCount, @this.Delimiter, static (span, c) =>
{
for (var i = 0; i < span.Length; i++)
span[i] = c;
});
}

View File

@ -1,28 +0,0 @@
namespace MudBlazor;
internal static class StringEx
{
public static bool IsExternalUri(this string? @this, string? baseUri)
{
if (string.IsNullOrEmpty(@this) || string.IsNullOrEmpty(baseUri))
return false;
try
{
var uri = new Uri(@this, UriKind.RelativeOrAbsolute);
return uri.IsAbsoluteUri && !@this.StartsWith(baseUri);
}
catch
{
return false;
}
}
public static int ParseOrDefault(this string? @this)
{
if (!int.TryParse(@this, out var intValue))
intValue = 0;
return intValue;
}
}

View File

@ -1,27 +0,0 @@
namespace MudBlazor;
internal static class StringLineEx
{
public static int IndexOf(this StringLine @this, string value, int startIndex = 0)
{
const int notFoundIndex = -1;
if (@this.Slice.Length < value.Length)
return notFoundIndex;
for (var i = startIndex; i <= @this.Slice.Length - value.Length; i++)
{
var j = 0;
for (; j < value.Length; j++)
{
if (@this.Slice[@this.Position + i + j] != value[j])
break;
}
if (j == value.Length)
return i;
}
return notFoundIndex;
}
}

View File

@ -1,131 +0,0 @@
using System.Text;
namespace MudBlazor;
internal static class StringLineGroupEx
{
public static bool StartsAndEndsWith(this StringLineGroup @this, in string startsWith, in string endsWith, out StringLineGroupRange range)
{
range = new StringLineGroupRange();
if (@this.Count == 0)
return false;
const int firstLineIndex = 0;
var lastLineIndex = @this.Count - 1;
// Starts with
var firstLine = @this.Lines[firstLineIndex];
if (firstLine.Slice.Length < startsWith.Length)
return false;
var startIndex = 0;
for (;startIndex < startsWith.Length; startIndex++)
if (firstLine.Slice[firstLine.Position + startIndex] != startsWith[startIndex])
return false;
// Ends with
var lastLine = @this.Lines[lastLineIndex];
if (lastLine.Slice.Length < endsWith.Length)
return false;
var endIndex = lastLine.Slice.Length - 1;
for (var i = endsWith.Length - 1; i >= 0; i--, endIndex--)
if (endsWith[i] != lastLine.Slice[lastLine.Position + endIndex])
return false;
range = new StringLineGroupRange(
new StringLineGroupIndex(firstLineIndex, startIndex),
new StringLineGroupIndex(lastLineIndex, endIndex));
return true;
}
public static StringLineGroupIndex TryGetContent(this StringLineGroup @this, in string startsWith, in string endsWith, in StringLineGroupIndex startIndex, out string content)
{
var endIndex = new StringLineGroupIndex(-1, -1);
var isFound = false;
var stringBuilder = new StringBuilder();
for (var i = startIndex.Line; i < @this.Count; i++)
{
for (var j = i == startIndex.Line ? startIndex.Index : 0; j < @this.Lines[i].Slice.Length; j++)
{
if (!isFound)
{
var start = @this.Lines[i].IndexOf(startsWith);
if (start == -1)
continue;
isFound = true;
j = @this.Lines[i].IndexOf(">", start);
}
else
{
var end = @this.Lines[i].IndexOf(endsWith);
if (end == -1)
{
var strValue = @this.Lines[i].ToString().Trim();
stringBuilder.Append(strValue);
break;
}
else
{
var strValue = @this.Lines[i].Slice.AsSpan()[j..end].ToString().Trim();
stringBuilder.Append(strValue);
endIndex = new StringLineGroupIndex(i, end + endsWith.Length);
goto Return;
}
}
}
}
Return:
content = stringBuilder.ToString();
return endIndex;
}
public static string GetContent(this StringLineGroup @this, in StringLineGroupIndex startIndex, in StringLineGroupIndex endIndex)
{
var stringBuilder = new StringBuilder();
for (var i = startIndex.Line; i <= endIndex.Line; i++)
{
if (i == startIndex.Line)
{
if (i == endIndex.Line)
{
var strValue = @this.Lines[i].Slice.AsSpan()[startIndex.Index..endIndex.Index].ToString().Trim();
stringBuilder.Append(strValue);
break;
}
else
{
var strValue = @this.Lines[i].Slice.AsSpan()[startIndex.Index..].ToString().Trim();
stringBuilder.Append(strValue);
}
}
else if (i == endIndex.Line)
{
if (endIndex.Index == -1)
break;
var strValue = @this.Lines[i].Slice.AsSpan()[..endIndex.Index].ToString().Trim();
stringBuilder.Append(strValue);
}
else
{
if (stringBuilder.Length != 0)
stringBuilder.AppendLine();
var strValue = @this.Lines[i].ToString().Trim();
stringBuilder.Append(strValue);
}
}
return stringBuilder.ToString();
}
}

View File

@ -1,24 +0,0 @@
namespace MudBlazor;
public sealed class MudMarkdownStyling
{
public TableStyling Table { get; } = new();
public sealed class TableStyling
{
/// <summary>
/// If true, striped table rows will be used.
/// </summary>
public bool IsStriped { get; set; } = true;
/// <summary>
/// If true, table's cells will have left/right borders.
/// </summary>
public bool IsBordered { get; set; } = true;
/// <summary>
/// Child content of component.
/// </summary>
public int Elevation { set; get; } = 1;
}
}

View File

@ -1,14 +0,0 @@
namespace MudBlazor;
internal readonly ref struct HtmlDetailsData
{
public HtmlDetailsData(string header, string content)
{
Header = header;
Content = content;
}
public string Header { get; }
public string Content { get; }
}

View File

@ -1,14 +0,0 @@
namespace MudBlazor;
internal readonly ref struct StringLineGroupIndex
{
public StringLineGroupIndex(int line, int index)
{
Line = line;
Index = index;
}
public int Line { get; }
public int Index { get; }
}

View File

@ -1,14 +0,0 @@
namespace MudBlazor;
internal readonly ref struct StringLineGroupRange
{
public StringLineGroupRange(StringLineGroupIndex start, StringLineGroupIndex end)
{
Start = start;
End = end;
}
public StringLineGroupIndex Start { get; }
public StringLineGroupIndex End { get; }
}

View File

@ -1,47 +0,0 @@
<Project Sdk="Microsoft.NET.Sdk.Razor">
<PropertyGroup>
<TargetFrameworks>net6.0;net7.0</TargetFrameworks>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<RootNamespace>MudBlazor</RootNamespace>
<Version>0.1.3</Version>
<Authors>MyNihongo</Authors>
<Description>Markdown component for MudBlazor (https://mudblazor.com/)</Description>
<Copyright>Copyright © 2023 MyNihongo</Copyright>
<PackageLicenseExpression>MIT</PackageLicenseExpression>
<RepositoryUrl>https://github.com/MyNihongo/MudBlazor.Markdown</RepositoryUrl>
<PackageProjectUrl>https://mudblazor.com/</PackageProjectUrl>
<PackageIcon>favico.png</PackageIcon>
<PackageTags>mudblazor, blazor, markdown</PackageTags>
<GeneratePackageOnBuild Condition="'$(Configuration)'=='Release'">true</GeneratePackageOnBuild>
<PackageReleaseNotes>https://github.com/MyNihongo/MudBlazor.Markdown/releases</PackageReleaseNotes>
<Title>MudBlazor Markdown</Title>
<PackageReadmeFile>README.md</PackageReadmeFile>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Markdig" Version="0.33.0" />
<PackageReference Include="MudBlazor" Version="6.11.1" />
</ItemGroup>
<ItemGroup>
<SupportedPlatform Include="browser" />
</ItemGroup>
<Target Name="PreBuild" BeforeTargets="PreBuildEvent" Condition="'$(Configuration)'=='Release'">
<Exec Command="npm run build" />
</Target>
<ItemGroup>
<None Include="..\..\favico.png" Pack="true" PackagePath="\" />
<None Include="..\..\README.md" Pack="true" PackagePath="\" />
<Content Remove="**\package*.json" />
<None Remove="*.csproj.DotSettings" />
</ItemGroup>
<ItemGroup>
<Folder Include="wwwroot\" />
</ItemGroup>
</Project>

View File

@ -1,10 +0,0 @@
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<s:Boolean x:Key="/Default/CodeInspection/NamespaceProvider/NamespaceFoldersToSkip/=components/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/CodeInspection/NamespaceProvider/NamespaceFoldersToSkip/=enums/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/CodeInspection/NamespaceProvider/NamespaceFoldersToSkip/=extensions/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/CodeInspection/NamespaceProvider/NamespaceFoldersToSkip/=helpers/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/CodeInspection/NamespaceProvider/NamespaceFoldersToSkip/=models/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/CodeInspection/NamespaceProvider/NamespaceFoldersToSkip/=services/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/CodeInspection/NamespaceProvider/NamespaceFoldersToSkip/=services_005Cinterfaces/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/CodeInspection/NamespaceProvider/NamespaceFoldersToSkip/=services_005Cregistration/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/CodeInspection/NamespaceProvider/NamespaceFoldersToSkip/=utils/@EntryIndexedValue">True</s:Boolean></wpf:ResourceDictionary>

View File

@ -1,500 +0,0 @@
using Markdig.Extensions.Mathematics;
using Markdig.Extensions.Tables;
using Markdig.Syntax;
using Markdig.Syntax.Inlines;
using Microsoft.AspNetCore.Components.Routing;
using Microsoft.AspNetCore.Components.Web;
// ReSharper disable MemberCanBePrivate.Global
namespace MudBlazor;
public class MudMarkdown : ComponentBase, IDisposable
{
protected IMudMarkdownThemeService? ThemeService;
protected MarkdownPipeline? Pipeline;
protected bool EnableLinkNavigation;
protected int ElementIndex;
/// <summary>
/// Markdown text to be rendered in the component.
/// </summary>
[Parameter]
public string Value { get; set; } = string.Empty;
/// <summary>
/// Minimum width (in pixels) for a table cell.<br/>
/// If <see langword="null" /> or negative the minimum width is not applied.
/// </summary>
[Parameter]
public int? TableCellMinWidth { get; set; }
/// <summary>
/// Command which is invoked when a link is clicked.<br/>
/// If <see langword="null" /> a link is opened in the browser.
/// </summary>
[Parameter]
public ICommand? LinkCommand { get; set; }
/// <summary>
/// Theme of the code block.<br/>
/// Browse available themes here: https://highlightjs.org/static/demo/
/// </summary>
[Parameter]
public CodeBlockTheme CodeBlockTheme { get; set; }
/// <summary>
/// Override the original URL address of the <see cref="LinkInline"/>.<br/>
/// If a function is not provided <see cref="LinkInline.Url"/> is used
/// </summary>
[Parameter]
public Func<LinkInline, string?>? OverrideLinkUrl { get; set; }
/// <summary>
/// Typography variant to use for Heading Level 1-6.<br/>
/// If a function is not provided a default typo for each level is set (e.g. for &lt;h1&gt; it will be <see cref="Typo.h1"/>, etc.)
/// </summary>
[Parameter]
public Func<Typo, Typo>? OverrideHeaderTypo { get; set; }
/// <summary>
/// Override default styling of the markdown component
/// </summary>
[Parameter]
public MudMarkdownStyling Styling { get; set; } = new();
[Parameter]
public MarkdownPipeline? MarkdownPipeline { get; set; }
[Inject]
protected NavigationManager? NavigationManager { get; init; }
[Inject]
protected IJSRuntime JsRuntime { get; init; } = default!;
[Inject]
protected IServiceProvider? ServiceProvider { get; init; }
public virtual void Dispose()
{
if (NavigationManager != null)
NavigationManager.LocationChanged -= NavigationManagerOnLocationChanged;
if (ThemeService != null)
ThemeService.CodeBlockThemeChanged -= OnCodeBlockThemeChanged;
GC.SuppressFinalize(this);
}
protected override void BuildRenderTree(RenderTreeBuilder builder)
{
if (string.IsNullOrEmpty(Value))
return;
ElementIndex = 0;
var pipeline = GetMarkdownPipeLine();
var parsedText = Markdown.Parse(Value, pipeline);
if (parsedText.Count == 0)
return;
builder.OpenElement(ElementIndex++, "article");
builder.AddAttribute(ElementIndex++, "class", "mud-markdown-body");
RenderMarkdown(parsedText, builder);
builder.CloseElement();
}
protected override void OnInitialized()
{
base.OnInitialized();
ThemeService = ServiceProvider?.GetService<IMudMarkdownThemeService>();
if (ThemeService != null)
ThemeService.CodeBlockThemeChanged += OnCodeBlockThemeChanged;
}
protected override void OnAfterRender(bool firstRender)
{
if (!firstRender || !EnableLinkNavigation || NavigationManager == null)
return;
var args = new LocationChangedEventArgs(NavigationManager.Uri, true);
NavigationManagerOnLocationChanged(NavigationManager, args);
NavigationManager.LocationChanged += NavigationManagerOnLocationChanged;
}
protected virtual void RenderMarkdown(ContainerBlock container, RenderTreeBuilder builder)
{
for (var i = 0; i < container.Count; i++)
{
switch (container[i])
{
case ParagraphBlock paragraph:
{
RenderParagraphBlock(paragraph, builder);
break;
}
case HeadingBlock heading:
{
var typo = (Typo)heading.Level;
typo = OverrideHeaderTypo?.Invoke(typo) ?? typo;
EnableLinkNavigation = true;
var id = heading.BuildIdString();
RenderParagraphBlock(heading, builder, typo, id);
break;
}
case QuoteBlock quote:
{
builder.OpenElement(ElementIndex++, "blockquote");
RenderMarkdown(quote, builder);
builder.CloseElement();
break;
}
case Table table:
{
RenderTable(table, builder);
break;
}
case ListBlock list:
{
RenderList(list, builder);
break;
}
case ThematicBreakBlock:
{
builder.OpenComponent<MudDivider>(ElementIndex++);
builder.CloseComponent();
break;
}
case FencedCodeBlock code:
{
var text = code.CreateCodeBlockText();
// Necessary to prevent Blazor from crashing when the code block is empty.
// It seems that Blazor does not like empty attributes.
if(string.IsNullOrWhiteSpace(text))
break;
builder.OpenComponent<MudCodeHighlight>(ElementIndex++);
builder.AddAttribute(ElementIndex++, nameof(MudCodeHighlight.Text), text);
builder.AddAttribute(ElementIndex++, nameof(MudCodeHighlight.Language), code.Info ?? string.Empty);
builder.AddAttribute(ElementIndex++, nameof(MudCodeHighlight.Theme), CodeBlockTheme);
builder.CloseComponent();
break;
}
case HtmlBlock html:
{
if (html.TryGetDetails(out var detailsData))
RenderDetailsHtml(builder, detailsData.Header, detailsData.Content);
else
RenderHtml(builder, html.Lines);
break;
}
default:
{
OnRenderMarkdownBlockDefault(container[i]);
break;
}
}
}
}
/// <summary>
/// Renders a markdown block which is not covered by the switch-case block in <see cref="RenderMarkdown"/>
/// </summary>
protected virtual void OnRenderMarkdownBlockDefault(Markdig.Syntax.Block block)
{
}
protected virtual void RenderParagraphBlock(LeafBlock paragraph, RenderTreeBuilder builder, Typo typo = Typo.body1, string? id = null)
{
if (paragraph.Inline == null)
return;
builder.OpenComponent<MudText>(ElementIndex++);
if (!string.IsNullOrEmpty(id))
builder.AddAttribute(ElementIndex++, "id", id);
builder.AddAttribute(ElementIndex++, nameof(MudText.Typo), typo);
builder.AddAttribute(ElementIndex++, nameof(MudText.ChildContent), (RenderFragment)(contentBuilder => RenderInlines(paragraph.Inline, contentBuilder)));
builder.CloseComponent();
}
protected virtual void RenderInlines(ContainerInline inlines, RenderTreeBuilder builder)
{
foreach (var inline in inlines)
{
switch (inline)
{
case LiteralInline x:
{
builder.AddContent(ElementIndex++, x.Content);
break;
}
case HtmlInline x:
{
builder.AddMarkupContent(ElementIndex++, x.Tag);
break;
}
case LineBreakInline:
{
builder.OpenElement(ElementIndex++, "br");
builder.CloseElement();
break;
}
case CodeInline x:
{
builder.OpenElement(ElementIndex++, "code");
builder.AddContent(ElementIndex++, x.Content);
builder.CloseElement();
break;
}
case EmphasisInline x:
{
if (!x.TryGetEmphasisElement(out var elementName))
continue;
builder.OpenElement(ElementIndex++, elementName);
RenderInlines(x, builder);
builder.CloseElement();
break;
}
case LinkInline x:
{
var url = OverrideLinkUrl?.Invoke(x) ?? x.Url;
if (x.IsImage)
{
var alt = x
.OfType<LiteralInline>()
.Select(static x => x.Content);
builder.OpenComponent<MudImage>(ElementIndex++);
builder.AddAttribute(ElementIndex++, nameof(MudImage.Class), "rounded-lg");
builder.AddAttribute(ElementIndex++, nameof(MudImage.Src), url);
builder.AddAttribute(ElementIndex++, nameof(MudImage.Alt), string.Join(null, alt));
builder.AddAttribute(ElementIndex++, nameof(MudImage.Elevation), 25);
builder.CloseComponent();
}
else if (LinkCommand == null)
{
builder.OpenComponent<MudLink>(ElementIndex++);
builder.AddAttribute(ElementIndex++, nameof(MudLink.Href), url);
builder.AddAttribute(ElementIndex++, nameof(MudLink.ChildContent), (RenderFragment)(linkBuilder => RenderInlines(x, linkBuilder)));
if (url.IsExternalUri(NavigationManager?.BaseUri))
{
builder.AddAttribute(ElementIndex++, nameof(MudLink.Target), "_blank");
builder.AddAttribute(ElementIndex++, "rel", "noopener noreferrer");
}
// (prevent scrolling to the top of the page)
// custom implementation only for links on the same page
else if (url?.StartsWith('#') ?? false)
{
builder.AddEventPreventDefaultAttribute(ElementIndex++, "onclick", true);
builder.AddAttribute(ElementIndex++, "onclick", EventCallback.Factory.Create<MouseEventArgs>(this, () =>
{
if (NavigationManager == null)
return;
var uriBuilder = new UriBuilder(NavigationManager.Uri)
{
Fragment = url,
};
var args = new LocationChangedEventArgs(uriBuilder.Uri.AbsoluteUri, true);
NavigationManagerOnLocationChanged(NavigationManager, args);
}));
}
builder.CloseComponent();
}
else
{
builder.OpenComponent<MudLinkButton>(ElementIndex++);
builder.AddAttribute(ElementIndex++, nameof(MudLinkButton.Command), LinkCommand);
builder.AddAttribute(ElementIndex++, nameof(MudLinkButton.CommandParameter), url);
builder.AddAttribute(ElementIndex++, nameof(MudLinkButton.ChildContent), (RenderFragment)(linkBuilder => RenderInlines(x, linkBuilder)));
builder.CloseComponent();
}
break;
}
case MathInline x:
{
builder.OpenComponent<MudMathJax>(ElementIndex++);
builder.AddAttribute(ElementIndex++, nameof(MudMathJax.Delimiter), x.GetDelimiter());
builder.AddAttribute(ElementIndex++, nameof(MudMathJax.Value), x.Content);
builder.CloseComponent();
break;
}
default:
{
OnRenderInlinesDefault(inline, builder);
break;
}
}
}
}
/// <summary>
/// Renders inline block which is not covered by the switch-case block in <see cref="RenderInlines"/>
/// </summary>
protected virtual void OnRenderInlinesDefault(Inline inline, RenderTreeBuilder builder)
{
}
protected virtual void RenderTable(Table table, RenderTreeBuilder builder)
{
// First child is columns
if (table.Count < 2)
return;
builder.OpenComponent<MudSimpleTable>(ElementIndex++);
builder.AddAttribute(ElementIndex++, nameof(MudSimpleTable.Style), "overflow-x: auto;");
builder.AddAttribute(ElementIndex++, nameof(MudSimpleTable.Striped), Styling.Table.IsStriped);
builder.AddAttribute(ElementIndex++, nameof(MudSimpleTable.Bordered), Styling.Table.IsBordered);
builder.AddAttribute(ElementIndex++, nameof(MudSimpleTable.Elevation), Styling.Table.Elevation);
builder.AddAttribute(ElementIndex++, nameof(MudSimpleTable.ChildContent), (RenderFragment)(contentBuilder =>
{
// thread
contentBuilder.OpenElement(ElementIndex++, "thead");
RenderTableRow((TableRow)table[0], "th", contentBuilder, TableCellMinWidth);
contentBuilder.CloseElement();
// tbody
contentBuilder.OpenElement(ElementIndex++, "tbody");
for (var j = 1; j < table.Count; j++)
{
RenderTableRow((TableRow)table[j], "td", contentBuilder);
}
contentBuilder.CloseElement();
}));
builder.CloseComponent();
}
protected virtual void RenderTableRow(TableRow row, string cellElementName, RenderTreeBuilder builder, int? minWidth = null)
{
builder.OpenElement(ElementIndex++, "tr");
for (var j = 0; j < row.Count; j++)
{
var cell = (TableCell)row[j];
builder.OpenElement(ElementIndex++, cellElementName);
if (minWidth is > 0)
builder.AddAttribute(ElementIndex++, "style", $"min-width:{minWidth}px");
if (cell.Count != 0 && cell[0] is ParagraphBlock paragraphBlock)
RenderParagraphBlock(paragraphBlock, builder);
builder.CloseElement();
}
builder.CloseElement();
}
protected virtual void RenderList(ListBlock list, RenderTreeBuilder builder)
{
if (list.Count == 0)
return;
var elementName = list.IsOrdered ? "ol" : "ul";
var orderStart = list.OrderedStart.ParseOrDefault();
builder.OpenElement(ElementIndex++, elementName);
if (orderStart > 1)
{
builder.AddAttribute(ElementIndex++, "start", orderStart);
}
for (var i = 0; i < list.Count; i++)
{
var block = (ListItemBlock)list[i];
for (var j = 0; j < block.Count; j++)
{
switch (block[j])
{
case ListBlock x:
{
RenderList(x, builder);
break;
}
case ParagraphBlock x:
{
builder.OpenElement(ElementIndex++, "li");
RenderParagraphBlock(x, builder);
builder.CloseElement();
break;
}
default:
{
OnRenderListDefault(block[j], builder);
break;
}
}
}
}
builder.CloseElement();
}
/// <summary>
/// Renders a markdown block which is not covered by the switch-case block in <see cref="RenderList"/>
/// </summary>
protected virtual void OnRenderListDefault(Markdig.Syntax.Block block, RenderTreeBuilder builder)
{
}
protected virtual void RenderDetailsHtml(in RenderTreeBuilder builder, in string header, in string content)
{
var headerHtml = Markdown.Parse(header, Pipeline);
var contentHtml = Markdown.Parse(content);
builder.OpenComponent<MudMarkdownDetails>(ElementIndex++);
builder.AddAttribute(ElementIndex++, nameof(MudMarkdownDetails.TitleContent), (RenderFragment)(titleBuilder => RenderMarkdown(headerHtml, titleBuilder)));
builder.AddAttribute(ElementIndex++, nameof(MudMarkdownDetails.ChildContent), (RenderFragment)(contentBuilder => RenderMarkdown(contentHtml, contentBuilder)));
builder.CloseComponent();
}
protected virtual void RenderHtml(in RenderTreeBuilder builder, in StringLineGroup lines)
{
var markupString = new MarkupString(lines.ToString());
builder.AddContent(ElementIndex, markupString);
}
private async void NavigationManagerOnLocationChanged(object? sender, LocationChangedEventArgs e)
{
var idFragment = new Uri(e.Location, UriKind.Absolute).Fragment;
if (!idFragment.StartsWith('#') || idFragment.Length < 2)
return;
idFragment = idFragment[1..];
await JsRuntime.InvokeVoidAsync("scrollToElementId", idFragment)
.ConfigureAwait(false);
}
private void OnCodeBlockThemeChanged(object? sender, CodeBlockTheme e) =>
CodeBlockTheme = e;
private MarkdownPipeline GetMarkdownPipeLine()
{
if (MarkdownPipeline != null)
return MarkdownPipeline;
return Pipeline ??= new MarkdownPipelineBuilder()
.UseAdvancedExtensions()
.Build();
}
}

File diff suppressed because one or more lines are too long

View File

@ -1,110 +0,0 @@
/* Code */
.mud-markdown-body code:not(.hljs) {
background: var(--mud-palette-overlay-dark);
color: var(--mud-palette-text-primary) !important;
padding: 2.5px 7.5px;
border-radius: 5px;
}
/* This component is public, so apply styling in all places, not only within mud-markdown-body */
pre code.hljs {
display: block !important;
overflow-x: auto;
padding: 1em;
}
.mud-markdown-body .snippet-clipboard-content {
position: relative !important;
}
.mud-markdown-body .snippet-clipboard-content:hover > .snippet-clipboard-copy-icon {
display: block !important;
}
.mud-markdown-body .snippet-clipboard-content .snippet-clipboard-copy-icon {
position: absolute;
display: none;
top: 0;
right: 0;
}
/* Quote */
.mud-markdown-body blockquote {
border-left: .25em solid var(--mud-palette-text-disabled);
color: var(--mud-palette-text-secondary);
background-color: var(--mud-palette-drawer-background);
padding: 0.25em 1em;
margin: 0.5em 0 1.25em;
}
.mud-markdown-body blockquote p {
margin-bottom: 0 !important;
}
/* Table */
.mud-markdown-body table {
margin: 1.25em 0;
}
/* Link */
.mud-markdown-body .mud-link:hover {
cursor: pointer !important;
}
/* List */
.mud-markdown-body ul {
list-style-type: disc;
}
.mud-markdown-body ul, .mud-markdown-body ol {
padding-left: 2em;
margin-bottom: 1.25em !important;
}
.mud-markdown-body ul ul {
list-style-type: circle;
margin-bottom: 0 !important;
}
.mud-markdown-body ul ul ul {
list-style-type: square;
margin-bottom: 0 !important;
}
.mud-markdown-body li {
display: list-item !important;
text-align: -webkit-match-parent;
}
/* Headers */
.mud-markdown-body h1, .mud-markdown-body h2 {
border-bottom: 1px solid var(--mud-palette-text-disabled);
padding-bottom: 0.125em;
margin-bottom: 0.4em;
}
.mud-markdown-body h1, .mud-markdown-body h2, .mud-markdown-body h3, .mud-markdown-body h4, .mud-markdown-body h5, .mud-markdown-body h6 {
scroll-margin-top: 5rem;
margin-top: 0.25em;
word-wrap: break-word;
margin-bottom: 0.3em !important;
}
.mud-markdown-body .mud-divider {
margin: 0.5em 0;
height: 0.25em;
}
/* Paragraphs */
.mud-markdown-body p {
margin-bottom: 1.25em !important;
}
.mud-markdown-body li p, .mud-markdown-body .mud-expand-panel p {
margin-bottom: 0 !important;
}
/* Images */
.mud-markdown-body img {
max-width: 100%;
}

View File

@ -1,87 +0,0 @@
import hljs from "highlight.js";
const codeStylesDir = "code-styles";
const codeStylesSegment = `/MudBlazor.Markdown/${codeStylesDir}/`;
window.highlightCodeElement = function (element) {
hljs.highlightElement(element);
}
window.setHighlightStylesheet = function (stylesheetPath) {
let isFound = false;
const stylesheets = document.querySelectorAll("link[rel='stylesheet']");
for (let i = 0; i < stylesheets.length; i++) {
const href = stylesheets[i].getAttribute("href");
if (!href) {
continue;
}
const index = href.indexOf(codeStylesSegment);
if (index !== -1) {
if (!isFound) {
isFound = true;
const newHref = href.substring(0, index + codeStylesSegment.length) + stylesheetPath;
stylesheets[i].setAttribute("href", newHref);
} else {
stylesheets[i].remove();
}
}
}
if (!isFound) {
const link = document.createElement("link");
link.rel = "stylesheet";
link.href = `_content/MudBlazor.Markdown/${codeStylesDir}/${stylesheetPath}`;
document.head.appendChild(link);
}
}
window.scrollToElementId = function (elementId) {
const element = document.getElementById(elementId);
if (element) {
const elementIdHref = `#${elementId}`;
if (!window.location.pathname.endsWith(elementIdHref)) {
history.replaceState(null, "", window.location.pathname + elementIdHref);
}
element.scrollIntoView({
behavior: "smooth",
block: "start",
inline: "nearest"
});
}
}
window.appendMathJaxScript = function (scriptId) {
if (document.getElementById(scriptId)) {
return;
}
const script = document.createElement("script");
script.id = scriptId;
script.type = "text/javascript";
script.src = "_content/MudBlazor.Markdown/MudBlazor.Markdown.MathJax.min.js";
document.head.appendChild(script);
}
window.refreshMathJaxScript = function () {
try {
MathJax.typeset();
} catch (e) {
// swallow since in some cases MathJax might not be initialized
}
}
window.copyTextToClipboard = async function (text) {
try {
await navigator.clipboard.writeText(text);
return true;
} catch (e) {
return false;
}
}

View File

@ -1,6 +0,0 @@
namespace MudBlazor;
public interface IMudMarkdownClipboardService
{
ValueTask CopyToClipboardAsync(string text);
}

View File

@ -1,8 +0,0 @@
namespace MudBlazor;
public interface IMudMarkdownThemeService
{
event EventHandler<CodeBlockTheme> CodeBlockThemeChanged;
void SetCodeBlockTheme(CodeBlockTheme theme);
}

View File

@ -1,9 +0,0 @@
namespace MudBlazor;
internal sealed class MudMarkdownThemeService : IMudMarkdownThemeService
{
public event EventHandler<CodeBlockTheme>? CodeBlockThemeChanged;
public void SetCodeBlockTheme(CodeBlockTheme theme) =>
CodeBlockThemeChanged?.Invoke(this, theme);
}

View File

@ -1,15 +0,0 @@
namespace MudBlazor;
public static class ServiceCollectionEx
{
public static IServiceCollection AddMudMarkdownServices(this IServiceCollection @this)
{
return @this.AddScoped<IMudMarkdownThemeService, MudMarkdownThemeService>();
}
public static IServiceCollection AddMudMarkdownClipboardService<T>(this IServiceCollection @this)
where T : class, IMudMarkdownClipboardService
{
return @this.AddScoped<IMudMarkdownClipboardService, T>();
}
}

View File

@ -1,12 +0,0 @@
global using System.Windows.Input;
global using Markdig;
global using Markdig.Helpers;
global using Microsoft.AspNetCore.Components;
global using Microsoft.AspNetCore.Components.Rendering;
global using Microsoft.Extensions.DependencyInjection;
global using Microsoft.JSInterop;
global using MudBlazor.Extensions;
global using MudBlazor.Utilities;
using System.Runtime.CompilerServices;
[assembly: InternalsVisibleTo("MudBlazor.Markdown.Tests")]

View File

@ -1,47 +0,0 @@
const { src, dest, series } = require("gulp");
const webpack = require("webpack-stream");
const rename = require("gulp-rename");
const minifyCss = require("gulp-clean-css");
const changeCase = require("change-case");
const all = require("gulp-all");
function fonts() {
return src("Resources/Fonts/*.woff")
.pipe(dest("wwwroot/output/chtml/fonts/woff-v2"));
}
function cssMain() {
return src("Resources/*.css")
.pipe(minifyCss())
.pipe(rename({ extname: ".min.css" }))
.pipe(dest("wwwroot"));
}
function cssCodeStyles() {
return src("Resources/CodeStyles/src/**/*.css")
.pipe(minifyCss({ level: { 1: { specialComments: "0" } } }))
.pipe(rename(function (path) {
path.dirname = changeCase.camelCase(path.dirname);
path.extname = ".min.css";
}))
.pipe(dest("wwwroot/code-styles"));
}
function img() {
return src("Resources/CodeStyles/src/**/*.{png,jpg}")
.pipe(dest("wwwroot/code-styles"));
}
function jsMain() {
const mainJs = src("Resources/MudBlazor.Markdown.js")
.pipe(webpack({ mode: "production" }))
.pipe(rename({ basename: "MudBlazor.Markdown", extname: ".min.js" }))
.pipe(dest("wwwroot"));
const mathJax = src("Resources/MudBlazor.Markdown.MathJax.min.js")
.pipe(dest("wwwroot"));
return all(mainJs, mathJax);
}
exports.default = series(fonts, cssMain, cssCodeStyles, img, jsMain);

File diff suppressed because it is too large Load Diff

View File

@ -1,27 +0,0 @@
{
"name": "mudblazor.markdown",
"version": "1.0.0",
"description": "Markdown component for MudBlazor (https://mudblazor.com/)",
"keywords": [
"mudblazor",
"markdown",
"blazor"
],
"scripts": {
"build": "gulp"
},
"author": "MyNihongo",
"license": "MIT",
"devDependencies": {
"change-case": "^4.1.2",
"gulp": "^4.0.2",
"gulp-all": "^1.1.0",
"gulp-clean-css": "^4.3.0",
"gulp-rename": "^2.0.0",
"webpack": "^5.89.0",
"webpack-stream": "^7.0.0"
},
"dependencies": {
"highlight.js": "^11.9.0"
}
}

View File

@ -1,6 +0,0 @@
<component name="InspectionProjectProfileManager">
<profile version="1.0">
<option name="myName" value="Project Default" />
<inspection_tool class="StructuralWrap" enabled="false" level="TYPO" enabled_by_default="false" />
</profile>
</component>

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="TaskProjectConfiguration">
<server type="Gitlab" url="https://devops.tsommer.org" />
</component>
</project>

View File

@ -1,6 +1,6 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="AI Studio" type="DotNetProject" factoryName=".NET Project">
<option name="EXE_PATH" value="$PROJECT_DIR$/MindWork AI Studio/bin/Debug/net8.0/MindWork_AI_Studio" />
<option name="EXE_PATH" value="$PROJECT_DIR$/MindWork AI Studio/bin/Debug/net8.0/osx-arm64/mindworkAIStudio.dll" />
<option name="PROGRAM_PARAMETERS" value="" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/MindWork AI Studio" />
<option name="PASS_PARENT_ENVS" value="1" />

View File

@ -2,8 +2,6 @@
Microsoft Visual Studio Solution File, Format Version 12.00
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MindWork AI Studio", "MindWork AI Studio\MindWork AI Studio.csproj", "{059FDFCC-7D0B-474E-9F20-B9C437DF1CDD}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MudBlazor.Markdown", "..\MudBlazor.Markdown\MudBlazor.Markdown.csproj", "{9402C391-AFEE-431B-BDD4-107890772036}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@ -14,9 +12,5 @@ Global
{059FDFCC-7D0B-474E-9F20-B9C437DF1CDD}.Debug|Any CPU.Build.0 = Debug|Any CPU
{059FDFCC-7D0B-474E-9F20-B9C437DF1CDD}.Release|Any CPU.ActiveCfg = Release|Any CPU
{059FDFCC-7D0B-474E-9F20-B9C437DF1CDD}.Release|Any CPU.Build.0 = Release|Any CPU
{9402C391-AFEE-431B-BDD4-107890772036}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{9402C391-AFEE-431B-BDD4-107890772036}.Debug|Any CPU.Build.0 = Debug|Any CPU
{9402C391-AFEE-431B-BDD4-107890772036}.Release|Any CPU.ActiveCfg = Release|Any CPU
{9402C391-AFEE-431B-BDD4-107890772036}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
EndGlobal

View File

@ -35,7 +35,16 @@
}
else
{
<MudMarkdown Value="@textContent.Text"/>
@if (this.Content.IsStreaming)
{
<MudText Typo="Typo.body1" Style="white-space: pre-wrap;">
@textContent.Text
</MudText>
}
else
{
<MudMarkdown Value="@textContent.Text"/>
}
}
}

View File

@ -10,16 +10,17 @@
<link rel="icon" type="image/png" href="favicon.png"/>
<link href="https://fonts.googleapis.com/css?family=Roboto:300,400,500,700&display=swap" rel="stylesheet" />
<link href="_content/MudBlazor/MudBlazor.min.css" rel="stylesheet" />
<link href="_content/MudBlazor.Markdown/MudBlazor.Markdown.min.css" rel="stylesheet" />
<link href="system/MudBlazor/MudBlazor.min.css" rel="stylesheet" />
<link href="system/MudBlazor.Markdown/MudBlazor.Markdown.min.css" rel="stylesheet" />
<link href="app.css" rel="stylesheet" />
<HeadOutlet/>
</head>
<body>
<Routes @rendermode="new InteractiveServerRenderMode(prerender: false)"/>
<script src="_framework/blazor.web.js"></script>
<script src="_content/MudBlazor/MudBlazor.min.js"></script>
<script src="_content/MudBlazor.Markdown/MudBlazor.Markdown.min.js"></script>
<script src="system/MudBlazor/MudBlazor.min.js"></script>
<script src="system/MudBlazor.Markdown/MudBlazor.Markdown.min.js"></script>
<script src="app.js"></script>
</body>

View File

@ -13,7 +13,7 @@
</MudDrawerContainer>
<MudMainContent Class="mud-height-full pt-1">
<MudContainer Fixed="@true" Class="mud-height-full">
<MudContainer Fixed="@true" Class="mud-height-full" Style="margin-left: 5em; width: calc(100% - 5em);">
@this.Body
</MudContainer>
</MudMainContent>

View File

@ -102,7 +102,7 @@ public partial class Chat : ComponentBase
// Use the selected provider to get the AI response.
// By awaiting this line, we wait for the entire
// content to be streamed.
await aiText.CreateFromProviderAsync(this.selectedProvider.UsedProvider.CreateProvider(), this.JsRuntime, this.SettingsManager, new Model("gpt-4-turbo-preview"), this.chatThread);
await aiText.CreateFromProviderAsync(this.selectedProvider.UsedProvider.CreateProvider(), this.JsRuntime, this.SettingsManager, new Model("gpt-4o"), this.chatThread);
// Disable the stream state:
this.isStreaming = false;

View File

@ -7,17 +7,36 @@
<ImplicitUsings>enable</ImplicitUsings>
<RootNamespace>AIStudio</RootNamespace>
<AssemblyName>mindworkAIStudio</AssemblyName>
<PublishSingleFile>true</PublishSingleFile> <!-- Publish as single file -->
<SelfContained>true</SelfContained> <!-- Publish as self-contained; requires no .NET runtime installed on the target machine -->
<IncludeNativeLibrariesForSelfExtract>true</IncludeNativeLibrariesForSelfExtract> <!-- Include native libraries for self-extract -->
<GenerateEmbeddedFilesManifest>true</GenerateEmbeddedFilesManifest> <!-- Generate embedded files manifest -->
<PublishTrimmed>true</PublishTrimmed> <!-- Publish with trimming, to reduce size -->
<TrimMode>partial</TrimMode> <!-- Trim unused assemblies, but keep all assemblies referenced by the project -->
<TrimmerRemoveSymbols>true</TrimmerRemoveSymbols> <!-- Remove debug symbols -->
<EnableUnsafeBinaryFormatterSerialization>false</EnableUnsafeBinaryFormatterSerialization> <!-- Remove unsafe binary formatter serialization -->
<EnableUnsafeUTF7Encoding>false</EnableUnsafeUTF7Encoding> <!-- Remove unsafe UTF7 encoding -->
<JsonSerializerIsReflectionEnabledByDefault>true</JsonSerializerIsReflectionEnabledByDefault> <!-- Enable reflection for JSON serialization -->
<SuppressTrimAnalysisWarnings>true</SuppressTrimAnalysisWarnings> <!-- Suppress trim analysis warnings -->
<NoWarn>IL2026</NoWarn> <!-- Suppress warning IL2026: Usage of methods marked as RequiresUnreferencedCode. None issue here, since we use trim mode partial, though. -->
</PropertyGroup>
<ItemGroup>
<!-- Remove launchSettings.json from the project -->
<None Remove="Properties\launchSettings.json" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="MudBlazor" Version="6.19.1" />
<!-- Embed all files in wwwroot folder -->
<EmbeddedResource Include="wwwroot\**" CopyToOutputDirectory="PreserveNewest" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\MudBlazor.Markdown\MudBlazor.Markdown.csproj" />
<PackageReference Include="Microsoft.Extensions.FileProviders.Embedded" Version="8.0.4" />
<PackageReference Include="MudBlazor" Version="6.19.1" />
<PackageReference Include="MudBlazor.Markdown" Version="0.1.3" />
</ItemGroup>
</Project>

View File

@ -1,12 +1,16 @@
using System.Reflection;
using AIStudio;
using AIStudio.Components;
using AIStudio.Settings;
using AIStudio.Tools;
using Microsoft.Extensions.FileProviders;
using MudBlazor;
using MudBlazor.Services;
var builder = WebApplication.CreateBuilder(args);
var builder = WebApplication.CreateBuilder();
builder.Services.AddMudServices(config =>
{
config.SnackbarConfiguration.PositionClass = Defaults.Classes.Position.BottomLeft;
@ -31,15 +35,36 @@ builder.Services.AddRazorComponents()
x.MaximumReceiveMessageSize = null;
});
builder.WebHost.UseKestrel();
var port = args.Length > 0 ? args[0] : "5000";
builder.WebHost.UseUrls($"http://localhost:{port}");
#if DEBUG
builder.WebHost.UseWebRoot("wwwroot");
builder.WebHost.UseStaticWebAssets();
builder.WebHost.UseUrls("http://localhost:5000");
#endif
var app = builder.Build();
app.Use(Redirect.HandlerContentAsync);
#if DEBUG
app.UseStaticFiles();
#else
var fileProvider = new ManifestEmbeddedFileProvider(Assembly.GetAssembly(type: typeof(Program))!, "wwwroot");
app.UseDeveloperExceptionPage();
app.UseStaticFiles(new StaticFileOptions
{
FileProvider = fileProvider,
RequestPath = string.Empty,
});
#endif
app.UseAntiforgery();
app.MapRazorComponents<App>()
.AddInteractiveServerRenderMode();
app.Run();
var serverTask = app.RunAsync();
Console.WriteLine("RUST/TAURI SERVER STARTED");
await serverTask;

View File

@ -0,0 +1,39 @@
namespace AIStudio;
internal static class Redirect
{
private const string CONTENT = "/_content/";
private const string SYSTEM = "/system/";
internal static async Task HandlerContentAsync(HttpContext context, Func<Task> nextHandler)
{
var path = context.Request.Path.Value;
if(string.IsNullOrWhiteSpace(path))
{
await nextHandler();
return;
}
#if DEBUG
if (path.StartsWith(SYSTEM, StringComparison.InvariantCulture))
{
context.Response.Redirect(path.Replace(SYSTEM, CONTENT), true, true);
return;
}
#else
if (path.StartsWith(CONTENT, StringComparison.InvariantCulture))
{
context.Response.Redirect(path.Replace(CONTENT, SYSTEM), true, true);
return;
}
#endif
await nextHandler();
}
}

123
app/MindWork AI Studio/build.nu Executable file
View File

@ -0,0 +1,123 @@
#!/usr/bin/env nu
def main [] {}
def are_assets_exist [rid: string]: string -> bool {
$"bin/release/net8.0/($rid)/publish/wwwroot/_content/MudBlazor/MudBlazor.min.css" | path exists
}
def "main fix_web_assets" []: nothing -> nothing {
# Get the matching RIDs for the current OS:
let rids = get_rids
# We chose the first RID to copy the assets from:
let rid = $rids.0
if (are_assets_exist $rid) == false {
print $"Web assets do not exist for ($rid). Please build the project first."
return
}
# Ensure, that the dist directory exists:
mkdir wwwroot/system
# Copy the web assets from the first RID to the source project:
let source_path: glob = $"bin/release/net8.0/($rid)/publish/wwwroot/_content/*"
cp --recursive --force --update $source_path wwwroot/system/
}
def "main publish" []: nothing -> nothing {
# Ensure, that the dist directory exists:
mkdir bin/dist
# Get the matching RIDs for the current OS:
let rids = get_rids
if ($rids | length) == 0 {
print "No RIDs to build for."
return
}
let current_os = get_os
let published_filename_dotnet = match $current_os {
"windows" => "mindworkAIStudio.exe",
_ => "mindworkAIStudio"
}
# Build for each RID:
for rid in $rids {
print "=============================="
print $"Start building for ($rid)..."
^dotnet publish --configuration release --runtime $rid
let final_filename = match $rid {
"win-x64" => "mindworkAIStudio-x86_64-pc-windows-msvc.exe",
"win-arm64" => "mindworkAIStudio-aarch64-pc-windows-msvc.exe",
"linux-x64" => "mindworkAIStudio-x86_64-unknown-linux-gnu",
"linux-arm64" => "mindworkAIStudio-aarch64-unknown-linux-gnu",
"osx-arm64" => "mindworkAIStudio-aarch64-apple-darwin",
"osx-x64" => "mindworkAIStudio-x86_64-apple-darwin",
_ => {
print $"Unsupported RID for final filename: ($rid)"
return
}
}
let published_path = $"bin/release/net8.0/($rid)/publish/($published_filename_dotnet)"
let final_path = $"bin/dist/($final_filename)"
if ($published_path | path exists) {
print $"Published file ($published_path) exists."
} else {
print $"Published file ($published_path) does not exist. Compiling might failed?"
return
}
print $"Moving ($published_path) to ($final_path)..."
mv --force $published_path $final_path
}
print "=============================="
print "Start building runtime..."
cd ../../runtime
try {
cargo tauri build
};
cd "../app/MindWork AI Studio"
print "=============================="
print "Building done."
}
def get_rids []: nothing -> list {
# Define the list of RIDs to build for, cf. https://learn.microsoft.com/en-us/dotnet/core/rid-catalog:
let rids = ["win-x64", "win-arm64", "linux-x64", "linux-arm64", "osx-arm64", "osx-x64"]
# Get the current OS:
let current_os = get_os
let current_os_dotnet = match $current_os {
"windows" => "win-",
"linux" => "linux-",
"darwin" => "osx-",
_ => {
print $"Unsupported OS: ($current_os)"
return
}
}
# Filter the RIDs to build for the current OS:
let rids = $rids | where $it =~ $current_os_dotnet
# Return the list of RIDs to build for:
$rids
}
def get_os []: nothing -> string {
(sys).host.name | str downcase
}

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
.mud-markdown-body code:not(.hljs){background:var(--mud-palette-overlay-dark);color:var(--mud-palette-text-primary)!important;padding:2.5px 7.5px;border-radius:5px}pre code.hljs{display:block!important;overflow-x:auto;padding:1em}.mud-markdown-body .snippet-clipboard-content{position:relative!important}.mud-markdown-body .snippet-clipboard-content:hover>.snippet-clipboard-copy-icon{display:block!important}.mud-markdown-body .snippet-clipboard-content .snippet-clipboard-copy-icon{position:absolute;display:none;top:0;right:0}.mud-markdown-body blockquote{border-left:.25em solid var(--mud-palette-text-disabled);color:var(--mud-palette-text-secondary);background-color:var(--mud-palette-drawer-background);padding:.25em 1em;margin:.5em 0 1.25em}.mud-markdown-body blockquote p{margin-bottom:0!important}.mud-markdown-body table{margin:1.25em 0}.mud-markdown-body .mud-link:hover{cursor:pointer!important}.mud-markdown-body ul{list-style-type:disc}.mud-markdown-body ol,.mud-markdown-body ul{padding-left:2em;margin-bottom:1.25em!important}.mud-markdown-body ul ul{list-style-type:circle;margin-bottom:0!important}.mud-markdown-body ul ul ul{list-style-type:square;margin-bottom:0!important}.mud-markdown-body li{display:list-item!important;text-align:-webkit-match-parent}.mud-markdown-body h1,.mud-markdown-body h2{border-bottom:1px solid var(--mud-palette-text-disabled);padding-bottom:.125em;margin-bottom:.4em}.mud-markdown-body h1,.mud-markdown-body h2,.mud-markdown-body h3,.mud-markdown-body h4,.mud-markdown-body h5,.mud-markdown-body h6{scroll-margin-top:5rem;margin-top:.25em;word-wrap:break-word;margin-bottom:.3em!important}.mud-markdown-body .mud-divider{margin:.5em 0;height:.25em}.mud-markdown-body p{margin-bottom:1.25em!important}.mud-markdown-body .mud-expand-panel p,.mud-markdown-body li p{margin-bottom:0!important}.mud-markdown-body img{max-width:100%}

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
.hljs{background:#2b2b2b;color:#f8f8f2}.hljs-comment,.hljs-quote{color:#d4d0ab}.hljs-deletion,.hljs-name,.hljs-regexp,.hljs-selector-class,.hljs-selector-id,.hljs-tag,.hljs-template-variable,.hljs-variable{color:#ffa07a}.hljs-built_in,.hljs-link,.hljs-literal,.hljs-meta,.hljs-number,.hljs-params,.hljs-type{color:#f5ab35}.hljs-attribute{color:gold}.hljs-addition,.hljs-bullet,.hljs-string,.hljs-symbol{color:#abe338}.hljs-section,.hljs-title{color:#00e0e0}.hljs-keyword,.hljs-selector-tag{color:#dcc6e0}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}@media screen and (-ms-high-contrast:active){.hljs-addition,.hljs-attribute,.hljs-built_in,.hljs-bullet,.hljs-comment,.hljs-link,.hljs-literal,.hljs-meta,.hljs-number,.hljs-params,.hljs-quote,.hljs-string,.hljs-symbol,.hljs-type{color:highlight}.hljs-keyword,.hljs-selector-tag{font-weight:700}}

View File

@ -0,0 +1 @@
.hljs{background:#fefefe;color:#545454}.hljs-comment,.hljs-quote{color:#696969}.hljs-deletion,.hljs-name,.hljs-regexp,.hljs-selector-class,.hljs-selector-id,.hljs-tag,.hljs-template-variable,.hljs-variable{color:#d91e18}.hljs-built_in,.hljs-link,.hljs-literal,.hljs-meta,.hljs-number,.hljs-params,.hljs-type{color:#aa5d00}.hljs-attribute{color:#aa5d00}.hljs-addition,.hljs-bullet,.hljs-string,.hljs-symbol{color:green}.hljs-section,.hljs-title{color:#007faa}.hljs-keyword,.hljs-selector-tag{color:#7928a1}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}@media screen and (-ms-high-contrast:active){.hljs-addition,.hljs-attribute,.hljs-built_in,.hljs-bullet,.hljs-comment,.hljs-link,.hljs-literal,.hljs-meta,.hljs-number,.hljs-params,.hljs-quote,.hljs-string,.hljs-symbol,.hljs-type{color:highlight}.hljs-keyword,.hljs-selector-tag{font-weight:700}}

View File

@ -0,0 +1 @@
.hljs{background:#333;color:#fff}.hljs-doctag,.hljs-meta-keyword,.hljs-name,.hljs-strong{font-weight:700}.hljs-code,.hljs-emphasis{font-style:italic}.hljs-section,.hljs-tag{color:#62c8f3}.hljs-selector-class,.hljs-selector-id,.hljs-template-variable,.hljs-variable{color:#ade5fc}.hljs-meta-string,.hljs-string{color:#a2fca2}.hljs-attr,.hljs-quote,.hljs-selector-attr{color:#7bd694}.hljs-tag .hljs-attr{color:inherit}.hljs-attribute,.hljs-title,.hljs-type{color:#ffa}.hljs-number,.hljs-symbol{color:#d36363}.hljs-bullet,.hljs-template-tag{color:#b8d8a2}.hljs-built_in,.hljs-keyword,.hljs-literal,.hljs-selector-tag{color:#fcc28c}.hljs-code,.hljs-comment,.hljs-formula{color:#888}.hljs-link,.hljs-regexp,.hljs-selector-pseudo{color:#c6b4f0}.hljs-meta{color:#fc9b9b}.hljs-deletion{background:#fc9b9b;color:#333}.hljs-addition{background:#a2fca2;color:#333}.hljs-subst{color:#fff}.hljs a{color:inherit}.hljs a:focus,.hljs a:hover{color:inherit;text-decoration:underline}.hljs mark{background:#555;color:inherit}

View File

@ -0,0 +1 @@
.hljs{background:#1c1d21;color:#c0c5ce}.hljs-comment,.hljs-quote{color:#b6b18b}.hljs-deletion,.hljs-name,.hljs-regexp,.hljs-selector-class,.hljs-selector-id,.hljs-tag,.hljs-template-variable,.hljs-variable{color:#eb3c54}.hljs-built_in,.hljs-link,.hljs-literal,.hljs-meta,.hljs-number,.hljs-params,.hljs-type{color:#e7ce56}.hljs-attribute{color:#ee7c2b}.hljs-addition,.hljs-bullet,.hljs-string,.hljs-symbol{color:#4fb4d7}.hljs-section,.hljs-title{color:#78bb65}.hljs-keyword,.hljs-selector-tag{color:#b45ea4}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}

View File

@ -0,0 +1 @@
.hljs{color:#a9b7c6;background:#282b2e}.hljs-bullet,.hljs-literal,.hljs-number,.hljs-symbol{color:#6897bb}.hljs-deletion,.hljs-keyword,.hljs-selector-tag{color:#cc7832}.hljs-link,.hljs-template-variable,.hljs-variable{color:#629755}.hljs-comment,.hljs-quote{color:grey}.hljs-meta{color:#bbb529}.hljs-addition,.hljs-attribute,.hljs-string{color:#6a8759}.hljs-section,.hljs-title,.hljs-type{color:#ffc66d}.hljs-name,.hljs-selector-class,.hljs-selector-id{color:#e8bf6a}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}

View File

@ -0,0 +1 @@
.hljs{background:#fff;color:#434f54}.hljs-subst{color:#434f54}.hljs-attribute,.hljs-doctag,.hljs-keyword,.hljs-name,.hljs-selector-tag{color:#00979d}.hljs-addition,.hljs-built_in,.hljs-bullet,.hljs-code,.hljs-literal{color:#d35400}.hljs-link,.hljs-regexp,.hljs-selector-attr,.hljs-selector-pseudo,.hljs-symbol,.hljs-template-variable,.hljs-variable{color:#00979d}.hljs-deletion,.hljs-quote,.hljs-selector-class,.hljs-selector-id,.hljs-string,.hljs-template-tag,.hljs-type{color:#005c5f}.hljs-comment{color:rgba(149,165,166,.8)}.hljs-meta .hljs-keyword{color:#728e00}.hljs-meta{color:#434f54}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}.hljs-function{color:#728e00}.hljs-section,.hljs-title{color:#800;font-weight:700}.hljs-number{color:#8a7b52}

View File

@ -0,0 +1 @@
.hljs{background:#222;color:#aaa}.hljs-subst{color:#aaa}.hljs-section{color:#fff}.hljs-comment,.hljs-meta,.hljs-quote{color:#444}.hljs-bullet,.hljs-regexp,.hljs-string,.hljs-symbol{color:#fc3}.hljs-addition,.hljs-number{color:#0c6}.hljs-attribute,.hljs-built_in,.hljs-link,.hljs-literal,.hljs-template-variable,.hljs-type{color:#32aaee}.hljs-keyword,.hljs-name,.hljs-selector-class,.hljs-selector-id,.hljs-selector-tag{color:#64a}.hljs-deletion,.hljs-template-tag,.hljs-title,.hljs-variable{color:#b16}.hljs-doctag,.hljs-section,.hljs-strong{font-weight:700}.hljs-emphasis{font-style:italic}

View File

@ -0,0 +1 @@
.hljs{background:#fff;color:#000}.hljs-addition,.hljs-attribute,.hljs-bullet,.hljs-link,.hljs-section,.hljs-string,.hljs-symbol,.hljs-template-variable,.hljs-variable{color:#888}.hljs-comment,.hljs-deletion,.hljs-meta,.hljs-quote{color:#ccc}.hljs-keyword,.hljs-name,.hljs-section,.hljs-selector-tag,.hljs-strong,.hljs-type{font-weight:700}.hljs-emphasis{font-style:italic}

View File

@ -0,0 +1 @@
.hljs{color:#abb2bf;background:#282c34}.hljs-keyword,.hljs-operator{color:#f92672}.hljs-pattern-match{color:#f92672}.hljs-pattern-match .hljs-constructor{color:#61aeee}.hljs-function{color:#61aeee}.hljs-function .hljs-params{color:#a6e22e}.hljs-function .hljs-params .hljs-typing{color:#fd971f}.hljs-module-access .hljs-module{color:#7e57c2}.hljs-constructor{color:#e2b93d}.hljs-constructor .hljs-string{color:#9ccc65}.hljs-comment,.hljs-quote{color:#b18eb1;font-style:italic}.hljs-doctag,.hljs-formula{color:#c678dd}.hljs-deletion,.hljs-name,.hljs-section,.hljs-selector-tag,.hljs-subst{color:#e06c75}.hljs-literal{color:#56b6c2}.hljs-addition,.hljs-attribute,.hljs-meta .hljs-string,.hljs-regexp,.hljs-string{color:#98c379}.hljs-built_in,.hljs-class .hljs-title,.hljs-title.class_{color:#e6c07b}.hljs-attr,.hljs-number,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-pseudo,.hljs-template-variable,.hljs-type,.hljs-variable{color:#d19a66}.hljs-bullet,.hljs-link,.hljs-meta,.hljs-selector-id,.hljs-symbol,.hljs-title{color:#61aeee}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}.hljs-link{text-decoration:underline}

View File

@ -0,0 +1 @@
.hljs{color:#abb2bf;background:#282c34}.hljs-comment,.hljs-quote{color:#5c6370;font-style:italic}.hljs-doctag,.hljs-formula,.hljs-keyword{color:#c678dd}.hljs-deletion,.hljs-name,.hljs-section,.hljs-selector-tag,.hljs-subst{color:#e06c75}.hljs-literal{color:#56b6c2}.hljs-addition,.hljs-attribute,.hljs-meta .hljs-string,.hljs-regexp,.hljs-string{color:#98c379}.hljs-attr,.hljs-number,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-pseudo,.hljs-template-variable,.hljs-type,.hljs-variable{color:#d19a66}.hljs-bullet,.hljs-link,.hljs-meta,.hljs-selector-id,.hljs-symbol,.hljs-title{color:#61aeee}.hljs-built_in,.hljs-class .hljs-title,.hljs-title.class_{color:#e6c07b}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}.hljs-link{text-decoration:underline}

View File

@ -0,0 +1 @@
.hljs{color:#383a42;background:#fafafa}.hljs-comment,.hljs-quote{color:#a0a1a7;font-style:italic}.hljs-doctag,.hljs-formula,.hljs-keyword{color:#a626a4}.hljs-deletion,.hljs-name,.hljs-section,.hljs-selector-tag,.hljs-subst{color:#e45649}.hljs-literal{color:#0184bb}.hljs-addition,.hljs-attribute,.hljs-meta .hljs-string,.hljs-regexp,.hljs-string{color:#50a14f}.hljs-attr,.hljs-number,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-pseudo,.hljs-template-variable,.hljs-type,.hljs-variable{color:#986801}.hljs-bullet,.hljs-link,.hljs-meta,.hljs-selector-id,.hljs-symbol,.hljs-title{color:#4078f2}.hljs-built_in,.hljs-class .hljs-title,.hljs-title.class_{color:#c18401}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}.hljs-link{text-decoration:underline}

View File

@ -0,0 +1 @@
code.hljs{padding:3px 5px}.hljs{color:#81b5ac;background:#031a16}.hljs ::selection{color:#184e45}.hljs-comment{color:#2b685e}.hljs-tag{color:#5f9c92}.hljs-operator,.hljs-punctuation,.hljs-subst{color:#81b5ac}.hljs-operator{opacity:.7}.hljs-bullet,.hljs-deletion,.hljs-name,.hljs-selector-tag,.hljs-template-variable,.hljs-variable{color:#3e9688}.hljs-attr,.hljs-link,.hljs-literal,.hljs-number,.hljs-symbol,.hljs-variable.constant_{color:#3e7996}.hljs-class .hljs-title,.hljs-title,.hljs-title.class_{color:#3e4c96}.hljs-strong{font-weight:700;color:#3e4c96}.hljs-addition,.hljs-code,.hljs-string,.hljs-title.class_.inherited__{color:#883e96}.hljs-built_in,.hljs-doctag,.hljs-keyword.hljs-atrule,.hljs-quote,.hljs-regexp{color:#963e4c}.hljs-attribute,.hljs-function .hljs-title,.hljs-section,.hljs-title.function_,.ruby .hljs-property{color:#96883e}.diff .hljs-meta,.hljs-keyword,.hljs-template-tag,.hljs-type{color:#4c963e}.hljs-emphasis{color:#4c963e;font-style:italic}.hljs-meta,.hljs-meta .hljs-keyword,.hljs-meta .hljs-string{color:#3e965b}.hljs-meta .hljs-keyword,.hljs-meta-keyword{font-weight:700}

View File

@ -0,0 +1 @@
code.hljs{padding:3px 5px}.hljs{color:#bcbcbc;background:#262626}.hljs ::selection{color:#333}.hljs-comment{color:#6c6c6c}.hljs-tag{color:#787878}.hljs-operator,.hljs-punctuation,.hljs-subst{color:#bcbcbc}.hljs-operator{opacity:.7}.hljs-bullet,.hljs-deletion,.hljs-name,.hljs-selector-tag,.hljs-template-variable,.hljs-variable{color:#5f8787}.hljs-attr,.hljs-link,.hljs-literal,.hljs-number,.hljs-symbol,.hljs-variable.constant_{color:#ff8700}.hljs-class .hljs-title,.hljs-title,.hljs-title.class_{color:#5f8787}.hljs-strong{font-weight:700;color:#5f8787}.hljs-addition,.hljs-code,.hljs-string,.hljs-title.class_.inherited__{color:#87af87}.hljs-built_in,.hljs-doctag,.hljs-keyword.hljs-atrule,.hljs-quote,.hljs-regexp{color:#5f875f}.hljs-attribute,.hljs-function .hljs-title,.hljs-section,.hljs-title.function_,.ruby .hljs-property{color:#ffffaf}.diff .hljs-meta,.hljs-keyword,.hljs-template-tag,.hljs-type{color:#87afd7}.hljs-emphasis{color:#87afd7;font-style:italic}.hljs-meta,.hljs-meta .hljs-keyword,.hljs-meta .hljs-string{color:#5f87af}.hljs-meta .hljs-keyword,.hljs-meta-keyword{font-weight:700}

View File

@ -0,0 +1 @@
code.hljs{padding:3px 5px}.hljs{color:#c7ccd1;background:#1c2023}.hljs ::selection{color:#565e65}.hljs-comment{color:#747c84}.hljs-tag{color:#adb3ba}.hljs-operator,.hljs-punctuation,.hljs-subst{color:#c7ccd1}.hljs-operator{opacity:.7}.hljs-bullet,.hljs-deletion,.hljs-name,.hljs-selector-tag,.hljs-template-variable,.hljs-variable{color:#c7ae95}.hljs-attr,.hljs-link,.hljs-literal,.hljs-number,.hljs-symbol,.hljs-variable.constant_{color:#c7c795}.hljs-class .hljs-title,.hljs-title,.hljs-title.class_{color:#aec795}.hljs-strong{font-weight:700;color:#aec795}.hljs-addition,.hljs-code,.hljs-string,.hljs-title.class_.inherited__{color:#95c7ae}.hljs-built_in,.hljs-doctag,.hljs-keyword.hljs-atrule,.hljs-quote,.hljs-regexp{color:#95aec7}.hljs-attribute,.hljs-function .hljs-title,.hljs-section,.hljs-title.function_,.ruby .hljs-property{color:#ae95c7}.diff .hljs-meta,.hljs-keyword,.hljs-template-tag,.hljs-type{color:#c795ae}.hljs-emphasis{color:#c795ae;font-style:italic}.hljs-meta,.hljs-meta .hljs-keyword,.hljs-meta .hljs-string{color:#c79595}.hljs-meta .hljs-keyword,.hljs-meta-keyword{font-weight:700}

View File

@ -0,0 +1 @@
code.hljs{padding:3px 5px}.hljs{color:#585260;background:#efecf4}.hljs ::selection{color:#8b8792}.hljs-comment{color:#7e7887}.hljs-tag{color:#655f6d}.hljs-operator,.hljs-punctuation,.hljs-subst{color:#585260}.hljs-operator{opacity:.7}.hljs-bullet,.hljs-deletion,.hljs-name,.hljs-selector-tag,.hljs-template-variable,.hljs-variable{color:#be4678}.hljs-attr,.hljs-link,.hljs-literal,.hljs-number,.hljs-symbol,.hljs-variable.constant_{color:#aa573c}.hljs-class .hljs-title,.hljs-title,.hljs-title.class_{color:#a06e3b}.hljs-strong{font-weight:700;color:#a06e3b}.hljs-addition,.hljs-code,.hljs-string,.hljs-title.class_.inherited__{color:#2a9292}.hljs-built_in,.hljs-doctag,.hljs-keyword.hljs-atrule,.hljs-quote,.hljs-regexp{color:#398bc6}.hljs-attribute,.hljs-function .hljs-title,.hljs-section,.hljs-title.function_,.ruby .hljs-property{color:#576ddb}.diff .hljs-meta,.hljs-keyword,.hljs-template-tag,.hljs-type{color:#955ae7}.hljs-emphasis{color:#955ae7;font-style:italic}.hljs-meta,.hljs-meta .hljs-keyword,.hljs-meta .hljs-string{color:#bf40bf}.hljs-meta .hljs-keyword,.hljs-meta-keyword{font-weight:700}

View File

@ -0,0 +1 @@
code.hljs{padding:3px 5px}.hljs{color:#8b8792;background:#19171c}.hljs ::selection{color:#585260}.hljs-comment{color:#655f6d}.hljs-tag{color:#7e7887}.hljs-operator,.hljs-punctuation,.hljs-subst{color:#8b8792}.hljs-operator{opacity:.7}.hljs-bullet,.hljs-deletion,.hljs-name,.hljs-selector-tag,.hljs-template-variable,.hljs-variable{color:#be4678}.hljs-attr,.hljs-link,.hljs-literal,.hljs-number,.hljs-symbol,.hljs-variable.constant_{color:#aa573c}.hljs-class .hljs-title,.hljs-title,.hljs-title.class_{color:#a06e3b}.hljs-strong{font-weight:700;color:#a06e3b}.hljs-addition,.hljs-code,.hljs-string,.hljs-title.class_.inherited__{color:#2a9292}.hljs-built_in,.hljs-doctag,.hljs-keyword.hljs-atrule,.hljs-quote,.hljs-regexp{color:#398bc6}.hljs-attribute,.hljs-function .hljs-title,.hljs-section,.hljs-title.function_,.ruby .hljs-property{color:#576ddb}.diff .hljs-meta,.hljs-keyword,.hljs-template-tag,.hljs-type{color:#955ae7}.hljs-emphasis{color:#955ae7;font-style:italic}.hljs-meta,.hljs-meta .hljs-keyword,.hljs-meta .hljs-string{color:#bf40bf}.hljs-meta .hljs-keyword,.hljs-meta-keyword{font-weight:700}

View File

@ -0,0 +1 @@
code.hljs{padding:3px 5px}.hljs{color:#6e6b5e;background:#fefbec}.hljs ::selection{color:#a6a28c}.hljs-comment{color:#999580}.hljs-tag{color:#7d7a68}.hljs-operator,.hljs-punctuation,.hljs-subst{color:#6e6b5e}.hljs-operator{opacity:.7}.hljs-bullet,.hljs-deletion,.hljs-name,.hljs-selector-tag,.hljs-template-variable,.hljs-variable{color:#d73737}.hljs-attr,.hljs-link,.hljs-literal,.hljs-number,.hljs-symbol,.hljs-variable.constant_{color:#b65611}.hljs-class .hljs-title,.hljs-title,.hljs-title.class_{color:#ae9513}.hljs-strong{font-weight:700;color:#ae9513}.hljs-addition,.hljs-code,.hljs-string,.hljs-title.class_.inherited__{color:#60ac39}.hljs-built_in,.hljs-doctag,.hljs-keyword.hljs-atrule,.hljs-quote,.hljs-regexp{color:#1fad83}.hljs-attribute,.hljs-function .hljs-title,.hljs-section,.hljs-title.function_,.ruby .hljs-property{color:#6684e1}.diff .hljs-meta,.hljs-keyword,.hljs-template-tag,.hljs-type{color:#b854d4}.hljs-emphasis{color:#b854d4;font-style:italic}.hljs-meta,.hljs-meta .hljs-keyword,.hljs-meta .hljs-string{color:#d43552}.hljs-meta .hljs-keyword,.hljs-meta-keyword{font-weight:700}

View File

@ -0,0 +1 @@
code.hljs{padding:3px 5px}.hljs{color:#a6a28c;background:#20201d}.hljs ::selection{color:#6e6b5e}.hljs-comment{color:#7d7a68}.hljs-tag{color:#999580}.hljs-operator,.hljs-punctuation,.hljs-subst{color:#a6a28c}.hljs-operator{opacity:.7}.hljs-bullet,.hljs-deletion,.hljs-name,.hljs-selector-tag,.hljs-template-variable,.hljs-variable{color:#d73737}.hljs-attr,.hljs-link,.hljs-literal,.hljs-number,.hljs-symbol,.hljs-variable.constant_{color:#b65611}.hljs-class .hljs-title,.hljs-title,.hljs-title.class_{color:#ae9513}.hljs-strong{font-weight:700;color:#ae9513}.hljs-addition,.hljs-code,.hljs-string,.hljs-title.class_.inherited__{color:#60ac39}.hljs-built_in,.hljs-doctag,.hljs-keyword.hljs-atrule,.hljs-quote,.hljs-regexp{color:#1fad83}.hljs-attribute,.hljs-function .hljs-title,.hljs-section,.hljs-title.function_,.ruby .hljs-property{color:#6684e1}.diff .hljs-meta,.hljs-keyword,.hljs-template-tag,.hljs-type{color:#b854d4}.hljs-emphasis{color:#b854d4;font-style:italic}.hljs-meta,.hljs-meta .hljs-keyword,.hljs-meta .hljs-string{color:#d43552}.hljs-meta .hljs-keyword,.hljs-meta-keyword{font-weight:700}

View File

@ -0,0 +1 @@
code.hljs{padding:3px 5px}.hljs{color:#5f5e4e;background:#f4f3ec}.hljs ::selection{color:#929181}.hljs-comment{color:#878573}.hljs-tag{color:#6c6b5a}.hljs-operator,.hljs-punctuation,.hljs-subst{color:#5f5e4e}.hljs-operator{opacity:.7}.hljs-bullet,.hljs-deletion,.hljs-name,.hljs-selector-tag,.hljs-template-variable,.hljs-variable{color:#ba6236}.hljs-attr,.hljs-link,.hljs-literal,.hljs-number,.hljs-symbol,.hljs-variable.constant_{color:#ae7313}.hljs-class .hljs-title,.hljs-title,.hljs-title.class_{color:#a5980d}.hljs-strong{font-weight:700;color:#a5980d}.hljs-addition,.hljs-code,.hljs-string,.hljs-title.class_.inherited__{color:#7d9726}.hljs-built_in,.hljs-doctag,.hljs-keyword.hljs-atrule,.hljs-quote,.hljs-regexp{color:#5b9d48}.hljs-attribute,.hljs-function .hljs-title,.hljs-section,.hljs-title.function_,.ruby .hljs-property{color:#36a166}.diff .hljs-meta,.hljs-keyword,.hljs-template-tag,.hljs-type{color:#5f9182}.hljs-emphasis{color:#5f9182;font-style:italic}.hljs-meta,.hljs-meta .hljs-keyword,.hljs-meta .hljs-string{color:#9d6c7c}.hljs-meta .hljs-keyword,.hljs-meta-keyword{font-weight:700}

View File

@ -0,0 +1 @@
code.hljs{padding:3px 5px}.hljs{color:#929181;background:#22221b}.hljs ::selection{color:#5f5e4e}.hljs-comment{color:#6c6b5a}.hljs-tag{color:#878573}.hljs-operator,.hljs-punctuation,.hljs-subst{color:#929181}.hljs-operator{opacity:.7}.hljs-bullet,.hljs-deletion,.hljs-name,.hljs-selector-tag,.hljs-template-variable,.hljs-variable{color:#ba6236}.hljs-attr,.hljs-link,.hljs-literal,.hljs-number,.hljs-symbol,.hljs-variable.constant_{color:#ae7313}.hljs-class .hljs-title,.hljs-title,.hljs-title.class_{color:#a5980d}.hljs-strong{font-weight:700;color:#a5980d}.hljs-addition,.hljs-code,.hljs-string,.hljs-title.class_.inherited__{color:#7d9726}.hljs-built_in,.hljs-doctag,.hljs-keyword.hljs-atrule,.hljs-quote,.hljs-regexp{color:#5b9d48}.hljs-attribute,.hljs-function .hljs-title,.hljs-section,.hljs-title.function_,.ruby .hljs-property{color:#36a166}.diff .hljs-meta,.hljs-keyword,.hljs-template-tag,.hljs-type{color:#5f9182}.hljs-emphasis{color:#5f9182;font-style:italic}.hljs-meta,.hljs-meta .hljs-keyword,.hljs-meta .hljs-string{color:#9d6c7c}.hljs-meta .hljs-keyword,.hljs-meta-keyword{font-weight:700}

View File

@ -0,0 +1 @@
code.hljs{padding:3px 5px}.hljs{color:#68615e;background:#f1efee}.hljs ::selection{color:#a8a19f}.hljs-comment{color:#9c9491}.hljs-tag{color:#766e6b}.hljs-operator,.hljs-punctuation,.hljs-subst{color:#68615e}.hljs-operator{opacity:.7}.hljs-bullet,.hljs-deletion,.hljs-name,.hljs-selector-tag,.hljs-template-variable,.hljs-variable{color:#f22c40}.hljs-attr,.hljs-link,.hljs-literal,.hljs-number,.hljs-symbol,.hljs-variable.constant_{color:#df5320}.hljs-class .hljs-title,.hljs-title,.hljs-title.class_{color:#c38418}.hljs-strong{font-weight:700;color:#c38418}.hljs-addition,.hljs-code,.hljs-string,.hljs-title.class_.inherited__{color:#7b9726}.hljs-built_in,.hljs-doctag,.hljs-keyword.hljs-atrule,.hljs-quote,.hljs-regexp{color:#3d97b8}.hljs-attribute,.hljs-function .hljs-title,.hljs-section,.hljs-title.function_,.ruby .hljs-property{color:#407ee7}.diff .hljs-meta,.hljs-keyword,.hljs-template-tag,.hljs-type{color:#6666ea}.hljs-emphasis{color:#6666ea;font-style:italic}.hljs-meta,.hljs-meta .hljs-keyword,.hljs-meta .hljs-string{color:#c33ff3}.hljs-meta .hljs-keyword,.hljs-meta-keyword{font-weight:700}

View File

@ -0,0 +1 @@
code.hljs{padding:3px 5px}.hljs{color:#a8a19f;background:#1b1918}.hljs ::selection{color:#68615e}.hljs-comment{color:#766e6b}.hljs-tag{color:#9c9491}.hljs-operator,.hljs-punctuation,.hljs-subst{color:#a8a19f}.hljs-operator{opacity:.7}.hljs-bullet,.hljs-deletion,.hljs-name,.hljs-selector-tag,.hljs-template-variable,.hljs-variable{color:#f22c40}.hljs-attr,.hljs-link,.hljs-literal,.hljs-number,.hljs-symbol,.hljs-variable.constant_{color:#df5320}.hljs-class .hljs-title,.hljs-title,.hljs-title.class_{color:#c38418}.hljs-strong{font-weight:700;color:#c38418}.hljs-addition,.hljs-code,.hljs-string,.hljs-title.class_.inherited__{color:#7b9726}.hljs-built_in,.hljs-doctag,.hljs-keyword.hljs-atrule,.hljs-quote,.hljs-regexp{color:#3d97b8}.hljs-attribute,.hljs-function .hljs-title,.hljs-section,.hljs-title.function_,.ruby .hljs-property{color:#407ee7}.diff .hljs-meta,.hljs-keyword,.hljs-template-tag,.hljs-type{color:#6666ea}.hljs-emphasis{color:#6666ea;font-style:italic}.hljs-meta,.hljs-meta .hljs-keyword,.hljs-meta .hljs-string{color:#c33ff3}.hljs-meta .hljs-keyword,.hljs-meta-keyword{font-weight:700}

View File

@ -0,0 +1 @@
code.hljs{padding:3px 5px}.hljs{color:#695d69;background:#f7f3f7}.hljs ::selection{color:#ab9bab}.hljs-comment{color:#9e8f9e}.hljs-tag{color:#776977}.hljs-operator,.hljs-punctuation,.hljs-subst{color:#695d69}.hljs-operator{opacity:.7}.hljs-bullet,.hljs-deletion,.hljs-name,.hljs-selector-tag,.hljs-template-variable,.hljs-variable{color:#ca402b}.hljs-attr,.hljs-link,.hljs-literal,.hljs-number,.hljs-symbol,.hljs-variable.constant_{color:#a65926}.hljs-class .hljs-title,.hljs-title,.hljs-title.class_{color:#bb8a35}.hljs-strong{font-weight:700;color:#bb8a35}.hljs-addition,.hljs-code,.hljs-string,.hljs-title.class_.inherited__{color:#918b3b}.hljs-built_in,.hljs-doctag,.hljs-keyword.hljs-atrule,.hljs-quote,.hljs-regexp{color:#159393}.hljs-attribute,.hljs-function .hljs-title,.hljs-section,.hljs-title.function_,.ruby .hljs-property{color:#516aec}.diff .hljs-meta,.hljs-keyword,.hljs-template-tag,.hljs-type{color:#7b59c0}.hljs-emphasis{color:#7b59c0;font-style:italic}.hljs-meta,.hljs-meta .hljs-keyword,.hljs-meta .hljs-string{color:#c3c}.hljs-meta .hljs-keyword,.hljs-meta-keyword{font-weight:700}

View File

@ -0,0 +1 @@
code.hljs{padding:3px 5px}.hljs{color:#ab9bab;background:#1b181b}.hljs ::selection{color:#695d69}.hljs-comment{color:#776977}.hljs-tag{color:#9e8f9e}.hljs-operator,.hljs-punctuation,.hljs-subst{color:#ab9bab}.hljs-operator{opacity:.7}.hljs-bullet,.hljs-deletion,.hljs-name,.hljs-selector-tag,.hljs-template-variable,.hljs-variable{color:#ca402b}.hljs-attr,.hljs-link,.hljs-literal,.hljs-number,.hljs-symbol,.hljs-variable.constant_{color:#a65926}.hljs-class .hljs-title,.hljs-title,.hljs-title.class_{color:#bb8a35}.hljs-strong{font-weight:700;color:#bb8a35}.hljs-addition,.hljs-code,.hljs-string,.hljs-title.class_.inherited__{color:#918b3b}.hljs-built_in,.hljs-doctag,.hljs-keyword.hljs-atrule,.hljs-quote,.hljs-regexp{color:#159393}.hljs-attribute,.hljs-function .hljs-title,.hljs-section,.hljs-title.function_,.ruby .hljs-property{color:#516aec}.diff .hljs-meta,.hljs-keyword,.hljs-template-tag,.hljs-type{color:#7b59c0}.hljs-emphasis{color:#7b59c0;font-style:italic}.hljs-meta,.hljs-meta .hljs-keyword,.hljs-meta .hljs-string{color:#c3c}.hljs-meta .hljs-keyword,.hljs-meta-keyword{font-weight:700}

View File

@ -0,0 +1 @@
code.hljs{padding:3px 5px}.hljs{color:#516d7b;background:#ebf8ff}.hljs ::selection{color:#7ea2b4}.hljs-comment{color:#7195a8}.hljs-tag{color:#5a7b8c}.hljs-operator,.hljs-punctuation,.hljs-subst{color:#516d7b}.hljs-operator{opacity:.7}.hljs-bullet,.hljs-deletion,.hljs-name,.hljs-selector-tag,.hljs-template-variable,.hljs-variable{color:#d22d72}.hljs-attr,.hljs-link,.hljs-literal,.hljs-number,.hljs-symbol,.hljs-variable.constant_{color:#935c25}.hljs-class .hljs-title,.hljs-title,.hljs-title.class_{color:#8a8a0f}.hljs-strong{font-weight:700;color:#8a8a0f}.hljs-addition,.hljs-code,.hljs-string,.hljs-title.class_.inherited__{color:#568c3b}.hljs-built_in,.hljs-doctag,.hljs-keyword.hljs-atrule,.hljs-quote,.hljs-regexp{color:#2d8f6f}.hljs-attribute,.hljs-function .hljs-title,.hljs-section,.hljs-title.function_,.ruby .hljs-property{color:#257fad}.diff .hljs-meta,.hljs-keyword,.hljs-template-tag,.hljs-type{color:#6b6bb8}.hljs-emphasis{color:#6b6bb8;font-style:italic}.hljs-meta,.hljs-meta .hljs-keyword,.hljs-meta .hljs-string{color:#b72dd2}.hljs-meta .hljs-keyword,.hljs-meta-keyword{font-weight:700}

View File

@ -0,0 +1 @@
code.hljs{padding:3px 5px}.hljs{color:#7ea2b4;background:#161b1d}.hljs ::selection{color:#516d7b}.hljs-comment{color:#5a7b8c}.hljs-tag{color:#7195a8}.hljs-operator,.hljs-punctuation,.hljs-subst{color:#7ea2b4}.hljs-operator{opacity:.7}.hljs-bullet,.hljs-deletion,.hljs-name,.hljs-selector-tag,.hljs-template-variable,.hljs-variable{color:#d22d72}.hljs-attr,.hljs-link,.hljs-literal,.hljs-number,.hljs-symbol,.hljs-variable.constant_{color:#935c25}.hljs-class .hljs-title,.hljs-title,.hljs-title.class_{color:#8a8a0f}.hljs-strong{font-weight:700;color:#8a8a0f}.hljs-addition,.hljs-code,.hljs-string,.hljs-title.class_.inherited__{color:#568c3b}.hljs-built_in,.hljs-doctag,.hljs-keyword.hljs-atrule,.hljs-quote,.hljs-regexp{color:#2d8f6f}.hljs-attribute,.hljs-function .hljs-title,.hljs-section,.hljs-title.function_,.ruby .hljs-property{color:#257fad}.diff .hljs-meta,.hljs-keyword,.hljs-template-tag,.hljs-type{color:#6b6bb8}.hljs-emphasis{color:#6b6bb8;font-style:italic}.hljs-meta,.hljs-meta .hljs-keyword,.hljs-meta .hljs-string{color:#b72dd2}.hljs-meta .hljs-keyword,.hljs-meta-keyword{font-weight:700}

View File

@ -0,0 +1 @@
code.hljs{padding:3px 5px}.hljs{color:#585050;background:#f4ecec}.hljs ::selection{color:#8a8585}.hljs-comment{color:#7e7777}.hljs-tag{color:#655d5d}.hljs-operator,.hljs-punctuation,.hljs-subst{color:#585050}.hljs-operator{opacity:.7}.hljs-bullet,.hljs-deletion,.hljs-name,.hljs-selector-tag,.hljs-template-variable,.hljs-variable{color:#ca4949}.hljs-attr,.hljs-link,.hljs-literal,.hljs-number,.hljs-symbol,.hljs-variable.constant_{color:#b45a3c}.hljs-class .hljs-title,.hljs-title,.hljs-title.class_{color:#a06e3b}.hljs-strong{font-weight:700;color:#a06e3b}.hljs-addition,.hljs-code,.hljs-string,.hljs-title.class_.inherited__{color:#4b8b8b}.hljs-built_in,.hljs-doctag,.hljs-keyword.hljs-atrule,.hljs-quote,.hljs-regexp{color:#5485b6}.hljs-attribute,.hljs-function .hljs-title,.hljs-section,.hljs-title.function_,.ruby .hljs-property{color:#7272ca}.diff .hljs-meta,.hljs-keyword,.hljs-template-tag,.hljs-type{color:#8464c4}.hljs-emphasis{color:#8464c4;font-style:italic}.hljs-meta,.hljs-meta .hljs-keyword,.hljs-meta .hljs-string{color:#bd5187}.hljs-meta .hljs-keyword,.hljs-meta-keyword{font-weight:700}

View File

@ -0,0 +1 @@
code.hljs{padding:3px 5px}.hljs{color:#8a8585;background:#1b1818}.hljs ::selection{color:#585050}.hljs-comment{color:#655d5d}.hljs-tag{color:#7e7777}.hljs-operator,.hljs-punctuation,.hljs-subst{color:#8a8585}.hljs-operator{opacity:.7}.hljs-bullet,.hljs-deletion,.hljs-name,.hljs-selector-tag,.hljs-template-variable,.hljs-variable{color:#ca4949}.hljs-attr,.hljs-link,.hljs-literal,.hljs-number,.hljs-symbol,.hljs-variable.constant_{color:#b45a3c}.hljs-class .hljs-title,.hljs-title,.hljs-title.class_{color:#a06e3b}.hljs-strong{font-weight:700;color:#a06e3b}.hljs-addition,.hljs-code,.hljs-string,.hljs-title.class_.inherited__{color:#4b8b8b}.hljs-built_in,.hljs-doctag,.hljs-keyword.hljs-atrule,.hljs-quote,.hljs-regexp{color:#5485b6}.hljs-attribute,.hljs-function .hljs-title,.hljs-section,.hljs-title.function_,.ruby .hljs-property{color:#7272ca}.diff .hljs-meta,.hljs-keyword,.hljs-template-tag,.hljs-type{color:#8464c4}.hljs-emphasis{color:#8464c4;font-style:italic}.hljs-meta,.hljs-meta .hljs-keyword,.hljs-meta .hljs-string{color:#bd5187}.hljs-meta .hljs-keyword,.hljs-meta-keyword{font-weight:700}

View File

@ -0,0 +1 @@
code.hljs{padding:3px 5px}.hljs{color:#526057;background:#ecf4ee}.hljs ::selection{color:#87928a}.hljs-comment{color:#78877d}.hljs-tag{color:#5f6d64}.hljs-operator,.hljs-punctuation,.hljs-subst{color:#526057}.hljs-operator{opacity:.7}.hljs-bullet,.hljs-deletion,.hljs-name,.hljs-selector-tag,.hljs-template-variable,.hljs-variable{color:#b16139}.hljs-attr,.hljs-link,.hljs-literal,.hljs-number,.hljs-symbol,.hljs-variable.constant_{color:#9f713c}.hljs-class .hljs-title,.hljs-title,.hljs-title.class_{color:#a07e3b}.hljs-strong{font-weight:700;color:#a07e3b}.hljs-addition,.hljs-code,.hljs-string,.hljs-title.class_.inherited__{color:#489963}.hljs-built_in,.hljs-doctag,.hljs-keyword.hljs-atrule,.hljs-quote,.hljs-regexp{color:#1c9aa0}.hljs-attribute,.hljs-function .hljs-title,.hljs-section,.hljs-title.function_,.ruby .hljs-property{color:#478c90}.diff .hljs-meta,.hljs-keyword,.hljs-template-tag,.hljs-type{color:#55859b}.hljs-emphasis{color:#55859b;font-style:italic}.hljs-meta,.hljs-meta .hljs-keyword,.hljs-meta .hljs-string{color:#867469}.hljs-meta .hljs-keyword,.hljs-meta-keyword{font-weight:700}

View File

@ -0,0 +1 @@
code.hljs{padding:3px 5px}.hljs{color:#87928a;background:#171c19}.hljs ::selection{color:#526057}.hljs-comment{color:#5f6d64}.hljs-tag{color:#78877d}.hljs-operator,.hljs-punctuation,.hljs-subst{color:#87928a}.hljs-operator{opacity:.7}.hljs-bullet,.hljs-deletion,.hljs-name,.hljs-selector-tag,.hljs-template-variable,.hljs-variable{color:#b16139}.hljs-attr,.hljs-link,.hljs-literal,.hljs-number,.hljs-symbol,.hljs-variable.constant_{color:#9f713c}.hljs-class .hljs-title,.hljs-title,.hljs-title.class_{color:#a07e3b}.hljs-strong{font-weight:700;color:#a07e3b}.hljs-addition,.hljs-code,.hljs-string,.hljs-title.class_.inherited__{color:#489963}.hljs-built_in,.hljs-doctag,.hljs-keyword.hljs-atrule,.hljs-quote,.hljs-regexp{color:#1c9aa0}.hljs-attribute,.hljs-function .hljs-title,.hljs-section,.hljs-title.function_,.ruby .hljs-property{color:#478c90}.diff .hljs-meta,.hljs-keyword,.hljs-template-tag,.hljs-type{color:#55859b}.hljs-emphasis{color:#55859b;font-style:italic}.hljs-meta,.hljs-meta .hljs-keyword,.hljs-meta .hljs-string{color:#867469}.hljs-meta .hljs-keyword,.hljs-meta-keyword{font-weight:700}

View File

@ -0,0 +1 @@
code.hljs{padding:3px 5px}.hljs{color:#5e6e5e;background:#f4fbf4}.hljs ::selection{color:#8ca68c}.hljs-comment{color:#809980}.hljs-tag{color:#687d68}.hljs-operator,.hljs-punctuation,.hljs-subst{color:#5e6e5e}.hljs-operator{opacity:.7}.hljs-bullet,.hljs-deletion,.hljs-name,.hljs-selector-tag,.hljs-template-variable,.hljs-variable{color:#e6193c}.hljs-attr,.hljs-link,.hljs-literal,.hljs-number,.hljs-symbol,.hljs-variable.constant_{color:#87711d}.hljs-class .hljs-title,.hljs-title,.hljs-title.class_{color:#98981b}.hljs-strong{font-weight:700;color:#98981b}.hljs-addition,.hljs-code,.hljs-string,.hljs-title.class_.inherited__{color:#29a329}.hljs-built_in,.hljs-doctag,.hljs-keyword.hljs-atrule,.hljs-quote,.hljs-regexp{color:#1999b3}.hljs-attribute,.hljs-function .hljs-title,.hljs-section,.hljs-title.function_,.ruby .hljs-property{color:#3d62f5}.diff .hljs-meta,.hljs-keyword,.hljs-template-tag,.hljs-type{color:#ad2bee}.hljs-emphasis{color:#ad2bee;font-style:italic}.hljs-meta,.hljs-meta .hljs-keyword,.hljs-meta .hljs-string{color:#e619c3}.hljs-meta .hljs-keyword,.hljs-meta-keyword{font-weight:700}

View File

@ -0,0 +1 @@
code.hljs{padding:3px 5px}.hljs{color:#8ca68c;background:#131513}.hljs ::selection{color:#5e6e5e}.hljs-comment{color:#687d68}.hljs-tag{color:#809980}.hljs-operator,.hljs-punctuation,.hljs-subst{color:#8ca68c}.hljs-operator{opacity:.7}.hljs-bullet,.hljs-deletion,.hljs-name,.hljs-selector-tag,.hljs-template-variable,.hljs-variable{color:#e6193c}.hljs-attr,.hljs-link,.hljs-literal,.hljs-number,.hljs-symbol,.hljs-variable.constant_{color:#87711d}.hljs-class .hljs-title,.hljs-title,.hljs-title.class_{color:#98981b}.hljs-strong{font-weight:700;color:#98981b}.hljs-addition,.hljs-code,.hljs-string,.hljs-title.class_.inherited__{color:#29a329}.hljs-built_in,.hljs-doctag,.hljs-keyword.hljs-atrule,.hljs-quote,.hljs-regexp{color:#1999b3}.hljs-attribute,.hljs-function .hljs-title,.hljs-section,.hljs-title.function_,.ruby .hljs-property{color:#3d62f5}.diff .hljs-meta,.hljs-keyword,.hljs-template-tag,.hljs-type{color:#ad2bee}.hljs-emphasis{color:#ad2bee;font-style:italic}.hljs-meta,.hljs-meta .hljs-keyword,.hljs-meta .hljs-string{color:#e619c3}.hljs-meta .hljs-keyword,.hljs-meta-keyword{font-weight:700}

View File

@ -0,0 +1 @@
code.hljs{padding:3px 5px}.hljs{color:#5e6687;background:#f5f7ff}.hljs ::selection{color:#979db4}.hljs-comment{color:#898ea4}.hljs-tag{color:#6b7394}.hljs-operator,.hljs-punctuation,.hljs-subst{color:#5e6687}.hljs-operator{opacity:.7}.hljs-bullet,.hljs-deletion,.hljs-name,.hljs-selector-tag,.hljs-template-variable,.hljs-variable{color:#c94922}.hljs-attr,.hljs-link,.hljs-literal,.hljs-number,.hljs-symbol,.hljs-variable.constant_{color:#c76b29}.hljs-class .hljs-title,.hljs-title,.hljs-title.class_{color:#c08b30}.hljs-strong{font-weight:700;color:#c08b30}.hljs-addition,.hljs-code,.hljs-string,.hljs-title.class_.inherited__{color:#ac9739}.hljs-built_in,.hljs-doctag,.hljs-keyword.hljs-atrule,.hljs-quote,.hljs-regexp{color:#22a2c9}.hljs-attribute,.hljs-function .hljs-title,.hljs-section,.hljs-title.function_,.ruby .hljs-property{color:#3d8fd1}.diff .hljs-meta,.hljs-keyword,.hljs-template-tag,.hljs-type{color:#6679cc}.hljs-emphasis{color:#6679cc;font-style:italic}.hljs-meta,.hljs-meta .hljs-keyword,.hljs-meta .hljs-string{color:#9c637a}.hljs-meta .hljs-keyword,.hljs-meta-keyword{font-weight:700}

View File

@ -0,0 +1 @@
code.hljs{padding:3px 5px}.hljs{color:#979db4;background:#202746}.hljs ::selection{color:#5e6687}.hljs-comment{color:#6b7394}.hljs-tag{color:#898ea4}.hljs-operator,.hljs-punctuation,.hljs-subst{color:#979db4}.hljs-operator{opacity:.7}.hljs-bullet,.hljs-deletion,.hljs-name,.hljs-selector-tag,.hljs-template-variable,.hljs-variable{color:#c94922}.hljs-attr,.hljs-link,.hljs-literal,.hljs-number,.hljs-symbol,.hljs-variable.constant_{color:#c76b29}.hljs-class .hljs-title,.hljs-title,.hljs-title.class_{color:#c08b30}.hljs-strong{font-weight:700;color:#c08b30}.hljs-addition,.hljs-code,.hljs-string,.hljs-title.class_.inherited__{color:#ac9739}.hljs-built_in,.hljs-doctag,.hljs-keyword.hljs-atrule,.hljs-quote,.hljs-regexp{color:#22a2c9}.hljs-attribute,.hljs-function .hljs-title,.hljs-section,.hljs-title.function_,.ruby .hljs-property{color:#3d8fd1}.diff .hljs-meta,.hljs-keyword,.hljs-template-tag,.hljs-type{color:#6679cc}.hljs-emphasis{color:#6679cc;font-style:italic}.hljs-meta,.hljs-meta .hljs-keyword,.hljs-meta .hljs-string{color:#9c637a}.hljs-meta .hljs-keyword,.hljs-meta-keyword{font-weight:700}

View File

@ -0,0 +1 @@
code.hljs{padding:3px 5px}.hljs{color:#a1a19a;background:#002635}.hljs ::selection{color:#517f8d}.hljs-comment{color:#6c8b91}.hljs-tag{color:#869696}.hljs-operator,.hljs-punctuation,.hljs-subst{color:#a1a19a}.hljs-operator{opacity:.7}.hljs-bullet,.hljs-deletion,.hljs-name,.hljs-selector-tag,.hljs-template-variable,.hljs-variable{color:#ff5a67}.hljs-attr,.hljs-link,.hljs-literal,.hljs-number,.hljs-symbol,.hljs-variable.constant_{color:#f08e48}.hljs-class .hljs-title,.hljs-title,.hljs-title.class_{color:#ffcc1b}.hljs-strong{font-weight:700;color:#ffcc1b}.hljs-addition,.hljs-code,.hljs-string,.hljs-title.class_.inherited__{color:#7fc06e}.hljs-built_in,.hljs-doctag,.hljs-keyword.hljs-atrule,.hljs-quote,.hljs-regexp{color:#14747e}.hljs-attribute,.hljs-function .hljs-title,.hljs-section,.hljs-title.function_,.ruby .hljs-property{color:#5dd7b9}.diff .hljs-meta,.hljs-keyword,.hljs-template-tag,.hljs-type{color:#9a70a4}.hljs-emphasis{color:#9a70a4;font-style:italic}.hljs-meta,.hljs-meta .hljs-keyword,.hljs-meta .hljs-string{color:#c43060}.hljs-meta .hljs-keyword,.hljs-meta-keyword{font-weight:700}

View File

@ -0,0 +1 @@
code.hljs{padding:3px 5px}.hljs{color:#8a8986;background:#28211c}.hljs ::selection{color:#5e5d5c}.hljs-comment{color:#666}.hljs-tag{color:#797977}.hljs-operator,.hljs-punctuation,.hljs-subst{color:#8a8986}.hljs-operator{opacity:.7}.hljs-bullet,.hljs-deletion,.hljs-name,.hljs-selector-tag,.hljs-template-variable,.hljs-variable{color:#cf6a4c}.hljs-attr,.hljs-link,.hljs-literal,.hljs-number,.hljs-symbol,.hljs-variable.constant_{color:#cf7d34}.hljs-class .hljs-title,.hljs-title,.hljs-title.class_{color:#f9ee98}.hljs-strong{font-weight:700;color:#f9ee98}.hljs-addition,.hljs-code,.hljs-string,.hljs-title.class_.inherited__{color:#54be0d}.hljs-built_in,.hljs-doctag,.hljs-keyword.hljs-atrule,.hljs-quote,.hljs-regexp{color:#afc4db}.hljs-attribute,.hljs-function .hljs-title,.hljs-section,.hljs-title.function_,.ruby .hljs-property{color:#5ea6ea}.diff .hljs-meta,.hljs-keyword,.hljs-template-tag,.hljs-type{color:#9b859d}.hljs-emphasis{color:#9b859d;font-style:italic}.hljs-meta,.hljs-meta .hljs-keyword,.hljs-meta .hljs-string{color:#937121}.hljs-meta .hljs-keyword,.hljs-meta-keyword{font-weight:700}

View File

@ -0,0 +1 @@
code.hljs{padding:3px 5px}.hljs{color:#c1c1c1;background:#000}.hljs ::selection{color:#222}.hljs-comment{color:#333}.hljs-tag{color:#999}.hljs-operator,.hljs-punctuation,.hljs-subst{color:#c1c1c1}.hljs-operator{opacity:.7}.hljs-bullet,.hljs-deletion,.hljs-name,.hljs-selector-tag,.hljs-template-variable,.hljs-variable{color:#5f8787}.hljs-attr,.hljs-link,.hljs-literal,.hljs-number,.hljs-symbol,.hljs-variable.constant_{color:#aaa}.hljs-class .hljs-title,.hljs-title,.hljs-title.class_{color:#e78a53}.hljs-strong{font-weight:700;color:#e78a53}.hljs-addition,.hljs-code,.hljs-string,.hljs-title.class_.inherited__{color:#fbcb97}.hljs-built_in,.hljs-doctag,.hljs-keyword.hljs-atrule,.hljs-quote,.hljs-regexp{color:#aaa}.hljs-attribute,.hljs-function .hljs-title,.hljs-section,.hljs-title.function_,.ruby .hljs-property{color:#888}.diff .hljs-meta,.hljs-keyword,.hljs-template-tag,.hljs-type{color:#999}.hljs-emphasis{color:#999;font-style:italic}.hljs-meta,.hljs-meta .hljs-keyword,.hljs-meta .hljs-string{color:#444}.hljs-meta .hljs-keyword,.hljs-meta-keyword{font-weight:700}

View File

@ -0,0 +1 @@
code.hljs{padding:3px 5px}.hljs{color:#c1c1c1;background:#000}.hljs ::selection{color:#222}.hljs-comment{color:#333}.hljs-tag{color:#999}.hljs-operator,.hljs-punctuation,.hljs-subst{color:#c1c1c1}.hljs-operator{opacity:.7}.hljs-bullet,.hljs-deletion,.hljs-name,.hljs-selector-tag,.hljs-template-variable,.hljs-variable{color:#5f8787}.hljs-attr,.hljs-link,.hljs-literal,.hljs-number,.hljs-symbol,.hljs-variable.constant_{color:#aaa}.hljs-class .hljs-title,.hljs-title,.hljs-title.class_{color:#9ba}.hljs-strong{font-weight:700;color:#9ba}.hljs-addition,.hljs-code,.hljs-string,.hljs-title.class_.inherited__{color:#dec}.hljs-built_in,.hljs-doctag,.hljs-keyword.hljs-atrule,.hljs-quote,.hljs-regexp{color:#aaa}.hljs-attribute,.hljs-function .hljs-title,.hljs-section,.hljs-title.function_,.ruby .hljs-property{color:#888}.diff .hljs-meta,.hljs-keyword,.hljs-template-tag,.hljs-type{color:#999}.hljs-emphasis{color:#999;font-style:italic}.hljs-meta,.hljs-meta .hljs-keyword,.hljs-meta .hljs-string{color:#444}.hljs-meta .hljs-keyword,.hljs-meta-keyword{font-weight:700}

View File

@ -0,0 +1 @@
code.hljs{padding:3px 5px}.hljs{color:#c1c1c1;background:#000}.hljs ::selection{color:#222}.hljs-comment{color:#333}.hljs-tag{color:#999}.hljs-operator,.hljs-punctuation,.hljs-subst{color:#c1c1c1}.hljs-operator{opacity:.7}.hljs-bullet,.hljs-deletion,.hljs-name,.hljs-selector-tag,.hljs-template-variable,.hljs-variable{color:#5f8787}.hljs-attr,.hljs-link,.hljs-literal,.hljs-number,.hljs-symbol,.hljs-variable.constant_{color:#aaa}.hljs-class .hljs-title,.hljs-title,.hljs-title.class_{color:#5f81a5}.hljs-strong{font-weight:700;color:#5f81a5}.hljs-addition,.hljs-code,.hljs-string,.hljs-title.class_.inherited__{color:#d0dfee}.hljs-built_in,.hljs-doctag,.hljs-keyword.hljs-atrule,.hljs-quote,.hljs-regexp{color:#aaa}.hljs-attribute,.hljs-function .hljs-title,.hljs-section,.hljs-title.function_,.ruby .hljs-property{color:#888}.diff .hljs-meta,.hljs-keyword,.hljs-template-tag,.hljs-type{color:#999}.hljs-emphasis{color:#999;font-style:italic}.hljs-meta,.hljs-meta .hljs-keyword,.hljs-meta .hljs-string{color:#444}.hljs-meta .hljs-keyword,.hljs-meta-keyword{font-weight:700}

View File

@ -0,0 +1 @@
code.hljs{padding:3px 5px}.hljs{color:#c1c1c1;background:#000}.hljs ::selection{color:#222}.hljs-comment{color:#333}.hljs-tag{color:#999}.hljs-operator,.hljs-punctuation,.hljs-subst{color:#c1c1c1}.hljs-operator{opacity:.7}.hljs-bullet,.hljs-deletion,.hljs-name,.hljs-selector-tag,.hljs-template-variable,.hljs-variable{color:#5f8787}.hljs-attr,.hljs-link,.hljs-literal,.hljs-number,.hljs-symbol,.hljs-variable.constant_{color:#aaa}.hljs-class .hljs-title,.hljs-title,.hljs-title.class_{color:#8c7f70}.hljs-strong{font-weight:700;color:#8c7f70}.hljs-addition,.hljs-code,.hljs-string,.hljs-title.class_.inherited__{color:#9b8d7f}.hljs-built_in,.hljs-doctag,.hljs-keyword.hljs-atrule,.hljs-quote,.hljs-regexp{color:#aaa}.hljs-attribute,.hljs-function .hljs-title,.hljs-section,.hljs-title.function_,.ruby .hljs-property{color:#888}.diff .hljs-meta,.hljs-keyword,.hljs-template-tag,.hljs-type{color:#999}.hljs-emphasis{color:#999;font-style:italic}.hljs-meta,.hljs-meta .hljs-keyword,.hljs-meta .hljs-string{color:#444}.hljs-meta .hljs-keyword,.hljs-meta-keyword{font-weight:700}

View File

@ -0,0 +1 @@
code.hljs{padding:3px 5px}.hljs{color:#c1c1c1;background:#000}.hljs ::selection{color:#222}.hljs-comment{color:#333}.hljs-tag{color:#999}.hljs-operator,.hljs-punctuation,.hljs-subst{color:#c1c1c1}.hljs-operator{opacity:.7}.hljs-bullet,.hljs-deletion,.hljs-name,.hljs-selector-tag,.hljs-template-variable,.hljs-variable{color:#5f8787}.hljs-attr,.hljs-link,.hljs-literal,.hljs-number,.hljs-symbol,.hljs-variable.constant_{color:#aaa}.hljs-class .hljs-title,.hljs-title,.hljs-title.class_{color:#567}.hljs-strong{font-weight:700;color:#567}.hljs-addition,.hljs-code,.hljs-string,.hljs-title.class_.inherited__{color:#79b}.hljs-built_in,.hljs-doctag,.hljs-keyword.hljs-atrule,.hljs-quote,.hljs-regexp{color:#aaa}.hljs-attribute,.hljs-function .hljs-title,.hljs-section,.hljs-title.function_,.ruby .hljs-property{color:#888}.diff .hljs-meta,.hljs-keyword,.hljs-template-tag,.hljs-type{color:#999}.hljs-emphasis{color:#999;font-style:italic}.hljs-meta,.hljs-meta .hljs-keyword,.hljs-meta .hljs-string{color:#444}.hljs-meta .hljs-keyword,.hljs-meta-keyword{font-weight:700}

View File

@ -0,0 +1 @@
code.hljs{padding:3px 5px}.hljs{color:#c1c1c1;background:#000}.hljs ::selection{color:#222}.hljs-comment{color:#333}.hljs-tag{color:#999}.hljs-operator,.hljs-punctuation,.hljs-subst{color:#c1c1c1}.hljs-operator{opacity:.7}.hljs-bullet,.hljs-deletion,.hljs-name,.hljs-selector-tag,.hljs-template-variable,.hljs-variable{color:#5f8787}.hljs-attr,.hljs-link,.hljs-literal,.hljs-number,.hljs-symbol,.hljs-variable.constant_{color:#aaa}.hljs-class .hljs-title,.hljs-title,.hljs-title.class_{color:#974b46}.hljs-strong{font-weight:700;color:#974b46}.hljs-addition,.hljs-code,.hljs-string,.hljs-title.class_.inherited__{color:#eceee3}.hljs-built_in,.hljs-doctag,.hljs-keyword.hljs-atrule,.hljs-quote,.hljs-regexp{color:#aaa}.hljs-attribute,.hljs-function .hljs-title,.hljs-section,.hljs-title.function_,.ruby .hljs-property{color:#888}.diff .hljs-meta,.hljs-keyword,.hljs-template-tag,.hljs-type{color:#999}.hljs-emphasis{color:#999;font-style:italic}.hljs-meta,.hljs-meta .hljs-keyword,.hljs-meta .hljs-string{color:#444}.hljs-meta .hljs-keyword,.hljs-meta-keyword{font-weight:700}

View File

@ -0,0 +1 @@
code.hljs{padding:3px 5px}.hljs{color:#c1c1c1;background:#000}.hljs ::selection{color:#222}.hljs-comment{color:#333}.hljs-tag{color:#999}.hljs-operator,.hljs-punctuation,.hljs-subst{color:#c1c1c1}.hljs-operator{opacity:.7}.hljs-bullet,.hljs-deletion,.hljs-name,.hljs-selector-tag,.hljs-template-variable,.hljs-variable{color:#5f8787}.hljs-attr,.hljs-link,.hljs-literal,.hljs-number,.hljs-symbol,.hljs-variable.constant_{color:#aaa}.hljs-class .hljs-title,.hljs-title,.hljs-title.class_{color:#626b67}.hljs-strong{font-weight:700;color:#626b67}.hljs-addition,.hljs-code,.hljs-string,.hljs-title.class_.inherited__{color:#a5aaa7}.hljs-built_in,.hljs-doctag,.hljs-keyword.hljs-atrule,.hljs-quote,.hljs-regexp{color:#aaa}.hljs-attribute,.hljs-function .hljs-title,.hljs-section,.hljs-title.function_,.ruby .hljs-property{color:#888}.diff .hljs-meta,.hljs-keyword,.hljs-template-tag,.hljs-type{color:#999}.hljs-emphasis{color:#999;font-style:italic}.hljs-meta,.hljs-meta .hljs-keyword,.hljs-meta .hljs-string{color:#444}.hljs-meta .hljs-keyword,.hljs-meta-keyword{font-weight:700}

View File

@ -0,0 +1 @@
code.hljs{padding:3px 5px}.hljs{color:#c1c1c1;background:#000}.hljs ::selection{color:#222}.hljs-comment{color:#333}.hljs-tag{color:#999}.hljs-operator,.hljs-punctuation,.hljs-subst{color:#c1c1c1}.hljs-operator{opacity:.7}.hljs-bullet,.hljs-deletion,.hljs-name,.hljs-selector-tag,.hljs-template-variable,.hljs-variable{color:#5f8787}.hljs-attr,.hljs-link,.hljs-literal,.hljs-number,.hljs-symbol,.hljs-variable.constant_{color:#aaa}.hljs-class .hljs-title,.hljs-title,.hljs-title.class_{color:#eecc6c}.hljs-strong{font-weight:700;color:#eecc6c}.hljs-addition,.hljs-code,.hljs-string,.hljs-title.class_.inherited__{color:#f3ecd4}.hljs-built_in,.hljs-doctag,.hljs-keyword.hljs-atrule,.hljs-quote,.hljs-regexp{color:#aaa}.hljs-attribute,.hljs-function .hljs-title,.hljs-section,.hljs-title.function_,.ruby .hljs-property{color:#888}.diff .hljs-meta,.hljs-keyword,.hljs-template-tag,.hljs-type{color:#999}.hljs-emphasis{color:#999;font-style:italic}.hljs-meta,.hljs-meta .hljs-keyword,.hljs-meta .hljs-string{color:#444}.hljs-meta .hljs-keyword,.hljs-meta-keyword{font-weight:700}

View File

@ -0,0 +1 @@
code.hljs{padding:3px 5px}.hljs{color:#c1c1c1;background:#000}.hljs ::selection{color:#222}.hljs-comment{color:#333}.hljs-tag{color:#999}.hljs-operator,.hljs-punctuation,.hljs-subst{color:#c1c1c1}.hljs-operator{opacity:.7}.hljs-bullet,.hljs-deletion,.hljs-name,.hljs-selector-tag,.hljs-template-variable,.hljs-variable{color:#5f8787}.hljs-attr,.hljs-link,.hljs-literal,.hljs-number,.hljs-symbol,.hljs-variable.constant_{color:#aaa}.hljs-class .hljs-title,.hljs-title,.hljs-title.class_{color:#775}.hljs-strong{font-weight:700;color:#775}.hljs-addition,.hljs-code,.hljs-string,.hljs-title.class_.inherited__{color:#a98}.hljs-built_in,.hljs-doctag,.hljs-keyword.hljs-atrule,.hljs-quote,.hljs-regexp{color:#aaa}.hljs-attribute,.hljs-function .hljs-title,.hljs-section,.hljs-title.function_,.ruby .hljs-property{color:#888}.diff .hljs-meta,.hljs-keyword,.hljs-template-tag,.hljs-type{color:#999}.hljs-emphasis{color:#999;font-style:italic}.hljs-meta,.hljs-meta .hljs-keyword,.hljs-meta .hljs-string{color:#444}.hljs-meta .hljs-keyword,.hljs-meta-keyword{font-weight:700}

View File

@ -0,0 +1 @@
code.hljs{padding:3px 5px}.hljs{color:#c1c1c1;background:#000}.hljs ::selection{color:#222}.hljs-comment{color:#333}.hljs-tag{color:#999}.hljs-operator,.hljs-punctuation,.hljs-subst{color:#c1c1c1}.hljs-operator{opacity:.7}.hljs-bullet,.hljs-deletion,.hljs-name,.hljs-selector-tag,.hljs-template-variable,.hljs-variable{color:#5f8787}.hljs-attr,.hljs-link,.hljs-literal,.hljs-number,.hljs-symbol,.hljs-variable.constant_{color:#aaa}.hljs-class .hljs-title,.hljs-title,.hljs-title.class_{color:#79241f}.hljs-strong{font-weight:700;color:#79241f}.hljs-addition,.hljs-code,.hljs-string,.hljs-title.class_.inherited__{color:#f8f7f2}.hljs-built_in,.hljs-doctag,.hljs-keyword.hljs-atrule,.hljs-quote,.hljs-regexp{color:#aaa}.hljs-attribute,.hljs-function .hljs-title,.hljs-section,.hljs-title.function_,.ruby .hljs-property{color:#888}.diff .hljs-meta,.hljs-keyword,.hljs-template-tag,.hljs-type{color:#999}.hljs-emphasis{color:#999;font-style:italic}.hljs-meta,.hljs-meta .hljs-keyword,.hljs-meta .hljs-string{color:#444}.hljs-meta .hljs-keyword,.hljs-meta-keyword{font-weight:700}

View File

@ -0,0 +1 @@
code.hljs{padding:3px 5px}.hljs{color:#c1c1c1;background:#000}.hljs ::selection{color:#222}.hljs-comment{color:#333}.hljs-tag{color:#999}.hljs-operator,.hljs-punctuation,.hljs-subst{color:#c1c1c1}.hljs-operator{opacity:.7}.hljs-bullet,.hljs-deletion,.hljs-name,.hljs-selector-tag,.hljs-template-variable,.hljs-variable{color:#5f8787}.hljs-attr,.hljs-link,.hljs-literal,.hljs-number,.hljs-symbol,.hljs-variable.constant_{color:#aaa}.hljs-class .hljs-title,.hljs-title,.hljs-title.class_{color:#a06666}.hljs-strong{font-weight:700;color:#a06666}.hljs-addition,.hljs-code,.hljs-string,.hljs-title.class_.inherited__{color:#d99}.hljs-built_in,.hljs-doctag,.hljs-keyword.hljs-atrule,.hljs-quote,.hljs-regexp{color:#aaa}.hljs-attribute,.hljs-function .hljs-title,.hljs-section,.hljs-title.function_,.ruby .hljs-property{color:#888}.diff .hljs-meta,.hljs-keyword,.hljs-template-tag,.hljs-type{color:#999}.hljs-emphasis{color:#999;font-style:italic}.hljs-meta,.hljs-meta .hljs-keyword,.hljs-meta .hljs-string{color:#444}.hljs-meta .hljs-keyword,.hljs-meta-keyword{font-weight:700}

View File

@ -0,0 +1 @@
code.hljs{padding:3px 5px}.hljs{color:#b7b8b9;background:#0c0d0e}.hljs ::selection{color:#515253}.hljs-comment{color:#737475}.hljs-tag{color:#959697}.hljs-operator,.hljs-punctuation,.hljs-subst{color:#b7b8b9}.hljs-operator{opacity:.7}.hljs-bullet,.hljs-deletion,.hljs-name,.hljs-selector-tag,.hljs-template-variable,.hljs-variable{color:#e31a1c}.hljs-attr,.hljs-link,.hljs-literal,.hljs-number,.hljs-symbol,.hljs-variable.constant_{color:#e6550d}.hljs-class .hljs-title,.hljs-title,.hljs-title.class_{color:#dca060}.hljs-strong{font-weight:700;color:#dca060}.hljs-addition,.hljs-code,.hljs-string,.hljs-title.class_.inherited__{color:#31a354}.hljs-built_in,.hljs-doctag,.hljs-keyword.hljs-atrule,.hljs-quote,.hljs-regexp{color:#80b1d3}.hljs-attribute,.hljs-function .hljs-title,.hljs-section,.hljs-title.function_,.ruby .hljs-property{color:#3182bd}.diff .hljs-meta,.hljs-keyword,.hljs-template-tag,.hljs-type{color:#756bb1}.hljs-emphasis{color:#756bb1;font-style:italic}.hljs-meta,.hljs-meta .hljs-keyword,.hljs-meta .hljs-string{color:#b15928}.hljs-meta .hljs-keyword,.hljs-meta-keyword{font-weight:700}

View File

@ -0,0 +1 @@
code.hljs{padding:3px 5px}.hljs{color:#e0e0e0;background:#000}.hljs ::selection{color:#505050}.hljs-comment{color:#b0b0b0}.hljs-tag{color:#d0d0d0}.hljs-operator,.hljs-punctuation,.hljs-subst{color:#e0e0e0}.hljs-operator{opacity:.7}.hljs-bullet,.hljs-deletion,.hljs-name,.hljs-selector-tag,.hljs-template-variable,.hljs-variable{color:#fb0120}.hljs-attr,.hljs-link,.hljs-literal,.hljs-number,.hljs-symbol,.hljs-variable.constant_{color:#fc6d24}.hljs-class .hljs-title,.hljs-title,.hljs-title.class_{color:#fda331}.hljs-strong{font-weight:700;color:#fda331}.hljs-addition,.hljs-code,.hljs-string,.hljs-title.class_.inherited__{color:#a1c659}.hljs-built_in,.hljs-doctag,.hljs-keyword.hljs-atrule,.hljs-quote,.hljs-regexp{color:#76c7b7}.hljs-attribute,.hljs-function .hljs-title,.hljs-section,.hljs-title.function_,.ruby .hljs-property{color:#6fb3d2}.diff .hljs-meta,.hljs-keyword,.hljs-template-tag,.hljs-type{color:#d381c3}.hljs-emphasis{color:#d381c3;font-style:italic}.hljs-meta,.hljs-meta .hljs-keyword,.hljs-meta .hljs-string{color:#be643c}.hljs-meta .hljs-keyword,.hljs-meta-keyword{font-weight:700}

View File

@ -0,0 +1 @@
code.hljs{padding:3px 5px}.hljs{color:#4e5ab7;background:#1f1f1f}.hljs ::selection{color:#2dc55e}.hljs-comment{color:#ecba0f}.hljs-tag{color:#2a84d2}.hljs-operator,.hljs-punctuation,.hljs-subst{color:#4e5ab7}.hljs-operator{opacity:.7}.hljs-bullet,.hljs-deletion,.hljs-name,.hljs-selector-tag,.hljs-template-variable,.hljs-variable{color:#d6dbe5}.hljs-attr,.hljs-link,.hljs-literal,.hljs-number,.hljs-symbol,.hljs-variable.constant_{color:#de352e}.hljs-class .hljs-title,.hljs-title,.hljs-title.class_{color:#1dd361}.hljs-strong{font-weight:700;color:#1dd361}.hljs-addition,.hljs-code,.hljs-string,.hljs-title.class_.inherited__{color:#f3bd09}.hljs-built_in,.hljs-doctag,.hljs-keyword.hljs-atrule,.hljs-quote,.hljs-regexp{color:#1081d6}.hljs-attribute,.hljs-function .hljs-title,.hljs-section,.hljs-title.function_,.ruby .hljs-property{color:#5350b9}.diff .hljs-meta,.hljs-keyword,.hljs-template-tag,.hljs-type{color:#0f7ddb}.hljs-emphasis{color:#0f7ddb;font-style:italic}.hljs-meta,.hljs-meta .hljs-keyword,.hljs-meta .hljs-string{color:#fff}.hljs-meta .hljs-keyword,.hljs-meta-keyword{font-weight:700}

View File

@ -0,0 +1 @@
code.hljs{padding:3px 5px}.hljs{color:#b0c5c8;background:#485867}.hljs ::selection{color:#6d828e}.hljs-comment{color:#8299a1}.hljs-tag{color:#98afb5}.hljs-operator,.hljs-punctuation,.hljs-subst{color:#b0c5c8}.hljs-operator{opacity:.7}.hljs-bullet,.hljs-deletion,.hljs-name,.hljs-selector-tag,.hljs-template-variable,.hljs-variable{color:#b38686}.hljs-attr,.hljs-link,.hljs-literal,.hljs-number,.hljs-symbol,.hljs-variable.constant_{color:#d8bba2}.hljs-class .hljs-title,.hljs-title,.hljs-title.class_{color:#aab386}.hljs-strong{font-weight:700;color:#aab386}.hljs-addition,.hljs-code,.hljs-string,.hljs-title.class_.inherited__{color:#87b386}.hljs-built_in,.hljs-doctag,.hljs-keyword.hljs-atrule,.hljs-quote,.hljs-regexp{color:#86b3b3}.hljs-attribute,.hljs-function .hljs-title,.hljs-section,.hljs-title.function_,.ruby .hljs-property{color:#868cb3}.diff .hljs-meta,.hljs-keyword,.hljs-template-tag,.hljs-type{color:#b386b2}.hljs-emphasis{color:#b386b2;font-style:italic}.hljs-meta,.hljs-meta .hljs-keyword,.hljs-meta .hljs-string{color:#b39f9f}.hljs-meta .hljs-keyword,.hljs-meta-keyword{font-weight:700}

View File

@ -0,0 +1 @@
code.hljs{padding:3px 5px}.hljs{color:#6d828e;background:#e3efef}.hljs ::selection{color:#b0c5c8}.hljs-comment{color:#98afb5}.hljs-tag{color:#8299a1}.hljs-operator,.hljs-punctuation,.hljs-subst{color:#6d828e}.hljs-operator{opacity:.7}.hljs-bullet,.hljs-deletion,.hljs-name,.hljs-selector-tag,.hljs-template-variable,.hljs-variable{color:#b38686}.hljs-attr,.hljs-link,.hljs-literal,.hljs-number,.hljs-symbol,.hljs-variable.constant_{color:#d8bba2}.hljs-class .hljs-title,.hljs-title,.hljs-title.class_{color:#aab386}.hljs-strong{font-weight:700;color:#aab386}.hljs-addition,.hljs-code,.hljs-string,.hljs-title.class_.inherited__{color:#87b386}.hljs-built_in,.hljs-doctag,.hljs-keyword.hljs-atrule,.hljs-quote,.hljs-regexp{color:#86b3b3}.hljs-attribute,.hljs-function .hljs-title,.hljs-section,.hljs-title.function_,.ruby .hljs-property{color:#868cb3}.diff .hljs-meta,.hljs-keyword,.hljs-template-tag,.hljs-type{color:#b386b2}.hljs-emphasis{color:#b386b2;font-style:italic}.hljs-meta,.hljs-meta .hljs-keyword,.hljs-meta .hljs-string{color:#b39f9f}.hljs-meta .hljs-keyword,.hljs-meta-keyword{font-weight:700}

View File

@ -0,0 +1 @@
code.hljs{padding:3px 5px}.hljs{color:#d0d0d0;background:#151515}.hljs ::selection{color:#303030}.hljs-comment{color:#505050}.hljs-tag{color:#b0b0b0}.hljs-operator,.hljs-punctuation,.hljs-subst{color:#d0d0d0}.hljs-operator{opacity:.7}.hljs-bullet,.hljs-deletion,.hljs-name,.hljs-selector-tag,.hljs-template-variable,.hljs-variable{color:#fb9fb1}.hljs-attr,.hljs-link,.hljs-literal,.hljs-number,.hljs-symbol,.hljs-variable.constant_{color:#eda987}.hljs-class .hljs-title,.hljs-title,.hljs-title.class_{color:#ddb26f}.hljs-strong{font-weight:700;color:#ddb26f}.hljs-addition,.hljs-code,.hljs-string,.hljs-title.class_.inherited__{color:#acc267}.hljs-built_in,.hljs-doctag,.hljs-keyword.hljs-atrule,.hljs-quote,.hljs-regexp{color:#12cfc0}.hljs-attribute,.hljs-function .hljs-title,.hljs-section,.hljs-title.function_,.ruby .hljs-property{color:#6fc2ef}.diff .hljs-meta,.hljs-keyword,.hljs-template-tag,.hljs-type{color:#e1a3ee}.hljs-emphasis{color:#e1a3ee;font-style:italic}.hljs-meta,.hljs-meta .hljs-keyword,.hljs-meta .hljs-string{color:#deaf8f}.hljs-meta .hljs-keyword,.hljs-meta-keyword{font-weight:700}

Some files were not shown because too many files have changed in this diff Show More