Shiny.Controls.Office.Skia 1.2.0-beta-0013

Prefix Reserved
This is a prerelease version of Shiny.Controls.Office.Skia.
dotnet add package Shiny.Controls.Office.Skia --version 1.2.0-beta-0013
                    
NuGet\Install-Package Shiny.Controls.Office.Skia -Version 1.2.0-beta-0013
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Shiny.Controls.Office.Skia" Version="1.2.0-beta-0013" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Shiny.Controls.Office.Skia" Version="1.2.0-beta-0013" />
                    
Directory.Packages.props
<PackageReference Include="Shiny.Controls.Office.Skia" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Shiny.Controls.Office.Skia --version 1.2.0-beta-0013
                    
#r "nuget: Shiny.Controls.Office.Skia, 1.2.0-beta-0013"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Shiny.Controls.Office.Skia@1.2.0-beta-0013
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Shiny.Controls.Office.Skia&version=1.2.0-beta-0013&prerelease
                    
Install as a Cake Addin
#tool nuget:?package=Shiny.Controls.Office.Skia&version=1.2.0-beta-0013&prerelease
                    
Install as a Cake Tool

Shiny Controls

A rich, ready-to-use UI controls library for both .NET MAUI and Blazor. One package per host covers TableView, DataGrid (with detail/breakdown rows and a TreeDataGrid hierarchy mode), TreeView, Scheduler, FloatingPanel/OverlayHost, DurationPicker, FrostedGlassView, Toast, Dialogs (owned, animated alert/confirm/prompt/action-sheet), Fab/FabMenu, ShinyToolbar/ShinyTabBar (Blazor), SplashScreen (Blazor), PillView, BadgeView, SecurityPin, PasswordStrength (a password field with a live strength meter, a rule checklist and a pluggable scorer), Captcha (Blazor — one component over a built-in local challenge plus reCAPTCHA, hCaptcha and Turnstile), SignaturePad, ShinyImage, ImageViewer, ImageEditor, MediaPickerButton, ChatView, ColorPicker, FontPicker, Slider, ProgressBar (with an animated, bidirectional fill), ProgressLine (the thin page-edge loading line, docked clear of the nav and tab bars and drivable from code), Overlay/LoadingOverlay, SkeletonView, Expander/Accordion (a disclosure panel whose fade, slide and height reveals combine and are aimed at any of the four edges, and the accordion list that coordinates a stack of them), AutoCompleteEntry, CountryPicker, AddressEntry, TextEntry, CarouselGallery, ParallaxCollectionView, StaggeredGrid, VirtualizedGrid, and StateView/Wizard (named branches switched by one string, and a multi-step flow built on them with a pointed progress bar, per-step validity gates and conditional steps). Walkthrough and Tooltip round that out: a guided tour that dims the page and cuts an animated spotlight around one control at a time — steps declared together in order, advancing on a command, on a tap of the highlighted control, or on a timer, with a RememberRunKey so onboarding runs once — and the themed tooltip bubble underneath it, which wraps its target or points at one, auto-flips to whichever side has room, and is drawn above the page so nothing can clip it. A Flyout — a side panel that slides in from either edge, rests as a narrow icon rail instead of a full panel, and either pushes the content aside or floats over it — replaces MAUI's FlyoutPage and, unlike it, works inside Shell. On MAUI there is also a ShinyNavigationPage — a real NavigationPage, with everything that implies, whose drawn bar carries toolbar items on the left as well as the right, plus an overflow menu, badges and an iOS-style collapsing large title. Blazor additionally gets layout primitives — VStack/HStack, a responsive Grid/Row/Column, and an AppLayout application shell whose left/right panels collapse to hidden, a toolbar rail or fully shown, drag-resize between a min and max, keep their own scroll regions, and can persist and auto-collapse when the shell gets narrow. Motion Icons — 42 animated icons that run on a timer, on hover, on tap or on command — ship in the core packages on both hosts. Sliders come in single-value (Slider) and two-thumb range (RangeSlider) flavors. Markdown, Mermaid Diagrams, Barcodes (1D + 2D, QR codes), Keyframe animation (declarative XAML timelines with seekable, reversible playback), and a cross-platform CameraView (preview, photo/video capture, a pluggable effects pipeline for colour/comic/sketch/blur looks, face masks and AI stylization, plus a pluggable frame-analysis pipeline for barcode/face/motion/OCR/structured-documents) ship as separate add-on packages per host, Office viewers and editors — a Spreadsheet (SpreadsheetView) that opens, renders and edits real .xlsx workbooks, with an optional formatting toolbar carrying the usual bold/italic/colour controls plus the spreadsheet-only ones: cell fill, number formats, decimal places, whole-column formatting and AutoSum, a .docx editor in two controls — DocumentEditor (the lone surface) and DocumentEditorView (the same plus formatting chrome), with spell check drawn from the platform's own dictionary on MAUI and replaceable on both hosts — a .pptx editor in two more — SlideEditor and SlideEditorView — where a click selects a shape to move or resize and a double-click puts a caret in its text, both editors sharing one gallery of twenty preset shapes plus tables, pictures and text highlighting, and both accepting an image dragged in from the desktop, plus read-only DocumentView (.docx, reflowed rather than paginated) and SlideView (.pptx, fitted artboards or a thumbnail grid, with placeholders resolved through layout and master) — a virtualized SkiaSharp grid shared verbatim by both hosts, over a document kernel with a transactional undo stack and a formula engine, editing the OOXML package surgically so an untouched workbook saves byte-identical — and a cross-platform MediaElement (local + remote audio/video with a themed, per-element-toggleable transport bar, background audio with OS lock-screen controls, and Picture-in-Picture) ship as separate add-on packages per host. Quick Entry — an assistant-style prompt popup (PromptView) summoned over whatever the user is looking at, with an optional Siri-style screen-edge glow — ships in the core packages on both hosts and works everywhere as an in-app overlay; on desktop it can instead open as a borderless always-on-top OS window over other applications, which is what the Shiny.Maui.Controls.Desktop add-on adds. That add-on also carries the desktop-only system tray / status-bar icon, Visual-Studio-style docking, global hotkeys (Windows, macOS AppKit, MacCatalyst, and Linux), and window-level file drop — files dragged from Finder / Explorer onto anywhere in the app window, including on top of a BlazorWebView, which MAUI's own DropGestureRecognizer cannot see; Blazor has the same service over the whole browser window in its core package. On the web there is no separate add-on: Blazor docking and the touch / kiosk on-screen keyboard both ship in the main Shiny.Blazor.Controls package.

MAUI NuGet Blazor NuGet MAUI Markdown NuGet Blazor Markdown NuGet MAUI Mermaid NuGet Blazor Mermaid NuGet MAUI Barcodes NuGet Blazor Barcodes NuGet MAUI Camera NuGet Blazor Camera NuGet MAUI Camera AI NuGet Blazor Camera AI NuGet MAUI Camera Barcode NuGet MAUI Camera Documents NuGet MAUI Camera Face NuGet MAUI Camera Motion NuGet MAUI Camera Ocr NuGet MAUI Keyframe NuGet MAUI MediaElement NuGet MAUI MediaElement Linux NuGet Blazor MediaElement NuGet MAUI Office NuGet Blazor Office NuGet MAUI Desktop NuGet MAUI Speech Addins NuGet Blazor Speech Addins NuGet Keyframe Export NuGet Motion Icons NuGet MAUI Terminal Theme NuGet Blazor Terminal Theme NuGet MAUI Aurora Theme NuGet Blazor Aurora Theme NuGet MAUI Material Theme NuGet Blazor Material Theme NuGet MAUI Ocean Theme NuGet Blazor Ocean Theme NuGet

Getting Started

.NET MAUI

dotnet add package Shiny.Maui.Controls

Register in your MauiProgram.cs:

var builder = MauiApp.CreateBuilder();
builder
    .UseMauiApp<App>()
    .UseShinyControls();

Add the XAML namespace:

xmlns:shiny="http://shiny.net/maui/controls"

For Markdown controls (separate package):

dotnet add package Shiny.Maui.Controls.Markdown
xmlns:md="http://shiny.net/maui/markdown"

For Mermaid Diagrams (separate package):

dotnet add package Shiny.Maui.Controls.MermaidDiagrams
xmlns:diagram="http://shiny.net/maui/diagrams"

For Barcodes & QR codes (separate package):

dotnet add package Shiny.Maui.Controls.Barcodes
xmlns:bc="http://shiny.net/maui/barcodes"
<bc:QRCodeView Value="https://shinylib.net" Size="300" />
<bc:BarcodeView Value="5901234123457" Format="Ean13" />

