Skip to content

Adds a FluentCxAudio#91

Merged
MarvinKlein1508 merged 11 commits into
mainfrom
feat/fluentcx-audio
Oct 30, 2025
Merged

Adds a FluentCxAudio#91
MarvinKlein1508 merged 11 commits into
mainfrom
feat/fluentcx-audio

Conversation

@JeremyJ78

@JeremyJ78 JeremyJ78 commented Sep 28, 2025

Copy link
Copy Markdown
Contributor

Pull Request

📖 Description

FluentCxAudio is a part of a very big component.
But it can work as standalone

It can play, pause, stop, resume an audio file.
You can add playlist...
4 views : Default, Compact, Floating, Minimal...

Each audio track can have it's cover (url, direct url)

🎫 Issues

The HTML Audio Element has an issue when seeking... it's seems to be a known bug...

(On browser try this :

document.querySelector('audio');

after that, get the audio element and :

audio.pause();
audio.currentTime = 160; (in seconds and less than the duration)
audio.play(); <- here, the audio element doesn't seek well...

👩‍💻 Reviewer Notes

📑 Test Plan

✅ Checklist

General

  • I have added tests for my changes.
  • I have tested my changes.
  • I have updated the project documentation to reflect my changes.

Component-specific

  • I have added a new component
  • I have modified an existing component

⏭ Next Steps

The next step will be to add a way to get the cover inside the tags of the audio file...
Try to find why seek is not working on the HTML Audio Element if we don't use the HTML Audio element in direct

@github-actions

github-actions Bot commented Sep 28, 2025

Copy link
Copy Markdown

✅ All tests passed successfully

Details on your Workflow / Core Tests page.

@github-actions

github-actions Bot commented Sep 28, 2025

Copy link
Copy Markdown

Summary - Unit Tests Code Coverage

Summary
Generated on: 10/30/2025 - 10:17:43 AM
Coverage date: 10/30/2025 - 10:17:33 AM
Parser: Cobertura
Assemblies: 1
Classes: 253
Files: 323
Line coverage: 72.3% (7437 of 10279)
Covered lines: 7437
Uncovered lines: 2842
Coverable lines: 10279
Total lines: 34222
Branch coverage: 52% (2062 of 3960)
Covered branches: 2062
Total branches: 3960
Method coverage: Feature is only available for sponsors
Tag: 244_18937199480

Coverage

FluentUI.Blazor.Community.Components - 72.3%
Name Line Branch
FluentUI.Blazor.Community.Components 72.3% 52%
FluentUI.Blazor.Community.Animations.AnimationEngine 61.2% 40.4%
FluentUI.Blazor.Community.ByteSize 88.1% 71.7%
FluentUI.Blazor.Community.ByteSizeTypeConverter 83.3% 50%
FluentUI.Blazor.Community.Components.AcceptFileProvider 100% 100%
FluentUI.Blazor.Community.Components.AccessibilitySafePlugin 100%
FluentUI.Blazor.Community.Components.AnalogousPlugin 100% 100%
FluentUI.Blazor.Community.Components.AnimatedElement 79.3% 81.8%
FluentUI.Blazor.Community.Components.AnimatedElementGroup 97% 70%
FluentUI.Blazor.Community.Components.AnimatedLayoutBase 80.3% 63.6%
FluentUI.Blazor.Community.Components.AnimationGroup 97.2% 63.6%
FluentUI.Blazor.Community.Components.AnimationItem 100% 100%
FluentUI.Blazor.Community.Components.AnimationState`1 40.4% 2.1%
FluentUI.Blazor.Community.Components.Audio 100%
FluentUI.Blazor.Community.Components.AudioControls 93.3% 50%
FluentUI.Blazor.Community.Components.AudioLabels 100%
FluentUI.Blazor.Community.Components.AudioMetadata 100%
FluentUI.Blazor.Community.Components.AudioMetadataProvider 0% 0%
FluentUI.Blazor.Community.Components.AudioPlaylist 75% 50%
FluentUI.Blazor.Community.Components.AudioPlaylistItem 96% 40.9%
FluentUI.Blazor.Community.Components.AudioTitleScroller 100%
FluentUI.Blazor.Community.Components.AudioTrackItem 20% 0%
FluentUI.Blazor.Community.Components.AudioVisualizer 81.3% 88.8%
FluentUI.Blazor.Community.Components.BackEasing 100% 100%
FluentUI.Blazor.Community.Components.BindStackLayout 100% 100%
FluentUI.Blazor.Community.Components.BounceEasing 90.9% 87.5%
FluentUI.Blazor.Community.Components.BrowserConverter 100% 100%
FluentUI.Blazor.Community.Components.CascadeLayout 100%
FluentUI.Blazor.Community.Components.ChaosLayout 100%
FluentUI.Blazor.Community.Components.Chapter 0%
FluentUI.Blazor.Community.Components.CircularEasing 100% 100%
FluentUI.Blazor.Community.Components.ColorInterpolator 100%
FluentUI.Blazor.Community.Components.ColorPaletteItem 100% 75%
FluentUI.Blazor.Community.Components.CompactPlayer 76.9% 20%
FluentUI.Blazor.Community.Components.CompactSeekBar 100%
FluentUI.Blazor.Community.Components.ComplementaryPlugin 100% 100%
FluentUI.Blazor.Community.Components.CookieData 100%
FluentUI.Blazor.Community.Components.CookieItem 100%
FluentUI.Blazor.Community.Components.CookieItemView 95.2% 90%
FluentUI.Blazor.Community.Components.CookieLabels 100%
FluentUI.Blazor.Community.Components.CoolPlugin 100% 100%
FluentUI.Blazor.Community.Components.CreateFileManagerEntryEventArgs`1 100%
FluentUI.Blazor.Community.Components.CssLength 100% 100%
FluentUI.Blazor.Community.Components.CubicEasing 100% 100%
FluentUI.Blazor.Community.Components.DeleteFileManagerEntryEventArgs`1 100%
FluentUI.Blazor.Community.Components.DesaturatePlugin 100% 100%
FluentUI.Blazor.Community.Components.DescriptiveMetadata 55.5%
FluentUI.Blazor.Community.Components.DeviceInfo 100% 100%
FluentUI.Blazor.Community.Components.DeviceInfoState 100%
FluentUI.Blazor.Community.Components.DomRect 0%
FluentUI.Blazor.Community.Components.DotIndicator`1 100% 100%
FluentUI.Blazor.Community.Components.DoubleInterpolator 100%
FluentUI.Blazor.Community.Components.DownloadButton 100% 100%
FluentUI.Blazor.Community.Components.DualHuePlugin 100% 100%
FluentUI.Blazor.Community.Components.ElasticEasing 100% 100%
FluentUI.Blazor.Community.Components.ExponentialEasing 100% 100%
FluentUI.Blazor.Community.Components.ExtendedMetadata 0%
FluentUI.Blazor.Community.Components.FanLayout 100%
FluentUI.Blazor.Community.Components.FileExtensionTypeLabels 100%
FluentUI.Blazor.Community.Components.FileExtensionTypeProvider 100% 100%
FluentUI.Blazor.Community.Components.FileIcons 93.4% 100%
FluentUI.Blazor.Community.Components.FileListDataGridColumnLabels 100%
FluentUI.Blazor.Community.Components.FileManager.FileManagerDetailsDialog`1 100% 100%
FluentUI.Blazor.Community.Components.FileManager`1 63% 31.8%
FluentUI.Blazor.Community.Components.FileManagerBase`1 40.7% 0%
FluentUI.Blazor.Community.Components.FileManagerContent 100%
FluentUI.Blazor.Community.Components.FileManagerDetailsDialogContent`1 100%
FluentUI.Blazor.Community.Components.FileManagerDetailsLabels 100%
FluentUI.Blazor.Community.Components.FileManagerDialog 0% 0%
FluentUI.Blazor.Community.Components.FileManagerEntriesMovedEventArgs`1 100%
FluentUI.Blazor.Community.Components.FileManagerEntry`1 84% 72.9%
FluentUI.Blazor.Community.Components.FileManagerEntryComparer`1 53.3% 22.7%
FluentUI.Blazor.Community.Components.FileManagerEntryDetails`1 43.9% 51.6%
FluentUI.Blazor.Community.Components.FileManagerEntryEventArgs`1 100%
FluentUI.Blazor.Community.Components.FileManagerEntryMenuItemDescription`1 100%
FluentUI.Blazor.Community.Components.FileManagerEntryTreeViewItemComparer 100% 83.3%
FluentUI.Blazor.Community.Components.FileManagerGrid`1 60.9% 43.9%
FluentUI.Blazor.Community.Components.FileManagerLabels 100%
FluentUI.Blazor.Community.Components.FileManagerList`1 53.3% 50%
FluentUI.Blazor.Community.Components.FileManagerState 26.6% 16.6%
FluentUI.Blazor.Community.Components.FileMoverDialog`1 0% 0%
FluentUI.Blazor.Community.Components.FileZipper 95.2% 87.5%
FluentUI.Blazor.Community.Components.FloatInterpolator 100%
FluentUI.Blazor.Community.Components.FloatLayout 100%
FluentUI.Blazor.Community.Components.FlowerLayout 100%
FluentUI.Blazor.Community.Components.FluentCxAnimation 70.6% 47.7%
FluentUI.Blazor.Community.Components.FluentCxAudio 0% 0%
FluentUI.Blazor.Community.Components.FluentCxColorPalette 52.4% 39.3%
FluentUI.Blazor.Community.Components.FluentCxCookie 95% 67.7%
FluentUI.Blazor.Community.Components.FluentCxDeviceDetector 93.1% 75%
FluentUI.Blazor.Community.Components.FluentCxFileManager`1 69.1% 66.8%
FluentUI.Blazor.Community.Components.FluentCxFloatingButton 95% 91.6%
FluentUI.Blazor.Community.Components.FluentCxImageGroup 100% 100%
FluentUI.Blazor.Community.Components.FluentCxImageGroupItem 100% 85%
FluentUI.Blazor.Community.Components.FluentCxLottiePlayer 96.7% 86.8%
FluentUI.Blazor.Community.Components.FluentCxLottieProvider 0%
FluentUI.Blazor.Community.Components.FluentCxMediaQuery 86.4% 68.7%
FluentUI.Blazor.Community.Components.FluentCxObserverProvider 0% 0%
FluentUI.Blazor.Community.Components.FluentCxPathBar 57.6% 45.7%
FluentUI.Blazor.Community.Components.FluentCxPathBarItem 80% 60%
FluentUI.Blazor.Community.Components.FluentCxPathBarItemMenu 50% 0%
FluentUI.Blazor.Community.Components.FluentCxPicture 94% 70%
FluentUI.Blazor.Community.Components.FluentCxResizer 90.3% 85%
FluentUI.Blazor.Community.Components.FluentCxSignature 0% 0%
FluentUI.Blazor.Community.Components.FluentCxSleekDial 81% 55.2%
FluentUI.Blazor.Community.Components.FluentCxSlideshow`1 78.6% 57.5%
FluentUI.Blazor.Community.Components.FluentCxTileGrid`1 96.2% 90.6%
FluentUI.Blazor.Community.Components.FluentCxTileGridItem`1 97% 53.1%
FluentUI.Blazor.Community.Components.GalaxyLayout 100%
FluentUI.Blazor.Community.Components.GenerationOptions 100%
FluentUI.Blazor.Community.Components.GoldenSpiralLayout 100%
FluentUI.Blazor.Community.Components.GrayscalePlugin 100% 100%
FluentUI.Blazor.Community.Components.GridLayout 76.9% 0%
FluentUI.Blazor.Community.Components.GridLayoutBase 93.9% 100%
FluentUI.Blazor.Community.Components.GridLayoutBaseItem 100%
FluentUI.Blazor.Community.Components.GroupObserverItem 0%
FluentUI.Blazor.Community.Components.HeartLayout 100%
FluentUI.Blazor.Community.Components.HelixLayout 100%
FluentUI.Blazor.Community.Components.ImageShapeExtensions 100% 100%
FluentUI.Blazor.Community.Components.Internal.ChildComponentValueEqualityCo
mparer`1
45.4% 33.3%
FluentUI.Blazor.Community.Components.Internal.DropZoneState`1 25% 0%
FluentUI.Blazor.Community.Components.Internal.FluentCxDropZone`1 70% 39%
FluentUI.Blazor.Community.Components.Internal.FluentCxDropZoneContainer`1 49.5% 23.3%
FluentUI.Blazor.Community.Components.Internal.TileGridSettings 100% 100%
FluentUI.Blazor.Community.Components.IntersectBatch 0%
FluentUI.Blazor.Community.Components.IntersectEntry 0%
FluentUI.Blazor.Community.Components.IntersectEventArgs 0%
FluentUI.Blazor.Community.Components.JsonAnimatedElement 100%
FluentUI.Blazor.Community.Components.LegalMetadata 0%
FluentUI.Blazor.Community.Components.LinearEasing 100%
FluentUI.Blazor.Community.Components.LottieControls 81.6% 66.6%
FluentUI.Blazor.Community.Components.LottieLabels 100%
FluentUI.Blazor.Community.Components.LottieOptions 100%
FluentUI.Blazor.Community.Components.LottieState 0% 0%
FluentUI.Blazor.Community.Components.MagnetLayout 100%
FluentUI.Blazor.Community.Components.ManageCookie 92.8% 100%
FluentUI.Blazor.Community.Components.MenuOptions 100%
FluentUI.Blazor.Community.Components.Middleware.Base64ImageStrategy 0%
FluentUI.Blazor.Community.Components.Middleware.FtpImageStrategy 0%
FluentUI.Blazor.Community.Components.Middleware.HttpImageStrategy 0%
FluentUI.Blazor.Community.Components.Middleware.ImageProcessingMiddleware 0% 0%
FluentUI.Blazor.Community.Components.Middleware.IpfsImageStrategy 0%
FluentUI.Blazor.Community.Components.MinimalPlayer 100%
FluentUI.Blazor.Community.Components.MobileConverter 100% 100%
FluentUI.Blazor.Community.Components.MonochromaticPlugin 100% 87.5%
FluentUI.Blazor.Community.Components.MorphingLayout 81% 35.1%
FluentUI.Blazor.Community.Components.MutationBatch 0%
FluentUI.Blazor.Community.Components.MutationEntry 0%
FluentUI.Blazor.Community.Components.MutationEventArgs 0%
FluentUI.Blazor.Community.Components.MutationObserverOptions 0%
FluentUI.Blazor.Community.Components.NeonPlugin 100% 100%
FluentUI.Blazor.Community.Components.NextButton 100% 100%
FluentUI.Blazor.Community.Components.NoFileEntryData 100%
FluentUI.Blazor.Community.Components.ObserverItem 0% 0%
FluentUI.Blazor.Community.Components.ObserverState 0% 0%
FluentUI.Blazor.Community.Components.OperatingSystemConverter 100% 100%
FluentUI.Blazor.Community.Components.OrbitLayout 100%
FluentUI.Blazor.Community.Components.OverflowButton 88.8% 75%
FluentUI.Blazor.Community.Components.PastelPlugin 100% 100%
FluentUI.Blazor.Community.Components.PathBarItem 100% 100%
FluentUI.Blazor.Community.Components.PathBarItemBuilder 94.8% 88.3%
FluentUI.Blazor.Community.Components.PathBarItemComparer 100% 83.3%
FluentUI.Blazor.Community.Components.PathBarItemEqualityComparer 44.4% 16.6%
FluentUI.Blazor.Community.Components.PictureOverlay 0%
FluentUI.Blazor.Community.Components.PinLayout 100%
FluentUI.Blazor.Community.Components.PlaylistButton 100% 100%
FluentUI.Blazor.Community.Components.PlayOrPauseButton 82.3% 75%
FluentUI.Blazor.Community.Components.PreviousButton 100% 100%
FluentUI.Blazor.Community.Components.PropertiesButton 70% 0%
FluentUI.Blazor.Community.Components.PulseLayout 100%
FluentUI.Blazor.Community.Components.QuadraticEasing 100% 100%
FluentUI.Blazor.Community.Components.QuarticEasing 100% 100%
FluentUI.Blazor.Community.Components.QuinticEasing 100% 100%
FluentUI.Blazor.Community.Components.RepeatButton 75% 29.6%
FluentUI.Blazor.Community.Components.ResizeBatch 0%
FluentUI.Blazor.Community.Components.ResizedEventArgs 100%
FluentUI.Blazor.Community.Components.ResizeEntry 0%
FluentUI.Blazor.Community.Components.ResizeEventArgs 0%
FluentUI.Blazor.Community.Components.ResizerHelper 100% 100%
FluentUI.Blazor.Community.Components.ResizeWindowEventArgs 0%
FluentUI.Blazor.Community.Components.ResponsiveImage 100% 50%
FluentUI.Blazor.Community.Components.RgbaColor 100% 100%
FluentUI.Blazor.Community.Components.SeekBar 0% 0%
FluentUI.Blazor.Community.Components.Shadow 0%
FluentUI.Blazor.Community.Components.ShadowOptions 100%
FluentUI.Blazor.Community.Components.ShuffleButton 100% 100%
FluentUI.Blazor.Community.Components.Signature 0% 0%
FluentUI.Blazor.Community.Components.SignatureEraserOptions 100% 100%
FluentUI.Blazor.Community.Components.SignatureEraserPanel 100%
FluentUI.Blazor.Community.Components.SignatureExporter 0% 0%
FluentUI.Blazor.Community.Components.SignatureExportEventArgs 0%
FluentUI.Blazor.Community.Components.SignatureExportOptions 100%
FluentUI.Blazor.Community.Components.SignatureExportPanel 100%
FluentUI.Blazor.Community.Components.SignatureGridLayer 0% 0%
FluentUI.Blazor.Community.Components.SignatureGridOptions 100%
FluentUI.Blazor.Community.Components.SignatureGridPanel 100%
FluentUI.Blazor.Community.Components.SignatureInkLayer 0% 0%
FluentUI.Blazor.Community.Components.SignatureLabels 100%
FluentUI.Blazor.Community.Components.SignatureMenu 94.1% 83.9%
FluentUI.Blazor.Community.Components.SignatureOptions 100%
FluentUI.Blazor.Community.Components.SignatureOverlayLayer 0% 0%
FluentUI.Blazor.Community.Components.SignaturePenOptions 100%
FluentUI.Blazor.Community.Components.SignaturePenPanel 100%
FluentUI.Blazor.Community.Components.SignaturePenPreviewer 100% 100%
FluentUI.Blazor.Community.Components.SignatureWatermarkOptions 100%
FluentUI.Blazor.Community.Components.SignatureWatermarkPanel 100%
FluentUI.Blazor.Community.Components.SleekDialAnimationSettings 100%
FluentUI.Blazor.Community.Components.SleekDialItem 96.8% 85%
FluentUI.Blazor.Community.Components.SleekDialItemView 75.5% 57.5%
FluentUI.Blazor.Community.Components.SleekDialPopup 46.5% 35.9%
FluentUI.Blazor.Community.Components.SleekDialRadialSettings 100%
FluentUI.Blazor.Community.Components.SleekDialView 83.3% 78.5%
FluentUI.Blazor.Community.Components.SlideshowCaption 100%
FluentUI.Blazor.Community.Components.SlideshowCaptionText 0%
FluentUI.Blazor.Community.Components.SlideshowImage`1 94.1% 50%
FluentUI.Blazor.Community.Components.SlideshowItem`1 95.8% 100%
FluentUI.Blazor.Community.Components.SlideshowResize 100%
FluentUI.Blazor.Community.Components.SnakeLayout 100% 50%
FluentUI.Blazor.Community.Components.SpiralGalaxyLayout 100%
FluentUI.Blazor.Community.Components.SpiralLayout 100%
FluentUI.Blazor.Community.Components.SplitComplementaryPlugin 100% 100%
FluentUI.Blazor.Community.Components.StackedRotatingLayout 100%
FluentUI.Blazor.Community.Components.StackLayout 100% 100%
FluentUI.Blazor.Community.Components.StopButton 100% 100%
FluentUI.Blazor.Community.Components.StreamFileAbstraction 0%
FluentUI.Blazor.Community.Components.StringColorInterpolator 100%
FluentUI.Blazor.Community.Components.SunburstLayout 100%
FluentUI.Blazor.Community.Components.TechnicalMetadata 0%
FluentUI.Blazor.Community.Components.TetradicPlugin 100% 100%
FluentUI.Blazor.Community.Components.TileGridLayout 100% 100%
FluentUI.Blazor.Community.Components.TileGridLayoutItem 100%
FluentUI.Blazor.Community.Components.TrackInfo 100% 59%
FluentUI.Blazor.Community.Components.TrackProperties 0% 0%
FluentUI.Blazor.Community.Components.TriadicPlugin 100% 100%
FluentUI.Blazor.Community.Components.UploadFileEventArgs 100%
FluentUI.Blazor.Community.Components.VisualMetadata 25%
FluentUI.Blazor.Community.Components.VolumeButton 90.9% 100%
FluentUI.Blazor.Community.Components.VortexLayout 0%
FluentUI.Blazor.Community.Components.WarmPlugin 100%
FluentUI.Blazor.Community.Components.WaveLayout 100%
FluentUI.Blazor.Community.Components.ZigZagLayout 100% 100%
FluentUI.Blazor.Community.EffectBuilder 100% 100%
FluentUI.Blazor.Community.Extensions.EnumExtensions 100%
FluentUI.Blazor.Community.Extensions.ParameterViewExtensions 100% 100%
FluentUI.Blazor.Community.Extensions.RenderTreeBuilderExtensions 100%
FluentUI.Blazor.Community.Extensions.ServiceCollectionExtensions 100%
FluentUI.Blazor.Community.Helpers.ColorUtils 75.6% 76.8%
FluentUI.Blazor.Community.Helpers.CssColorNamesUtils 100% 100%
FluentUI.Blazor.Community.Helpers.ImagePalette 100% 100%
FluentUI.Blazor.Community.Helpers.MathHelper 100%
FluentUI.Blazor.Community.Helpers.PathHelper 100% 100%
FluentUI.Blazor.Community.Helpers.RunningWasmHelper 0%
FluentUI.Blazor.Community.Helpers.SvgConverter 0% 0%
FluentUI.Blazor.Community.Helpers.UnitFormatHelper 100% 100%

@MarvinKlein1508

MarvinKlein1508 commented Sep 29, 2025

Copy link
Copy Markdown
Contributor

The component has some glitches:

  1. It crashes when you select the Fractual visualizer
  2. There is a broken link within the upload area
  3. Uploading an audio file doesn't trigger a re-render of the component. It is only playable once you switch either the view or visualizer
  4. Wrong cover is being shown for the uploaded file
  5. Uploading multiple files at once results in a null exception
  6. STOP button can be pressed even if no audio file is being played

@MarvinKlein1508

Copy link
Copy Markdown
Contributor

@JeremyJ78

JeremyJ78 commented Sep 29, 2025

Copy link
Copy Markdown
Contributor Author

The component has some glitches:

  1. It crashes when you select the Fractual visualizer
  2. There is a broken link within the upload area
  3. Uploading an audio file doesn't trigger a re-render of the component. It is only playable once you switch either the view or visualizer
  4. Wrong cover is being shown for the uploaded file
  5. Uploading multiple files at once results in a null exception
  6. STOP button can be pressed even if no audio file is being played
  1. OH! I don't have this bug... I will investigate this evening
  2. Yes😅 I see... I copy / paste the original sample on fluentui website
  3. Oh yes 😅 for me, it wasn't a problem. I will handle that this evening
  4. No... It's not a bug... For now, I haven't find a way to get the cover from the audio file... I will do some search this evening... That's why you have a default cover for now...(in the next steps élément, I said that I will try to find a way to get cover from ID Tags if any)
  5. I will try to have this exception... Maybe a file where the size is greater than expected?
  6. You are right... I haven't though about that... I will handle that this evening

Thanks for the file... Maybe it will help for finding few bugs and handle them

Jérémy JANISZEWSKI added 2 commits October 1, 2025 20:50
Add the metadata of the file
Modify the position of the playlist
Modify the compact player and floating to be better
Prepare the properties
@JeremyJ78

Copy link
Copy Markdown
Contributor Author

@MarvinKlein1508 : I've added the extraction of the metadata and correct many issues you saw...
For the audio file you send to me is a m4a file but I received a mp3 file, so the medata extraction didn't work.
If the TAGS are mp3, the extension of the file must be mp3...
If the TAGS are m4a,; the extension of the file must be m4a...
And so on...
Compact Player and Floating Player have better rendering
I've added labels for localization

The next step will be to have a properies dialog to show most of the metadata

@JeremyJ78

Copy link
Copy Markdown
Contributor Author

@MarvinKlein1508 : Done

@MarvinKlein1508 MarvinKlein1508 merged commit 9f9f579 into main Oct 30, 2025
2 checks passed
@JeremyJ78 JeremyJ78 deleted the feat/fluentcx-audio branch December 11, 2025 09:41
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants