Skip to content

docs: add missing v8 to v9 migration guides - #36598

Open
Paolo Aliprandi (paolo-aliprandi) wants to merge 23 commits into
microsoft:masterfrom
paolo-aliprandi:docs/v8-v9-migration-guides
Open

docs: add missing v8 to v9 migration guides#36598
Paolo Aliprandi (paolo-aliprandi) wants to merge 23 commits into
microsoft:masterfrom
paolo-aliprandi:docs/v8-v9-migration-guides

Conversation

@paolo-aliprandi

@paolo-aliprandi Paolo Aliprandi (paolo-aliprandi) commented Aug 19, 2026

Copy link
Copy Markdown
Contributor

Summary

Adds and validates comprehensive v8-to-v9 migration documentation for mapped Fluent UI components.

  • adds 28 component migration guides covering core, compatibility, renamed, and compositional replacements
  • keeps the established migration-doc structure: concise overview, examples, prop mapping, and component-specific accessibility notes where needed
  • covers aliases and variants such as Modal, ShimmeredDetailsList, VirtualizedComboBox, CommandBarButton, and PeoplePicker variants
  • corrects stale component mapping entries and links every available migration guide
  • reviews and aligns the existing migration documentation against current package exports, source types, and the new guide conventions

Guide coverage

Breadcrumb, Calendar, Callout, CommandBar, DatePicker, DetailsList, Dialog, Dropdown/Combobox, FocusZone/FocusTrapZone, Icon, Link, List, MessageBar, Nav, OverflowSet, Panel, Persona, ProgressIndicator, Rating, SearchBox, Shimmer, SwatchColorPicker, TagPicker/PeoplePicker, TeachingBubble/Coachmark, Text, TimePicker, Toggle, and Tooltip.

ComboBox is covered by the shared Dropdown/Combobox guide. Stack and Stack.Item are covered by the existing Flex guides, with StackShim and StackItemShim documented as temporary migration bridges.

Existing documentation alignment

  • Component mapping and troubleshooting — normalized links, heading hierarchy, and portal guidance
  • Card, Charts, ColorPicker, and Image — replaced stale imports, unsupported APIs, and incomplete theme/color examples
  • Checkbox, Input, RadioGroup, Spinner, and Textarea — corrected prop names, ref targets, ARIA behavior, and invalid or incomplete examples
  • Stack, Stack.Item, GroupedList, Tabs, and Keytips — aligned migration framing and headings, and fixed invalid TSX
  • Theme and specialized Card/Flex/Image guidance — corrected shim availability, source links, and v8/v9 terminology while preserving specialized formats

Validation

  • formatted with the repository Prettier configuration
  • git diff --check
  • validated all 53 component guides and 53 mapping links
  • verified unique Storybook routes and exactly one title and top-level heading per guide
  • verified 148 nonempty code fences and parsed all 134 TSX examples with the repository TypeScript version
  • reviewed current package exports, prop/event types, compatibility packages, and accessibility semantics
  • all required PR checks pass

Review focus

This remains a draft for component-owner review, especially for behavioral edge cases where v8 has no one-to-one v9 prop mapping and for compatibility-component guidance.

Current working directory: /Users/paoloaliprandi/Desktop/fluent-genui-benchmark

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 9faba520-fc05-4d3f-8ac5-e0146fdd09db
@github-actions

Copy link
Copy Markdown

📊 Bundle size report

✅ No changes found

@github-actions

Copy link
Copy Markdown

Pull request demo site: URL

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 9faba520-fc05-4d3f-8ac5-e0146fdd09db
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 9faba520-fc05-4d3f-8ac5-e0146fdd09db
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 9faba520-fc05-4d3f-8ac5-e0146fdd09db
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 9faba520-fc05-4d3f-8ac5-e0146fdd09db
Correct source-backed API details across the existing v8 migration guides and expand validation to cover every guide.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@paolo-aliprandi

