Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🕵🏾‍♀️ visual changes to review in the Visual Change Report

vr-tests-react-components/Avatar Converged 1 screenshots
Image Name Diff(in Pixels) Image Type
vr-tests-react-components/Avatar Converged.badgeMask.normal.chromium.png 5 Changed
vr-tests-react-components/Menu 1 screenshots
Image Name Diff(in Pixels) Image Type
vr-tests-react-components/Menu.Nested Submenus Small Viewport Flipped.nested menu.chromium.png 699 Changed
vr-tests-react-components/Menu Converged - submenuIndicator slotted content 2 screenshots
Image Name Diff(in Pixels) Image Type
vr-tests-react-components/Menu Converged - submenuIndicator slotted content.default - RTL.submenus open.chromium.png 599 Changed
vr-tests-react-components/Menu Converged - submenuIndicator slotted content.default.submenus open.chromium.png 413 Changed
vr-tests-react-components/Positioning 2 screenshots
Image Name Diff(in Pixels) Image Type
vr-tests-react-components/Positioning.Positioning end.chromium.png 503 Changed
vr-tests-react-components/Positioning.Positioning end.updated 2 times.chromium.png 864 Changed
vr-tests-react-components/ProgressBar converged 3 screenshots
Image Name Diff(in Pixels) Image Type
vr-tests-react-components/ProgressBar converged.Indeterminate + thickness - Dark Mode.default.chromium.png 42 Changed
vr-tests-react-components/ProgressBar converged.Indeterminate + thickness - High Contrast.default.chromium.png 45 Changed
vr-tests-react-components/ProgressBar converged.Indeterminate + thickness.default.chromium.png 39 Changed
vr-tests-react-components/TagPicker 3 screenshots
Image Name Diff(in Pixels) Image Type
vr-tests-react-components/TagPicker.disabled - Dark Mode.disabled input hover.chromium.png 658 Changed
vr-tests-react-components/TagPicker.disabled - High Contrast.chromium.png 1319 Changed
vr-tests-react-components/TagPicker.disabled - RTL.disabled input hover.chromium.png 635 Changed

There were 3 duplicate changes discarded. Check the build logs for more information.

"type": "patch",
"comment": "fix: render TagPicker without a portal so react-portal is not bundled",
"packageName": "@fluentui/react-headless-components-preview",
"email": "martinhochel@microsoft.com",
"dependentChangeType": "patch"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"type": "minor",
"comment": "feat: add renderTagPickerBase_unstable, a portal-free render for headless consumers",
"packageName": "@fluentui/react-tag-picker",
"email": "martinhochel@microsoft.com",
"dependentChangeType": "patch"
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ import type { OptionSlots as OptionSlots_2 } from '@fluentui/react-combobox';
import type { OptionState as OptionState_2 } from '@fluentui/react-combobox';
import { PositioningShorthand } from '@fluentui/react-positioning';
import type * as React_2 from 'react';
import { renderTagPicker_unstable as renderTagPicker } from '@fluentui/react-tag-picker';
import { renderTagPickerBase_unstable as renderTagPicker } from '@fluentui/react-tag-picker';
import { renderTagPickerButton_unstable as renderTagPickerButton } from '@fluentui/react-tag-picker';
import { renderTagPickerControl_unstable as renderTagPickerControl } from '@fluentui/react-tag-picker';
import { renderTagPickerGroup_unstable as renderTagPickerGroup } from '@fluentui/react-tag-picker';
Expand Down
Original file line number Diff line number Diff line change
@@ -1 +1 @@
export { renderTagPicker_unstable as renderTagPicker } from '@fluentui/react-tag-picker';
export { renderTagPickerBase_unstable as renderTagPicker } from '@fluentui/react-tag-picker';
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,9 @@ import type { TagGroupState } from '@fluentui/react-tags';
// @public
export const renderTagPicker_unstable: (state: TagPickerState, contexts: TagPickerContextValues) => JSXElement;

// @public
export const renderTagPickerBase_unstable: (state: TagPickerBaseState, contexts: TagPickerContextValues) => JSXElement;

