Skip to content

v1.10.0

Choose a tag to compare

@github-actions github-actions released this 27 Oct 11:26
· 14 commits to main since this release
39c2051

📋 What's Changed

Added

  • DaisyScheduler, ported from Flowery.NET 3.6.0 to 3.8.0 and adapted from the MIT-licensed Xtreme.Components scheduler. It has Day, Week, Month, Agenda, Calendar, resource Planner and horizontal Timeline day views, typed resources with resource kinds, named and collapsible Timeline groups, occupancy and conflict queries, continuous and daily appointment spans, week rules, editor time slots, regional date/time formats and 12/24-hour clocks. Selection, move, resize, creation, deletion, tooltips, decorations, templates, renderers, toolbar buttons and external drops raise host events and leave the host data unchanged.
  • DaisyScheduler.ShowWeekends (on by default) shows or hides Saturday and Sunday in the Week, Month and Planner views; the settings flyout has a check box for it.
  • Unlike Flowery.NET, chips and bars never trim their start time: status glyphs and tiles show only when they fit beside it, and the subject takes the rest. A Planner or Timeline hour is as wide as a one-hour bar with its full start time (for the current size, font, culture and clock format), every hour has a header label, and hours widen to fill the visible width; DaisySchedulerTimelineMinimumHourWidth (default 0) can raise the minimum.
  • Unlike Flowery.NET, Month and Agenda chips and Planner and Timeline bars show their subject in the secondary font size so it fits the bar height in Segoe UI, timed blocks use compact subject and time lines, and the Day and Week time column widens to its longest time label. Bind SelectedDate, SelectedAppointment and CollapsedResourceGroupIds with Mode=TwoWay, because WinUI has no per-property default binding mode.
  • DaisyScheduler on touch or pen, as in Flowery.NET and the apps of the platforms: a tap on an appointment asks to edit it, and holding it selects it; the finger then moves it, or resizes it from an edge up to 12 DIP wide, at most a quarter of the appointment each. While appointments are selected, a tap adds one to the selection or takes it out. Taps are decided on release and count only if the finger did not move, so any swipe without a hold only scrolls, also over a free slot or day, where a tap selects it and a double tap asks to create an appointment; a tap that stops a scrolling view opens nothing. The mouse keeps click, Ctrl-click and double click.
  • The scheduler uses the Flowery themes, design tokens (overridable in host resources), all five size tiers and all twelve languages. ExternalDropHandler.SetData and TryGetItem carry an ISchedulerDroppable through a DataPackage in the same process.
  • The library output and NuGet package include the Xtreme.Components copyright and MIT license (licenses/Xtreme.Components.txt).
  • Gallery: a Scheduler page under Custom Controls with sample appointments, resource grouping, an appointment editor with overlap confirmation and color palette, a context menu, read-only mode, and resource-kind, date/time format and clock selectors. Its help below the scheduler names the touch gestures after a touch or pen press and the mouse and keyboard ones after a click, in all twelve languages.
  • Docs: llms-static/DaisyScheduler.md, and the scheduler in the custom-control list of the generated site and in the README.
  • DaisyTour.StepTargetUnavailable reports a step that cannot show everything it describes, with the step, the cause (DaisyTourTargetProblem: Preparation, Target or Annotation), the annotation, the element and the error, once per cause and visit, after the step is laid out. Handlers may skip, move on or replay the tour; a handler that throws is logged. While the editor previews the tour, the editor shows the error instead. DaisyTourCloseReason.Failed reports a tour that could not continue.