Copy link
Copy Markdown
Contributor Author

Reviewed the existing v8 → v9 migration documentation for consistency with the new guides:

  • Component mapping and troubleshooting — links, heading hierarchy, and portal guidance were inconsistent; normalized the structure and linked every available migration guide.
  • Card, Charts, ColorPicker, and Image — examples used stale imports, unsupported APIs, or incomplete theme/color patterns; updated them against current package exports and types.
  • Checkbox, Input, RadioGroup, Spinner, and Textarea — prop names, ref targets, ARIA behavior, and examples were inconsistent or invalid; corrected the mappings and made the examples self-contained.
  • Stack, Stack.Item, GroupedList, Tabs, and Keytips — migration framing, headings, or fenced examples differed from the established pattern; aligned the terminology and fixed the invalid Tabs TSX example.
  • Theme and specialized Card/Flex/Image guidance — shim availability, source links, and v8/v9 terminology were stale; corrected the references while preserving their specialized formats.
  • Regression coverage — expanded validation from the 28 new pages to all 53 component guides, covering unique routes, mapping links, title/H1 structure, nonempty code fences, and TSX syntax.

Fold source-verified Drawer/Popover targeting, dismissal, focus, positioning, and unsupported-behavior guidance into the concise guides.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@paolo-aliprandi
Paolo Aliprandi (paolo-aliprandi) marked this pull request as ready for review August 21, 2026 14:35
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 39bc09e0-178f-4cdd-ad81-dbae05242afc
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 39bc09e0-178f-4cdd-ad81-dbae05242afc
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 39bc09e0-178f-4cdd-ad81-dbae05242afc
Added source-verified component behavior and accessibility edge cases to strengthen the v8 migration guidance.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 39bc09e0-178f-4cdd-ad81-dbae05242afc
@paolo-aliprandi

Copy link
Copy Markdown
Contributor Author

Documentation-only v8 → v9 migration verification

I completed the sealed migration verification pass for the expanded component
guides in 13e17fec0fddf9bd33272f63e246d2bb0701852d.

Result

  • 14/14 registered migration scenarios produced implementations that build
    and lint.
  • 14/14 passed the corrected isolation audit: no permission rejection and
    only the allowlisted tools (view, rg, glob, apply_patch, bash).
  • Final hidden source-level evaluation found 0 documentation-attributable
    gaps (DOC_GAP)
    .
  • The migration agents received only the original v8 scenario source and the
    FromV8 MDX guides. Benchmark requirements, ground truth, package source and
    types, MCP, network access, external paths, subagents, and ambient skills were
    unavailable during generation.

Final scenario matrix

Scenario Final artifact Build Lint Isolation DOC_GAP Other final classification
migrate-attach-toolbar-button pilot rerun 0 None
migrate-calendar-picker initial matrix 0 None
migrate-commandbar iteration 7 0 2 AGENT_MISS, 1 VALID_VARIANT
migrate-detailslist initial matrix 0 None
migrate-dialog-form initial matrix 0 None
migrate-freebusy-summary initial matrix 0 None
migrate-loading-spinner initial matrix 0 None
migrate-page-shell initial matrix 0 None
migrate-panel initial matrix 0 None
migrate-persona-facepile iteration 6 0 1 AGENT_MISS, 1 VALID_VARIANT
migrate-pivot-memory-panel initial matrix 0 None
migrate-settings-dialog initial matrix 0 None
migrate-status-dialog initial matrix 0 None
migrate-time-picker iteration 6 0 2 VALID_VARIANT

The remaining AGENT_MISS items are requirements that the exposed guides
already state explicitly:

  • CommandBar: the generated agent wrapped two non-ref-forwarding Menu
    components directly in OverflowItem, despite the Overflow guide's ref
    requirement; it also omitted withArrow on two icon-only tooltips despite
    the Tooltip guide documenting the v8/v9 default difference.
  • Persona: the generated size-72 Persona preserved the avatar size but omitted
    the documented v8 20px regular primary-text override.