// @public
export const renderTagPickerButton_unstable: (state: TagPickerButtonBaseState) => JSXElement;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ export type {
export {
TagPicker,
renderTagPicker_unstable,
renderTagPickerBase_unstable,
useTagPicker_unstable,
useTagPickerBase_unstable,
useTagPickerContextValues,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,5 +11,6 @@ export type {
TagPickerState,
} from './TagPicker.types';
export { renderTagPicker_unstable } from './renderTagPicker';
export { renderTagPickerBase_unstable } from './renderTagPickerBase';
export { useTagPicker_unstable, useTagPickerBase_unstable } from './useTagPicker';
export { useTagPickerContextValues } from './useTagPickerContextValues';
Original file line number Diff line number Diff line change
@@ -1,27 +1,16 @@
import * as React from 'react';
import type { TagPickerState, TagPickerContextValues, TagPickerSlots } from './TagPicker.types';
import { ActiveDescendantContextProvider } from '@fluentui/react-aria';
import { ListboxProvider } from '@fluentui/react-combobox';
import type { TagPickerState, TagPickerContextValues } from './TagPicker.types';
import { Portal } from '@fluentui/react-portal';
import { assertSlots } from '@fluentui/react-utilities';
import type { JSXElement } from '@fluentui/react-utilities';
import { TagPickerContextProvider } from '../../contexts/TagPickerContext';
import { renderTagPickerContent } from './renderTagPickerBase';

/**
* Render the final JSX of Picker
*/

export const renderTagPicker_unstable = (state: TagPickerState, contexts: TagPickerContextValues): JSXElement => {
assertSlots<TagPickerSlots>(state);
return (
<TagPickerContextProvider value={contexts.picker}>
<ActiveDescendantContextProvider value={contexts.activeDescendant}>
<ListboxProvider value={contexts.listbox}>
{state.trigger}
{state.popover &&
(state.inline ? state.popover : <Portal mountNode={state.mountNode}>{state.popover}</Portal>)}
</ListboxProvider>
</ActiveDescendantContextProvider>
</TagPickerContextProvider>
export const renderTagPicker_unstable = (state: TagPickerState, contexts: TagPickerContextValues): JSXElement =>
renderTagPickerContent(
state,
contexts,
state.popover && (state.inline ? state.popover : <Portal mountNode={state.mountNode}>{state.popover}</Portal>),
);
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
import * as React from 'react';
import { ActiveDescendantContextProvider } from '@fluentui/react-aria';
import { ListboxProvider } from '@fluentui/react-combobox';
import { assertSlots } from '@fluentui/react-utilities';
import type { JSXElement } from '@fluentui/react-utilities';

import type { TagPickerBaseState, TagPickerContextValues, TagPickerSlots } from './TagPicker.types';
import { TagPickerContextProvider } from '../../contexts/TagPickerContext';

/**
* Render the base JSX of Picker, keeping the popover in DOM order.
*
* Portaling is layered on by the styled `renderTagPicker_unstable`. Keeping it in a separate module
* is what lets consumers render a TagPicker without pulling `@fluentui/react-portal` - and with it
* Griffel - into their bundle.
*/
export const renderTagPickerBase_unstable = (state: TagPickerBaseState, contexts: TagPickerContextValues): JSXElement =>
renderTagPickerContent(state, contexts, state.popover);

/**
* Shared by the base and styled renders so that portaling stays out of the base module.
*
* @internal
*/
export const renderTagPickerContent = (
state: TagPickerBaseState,
contexts: TagPickerContextValues,
popover: React.ReactNode,
): JSXElement => {
assertSlots<TagPickerSlots>(state);
return (
<TagPickerContextProvider value={contexts.picker}>
<ActiveDescendantContextProvider value={contexts.activeDescendant}>
<ListboxProvider value={contexts.listbox}>
{state.trigger}
{popover}
</ListboxProvider>
</ActiveDescendantContextProvider>
</TagPickerContextProvider>
);
};
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
export {
TagPicker,
renderTagPicker_unstable,
renderTagPickerBase_unstable,
useTagPicker_unstable,
useTagPickerBase_unstable,
useTagPickerContextValues,
Expand Down
Loading