Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore: upgrade typescript to 5.5.2 #33498

Open
wants to merge 26 commits into
base: master
Choose a base branch
from

Conversation

mainframev
Copy link
Contributor

@mainframev mainframev commented Dec 20, 2024

  • Updates ts to 5.5.2
  • Bumped api-extractor and api-extractor model to the latest (most changes caused by this)
  • Added new @import JSDoc tags.

Release notes

https://www.typescriptlang.org/docs/handbook/release-notes/typescript-5-4.html
https://www.typescriptlang.org/docs/handbook/release-notes/typescript-5-5.html

Related to configDir template var: the initial assumption, that it will help to get rid of explicit typeRoots for tsconfig.cy.json files appeared to be wrong. It works for scenarios, where derived config (packages//tsconfig.json) has to have paths related to final directory, before it was needed to re-specify the config property for derived config.

Previous Behavior

5.3.3

New Behavior

5.5.2

Related Issue(s)

Before (5.3.3) After (5.5.2)
12m 20s 12m 37s / 𝚫 2.3% 🐢 SLOWER

(nx run-many -t build type-check --skip-nx-cache)

@@ -85,7 +91,9 @@ export function classNamesFunction<TStyleProps extends {}, TStyleSet extends ISt
typeof styleFunctionOrObject === 'function' &&
(styleFunctionOrObject as StyleFunction<TStyleProps, TStyleSet>).__noStyleOverride__
) {
return styleFunctionOrObject(styleProps) as IProcessedStyleSet<TStyleSet>;
return (styleFunctionOrObject as IStyleFunction<TStyleProps, TStyleSet>)(
Copy link
Contributor Author

@mainframev mainframev Dec 20, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

had to add additional casting, throwing after upgrade with this TS2349:

Screenshot 2024-12-20 at 17 08 41

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

state.components?.[slotName] === undefined || typeof state.components[slotName] === 'string'
? asProp || state.components?.[slotName] || 'div'
: state.components[slotName]
) as React.ElementType<R[K]>;
: state.components[slotName];
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

after upgrade throws TS2590: Expression produces a union type that is too complex to represent

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

that's strange, there shouldn't be difference between asserting on definition vs this artificial alias you created. can you double check please ?

Copy link
Contributor Author

@mainframev mainframev Jan 7, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@Hotell

I think there is a difference for how TS is processing it, it's too complex for TS to handle assertion context in the first case, as it's attempting to make a full type validation against of a both ternary branches 🤷🏻

Smth like this should also work:

  const slot: React.ElementType<R[K]> =
    state.components?.[slotName] === undefined || typeof state.components[slotName] === 'string'
      ? ((asProp || state.components?.[slotName] || 'div') as React.ElementType<R[K]>)
      : (state.components[slotName] as React.ElementType<R[K]>);

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

there are various false positives in this implementation starting with return type readonly [React.ElementType<R[K]> | null, R[K]], but what is being done inside is casting the slot to React.ElementType<R[K]> instead of explicit union with null.

anyways...

the slot variable instantiation is so overly complex that it is impossible to capture a proper type from all these inline short-circuit checks

at this stage we should do following.

const slot = (state.components?.[slotName] === undefined || typeof state.components[slotName] === 'string'
    ? asProp || state.components[slotName] || 'div'
    : state.components[slotName]) as unknown as React.ElementType<R[K]>;
  • no extra JS runtime
  • less complex for TSC to figure out things
  • better express the intent as the result expression is truly unknown :)

@mainframev mainframev force-pushed the chore/ts-update-5-5 branch 2 times, most recently from 29cadea to ea576b0 Compare December 20, 2024 17:12
Copy link

Pull request demo site: URL

Copy link

github-actions bot commented Dec 20, 2024

📊 Bundle size report

Package & Exports Baseline (minified/GZIP) PR Change
react
ActivityItem
71.236 kB
23.357 kB
71.251 kB
23.378 kB
15 B
21 B
react
Announced
38.489 kB
13.296 kB
38.504 kB
13.304 kB
15 B
8 B
react
Breadcrumb
202.318 kB
60.388 kB
202.333 kB
60.393 kB
15 B
5 B
react
Button
195.791 kB
56.627 kB
195.806 kB
56.639 kB
15 B
12 B
react
ButtonGrid
180.722 kB
54.627 kB
180.737 kB
54.637 kB
15 B
10 B
react
Calendar
121.875 kB
37.024 kB
121.889 kB
37.031 kB
14 B
7 B
react
Callout
84.323 kB
27.64 kB
84.333 kB
27.653 kB
10 B
13 B
react
Check
53.204 kB
17.848 kB
53.218 kB
17.867 kB
14 B
19 B
react
Checkbox
59.985 kB
19.903 kB
60 kB
19.921 kB
15 B
18 B
react
ChoiceGroup
65.494 kB
21.489 kB
65.519 kB
21.515 kB
25 B
26 B
react
ChoiceGroupOption
58.767 kB
19.362 kB
58.781 kB
19.391 kB
14 B
29 B
react
Coachmark
93.121 kB
29.414 kB
93.135 kB
29.43 kB
14 B
16 B
react
ColorPicker
135.292 kB
42.21 kB
135.306 kB
42.223 kB
14 B
13 B
react
ComboBox
252.24 kB
72.304 kB
252.255 kB
72.318 kB
15 B
14 B
react
CommandBar
203.359 kB
60.141 kB
203.383 kB
60.165 kB
24 B
24 B
react
ContextualMenu
155.243 kB
48.202 kB
155.258 kB
48.217 kB
15 B
15 B
react
DatePicker
184.295 kB
56.15 kB
184.309 kB
56.177 kB
14 B
27 B
react
DetailsList
229.909 kB
65.781 kB
229.924 kB
65.793 kB
15 B
12 B
react
Dialog
211.717 kB
63.165 kB
211.732 kB
63.179 kB
15 B
14 B
react
Divider
19.603 kB
6.845 kB
19.617 kB
6.856 kB
14 B
11 B
react
DocumentCard
217.336 kB
64.44 kB
217.351 kB
64.441 kB
15 B
1 B
react
Dropdown
234.695 kB
68.743 kB
234.71 kB
68.751 kB
15 B
8 B
react
ExtendedPicker
96.873 kB
27.893 kB
96.873 kB
27.892 kB