These are agent application misses, not missing or incorrect migration
instructions.

Corrective iteration ledger

Iteration Scope Outcome / documentation correction
Pilot Attach toolbar button Corrected v8 Tooltip beak default versus v9 withArrow; clean rerun passed.
Initial matrix 13 remaining scenarios 10 passed immediately; CommandBar, Persona/Facepile, and TimePicker exposed width-reservation, avatar-size, and freeform-commit gaps.
2 Three affected scenarios Added SplitButton trigger composition, TimePicker rollback/dedup/focus behavior, first-N Facepile partitioning, and Persona text rules.
3 Three affected scenarios Added overflowed split-action composition, icon-only tooltips, autocomplete semantics, and source-review corrections.
4 Three affected scenarios Added an MDL2-to-Fluent icon crosswalk, exact/prefix option resolution, keyboard cancellation, and Facepile overflow-button conditions.
5 Three affected scenarios Separated Facepile overflow accessible naming from its visible names tooltip; fixed autocomplete deletion provenance and untrimmed matching.
6 Three affected scenarios Persona/Facepile and TimePicker reached zero DOC_GAP; CommandBar exposed a cross-component Dialog description issue.
7 CommandBar only Added explicit short aria-describedby guidance for form dialogs; final evaluation reached zero DOC_GAP.

Source-verified guide corrections

  • CommandBar: measured primary commands versus fixed far items, split-button
    trigger composition, MenuSplitGroup overflow behavior, icon-only tooltips,
    and semantic MDL2 icon replacements.
  • Dropdown / TimePicker: unmatched freeform commit, exact versus inline
    autocomplete matching, selected-key rollback, callback deduplication, focus
    containment, popup close, Escape/Tab handling, deletion/mid-edit behavior,
    and option reselection after parsing.
  • Persona: exact avatar pixels, legacy aliases, initials colors, text-line
    visibility, and large-size typography.
  • AvatarGroup: v8 first-N versus v9 partition semantics, explicit
    overflowPersonas, overflow-type/button gating, item tooltips, and separate
    overflow accessible name/description.
  • Dialog: short subText description IDs for dialogs whose content also
    contains forms or other complex content.
  • Button / Tooltip: official SplitButton trigger wiring and v8 beak versus
    v9 arrow defaults.

The structural documentation suite remains green: 139/139 tests, with
git diff --check clean.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 39bc09e0-178f-4cdd-ad81-dbae05242afc
@paolo-aliprandi

Copy link
Copy Markdown
Contributor Author

Documentation-only migration verification: 53/53 focused guides

Isolation contract. Each focused verification used only the original v8 source and one guide. Network, MCP, external paths, dependency source/types, subagents, and ambient skills were blocked; build and lint were allowed.

Summary. 53/53 launcher/build/lint/isolation checks passed. The latest hidden checklist was 50/53 PASS or VALID_VARIANT, with exactly three AGENT_MISS results and zero remaining DOC_GAP or ORACLE_DEFECT results. The three misses were: GroupedList lost hierarchical treegrid semantics; TagPicker kept an unavailable item selectable and did not surface query rejection; and List reproduced centered scrolling but bypassed the documented virtualizer-owned ref contract.

Corrected guide findings and clean reruns. Dialog now documents external-trigger focus restoration; Image now documents centerCover no-upscale behavior plus load-triggered fade; MessageBar now documents the omitted isMultiline=true default; SwatchPicker now documents exact 20px/10px geometry; and CardHeader now documents title/activity grouping. Senior review also fixed CardFooter accessible view count, CardHeader accessible people overflow, and the react-window inner List structure. All documentation-attributable issues were fixed and rerun.

There were 139/139 structural tests, a clean git diff check, the prior 14/14 integration matrix, and 67 total scenarios. Commit: 4e851881ada5f51774f4abc3df2c066fa00d48ee.

Guide Scenario Build/Lint/Isolation Final hidden evaluation
AvatarGroup.mdx component-avatar-group PASS PASS
Breadcrumb.mdx component-breadcrumb PASS PASS
Button.mdx component-button PASS PASS
Calendar.mdx component-calendar PASS PASS
Callout.mdx component-callout PASS PASS
Checkbox.mdx component-checkbox PASS PASS
CommandBar.mdx component-command-bar PASS PASS
DatePicker.mdx component-date-picker PASS PASS
DetailsList.mdx component-details-list PASS PASS
Dialog.mdx component-dialog PASS PASS
Divider.mdx component-divider PASS PASS
Dropdown.mdx component-dropdown PASS PASS
Focus.mdx component-focus PASS PASS
Icon.mdx component-icon PASS PASS
Image.mdx component-image PASS PASS
Input.mdx component-input PASS PASS
Label.mdx component-label PASS PASS
Link.mdx component-link PASS PASS
Menu.mdx component-menu PASS PASS
MessageBar.mdx component-message-bar PASS PASS
Nav.mdx component-nav PASS PASS
Panel.mdx component-panel PASS PASS
Persona.mdx component-persona PASS PASS
ProgressBar.mdx component-progress-bar PASS PASS
RadioGroup.mdx component-radio-group PASS PASS
Rating.mdx component-rating PASS PASS
SearchBox.mdx component-search-box PASS PASS
Skeleton.mdx component-skeleton PASS PASS
SpinButton.mdx component-spin-button PASS PASS
Spinner.mdx component-spinner PASS PASS
SwatchPicker.mdx component-swatch-picker PASS PASS
Switch.mdx component-switch PASS PASS
Tabs.mdx component-tabs PASS PASS
TagPicker.mdx component-tag-picker PASS AGENT_MISS (guide covered)
TeachingPopover.mdx component-teaching-popover PASS PASS
Text.mdx component-text PASS PASS
Textarea.mdx component-textarea PASS PASS
Theme.mdx component-theme PASS PASS
TimePicker.mdx component-time-picker PASS PASS
Tooltip.mdx component-tooltip PASS PASS
Flex.Stack.mdx component-flex-stack PASS PASS
Flex.StackItem.mdx component-flex-stack-item PASS PASS
Slider.mdx component-slider PASS PASS
Card.mdx component-card PASS PASS
CardFooter.mdx component-card-footer PASS PASS
CardHeader.mdx component-card-header PASS PASS
CardPreview.mdx component-card-preview PASS PASS
Charts.mdx component-charts PASS PASS
ColorPicker.mdx component-color-picker PASS PASS
GroupedList.mdx component-grouped-list PASS AGENT_MISS (guide covered)
Keytips.mdx component-keytips PASS PASS
List.mdx component-list PASS AGENT_MISS (guide covered)
Overflow.mdx component-overflow PASS PASS

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 39bc09e0-178f-4cdd-ad81-dbae05242afc
@github-actions github-actions Bot added the CI label Aug 27, 2026
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 39bc09e0-178f-4cdd-ad81-dbae05242afc
Sync the final source-verified migration guidance from the 53-component benchmark, including responsive overflow, focus, navigation, selection, and theming corrections.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 39bc09e0-178f-4cdd-ad81-dbae05242afc
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 40efc87f-f280-4aea-8291-c7f54a734f30
| ariaLabel | aria-label |
| itemCount | (removed) |
| itemIcon | icon (slot) |
| onRenderItemLink | (removed) |

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

onRenderItemLink has no same-named callback in v9, but its customization is preserved through Tab children rather than removed.

The v8 callback replaces the content rendered inside the tab header. In v9, render that custom JSX directly as the Tab content:

<Tab value="notifications">
  <CustomTabContent icon={icon} label="Notifications" count={count} />