Changed

  • DaisyButton applies style properties set before it loads (Variant, Size, ButtonStyle, Shape, ContentPadding) once, at its first measure, instead of once per property. On Loaded it skips the size and theme pass while the applied size and theme are still current. Creating and loading many buttons takes a fraction of the time.
  • FlowKanban on touch or pen, as in DaisyScheduler: a tap opens a card's editor and holding a card selects it, and the finger then drags it; while cards are selected, a tap adds a card to the selection or takes it out. Taps are decided on release and count only if the finger did not move, so a swipe over a card only scrolls. Before, a touch or pen press selected a card like a click, and a double tap edited it. The touch model is chosen by pointer type; the old one for Android and iOS (double tap toggles, long press on the title edits) never ran on Windows and is gone.
  • FlowKanban: a tap or click on a free place of the board (not on a card, a button, an input, a combo box such as the column choice of the compact layout, a scroll bar, or a column header, where a tap shows the header buttons on touch) clears the card selection, also one the board was loaded with.
  • DaisyResourceLookup.TryGetResource no longer searches the merged dictionaries again after a miss. WinUI's TryGetValue already searches nested merged and theme dictionaries, so the result is the same, and lookups of optional keys that do not exist, which every Daisy control makes, are much faster.
  • DaisyTour: a target that cannot be shown no longer closes the tour, which looked like a crash to the user. A missing, collapsed, transparent, detached or foreign-window step target, one that stays outside the visible area after the tour scrolled it into view once, an unavailable annotation end and a failed PrepareAsync leave the step open in a warning state: the card waits at its stationary position (the center for Target), its frame and the current progress step take the warning color, a note says that the element cannot be shown right now or that the step could not be prepared completely, screen readers hear the note, and connectors that need the element are hidden. The step returns to normal when the element can be shown again; a failed preparation lasts for the visit. An unexpected failure of the tour itself closes it with Failed instead of TargetUnavailable, which now only means that the tour could not open because it belongs to no window, and DaisyTourClosedEventArgs.AnnotationId is always null.
  • Release and CI: publishing Gallery, Kiosk and Photos for a runtime no longer downloads the ASP.NET Core and Windows Desktop runtime packs, which none of the apps uses (DisableTransitiveFrameworkReferenceDownloads).
  • Development: the runtime tests no longer check property values that a test has just set or that are plain defaults, and tests that built the same scene for different inputs share one table-driven test, so there are about 360 tests instead of 455. The unit tests build and run as their own project in the solution and CI (scripts/test_windows.ps1) instead of being compiled into the runtime tests; the global neumorphic settings are tested at run time, because their class registers WinUI dependency properties.

📦 Library

Asset Description
Flowery.WinUI.1.10.0.nupkg NuGet package (also on nuget.org)
Flowery.WinUI-lib.zip Compiled DLL and PDB

🌸 Gallery Demo App

Self-contained executable for demoing Flowery.WinUI controls (no .NET install required).

Platform Download
Windows x64 Flowery.WinUI.Gallery-Windows-x64.zip
Windows x64 Kiosk Flowery.WinUI.Kiosk-Windows-x64.zip

🖼️ Flowery Photos

Photo viewer and editor built with Flowery.WinUI (no .NET or Windows App SDK install required). The per-user installer adds a Start menu entry and an uninstaller. Alternatively, extract the portable ZIP and keep all its files together.

Asset Description
Flowery.WinUI.Photos-Setup-1.10.0-x64.exe Per-user installer (Windows x64)
Flowery.WinUI.Photos-Windows-x64.zip Portable app (Windows x64); run Flowery.WinUI.Photos.exe

🔐 Verify downloads

This workflow built every asset above and attested its build provenance. To check that a file comes from this repository and release build:

gh attestation verify <file> --repo tobitege/Flowery.WinUI

SHA256SUMS.txt lists the SHA-256 checksum of every asset; check all of them with sha256sum -c SHA256SUMS.txt, or one file in PowerShell with Get-FileHash <file>. The packages on nuget.org carry nuget.org's repository signature, so their checksums differ from the release assets.

What's Changed

  • Add ARM64 platform support for the library, Gallery, tools and apps by @delfuria in #48
  • Point the README docs badge at GitHub Pages and list localized languages by @tobitege in #49
  • Port DaisyScheduler from Flowery.NET by @tobitege in #51
  • Open with a tap and select with a hold on touch in the scheduler and Kanban by @tobitege in #53
  • Prepare the 1.10.0 release by @tobitege in #54

Full Changelog: v1.9.0...v1.10.0