-1 B
react
Fabric
41.745 kB
14.366 kB
41.76 kB
14.373 kB
15 B
7 B
react
Facepile
210.893 kB
63.167 kB
210.909 kB
63.161 kB
16 B
-6 B
react
FloatingPicker
242.388 kB
69.002 kB
242.404 kB
69.003 kB
16 B
1 B
react
Grid
180.722 kB
54.627 kB
180.737 kB
54.637 kB
15 B
10 B
react
GroupedList
135.07 kB
40.7 kB
135.084 kB
40.712 kB
14 B
12 B
react
GroupedListV2
122.687 kB
37.788 kB
122.701 kB
37.805 kB
14 B
17 B
react
HoverCard
97.16 kB
30.787 kB
97.174 kB
30.812 kB
14 B
25 B
react
Icon
51.885 kB
17.272 kB
51.902 kB
17.291 kB
17 B
19 B
react
Image
46.904 kB
15.707 kB
46.918 kB
15.716 kB
14 B
9 B
react
Keytip
81.693 kB
26.766 kB
81.707 kB
26.785 kB
14 B
19 B
react
KeytipLayer
103.474 kB
32.015 kB
103.488 kB
32.035 kB
14 B
20 B
react
Keytips
106.238 kB
33.013 kB
106.254 kB
33.03 kB
16 B
17 B
react
Label
38.347 kB
13.257 kB
38.358 kB
13.255 kB
11 B
-2 B
react
Layer
48.099 kB
16.367 kB
48.113 kB
16.376 kB
14 B
9 B
react
Link
39.682 kB
13.67 kB
39.696 kB
13.679 kB
14 B
9 B
react
MarqueeSelection
74.517 kB
22.433 kB
74.532 kB
22.443 kB
15 B
10 B
react
MessageBar
190.869 kB
57.103 kB
190.884 kB
57.116 kB
15 B
13 B
react
Modal
93.738 kB
30.271 kB
93.752 kB
30.287 kB
14 B
16 B
react
Nav
188.306 kB
56.485 kB
188.338 kB
56.497 kB
32 B
12 B
react
OverflowSet
33.385 kB
11.314 kB
33.399 kB
11.317 kB
14 B
3 B
react
Overlay
40.902 kB
14.095 kB
40.917 kB
14.109 kB
15 B
14 B
react
Panel
201.808 kB
60.106 kB
201.841 kB
60.12 kB
33 B
14 B
react
Persona
114.948 kB
36.532 kB
114.962 kB
36.547 kB
14 B
15 B
react
PersonaCoin
114.948 kB
36.532 kB
114.962 kB
36.547 kB
14 B
15 B
react
PersonaPresence
58.074 kB
19.384 kB
58.088 kB
19.407 kB
14 B
23 B
react
Pickers
299.046 kB
83.653 kB
299.061 kB
83.664 kB
15 B
11 B
react
Pivot
189.226 kB
57.267 kB
189.239 kB
57.27 kB
13 B
3 B
react
PositioningContainer
73.827 kB
23.758 kB
73.842 kB
23.769 kB
15 B
11 B
react
ProgressIndicator
39.494 kB
13.55 kB
39.509 kB
13.562 kB
15 B
12 B
react
Rating
82.12 kB
26.127 kB
82.134 kB
26.143 kB
14 B
16 B
react
Fluent UI React (entire library)
1.018 MB
282.959 kB
1.018 MB
282.987 kB
15 B
28 B
react
ScrollablePane
55.557 kB
17.728 kB
55.568 kB
17.739 kB
11 B
11 B
react
SearchBox
189.118 kB
56.68 kB
189.133 kB
56.682 kB
15 B
2 B
react
SelectedItemsList
232.878 kB
67.891 kB
232.893 kB
67.905 kB
15 B
14 B
react
Separator
35.384 kB
12.146 kB
35.395 kB
12.152 kB
11 B
6 B
react
Shimmer
49.259 kB
16.268 kB
49.273 kB
16.28 kB
14 B
12 B
react
ShimmeredDetailsList
240.691 kB
68.532 kB
240.708 kB
68.529 kB
17 B
-3 B
react
Slider
57.651 kB
19.217 kB
57.666 kB
19.23 kB
15 B
13 B
react
SpinButton
192.821 kB
57.775 kB
192.856 kB
57.784 kB
35 B
9 B
react
Spinner
41.775 kB
14.48 kB
41.796 kB
14.489 kB
21 B
9 B
react
SwatchColorPicker
191.136 kB
58.151 kB
191.151 kB
58.168 kB
15 B
17 B
react
TeachingBubble
206.139 kB
61.063 kB
206.154 kB
61.081 kB
15 B
18 B
react
TextField
80.79 kB
25.315 kB
80.809 kB
25.335 kB
19 B
20 B
react
TimePicker
242.051 kB
70.061 kB
242.066 kB
70.076 kB
15 B
15 B
react
Toggle
46.225 kB
15.986 kB
46.24 kB
15.997 kB
15 B
11 B
react
Tooltip
87.437 kB
28.26 kB
87.451 kB
28.274 kB
14 B
14 B
react
Utilities
82.931 kB
25.148 kB
82.946 kB
25.158 kB
15 B
10 B
react
WeeklyDayPicker
102.017 kB
31.834 kB
102.027 kB
31.848 kB
10 B
14 B
react-components
react-components: entire library
1.169 MB
292.741 kB
1.169 MB
292.731 kB
-36 B
-10 B
Unchanged fixtures
Package & Exports Size (minified/GZIP)
global-context
createContext
510 B
328 B
global-context
createContextSelector
537 B
339 B
keyboard-key
keyboard-key package
3.746 kB
1.928 kB
keyboard-keys
Multiple keyCodes
50 B
70 B
keyboard-keys
Multiple keys
87 B
94 B
keyboard-keys
Single key
44 B
64 B
keyboard-keys
Single keyCode
39 B
59 B
priority-overflow
createOverflowManager
4.457 kB
1.856 kB
react
Autofill
15.42 kB
4.766 kB
react
Color
7.789 kB
3.127 kB
react
DateTimeUtilities
5.244 kB
1.849 kB
react
DragDrop
8.343 kB
2.724 kB
react
DraggableZone
34.303 kB
11.511 kB
react
FocusTrapZone
17.023 kB
5.911 kB
react
FocusZone
55.159 kB
17.492 kB
react
Icons
66.361 kB
24.397 kB
react
KeytipData
14.032 kB
4.582 kB
react
List
39.371 kB
12.463 kB
react
Popup
12.294 kB
4.195 kB
react
Positioning
22.807 kB
7.701 kB
react
ResizeGroup
13.338 kB
4.377 kB
react
ResponsiveMode
8.13 kB
2.966 kB
react
SelectableOption
724 B
413 B
react
Selection
42.444 kB
12.278 kB
react
Stack
42.074 kB
14.405 kB
react
Sticky
32.599 kB
10.504 kB
react
Styling
46.033 kB
15.135 kB
react
Text
36.908 kB
12.822 kB
react
Theme
43.493 kB
14.173 kB
react
ThemeGenerator
12.392 kB
4.126 kB
react
Viewport
23.888 kB
7.656 kB
react
WindowProvider
1.059 kB
541 B
react-accordion
Accordion (including children components)
107.018 kB
32.834 kB
react-aria
ARIA - Default
237 B
181 B
react-avatar
Avatar
49.329 kB
15.824 kB
react-avatar
AvatarGroup
20.132 kB
7.976 kB
react-avatar
AvatarGroupItem
63.473 kB
20.043 kB
react-badge
Badge
25.98 kB
8.602 kB
react-badge
CounterBadge
26.759 kB
8.879 kB
react-badge
PresenceBadge
25.745 kB
9.463 kB
react-breadcrumb
@fluentui/react-breadcrumb - package
114.317 kB
31.702 kB
react-button
Button
37.2 kB
10.811 kB
react-button
CompoundButton
43.614 kB
12.109 kB
react-button
MenuButton
42.015 kB
12.152 kB
react-button
SplitButton
50.032 kB
13.724 kB
react-button
ToggleButton
53.133 kB
12.569 kB
react-calendar-compat
Calendar Compat
150.095 kB
40.026 kB
react-card
Card - All
101.796 kB
28.779 kB
react-card
Card
94.57 kB
26.957 kB
react-card
CardFooter
14.381 kB
5.799 kB
react-card
CardHeader
16.914 kB
6.677 kB
react-card
CardPreview
14.446 kB
5.929 kB
react-checkbox
Checkbox
35.144 kB
12.085 kB
react-color-picker-preview
ColorArea
50.298 kB
17.563 kB
react-color-picker-preview
ColorPicker
18.581 kB
7.371 kB
react-color-picker-preview
ColorSlider
41.673 kB
15.46 kB
react-combobox
Combobox (including child components)
105.562 kB
34.52 kB
react-combobox
Dropdown (including child components)
106.186 kB
34.462 kB
react-components
react-components: Button, FluentProvider & webLightTheme
69.236 kB
20.182 kB
react-components
react-components: Accordion, Button, FluentProvider, Image, Menu, Popover
224.18 kB
64.859 kB
react-components
react-components: FluentProvider & webLightTheme
44.473 kB
14.597 kB
react-datepicker-compat
DatePicker Compat
225.344 kB
63.793 kB
react-dialog
Dialog (including children components)
100.513 kB
30.131 kB
react-divider
Divider
21.354 kB
7.963 kB
react-field
Field
23.425 kB
8.905 kB
react-image
Image
15.386 kB
6.243 kB
react-input
Input
28.04 kB
9.451 kB
react-jsx-runtime
Classic Pragma
1.057 kB
530 B
react-jsx-runtime
JSX Dev Runtime
3.771 kB
1.643 kB
react-jsx-runtime
JSX Runtime
4.367 kB
1.874 kB
react-label
Label
14.697 kB
5.999 kB
react-link
Link
17.452 kB
7.077 kB
react-list
List
89.19 kB
26.607 kB
react-list
ListItem
112.757 kB
33.441 kB
react-menu
Menu (including children components)
155.616 kB
46.882 kB
react-menu
Menu (including selectable components)
158.598 kB
47.478 kB
react-message-bar
MessageBar (all components)
24.851 kB
9.276 kB
react-motion
@fluentui/react-motion - createMotionComponent()
4.506 kB
1.967 kB
react-motion
@fluentui/react-motion - createPresenceComponent()
5.231 kB
2.296 kB
react-motion
@fluentui/react-motion - PresenceGroup
1.714 kB
819 B
react-northstar
Accordion
85.38 kB
26.519 kB
react-northstar
Alert
87.435 kB
26.905 kB
react-northstar
Animation
55.331 kB
17.83 kB
react-northstar
Attachment
86.829 kB
26.7 kB
react-northstar
Avatar
80.264 kB
24.633 kB
react-northstar
Box
75.233 kB
23.813 kB
react-northstar
Breadcrumb
79.908 kB
24.717 kB
react-northstar
Button
83.145 kB
25.952 kB
react-northstar
Card
82.693 kB
25.037 kB
react-northstar
Carousel
105.17 kB
31.873 kB
react-northstar
Chat
154.072 kB
46.878 kB
react-northstar
Checkbox
79.792 kB
25.08 kB
react-northstar
Datepicker
186.639 kB
56.99 kB
react-northstar
Debug
8.801 kB
3.594 kB
react-northstar
Design
36.589 kB
12.067 kB
react-northstar
Dialog
112.046 kB
33.622 kB
react-northstar
Divider
76.604 kB
24.135 kB
react-northstar
Dropdown
198.196 kB
60.223 kB
react-northstar
Embed
81.465 kB
25.425 kB
react-northstar
Flex
47.716 kB
15.443 kB
react-northstar
Form
92.515 kB
28.888 kB
react-northstar
Grid
70.569 kB
22.283 kB
react-northstar
Header
74.741 kB
23.465 kB
react-northstar
Image
73.576 kB
23.333 kB
react-northstar
Input
88.334 kB
27.781 kB
react-northstar
ItemLayout
78.213 kB
24.457 kB
react-northstar
Label
77.905 kB
24.414 kB
react-northstar
Layout
75.378 kB
23.803 kB
react-northstar
List
88.475 kB
27.555 kB
react-northstar
Loader
78.601 kB
24.733 kB
react-northstar
Menu
128.587 kB
40.738 kB
react-northstar
MenuButton
162.993 kB
49.614 kB
react-northstar
Pill
83.707 kB
26.069 kB
react-northstar
Popup
135.304 kB
42.259 kB
react-northstar
Portal
58.326 kB
18.851 kB
react-northstar
Provider
93.129 kB
29.627 kB
react-northstar
RadioGroup
83.27 kB
26.053 kB
react-northstar
Reaction
77.265 kB
24.128 kB
react-northstar
Segment
76.194 kB
23.896 kB
react-northstar
Skeleton
77.75 kB
24.205 kB
react-northstar
Slider
84.258 kB
26.757 kB
react-northstar
SplitButton
178.231 kB
53.438 kB
react-northstar
Status
76.257 kB
24.054 kB
react-northstar
SvgIcon
36.811 kB
11.746 kB
react-northstar
Table
80.784 kB
25.157 kB
react-northstar
Text
74.099 kB
23.511 kB
react-northstar
TextArea
74.233 kB
23.496 kB
react-northstar
Toolbar
175.042 kB
52.844 kB
react-northstar
Tooltip
109.961 kB
35.238 kB
react-northstar
Tree
87.84 kB
27.223 kB
react-northstar
Video
75.399 kB
23.796 kB
react-overflow
hooks only
12.808 kB
4.819 kB
react-persona
Persona
56.22 kB
17.704 kB
react-popover
Popover
130.32 kB
40.699 kB
react-portal
Portal
14.563 kB
5.118 kB
react-portal-compat
PortalCompatProvider
8.39 kB
2.64 kB
react-positioning
usePositioning
28.144 kB
10.046 kB
react-progress
ProgressBar
17.11 kB
6.899 kB
react-provider
FluentProvider
24.649 kB
8.902 kB
react-radio
Radio
32.698 kB
10.351 kB
react-radio
RadioGroup
15.788 kB
6.431 kB
react-select
Select
27.758 kB
10.131 kB
react-slider
Slider
37.546 kB
12.631 kB
react-spinbutton
SpinButton
34.965 kB
11.661 kB
react-spinner
Spinner
25.271 kB
8.547 kB
react-swatch-picker
@fluentui/react-swatch-picker - package
105.112 kB
30.526 kB
react-switch
Switch
35.345 kB
11.322 kB
react-table
DataGrid
161.06 kB
45.718 kB
react-table
Table (Primitives only)
42.692 kB
13.862 kB
react-table
Table as DataGrid
131.895 kB
36.579 kB
react-table
Table (Selection only)
70.562 kB
20.007 kB
react-table
Table (Sort only)
69.205 kB
19.618 kB
react-tag-picker
@fluentui/react-tag-picker - package
185.734 kB
55.759 kB
react-tags
InteractionTag
15.225 kB
6.165 kB
react-tags
Tag
29.098 kB
9.559 kB
react-tags
TagGroup
82.745 kB
24.532 kB
react-teaching-popover
TeachingPopover
91.711 kB
27.921 kB
react-text
Text - Default
17.087 kB
6.731 kB
react-text
Text - Wrappers
20.268 kB
7.055 kB
react-textarea
Textarea
26.598 kB
9.761 kB
react-theme
Single theme token import
69 B
89 B
react-theme
Teams: all themes
35.835 kB
7.512 kB
react-theme
Teams: Light theme
19.794 kB
5.602 kB
react-timepicker-compat
TimePicker
108.551 kB
36.094 kB
react-toast
Toast (including Toaster)
101.309 kB
30.521 kB
react-tooltip
Tooltip
57.131 kB
19.949 kB
react-tree
FlatTree
147.295 kB
42.271 kB
react-tree
PersonaFlatTree
148.04 kB
42.417 kB
react-tree
PersonaTree
144.249 kB
41.27 kB
react-tree
Tree
143.51 kB
41.149 kB
react-utilities
SSRProvider
180 B
160 B
🤖 This report was generated against 87d6ba3bd577a8be9756f4d392b048083d8ef16a