</Tab>

Please map this to custom Tab children/content composition. Marking it as removed could lead developers to discard existing icons, counts, or other custom header content.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 40efc87f-f280-4aea-8291-c7f54a734f30
| `placeholder` | `placeholder` | |
| `onChange` | `onChange` | Type changed: `(_, data: InputOnChangeData) => void`; dismiss fires with `data.value === ''` |
| `onSearch` | — | Use native `onKeyDown` checking `event.key === 'Enter'` |
| `onClear` | `onChange` with `''` | Dismiss button calls `onChange` with empty string |

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Mapping onClear to any v9 onChange with an empty value does not preserve its semantics.

v8 calls onClear only when the user activates the clear button or clears with Escape. v9 onChange also reports data.value === '' when the user manually deletes the final character, so using the value alone would incorrectly invoke onClear in that case.

The clear-button path can be preserved through the dismiss slot, while the Escape path should call it from the custom Escape handler:

<SearchBox
  dismiss={{ onClick: onClear }}
  onChange={(_, data) => setQuery(data.value)}
  onKeyDown={event => {
    if (event.key === 'Escape' && query !== '') {
      onClear(event);
      // Preserve the remaining v8 Escape behavior.
    }
  }}
/>

Please update the mapping to distinguish explicit clearing from an ordinary input change.

@paolo-aliprandi

Copy link
Copy Markdown
Contributor Author

Implemented the second review round and validated it through executable v8→v9 migration benchmarks.

Final docs head: 5e947c7f559e32dda4714d27acb487fee09aeb73
Synchronized benchmark head: f5eb9297ecc78ddd1bbdc43e4d8e7ff320abcf90

Component Overall Migration fidelity Fluent APIs Browser a11y
Spinner 10.00 10.0 10.0 10.0
Menu 9.84 9.7 10.0 10.0
Switch 9.86 10.0 10.0 10.0
Tooltip 10.00 10.0 10.0 10.0
Dialog 9.93 10.0 10.0 10.0
Button 9.96 10.0 10.0 10.0
TagPicker 9.89 10.0 10.0 10.0
Tabs 9.28 10.0 10.0 6.5
RadioGroup 9.72 10.0 10.0 9.0
Checkbox 9.92 10.0 10.0 10.0

Median overall: 9.91; mean: 9.84. All 10 generated projects built and linted cleanly, and every generated Fluent API usage validated. The Tabs and RadioGroup browser-a11y deductions were generated-sample issues; both still received 10/10 migration fidelity.

The TagPicker experiment exposed one remaining ambiguous sentence that still encouraged a global validation sequence. I clarified that independent candidates must not use latest-request-wins sequencing, reran the benchmark, and the generated implementation switched to per-candidate pending state plus functional reconciliation; its score improved from 9.63 to 9.89.

Conclusion: the review comments are beneficial and the corrected docs should be accepted. Please re-review the final head.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 40efc87f-f280-4aea-8291-c7f54a734f30
@paolo-aliprandi

Paolo Aliprandi (paolo-aliprandi) commented Sep 1, 2026

Copy link
Copy Markdown
Contributor Author

Follow-up: the final docs head is now 4a53e8d5c4325fd5321325fdcce8c4c03666bb7a. The prior CI run caught that the two Switch examples needed a fragment to form valid TSX; that syntax-only fix is pushed and synchronized to benchmark branch commit 1c3f903d5df3bd3bfc65d4ca1700be19f261a106. The measured behavior and scores are unchanged.

/>
);
};
```

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

This example implements the opposite of shouldStartVisible.

In v8, shouldStartVisible={true} makes the image visible immediately and hides it only if loading fails. Initializing isLoaded to false and using hidden={!isLoaded} instead keeps the image hidden until it loads, which matches the default shouldStartVisible={false} behavior.

To preserve shouldStartVisible={true}, initialize the visibility state to true:

const [isVisible, setVisible] = useState(true);

<Image
  src="..."
  alt="Example image"
  hidden={!isVisible}
  onLoad={() => setVisible(true)}
  onError={() => setVisible(false)}
/>

return (
<>
<Label htmlFor={basicId}>Basic V9 example</Label>
<Slider id={basicId} />

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

This is not equivalent to the basic v8 example because the default max changed.

v8 Slider defaults to a maximum of 10, while v9 defaults to 100. Although the difference is mentioned later in the guide, this migrated example currently changes the control’s range by a factor of ten.

Please preserve the v8 default here:

Suggested change
<Slider id={basicId} max={10} />

@@ -192,12 +201,12 @@ This table maps v8 `IChoiceGroupOption` props to the v9 `Radio` equivalent.
| `imageSize` | n/a | Use slots to customize `Radio` |
| `disabled` | `disabled` | |

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

This row documents disabled for an individual IChoiceGroupOption, but the guide does not document the separate group-level mapping.

v8 ChoiceGroup disabled disables every option, and v9 RadioGroup supports the same behavior directly:

<RadioGroup disabled={disabled}>
  ...
</RadioGroup>

Please also add disabled to the preceding ChoiceGroupRadioGroup table. Otherwise, developers may interpret this row as requiring disabled to be copied manually onto every Radio.

| `Medium` | `"end"` | `"medium"` | |
| `Large` | `"end"` | `"large"` | |
| `LargeFixed` | `"end"` | `"large"` | |
| `ExtraLarge` | `"end"` | `"full"` | |

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

PanelType.extraLarge does not map directly to size="full".

At the largest breakpoint, the v8 extra-large Panel retains a 176px leading margin and fills only the remaining width. A v9 Drawer with size="full" is 100vw, so this mapping removes that margin and changes the Panel into a full-viewport surface.

This needs responsive custom sizing rather than the "full" preset—for example, preserving the source breakpoint behavior with makeStyles and a calculated width. Please document this as a custom CSS migration instead of a direct size mapping.

} from '@fluentui/react-components';
import { DismissRegular } from '@fluentui/react-icons';

<OverlayDrawer open={isOpen} onOpenChange={(_, data) => setIsOpen(data.open)} position="end" size="medium">

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

This example replaces the v8 onDismiss callback with a state update rather than preserving it.

The source uses onDismiss={handleClose}, so Escape and backdrop dismissal should still invoke handleClose. In the migrated example, those paths only call setIsOpen, meaning any cleanup, telemetry, or other effects inside the original callback are lost.

Map the callback explicitly:

Suggested change
<OverlayDrawer open={isOpen} onOpenChange={(_, data) => setIsOpen(data.open)} position="end" size="medium">
<OverlayDrawer
open={isOpen}
onOpenChange={(event, data) => {
if (!data.open) {
handleClose(event);
}
}}
position="end"
size="medium"
>

The close button and Drawer dismissal paths should use the same migrated close policy.


<div>
<Label htmlFor={errorId}>With Error Message</Label>
<Input id={errorId} aria-describedby={errorMessageId} />

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

This is not equivalent to the v8 errorMessage example. v8 sets aria-invalid on the input and renders the error with role="alert", while this replacement only associates ordinary text through aria-describedby.

Please use Field so those validation semantics are preserved:

<Field label="With Error Message" validationState="error" validationMessage="Error message">
  <Input />
</Field>

| `autoAjustHeight` | n/a | See `Textarea` docs |
| `autoAdjustHeight` | n/a | See `Textarea` docs |
| `underlined` | `appearance` | |
| `borderless` | `appearance` | |

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

borderless cannot be mapped to appearance. None of the supported v9 Input appearances removes the border: "outline" remains bordered, while the filled appearances add a background.

Please map this to a custom className/makeStyles override instead, as the Textarea migration guide already does. The underlined row above can specifically map to appearance="underline".

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.

2 participants