Supported formats: QR Code, Aztec, Data Matrix, PDF417, Code 128/39/93, Codabar, EAN-8/13, UPC-A/E, ITF. Output is rendered as PNG via a pure-managed encoder (no SkiaSharp / System.Drawing dependency). Need an SVG string? Call BarcodeRenderer.RenderSvg(...) directly.

For Keyframe animation (separate package):

dotnet add package Shiny.Maui.Controls.Keyframe
xmlns:kf="http://shiny.net/maui/keyframe"

For the CameraView (separate package — iOS, Android, Windows, macOS AppKit, Blazor):

dotnet add package Shiny.Maui.Controls.Camera
builder
    .UseShinyControls()
    .UseShinyCamera();
xmlns:cam="http://shiny.net/maui/camera"
<cam:CameraView Facing="Back" Filter="None" />

For the MediaElement (separate package — iOS, Android, Windows, macOS AppKit, Linux GTK4, Blazor):

dotnet add package Shiny.Maui.Controls.MediaElement
builder
    .UseShinyControls()
    .UseShinyMediaElement();
xmlns:media="http://shiny.net/maui/media"
<media:MediaElement Source="https://example.com/clip.mp4" AutoPlay="True" />

The full feature set — effects, analyzers, recording, orientation, AI — is in CameraView.

Blazor

dotnet add package Shiny.Blazor.Controls
dotnet add package Shiny.Blazor.Controls.Markdown       # optional
dotnet add package Shiny.Blazor.Controls.MermaidDiagrams # optional
dotnet add package Shiny.Blazor.Controls.Barcodes       # optional

Add the @using directives — typically in _Imports.razor:

@using Shiny.Blazor.Controls
@using Shiny.Blazor.Controls.Cells
@using Shiny.Blazor.Controls.Sections
@using Shiny.Blazor.Controls.Scheduler
@using Shiny.Blazor.Controls.Markdown
@using Shiny.Blazor.Controls.MermaidDiagrams
@using Shiny.Blazor.Controls.Barcodes
@using Shiny.Controls.Barcodes

Most controls need no DI registration at all — drop the component into any .razor page and its scoped CSS and JS module come along with it. A handful are driven by a service (Toast, Dialogs, the splash screen, the walkthrough store, Docking and the on-screen keyboard), and one call covers all of them, mirroring MAUI's UseShinyControls():

using Shiny.Blazor.Controls;

builder.Services.AddShinyControls();

With optional configuration, again shaped like the MAUI side:

builder.Services.AddShinyControls(cfg => cfg
    .ConfigureDialogs(o => o.DefaultAnimation = DialogAnimation.Zoom)
    .ConfigureKeyboard(o => o.HeightPx = 320)
    .UseHttpImageDownloader()                    // ShinyImage through your HttpClient (optional)
    .AddDockPanel<ExplorerPanel>("explorer", "Explorer", "📁")
);

Every individual AddShinyToast() / AddShinyDialogs() / AddShinySplashScreen() / AddShinyWalkthrough() / AddShinyDocking() / AddShinyOnScreenKeyboard() call still exists, and all registrations are TryAdd, so the two styles compose in either order. Register à la carte when you want to keep the WASM payload tight; to replace an implementation, use a SetCustom* method or register your own first — first registration wins.

All of these services are scoped, not singleton: they hold per-user UI state. Under WebAssembly the two lifetimes are identical, but on Blazor Server a singleton would show one user's toast, dialog or keyboard to every connected user.

MAUI → Blazor quick reference
MAUI (XAML) Blazor (Razor)
<shiny:TableView> with <shiny:TableRoot> <TableView> (no TableRoot wrapper)
<shiny:TreeView>ExpandedIcon/CollapsedIcon are ImageSource <TreeView TItem="…"> — icons are RenderFragment slots; adds keyboard navigation
<shiny:PillView> <Pill>
<shiny:BadgeView Text="…"> (wraps Content) <BadgeView Text="…"> (wraps ChildContent)
<shiny:FloatingPanel> in <shiny:OverlayHost> <SheetView> with <SheetContent> child (Blazor uses CSS overlay)
Value="{Binding Pin}" (TwoWay) @bind-Value="pin"
IsOpen="{Binding IsOpen, Mode=TwoWay}" @bind-IsOpen="isOpen"
Command="{Binding DoCommand}" OnClick="DoAsync" / Clicked="DoAsync"
Color type (e.g. Colors.Blue) CSS color string (e.g. "#2196F3")
Fab.Icon="add.png" (ImageSource) <Fab Icon="+"> (inline text/SVG string)
shiny:CarouselGallery <CarouselGallery>PeekAreaInsetsPeekAmount; adds ShowIndicators
shiny:ParallaxCollectionView <ParallaxList>HeaderTemplateHeroTemplate; Blazor uses a JS scroll listener for the transform
shiny:StaggeredGrid <StaggeredGrid>ItemSelectedCommandItemSelected EventCallback
shiny:VirtualizedGrid <VirtualizedGrid>CellPadding → individual padding props; adds EnableVirtualization, GroupedItems
ItemTemplate as DataTemplate ItemTemplate as RenderFragment<object>
IToaster.ShowAsync(text, cfg => {}) (DI) IToastService.ShowAsync(text, cfg => {}) (DI + <ToastHost />)
IDialogService.Confirm(...) (DI; auto-attaches) IDialogService.Confirm(...) (DI + <DialogHost />)
<shiny:DataGrid> + <shiny:DataGridColumn PropertyName="..."/> (items as object) <DataGrid TItem="T"> + <PropertyColumn Property="x => x..."/> (generic, RenderFragment templates)
<shiny:TextEntry> <TextEntry>
<shiny:Overlay> in <shiny:ShinyContentPage.Panels> <Overlay> (wraps ChildContent; custom content in <OverlayContent> slot)
<shiny:LoadingOverlay> in <shiny:ShinyContentPage.Panels> <LoadingOverlay> (wraps ChildContent)
<shiny:ProgressBar> <ProgressBar>
<shiny:ProgressLine> <ProgressLine> + <ProgressLineHost>
<MauiSplashScreen> (native, build-time) SplashScreenindex.html markup + splash.js, driven by ISplashScreen / <SplashScreenHost />

ISchedulerEventProvider is identical across both hosts.

Controls

Every control has its own page under docs/controls/. Start with Styling & theming — implicit styles, what a theme pack changes beyond colour, and why appearance properties default to -1 rather than a real value.

Office

Control
Spreadsheet Open, render and edit real .xlsx — virtualized SkiaSharp grid, formula engine, formatting toolbar
Document & Slide Viewers Read-only .docx reflowed to the control's width, and .pptx as fitted artboards
Document Editor A .docx editor — typing, styles, inline objects, page margins, platform spell check
Slide Editor A .pptx editor — click a shape to move or resize it, double-click for a caret in its text

Collections & grids

Control
DataGrid Sorting, filtering, grouping, aggregates, selection, inline editing, paging, virtualization
TreeDataGrid The DataGrid in hierarchy mode — nested rows with lazy loading per level
TableView Settings-style table with 14 cell types, sections, cascading styles and drag-sort
TreeView Hierarchical tree with lazy loading, drag/drop reorder and selection predicates
VirtualizedGrid Grouped grid with sticky headers, virtualization and load-more
StaggeredGrid Pinterest-style masonry layout with variable-height items
ParallaxCollectionView A list with a hero header that translates, collapses and fades as it scrolls
CarouselGallery Netflix-style carousel with snap-to-center, scale transforms and peek insets
Carousel Embla-style drag carousel for Blazor — looping, autoplay, thumbnails, scroll-linked effects

Layout & overlays

Control
Layout & AppLayout VStack/HStack, a responsive 12-column grid, and an app shell with collapsible panels (Blazor)
FloatingPanel + OverlayHost Draggable bottom/top panel with detents, header peek and backdrop management (MAUI)
Flyout Side panel that rests as an icon rail and pushes or floats over content (MAUI)
TabbedPage & TabBar Tabs with motion icons, badges, transitions and a raised centre button (MAUI)
NavigationPage Toolbar items on the left as well as the right, overflow, badges, large title (MAUI)
ShinyToolbar & ShinyTabBar Screen-docked action toolbar and mobile-style tab bar (Blazor)
Modal A modal window with focus trap, scroll lock, drag, resize and maximize (Blazor)
Overlay & LoadingOverlay Full-screen overlay with a custom template or a built-in loading mode
Expander & Accordion Disclosure panel whose fade/slide/height reveals combine, plus the accordion that stacks them
StateView & Wizard Named branches switched by one string, and the multi-step flow built on them
Quick Entry Assistant-style prompt popup over whatever the user is looking at, with a screen-edge glow
Fab & FabMenu Floating action button and the expanding multi-action menu
FrostedGlassView Native blur — UIVisualEffectView, RenderEffect, backdrop-filter

Input

Control
ShinyButton A real working state, success/error states, and leading/trailing icon slots
TextEntry Floating placeholder, tool slots, validation hints, character count, keyboard accessory
AutoCompleteEntry Debounced search with dropdown suggestions and custom item templates
CountryPicker Country search with flag emoji, name and dial code
AddressEntry Address search with geocoding and structured results
ColorPicker Spectrum, hue bar, opacity slider, hex input and preview swatch
FontPicker Family and size pickers, each font previewed in its own typeface
Slider Cold-to-hot gradient track, blended thumb and tooltip
RangeSlider Two thumbs, per-thumb tooltips and min/max gap constraints
SecurityPin PIN entry with individually rendered cells and optional masking
PasswordStrength Live strength meter, rule checklist and a pluggable async scorer
Captcha A local challenge, reCAPTCHA, hCaptcha or Turnstile behind one component (Blazor)
SignaturePad Signature capture on a canvas with PNG export
MediaPickerButton Add photos from gallery or camera, re-encoded and capped, shown in a carousel
DurationPicker Duration picker in a floating panel, with min/max and interval constraints

Display & media

Control
ShinyImage Remote image loading with placeholder, progress ring, caching, and SVG on MAUI
ImageViewer Full-screen overlay with pinch, pan and double-tap zoom
ImageEditor Crop, rotate, draw, shapes, text annotations, undo/redo and export
CameraView Preview, photo/video capture, an effects pipeline, and pluggable frame analyzers
MediaElement Local and remote audio/video, background playback with lock-screen controls, and PiP
ChatView Provider-driven chat UI — bubbles, typing, paging, reactions, attachments, composer
Scheduler Calendar grid, agenda timeline and event list over one provider interface
Markdown Native markdown renderer and an editor with a formatting toolbar and live preview
Mermaid Diagrams Native Mermaid flowcharts — no WebView, AOT-compatible on MAUI
Barcodes & QR Codes Pure-managed 1D/2D barcode and QR rendering across 13 symbologies
Keyframe Animation Declarative XAML timelines that seek, reverse and export deterministically (MAUI)
Motion Icons 42 animated icons driven by a timer, hover, tap, appearance or a command

Status & feedback

Control
Toast Code-invoked toasts with a queue, auto-dismiss, spinner and progress bar
Dialogs Owned, animated alert / confirm / prompt / action sheet — never the native one
ProgressBar Gradient fill with a Vista-style shimmer, determinate and indeterminate
ProgressLine The thin page-edge loading line, docked clear of the nav and tab bars
BadgeView Content-wrapping corner badge with text, dot, count overflow and pulse
PillView Status pills and chips with preset themes and accessible contrast
SplashScreen A boot splash that paints before Blazor starts (Blazor)

Guidance

Control
Walkthrough Dim the page and cut an animated spotlight around one control at a time
Tooltip Themed bubble that wraps or points at a target and auto-flips to whichever side has room

Desktop

Control
Desktop add-on Tray icon, docking, desktop Quick Entry and global hotkeys — plus the on-screen keyboard
File Drop Files dropped anywhere on the window, including over a BlazorWebView
Product Compatible and additional computed target framework versions.
.NET net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (2)

Showing the top 2 NuGet packages that depend on Shiny.Controls.Office.Skia:

Package Downloads
Shiny.Blazor.Controls.Office

Spreadsheet viewer and editor for Blazor WebAssembly, rendering .xlsx on a SkiaSharp canvas.

Shiny.Maui.Controls.Office

Spreadsheet, document and slide viewers and editors for .NET MAUI, rendering .xlsx, .docx and .pptx on a SkiaSharp canvas.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.2.0-beta-0013 0 8/28/2026
1.2.0-beta-0012 0 8/28/2026
1.2.0-beta-0011 0 8/28/2026
1.2.0-beta-0010 29 8/28/2026
1.2.0-beta-0009 41 8/28/2026
1.2.0-beta-0008 34 8/27/2026
1.2.0-beta-0007 51 8/26/2026
1.2.0-beta-0006 39 8/26/2026
1.2.0-beta-0005 46 8/26/2026
1.2.0-beta-0004 48 8/26/2026
1.2.0-beta-0001 73 8/24/2026