@mainframev mainframev force-pushed the chore/ts-update-5-5 branch 2 times, most recently from 0e865c5 to 0a3b8eb Compare December 23, 2024 15:43
@github-actions github-actions bot added the CI label Dec 23, 2024
@mainframev mainframev force-pushed the chore/ts-update-5-5 branch 3 times, most recently from 9f52366 to 415da9a Compare December 23, 2024 22:50
@github-actions github-actions bot removed the CI label Dec 23, 2024
@mainframev mainframev marked this pull request as ready for review December 30, 2024 18:05
@@ -15,7 +15,9 @@ export function concatStyleSetsWithProps<TStyleProps, TStyleSet extends IStyleSe
const result: Array<DeepPartial<TStyleSet>> = [];
for (const styles of allStyles) {
if (styles) {
result.push(typeof styles === 'function' ? styles(styleProps) : styles);
result.push(
typeof styles === 'function' ? (styles as IStyleFunction<TStyleProps, TStyleSet>)(styleProps) : styles,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

checked this a bit more.

because the IStyleFunctionOrObject type is very complex ( including recursion ), the typeof function check is not enough to narrow down the right value from the union.

Cleaner solution is to introduce custom type guard to help TS navigate in these non trivial waters ( might lead also to faster tsc )

export function isStyleFunction<TStylesProps, TStyleSet extends IStyleSetBase>(
  val: IStyleFunctionOrObject<TStylesProps, TStyleSet>,
): val is IStyleFunction<TStylesProps, TStyleSet> {
  return typeof val === 'function';
}

⬇️

result.push(isStyleFunction(styles) ? styles(styleProps) : styles);

no errors ✅.

similar approach can be used also in other related changes you made as part of this PR.

@fabricteam
Copy link
Collaborator

fabricteam commented Jan 22, 2025

🕵 FluentUIV0 No visual regressions between this PR and main

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants