fluentui
fluentui copied to clipboard
ci: improve v9 type-checking speed by ~80% with temporary hack
Previous Behavior
New Behavior
| command | before | after | delta |
|---|---|---|---|
| yarn buildci | 48m 41s | 41m 00s | +16% |
| yarn workspace @fluentui/react-components type-check | 45s | 7s | +85% |
| Cell | Cell | Cell | Cell |
Related Issue(s)
- Fixes partially https://github.com/microsoft/fluentui/issues/30516
📊 Bundle size report
Unchanged fixtures
| Package & Exports | Size (minified/GZIP) |
|---|---|
| global-context createContext |
510 B328 B |
| global-context createContextSelector |
537 B339 B |
| keyboard-key keyboard-key package |
3.746 kB1.928 kB |
| priority-overflow createOverflowManager |
4.447 kB1.853 kB |
| react ActivityItem |
68.833 kB22.613 kB |
| react Announced |
36.473 kB12.628 kB |
| react Autofill |
15.365 kB4.743 kB |
| react Breadcrumb |
196.083 kB58.757 kB |
| react Button |
190.127 kB55.019 kB |
| react ButtonGrid |
175.918 kB53.25 kB |
| react Calendar |
118.756 kB36.101 kB |
| react Callout |
80.866 kB26.564 kB |
| react Check |
51.062 kB17.152 kB |
| react Checkbox |
57.791 kB19.17 kB |
| react ChoiceGroup |
63.339 kB20.824 kB |
| react ChoiceGroupOption |
56.601 kB18.695 kB |
| react Coachmark |
89.704 kB28.407 kB |
| react Color |
7.737 kB3.106 kB |
| react ColorPicker |
129.984 kB40.589 kB |
| react ComboBox |
245.355 kB70.51 kB |
| react CommandBar |
197.362 kB58.46 kB |
| react ContextualMenu |
150.967 kB46.982 kB |
| react DatePicker |
180.318 kB54.947 kB |
| react DateTimeUtilities |
5.244 kB1.849 kB |
| react DetailsList |
225.886 kB64.647 kB |
| react Dialog |
205.294 kB61.428 kB |
| react Divider |
17.63 kB6.234 kB |
| react DocumentCard |
211.08 kB62.793 kB |
| react DragDrop |
8.343 kB2.724 kB |
| react DraggableZone |
33.345 kB11.166 kB |
| react Dropdown |
227.732 kB66.867 kB |
| react ExtendedPicker |
94.987 kB27.297 kB |
| react Fabric |
39.75 kB13.688 kB |
| react Facepile |
205.992 kB61.67 kB |
| react FloatingPicker |
236.233 kB67.368 kB |
| react FocusTrapZone |
15.831 kB5.54 kB |
| react FocusZone |
53.259 kB16.869 kB |
| react Grid |
175.918 kB53.25 kB |
| react GroupedList |
131.636 kB39.657 kB |
| react GroupedListV2 |
119.324 kB36.822 kB |
| react HoverCard |
93.735 kB29.778 kB |
| react Icon |
49.74 kB16.603 kB |
| react Icons |
65.829 kB24.212 kB |
| react Image |
44.79 kB15.024 kB |
| react Keytip |
78.588 kB25.825 kB |
| react KeytipData |
13.585 kB4.418 kB |
| react KeytipLayer |
100.422 kB31.128 kB |
| react Keytips |
103.175 kB32.07 kB |
| react Label |
36.347 kB12.639 kB |
| react Layer |
45.683 kB15.585 kB |
| react Link |
37.673 kB12.993 kB |
| react List |
38.136 kB12.004 kB |
| react MarqueeSelection |
72.119 kB21.676 kB |
| react MessageBar |
184.707 kB55.523 kB |
| react Modal |
90.409 kB29.213 kB |
| react Nav |
183.442 kB55.093 kB |
| react OverflowSet |
31.044 kB10.593 kB |
| react Overlay |
38.784 kB13.401 kB |
| react Panel |
194.946 kB58.34 kB |
| react Persona |
111.705 kB35.58 kB |
| react PersonaCoin |
111.705 kB35.58 kB |
| react PersonaPresence |
55.928 kB18.715 kB |
| react Pickers |
287.603 kB80.607 kB |
| react Pivot |
184.252 kB55.823 kB |
| react Popup |
12.032 kB4.114 kB |
| react Positioning |
21.821 kB7.334 kB |
| react PositioningContainer |
70.754 kB22.84 kB |
| react ProgressIndicator |
37.498 kB12.906 kB |
| react Rating |
78.989 kB25.18 kB |
| react ResizeGroup |
13.286 kB4.365 kB |
| react ResponsiveMode |
8.078 kB2.95 kB |
| react ScrollablePane |
53.538 kB17.113 kB |
| react SearchBox |
182.982 kB55.1 kB |
| react SelectableOption |
724 B413 B |
| react SelectedItemsList |
226.659 kB66.321 kB |
| react Selection |
41.202 kB11.839 kB |
| react Separator |
33.397 kB11.529 kB |
| react Shimmer |
47.265 kB15.632 kB |
| react ShimmeredDetailsList |
236.654 kB67.42 kB |
| react Slider |
55.575 kB18.574 kB |
| react SpinButton |
186.661 kB56.205 kB |
| react Spinner |
39.691 kB13.815 kB |
| react Stack |
40.761 kB13.931 kB |
| react Sticky |
32.064 kB10.324 kB |
| react Styling |
44.812 kB14.688 kB |
| react SwatchColorPicker |
186.166 kB56.724 kB |
| react TeachingBubble |
200.004 kB59.345 kB |
| react Text |
35.931 kB12.486 kB |
| react TextField |
78.587 kB24.642 kB |
| react Theme |
42.456 kB13.773 kB |
| react ThemeGenerator |
12.34 kB4.106 kB |
| react TimePicker |
235.197 kB68.29 kB |
| react Toggle |
44.17 kB15.346 kB |
| react Tooltip |
84.225 kB27.277 kB |
| react Utilities |
71.851 kB21.843 kB |
| react Viewport |
22.945 kB7.292 kB |
| react WeeklyDayPicker |
98.762 kB30.828 kB |
| react WindowProvider |
1.059 kB541 B |
| react-accordion Accordion (including children components) |
100.12 kB30.422 kB |
| react-alert Alert |
83.737 kB23.474 kB |
| react-avatar Avatar |
50.175 kB15.944 kB |
| react-avatar AvatarGroup |
19.704 kB7.796 kB |
| react-avatar AvatarGroupItem |
64.831 kB20.274 kB |
| react-badge Badge |
26.905 kB8.729 kB |
| react-badge CounterBadge |
27.806 kB9.024 kB |
| react-badge PresenceBadge |
25.311 kB9.306 kB |
| react-breadcrumb @fluentui/react-breadcrumb - package |
115.465 kB31.832 kB |
| react-button Button |
39.513 kB11.169 kB |
| react-button CompoundButton |
46.874 kB12.661 kB |
| react-button MenuButton |
44.292 kB12.542 kB |
| react-button SplitButton |
52.306 kB14.134 kB |
| react-button ToggleButton |
56.559 kB13.068 kB |
| react-calendar-compat Calendar Compat |
152.067 kB39.826 kB |
| react-card Card - All |
101.55 kB28.92 kB |
| react-card Card |
96.373 kB27.403 kB |
| react-card CardFooter |
13.064 kB5.385 kB |
| react-card CardHeader |
15.307 kB6.143 kB |
| react-card CardPreview |
14.015 kB5.752 kB |
| react-checkbox Checkbox |
35.65 kB12.076 kB |
| react-combobox Combobox (including child components) |
102.176 kB32.976 kB |
| react-combobox Dropdown (including child components) |
103.543 kB32.927 kB |
| react-components react-components: Button, FluentProvider & webLightTheme |
70.726 kB20.47 kB |
| react-components react-components: Accordion, Button, FluentProvider, Image, Menu, Popover |
217.193 kB61.95 kB |
| react-components react-components: FluentProvider & webLightTheme |
43.211 kB14.303 kB |
| react-datepicker-compat DatePicker Compat |
224.513 kB62.955 kB |
| react-dialog Dialog (including children components) |
100.923 kB29.928 kB |
| react-divider Divider |
20.82 kB7.763 kB |
| react-field Field |
22.544 kB8.61 kB |
| react-image Image |
15.745 kB6.23 kB |
| react-infobutton InfoButton |
138.69 kB43.394 kB |
| react-infobutton InfoLabel |
142.491 kB44.625 kB |
| react-input Input |
26.887 kB9.118 kB |
| react-jsx-runtime Classic Pragma |
1.057 kB530 B |
| react-jsx-runtime JSX Dev Runtime |
3.783 kB1.648 kB |
| react-jsx-runtime JSX Runtime |
4.377 kB1.881 kB |
| react-label Label |
14.266 kB5.828 kB |
| react-link Link |
17.082 kB6.911 kB |
| react-menu Menu (including children components) |
149.422 kB45.506 kB |
| react-menu Menu (including selectable components) |
152.108 kB46.016 kB |
| react-message-bar MessageBar (all components) |
25.566 kB9.131 kB |
| react-northstar Accordion |
85.357 kB26.509 kB |
| react-northstar Alert |
87.425 kB26.91 kB |
| react-northstar Animation |
55.304 kB17.834 kB |
| react-northstar Attachment |
86.819 kB26.7 kB |
| react-northstar Avatar |
80.254 kB24.634 kB |
| react-northstar Box |
75.223 kB23.814 kB |
| react-northstar Breadcrumb |
79.889 kB24.707 kB |
| react-northstar Button |
83.135 kB25.957 kB |
| react-northstar Card |
82.674 kB25.027 kB |
| react-northstar Carousel |
105.15 kB31.882 kB |
| react-northstar Chat |
152.326 kB45.963 kB |
| react-northstar Checkbox |
79.782 kB25.085 kB |
| react-northstar Datepicker |
184.887 kB56.167 kB |
| react-northstar Debug |
8.801 kB3.594 kB |
| react-northstar Design |
36.564 kB12.07 kB |
| react-northstar Dialog |
112.02 kB33.638 kB |
| react-northstar Divider |
76.594 kB24.137 kB |
| react-northstar Dropdown |
196.43 kB59.442 kB |
| react-northstar Embed |
81.446 kB25.42 kB |
| react-northstar Flex |
47.702 kB15.45 kB |
| react-northstar Form |
92.492 kB28.881 kB |
| react-northstar Grid |
70.555 kB22.283 kB |
| react-northstar Header |
74.731 kB23.476 kB |
| react-northstar Image |
73.566 kB23.339 kB |
| react-northstar Input |
88.31 kB27.784 kB |
| react-northstar ItemLayout |
78.206 kB24.458 kB |
| react-northstar Label |
77.895 kB24.415 kB |
| react-northstar Layout |
75.368 kB23.806 kB |
| react-northstar List |
88.472 kB27.57 kB |
| react-northstar Loader |
78.591 kB24.745 kB |
| react-northstar Menu |
126.85 kB39.875 kB |
| react-northstar MenuButton |
161.254 kB48.881 kB |
| react-northstar Pill |
83.697 kB26.077 kB |
| react-northstar Popup |
133.56 kB41.486 kB |
| react-northstar Portal |
58.294 kB18.855 kB |
| react-northstar Provider |
93.114 kB29.626 kB |
| react-northstar RadioGroup |
83.25 kB26.056 kB |
| react-northstar Reaction |
77.255 kB24.138 kB |
| react-northstar Segment |
76.184 kB23.899 kB |
| react-northstar Skeleton |
77.74 kB24.21 kB |
| react-northstar Slider |
84.235 kB26.744 kB |
| react-northstar SplitButton |
176.487 kB52.632 kB |
| react-northstar Status |
76.247 kB24.059 kB |
| react-northstar SvgIcon |
36.819 kB11.744 kB |
| react-northstar Table |
80.765 kB25.159 kB |
| react-northstar Text |
74.089 kB23.522 kB |
| react-northstar TextArea |
74.223 kB23.501 kB |
| react-northstar Toolbar |
173.3 kB52.087 kB |
| react-northstar Tooltip |
108.23 kB34.491 kB |
| react-northstar Tree |
87.83 kB27.223 kB |
| react-northstar Video |
75.379 kB23.794 kB |
| react-overflow hooks only |
12.862 kB4.827 kB |
| react-persona Persona |
57.066 kB17.821 kB |
| react-popover Popover |
126.88 kB39.806 kB |
| react-portal Portal |
13.629 kB4.875 kB |
| react-portal-compat PortalCompatProvider |
7.94 kB2.592 kB |
| react-positioning usePositioning |
26.398 kB9.539 kB |
| react-progress ProgressBar |
17.428 kB6.898 kB |
| react-provider FluentProvider |
23.751 kB8.66 kB |
| react-radio Radio |
32.946 kB10.252 kB |
| react-radio RadioGroup |
15.354 kB6.265 kB |
| react-select Select |
28.609 kB10.205 kB |
| react-slider Slider |
39.943 kB12.969 kB |
| react-spinbutton SpinButton |
36.774 kB11.788 kB |
| react-spinner Spinner |
23.517 kB8.512 kB |
| react-switch Switch |
35.134 kB11.198 kB |
| react-table DataGrid |
165.162 kB45.897 kB |
| react-table Table (Primitives only) |
45.318 kB14.117 kB |
| react-table Table as DataGrid |
136.542 kB36.827 kB |
| react-table Table (Selection only) |
76.307 kB20.546 kB |
| react-table Table (Sort only) |
74.973 kB20.156 kB |
| react-tags InteractionTag |
15.259 kB6.058 kB |
| react-tags Tag |
29.982 kB9.439 kB |
| react-tags TagGroup |
80.55 kB24.027 kB |
| react-text Text - Default |
16.705 kB6.569 kB |
| react-text Text - Wrappers |
19.878 kB6.896 kB |
| react-textarea Textarea |
30.947 kB10.476 kB |
| react-theme Single theme token import |
69 B89 B |
| react-theme Teams: all themes |
34.616 kB7.317 kB |
| react-theme Teams: Light theme |
19.287 kB5.498 kB |
| react-timepicker-compat TimePicker |
104.206 kB34.375 kB |
| react-toast Toast (including Toaster) |
100.192 kB29.763 kB |
| react-tooltip Tooltip |
54.576 kB19.192 kB |
| react-utilities SSRProvider |
180 B160 B |
Perf Analysis (@fluentui/react-components)
| Scenario | Render type | Master Ticks | PR Ticks | Iterations | Status |
|---|---|---|---|---|---|
| FluentProviderWithTheme | virtual-rerender-with-unmount | 67 | 74 | 10 | Possible regression |
All results
| Scenario | Render type | Master Ticks | PR Ticks | Iterations | Status |
|---|---|---|---|---|---|
| Avatar | mount | 650 | 628 | 5000 | |
| Button | mount | 315 | 311 | 5000 | |
| Field | mount | 1105 | 1181 | 5000 | |
| FluentProvider | mount | 685 | 693 | 5000 | |
| FluentProviderWithTheme | mount | 75 | 87 | 10 | |
| FluentProviderWithTheme | virtual-rerender | 63 | 59 | 10 | |
| FluentProviderWithTheme | virtual-rerender-with-unmount | 67 | 74 | 10 | Possible regression |
| MakeStyles | mount | 859 | 858 | 50000 | |
| Persona | mount | 1745 | 1726 | 5000 | |
| SpinButton | mount | 1374 | 1449 | 5000 |
Perf Analysis (@fluentui/react-northstar)
:warning: 2 potential perf regressions detected
Potential regressions comparing to master
| Scenario | Current PR Ticks | Baseline Ticks | Ratio | Regression Analysis |
|---|---|---|---|---|
| PortalMinimalPerf.default | 90 | 84 | 1.07:1 | analysis |
| RefMinimalPerf.default | 118 | 114 | 1.04:1 | analysis |
Perf tests with no regressions
| Scenario | Current PR Ticks | Baseline Ticks | Ratio |
|---|---|---|---|
| IconMinimalPerf.default | 398 | 359 | 1.11:1 |
| ListMinimalPerf.default | 326 | 301 | 1.08:1 |
| EmbedMinimalPerf.default | 1899 | 1800 | 1.06:1 |
| GridMinimalPerf.default | 196 | 185 | 1.06:1 |
| RadioGroupMinimalPerf.default | 267 | 251 | 1.06:1 |
| AttachmentMinimalPerf.default | 82 | 78 | 1.05:1 |
| ChatMinimalPerf.default | 446 | 425 | 1.05:1 |
| FormMinimalPerf.default | 222 | 211 | 1.05:1 |
| LayoutMinimalPerf.default | 204 | 195 | 1.05:1 |
| TextAreaMinimalPerf.default | 288 | 273 | 1.05:1 |
| AttachmentSlotsPerf.default | 646 | 621 | 1.04:1 |
| BoxMinimalPerf.default | 195 | 188 | 1.04:1 |
| DropdownManyItemsPerf.default | 403 | 386 | 1.04:1 |
| ImageMinimalPerf.default | 224 | 216 | 1.04:1 |
| ItemLayoutMinimalPerf.default | 701 | 675 | 1.04:1 |
| TextMinimalPerf.default | 199 | 192 | 1.04:1 |
| CarouselMinimalPerf.default | 262 | 254 | 1.03:1 |
| ChatDuplicateMessagesPerf.default | 152 | 148 | 1.03:1 |
| HeaderSlotsPerf.default | 464 | 450 | 1.03:1 |
| ProviderMergeThemesPerf.default | 650 | 632 | 1.03:1 |
| ReactionMinimalPerf.default | 215 | 208 | 1.03:1 |
| VideoMinimalPerf.default | 466 | 451 | 1.03:1 |
| AvatarMinimalPerf.default | 108 | 106 | 1.02:1 |
| CheckboxMinimalPerf.default | 1128 | 1110 | 1.02:1 |
| DropdownMinimalPerf.default | 1417 | 1392 | 1.02:1 |
| HeaderMinimalPerf.default | 214 | 210 | 1.02:1 |
| ListCommonPerf.default | 393 | 384 | 1.02:1 |
| SegmentMinimalPerf.default | 192 | 189 | 1.02:1 |
| CustomToolbarPrototype.default | 1473 | 1445 | 1.02:1 |
| ButtonOverridesMissPerf.default | 652 | 646 | 1.01:1 |
| ListWith60ListItems.default | 366 | 361 | 1.01:1 |
| StatusMinimalPerf.default | 380 | 378 | 1.01:1 |
| ToolbarMinimalPerf.default | 539 | 533 | 1.01:1 |
| TooltipMinimalPerf.default | 1258 | 1242 | 1.01:1 |
| CardMinimalPerf.default | 301 | 301 | 1:1 |
| DividerMinimalPerf.default | 205 | 204 | 1:1 |
| InputMinimalPerf.default | 528 | 529 | 1:1 |
| LoaderMinimalPerf.default | 183 | 183 | 1:1 |
| MenuButtonMinimalPerf.default | 933 | 937 | 1:1 |
| ProviderMinimalPerf.default | 199 | 199 | 1:1 |
| SplitButtonMinimalPerf.default | 2252 | 2252 | 1:1 |
| TableManyItemsPerf.default | 1094 | 1095 | 1:1 |
| TreeMinimalPerf.default | 487 | 489 | 1:1 |
| AnimationMinimalPerf.default | 293 | 297 | 0.99:1 |
| DatepickerMinimalPerf.default | 3508 | 3531 | 0.99:1 |
| FlexMinimalPerf.default | 152 | 153 | 0.99:1 |
| LabelMinimalPerf.default | 209 | 212 | 0.99:1 |
| ListNestedPerf.default | 326 | 329 | 0.99:1 |
| RosterPerf.default | 1574 | 1594 | 0.99:1 |
| PopupMinimalPerf.default | 345 | 347 | 0.99:1 |
| SkeletonMinimalPerf.default | 195 | 196 | 0.99:1 |
| AccordionMinimalPerf.default | 87 | 89 | 0.98:1 |
| AlertMinimalPerf.default | 157 | 161 | 0.98:1 |
| ButtonMinimalPerf.default | 83 | 85 | 0.98:1 |
| DialogMinimalPerf.default | 429 | 436 | 0.98:1 |
| MenuMinimalPerf.default | 493 | 505 | 0.98:1 |
| SliderMinimalPerf.default | 738 | 752 | 0.98:1 |
| TreeWith60ListItems.default | 80 | 82 | 0.98:1 |
| TableMinimalPerf.default | 231 | 238 | 0.97:1 |
| ChatWithPopoverPerf.default | 182 | 191 | 0.95:1 |
| ButtonSlotsPerf.default | 305 | 329 | 0.93:1 |
Asset size changes
Size Auditor did not detect a change in bundle size for any component!
Baseline commit: 8a4890f9c1dd5e7c1ed152d5b177fc59ea67405c (build)
This pull request is automatically built and testable in CodeSandbox.
To see build info of the built libraries, click here or the icon next to each commit SHA.
Perf Analysis (@fluentui/react)
No significant results to display.
All results
| Scenario | Render type | Master Ticks | PR Ticks | Iterations | Status |
|---|---|---|---|---|---|
| BaseButton | mount | 632 | 651 | 5000 | |
| Breadcrumb | mount | 1734 | 1666 | 1000 | |
| Checkbox | mount | 1701 | 1710 | 5000 | |
| CheckboxBase | mount | 1518 | 1466 | 5000 | |
| ChoiceGroup | mount | 2988 | 2999 | 5000 | |
| ComboBox | mount | 662 | 649 | 1000 | |
| CommandBar | mount | 6473 | 6508 | 1000 | |
| ContextualMenu | mount | 15506 | 15781 | 1000 | |
| DefaultButton | mount | 749 | 771 | 5000 | |
| DetailsRow | mount | 2192 | 2196 | 5000 | |
| DetailsRowFast | mount | 2178 | 2141 | 5000 | |
| DetailsRowNoStyles | mount | 1991 | 1996 | 5000 | |
| Dialog | mount | 2811 | 2857 | 1000 | |
| DocumentCardTitle | mount | 225 | 234 | 1000 | |
| Dropdown | mount | 1978 | 1968 | 5000 | |
| FocusTrapZone | mount | 1143 | 1120 | 5000 | |
| FocusZone | mount | 1086 | 1075 | 5000 | |
| GroupedList | mount | 42299 | 42543 | 2 | |
| GroupedList | virtual-rerender | 20160 | 20438 | 2 | |
| GroupedList | virtual-rerender-with-unmount | 51444 | 51990 | 2 | |
| GroupedListV2 | mount | 227 | 242 | 2 | |
| GroupedListV2 | virtual-rerender | 211 | 214 | 2 | |
| GroupedListV2 | virtual-rerender-with-unmount | 235 | 240 | 2 | |
| IconButton | mount | 1084 | 1081 | 5000 | |
| Label | mount | 345 | 351 | 5000 | |
| Layer | mount | 2757 | 2740 | 5000 | |
| Link | mount | 392 | 392 | 5000 | |
| MenuButton | mount | 932 | 931 | 5000 | |
| MessageBar | mount | 21454 | 21493 | 5000 | |
| Nav | mount | 1952 | 1933 | 1000 | |
| OverflowSet | mount | 794 | 784 | 5000 | |
| Panel | mount | 1796 | 1824 | 1000 | |
| Persona | mount | 764 | 758 | 1000 | |
| Pivot | mount | 889 | 883 | 1000 | |
| PrimaryButton | mount | 864 | 855 | 5000 | |
| Rating | mount | 4658 | 4531 | 5000 | |
| SearchBox | mount | 903 | 925 | 5000 | |
| Shimmer | mount | 1867 | 1876 | 5000 | |
| Slider | mount | 1340 | 1317 | 5000 | |
| SpinButton | mount | 2874 | 3013 | 5000 | |
| Spinner | mount | 384 | 394 | 5000 | |
| SplitButton | mount | 1827 | 1784 | 5000 | |
| Stack | mount | 413 | 399 | 5000 | |
| StackWithIntrinsicChildren | mount | 835 | 854 | 5000 | |
| StackWithTextChildren | mount | 2639 | 2644 | 5000 | |
| SwatchColorPicker | mount | 6272 | 6107 | 5000 | |
| TagPicker | mount | 1437 | 1467 | 5000 | |
| Text | mount | 391 | 359 | 5000 | |
| TextField | mount | 937 | 902 | 5000 | |
| ThemeProvider | mount | 841 | 845 | 5000 | |
| ThemeProvider | virtual-rerender | 595 | 576 | 5000 | |
| ThemeProvider | virtual-rerender-with-unmount | 1267 | 1271 | 5000 | |
| Toggle | mount | 608 | 595 | 5000 | |
| buttonNative | mount | 194 | 195 | 5000 |
🕵 FluentUI-v0 No visual regressions between this PR and main
🕵 fluentuiv9 No visual regressions between this PR and main
🕵 fluentuiv8 No visual regressions between this PR and main
🕵 FluentUIV0 No visual regressions between this PR and main
🕵 fluentuiv9 No visual regressions between this PR and main
Closing for housekeeping 🏡 Feel free to re-open 👍