Windowscommunitytoolkit: [Future] 7.0 Release Plan

Created on 13 Nov 2019  ยท  22Comments  ยท  Source: windows-toolkit/WindowsCommunityToolkit

7.0 Release Plan

Main Theme: Release focused on dependency streamlining and clean-up to make pieces of the toolkit more consumable. (Includes clean-up and prep for WinUI 3)

Secondary Themes:

  • Animations and Composition-level XAML Helpers (ThemeShadow, XamlLight, DropShadow, etc...)

7.0.0-preview4 on NuGet - NOTE 7.0 of the toolkit will contain many breaking changes, preview packages may change frequently, we'll try and keep posts updated here with changes. For instance, 7.0.0-preview1 now uses DispatcherQueue over Dispatcher

The plan

7.0 Dev Branch Here make any breaking changes here (will be merged to master soon).

Milestone
Feature Board
Bug Board
ย 
Below is a summary of the top level plan items. These items are in addition to everything that was initially released with the preview.
ย 
Legend of annotations:

| Symbol | Description |
| ------ | ----------- |
| :hand: | Help Wanted |
| :zero: | priority 0 - must have for this release |
| :one: | priority 1 - nice to have for this release |
| :two: | priority 2 - stretch goal - unlikely for this release but we will try our best |
| :grey_exclamation: | missing issue reference |
| :flashlight: | investigating |

Planning/Discussions

  • [ ] Finalize ColorCode Migration/Transition
  • [ ] Package Names/Namespaces for WinUI Future

Technical Debt

  • [ ] :zero: rename master branch to main - waiting on GitHub guidance/tooling.
  • [ ] :zero: Spell Check (see #3406)
  • [ ] :zero: Pipeline for Sample App
  • [ ] :zero: Clean-up Backlog
  • [ ] :zero: Dependency Clean-up (see more below)
  • [ ] :zero: Namespace Clean-up #3422
  • [x] :zero: Improve contribution guidance/onboarding
  • [x] :zero: VS Designer Metadata Update #3252 (in PR #3318 by @Nirmal4G)
  • [ ] :zero: Accessibility Audit
  • [ ] :zero: Update ValueConverters to use UnsetValue #3311
  • [ ] :one: Make it easier to work with Repo #3270
  • [ ] :one: Refactor Documentation (.NET vs. UWP Specific)
  • [ ] โœ‹ 1๏ธโƒฃ ๐Ÿ”ฆ Add Mocking for Unit Tests #3196
  • [ ] :hand: :one: Integration Testing #3482
  • [ ] :one: Have Code Coverage in CI (not a gate though) #3475
  • [ ] :two: Tidy up non-active branches #3321
  • [x] :two: Sample App Rebuilds if no changes #3332

Refactors

  • [x] :zero: Toolkit XAML Islands Support finishing work #3205 (In PR #3206 and PR #3352 by @azchohfi)
  • [ ] :zero: Reduce complexity of toolkit dependencies/overhead #3145

    • [x] :one: Remove Newtonsoft.Json dependency (if possible in timeframe) #3060

  • [ ] :zero: โ• Move panels with minimal dependencies to their own package

    • [ ] :zero: Investigate using ItemsRepeater for base of some panels

    • [ ] :zero: โ• AdaptiveGridView as Panel/Layout?

    • [ ] :one: Investigate ItemsRepeater Helpers

    • [ ] :one: Selection Helper (prototype done)

    • [ ] :one: Grouping (prototype done)

  • [x] :zero: Move MarkdownTextBlock control to its own package (for ColorCode and Parsers dependency offset) #3200

    • [ ] :hand: :one: Do we replace the Markdown Parser #3200

  • [ ] :zero: โ• Make XAML animation helpers more light-weight? (e.g. is this just things that are composition API helpers? And then Media is all Win2D stuff?)

    • [ ] :zero: โ• Integrate with @Sergio0694's Animation lib as detailed in #3108 (separate issue for 7.0 work to be filed)

    • [ ] :zero: โ• Move Win2D items to Media package? SurfaceLoader, Light Extension (if still needed), Saturation, Blur effects.

    • [ ] :zero: โ• Move anything with Win2D dependency to its own central package (Media?)

  • [ ] :zero: move OnDevice Markup to proper parent namespace: https://github.com/windows-toolkit/WindowsCommunityToolkit/blob/master/Microsoft.Toolkit.Uwp.UI/Extensions/Markup/OnDevice.cs#L9
  • [ ] :zero: Clean-up control styles to expose a named Default Style (otherwise it's hard to inherit properly - see TokenizingTextBox/PeoplePicker)
  • [x] :one: ๐Ÿ”ฆ Gaze helpers to C#? @azchohfi? #3427
  • [ ] :one: ๐Ÿ”ฆโ• Create separate Converters package?
  • [ ] :one: ๐Ÿ”ฆ Create XAML based DropShadow API helper
  • [ ] :one: ๐Ÿ”ฆ Centralize Behaviors or contribute to main behaviors package? #3061

New Features

  • [x] :zero: MVVM Package #3230
  • [x] :zero: ColorPicker #3363
  • [ ] :zero: ๐Ÿ”ฆ More Graph Controls / Improvements

    • [ ] :zero: Move middle-tier to Azure.Identity package

    • [ ] :zero: Contact Card

    • [x] :zero: Generic Get Control (GraphPresenter)

  • [ ] :one: ๐Ÿ”ฆ Create XAML based ThemeShadow API helper (have POC) #3122
  • [ ] 1๏ธโƒฃ ๐Ÿ”ฆ Create XAML Light based XAML helpers #3361
  • [ ] 1๏ธโƒฃ Refactor GridSplitter & Add ContentSizer #2976
  • [ ] โœ‹ 2๏ธโƒฃ AdvancedCollectionView Improvements #1128
  • [ ] โœ‹ 2๏ธโƒฃ RotatorTile OnCurrentItemChanging Event #2994
  • [ ] โœ‹ 2๏ธโƒฃ Gaze Input Cursor Color #3210
  • [ ] ๐Ÿ”” Simplified toast notifications #3457

Bugs

  • ๐Ÿ”ฆ Investigate main bugs to call out we want to prioritize here above others.
  • Infinite Canvas

Remove Previously Deprecated Components

  • [x] :zero: Remove Platform Analyzers #3396
  • [ ] :zero: Menu control (replaced by WinUI's MenuBar) (In PR #3011 by @michael-hawker) (see stop-gaps in WinUI here)
  • [ ] :one: Light? Says XamlLight should replace it, but that looks more complex than what we had. See #3361
  • [x] :zero: TabView control (replaced by WinUI's TabView)
  • [ ] :zero: HeaderedTextBlock - do a search for any others we've been missing
  • [ ] :zero: old graph controls, have new ones in stable (do we move https://aka.ms/wgt into this repo? depends on issue #3270)
  • [x] :zero: Facebook Service (underlying library isn't currently maintained).
  • [ ] :one: RadialGradientBrush
  • [ ] :one: the headeredtextblock?
  • [ ] any other methods marked obsolete?

Remove upcoming Deprecated Components?

Since this is a major release, we could release note these, but should decide if we want to or not still.

  • [ ] NotifyTaskCompletion?
  • [x] RssParser - System.ServiceModel.Syndication is just as easy to use and an official .NET package, we should remove this. See Doc Issue
  • [ ] RadialProgressBar, WinUI 2.5 has a Determinite ProgressRing, should identify if any gaps.

Deprecate Services

Not sure if we should have a cycle to deprecate these, but they don't work currently, so may just remove?

There's also solutions like RestSharp and Refit {.NET Foundation}, I think the biggest problem still seems like simplifying the Authentication step/process...

documentation feature in progress introduce breaking changes open discussion planned

All 22 comments

Thanks for submitting a new feature request! I've automatically added a vote reaction to help get things started. Other community members can vote to help us prioritize this feature in the future!

@michael-hawker Is the ContentSizer control going to be part of this release?

I just learned about ( and installed ) the XAML Studio app. Great Garage project! I read that you used the ContentSizer in the app. Can you use the ContentSizer with a SplitView? I am also interested in what Editor control you used ( for line numbers, etc ). Thanks in advance!

@ToddThomson added it to the list ๐Ÿ˜‰; I may just need to take a weekend and add it in...

I haven't tried ContentSizer it with SplitView, only with Expander, so that's part of the work to do too.

The editor control is the same one we use in the toolkit sample app, it's a wrapper around the VS Code Monaco control, it's repo is here. XAML Studio just has more features built on top of it. Eventually, hopefully, I'll be able to open source XAML Studio and then re-incorporate those improvements to our sample app.

@michael-hawker The ContentSizer would be great a great addition. Thank-you!

I am currently adding the GridSpitter to the outside columns of a 3 column panel grid (UserControl). In the XAML Studio app, your LHS NavView control can be resized when the NavPane is open ( the Sizer is collapsed when the NavPane is closed ). I am hoping that the new ContentSizer will allow me control its visibility property like you have done.

Could you please DO NOT deprecate TabView?
The new TabView in WinUI is verrrrrrry ugly and its design is NOT "fluent" at all. If you use WinUI TabView in a NavigationView especially while using acrylic brush, you will find that the new TabView is completely mismatch the whole Fluent Design style.

Thanks for the concern @hez2010, can you add your feedback and examples to the WinUI TabView vNext thread here? FYI @stmoy

We do want to make sure the WinUI control is a valid replacement for the toolkit one before we deprecate it, we know it's not quite there yet, but we hope that by the time we do 7.0 later this year, the next iteration of the WinUI TabView will be completed.

If it is not too late yet... I am really missing a OnCropChanged event in the ImageCropper...
I would like to provide to the user a pixel dimension information about the Rect she currently crops to... All that event would have to do is fire when the crop has changed, it does not even have to transmit the new crop Rect....

Small note as per comment in #3131: the ColorHelper.ToHex extension should be renamed ToHexString for consistency with other APIs in the Microsoft.Toolkit package.

For quick reference:

https://github.com/windows-toolkit/WindowsCommunityToolkit/blob/d85e1a7bc084bba02e83c728386269e42fd382c5/Microsoft.Toolkit.Uwp/Helpers/ColorHelper.cs#L124-L132

Dropping this here for reference:

image

On the topic of API deprecation, there are a number of array extensions in the base Microsoft.Toolkit package that I think could (should?) be deprecated as well, both because the implementation is not super optimized, and because they've basically all been replaced by APIs in the HighPerformance package, especially so once #3353 gets merged, which adds a ton in this area ๐Ÿš€

The extensions in question are:

https://github.com/windows-toolkit/WindowsCommunityToolkit/blob/30452cf0bbf627f12825cf50bbd31b0e526b9abe/Microsoft.Toolkit/Extensions/ArrayExtensions.cs#L27

https://github.com/windows-toolkit/WindowsCommunityToolkit/blob/30452cf0bbf627f12825cf50bbd31b0e526b9abe/Microsoft.Toolkit/Extensions/ArrayExtensions.cs#L48

https://github.com/windows-toolkit/WindowsCommunityToolkit/blob/30452cf0bbf627f12825cf50bbd31b0e526b9abe/Microsoft.Toolkit/Extensions/ArrayExtensions.cs#L68

The HighPerformance package already includes faster implementations for these APIs (and also with no allocation for GetRow and GetColumn), and #3353 further improves on this with the addition of a specific Memory2D<T> and Span2D<T> types (including readonly versions too) which offer support for both these operations as well as a number of other things for 2D arrays (and arbitrary 2D memory areas, regardless of the underlying wrapped object or raw memory segment).

  • Should we deprecate the ones in the base package and redirect users to the HighPerformance package?
  • Since these APIs are not already deprecated, should 7.0 just deprecate them without removing them directly?

P.S. shouldn't we also deprecate AsFormat, given that C# now has the built-in $"{format:0f}" syntax?

https://github.com/windows-toolkit/WindowsCommunityToolkit/blob/30452cf0bbf627f12825cf50bbd31b0e526b9abe/Microsoft.Toolkit/Extensions/StringExtensions.cs#L150

@azchohfi should we remove the WPF and WinForms Controls section from the sample app for 7.0 or wait until WinUI 3? Thoughts here?

I imagine we should at least remove the older 'WebView' references now that WebView2 is supported everywhere else (at least in preview).

I think its better to deprecate them now, and remove them on 8.0.
Is the WebView1 already deprecated? If so, lets remove it now.

@azchohfi yeah, wondering if we need a listing in the Sample App to point to docs still and such. Let's discuss at the next toolkit sync.

@Sergio0694 as long as we're not using them anywhere else in the toolkit code (and thus pulling in the HP package to a larger package), then we should be good to remove those in 7.0. If we have docs, we can just update them to point to the HP pages instead.

For AsFormat, I think we were using it in x:Bind or for Localization? So we may want to check how easy it is to swap the code-base out or use in x:Bind expressions before removal?

@michael-hawker Awesome, did the changes in https://github.com/windows-toolkit/WindowsCommunityToolkit/pull/3444!

I've just marked those extensions as [Obsolete] for now, not sure if that's what you meant with "to remove those in 7.0" or if I should just outright delete those methods? I mean, as I thought we needed 2 cycles to completely remove existing APIs ๐Ÿค”

@Sergio0694 we usually try and be pretty nice about marking things obsolete for a release, but for 7.0 there's going to be some larger package changes and stuff, so I think as long as we have a solid thing to switch too, we expect folks to be having to read the release notes for this version.

It's also why for things like Services, I'm trying to make sure we have some sort of suggestion/migration guide together. It's also why investigating the new XAML Light APIs is important too :)

@michael-hawker Ah, awesome, will just remove those methods entirely then!

On that note... Can I just remove this Fill extension from the HighPerformance package too then? ๐Ÿ˜„

https://github.com/windows-toolkit/WindowsCommunityToolkit/blob/19d75a92461f4800cdfe854c2678e9bbdd55b313/Microsoft.Toolkit.HighPerformance/Extensions/ArrayExtensions.2D.cs#L127-L128

Regarding feature parity of RadialProgressBar and the WinUI 2.5 ProgressRing, the only missing APIs are:

  • Outline: Gets or sets the color of the circular outline on which the segment is drawn
  • Thickness: Gets or sets the thickness of the circular outline and segment

Those two customization options are not yet available with the WinUI 2.5 ProgressRing. There is already a tracking issue for the color customizations, however I don't think there is a tracking issue for the thickness property. @YuliKl @ranjeshj @MarissaMatt FYI

Regarding feature parity of RadialProgressBar and the WinUI 2.5 ProgressRing, the only missing APIs are:

  • Outline: Gets or sets the color of the circular outline on which the segment is drawn
  • Thickness: Gets or sets the thickness of the circular outline and segment

Those two customization options are not yet available with the WinUI 2.5 ProgressRing. There is already a tracking issue for the color customizations, however I don't think there is a tracking issue for the thickness property. @YuliKl @ranjeshj @MarissaMatt FYI

In ProgressRing, Foreground/Background properties are tied to ring and background. We currently do not expose the thickness, but you there is the ability to swap out the entire Lottie animation (using DeterminateSource/InDeterminateSource properties). Given that level of customization is available, do we need the thickness exposed as a property ?

@chingucoding sorry for the delay but I created a new issue to track adding a thickness property. https://github.com/microsoft/microsoft-ui-xaml/issues/3293

Is 17763 going to be the final min SDK version for 7.0?

@yoshiask Yup, 17763 (1809) is the min version we'll be using for 7.x.

Was this page helpful?
0 / 5 - 0 ratings

Related issues

deltakosh picture deltakosh  ยท  3Comments

kusanagi2k2 picture kusanagi2k2  ยท  4Comments

michael-hawker picture michael-hawker  ยท  4Comments

nolanblew picture nolanblew  ยท  3Comments

HardySoftware picture HardySoftware  ยท  3Comments