From 7e8a4a82b4cddb78631940bcfff29fbb170fea56 Mon Sep 17 00:00:00 2001 From: mainframev Date: Wed, 24 Jun 2026 09:34:18 +0200 Subject: [PATCH] fix: remove floating-ui from headless components bundle --- ...-414b4eae-d302-4622-bb3a-a2b90a0ec94c.json | 7 +++++ .../library/etc/positioning.api.md | 4 +-- .../library/src/hooks/usePositioning/index.ts | 2 +- .../src/hooks/usePositioning/utils/index.ts | 1 + .../hooks/usePositioning/utils/placement.ts | 2 +- .../utils/resolvePositioningShorthand.ts | 30 +++++++++++++++++++ 6 files changed, 42 insertions(+), 4 deletions(-) create mode 100644 change/@fluentui-react-headless-components-preview-414b4eae-d302-4622-bb3a-a2b90a0ec94c.json create mode 100644 packages/react-components/react-headless-components-preview/library/src/hooks/usePositioning/utils/resolvePositioningShorthand.ts diff --git a/change/@fluentui-react-headless-components-preview-414b4eae-d302-4622-bb3a-a2b90a0ec94c.json b/change/@fluentui-react-headless-components-preview-414b4eae-d302-4622-bb3a-a2b90a0ec94c.json new file mode 100644 index 00000000000000..93f146a1ef53f5 --- /dev/null +++ b/change/@fluentui-react-headless-components-preview-414b4eae-d302-4622-bb3a-a2b90a0ec94c.json @@ -0,0 +1,7 @@ +{ + "type": "patch", + "comment": "fix: remove floating-ui from bundle by vendoring resolvePositioningShorthand", + "packageName": "@fluentui/react-headless-components-preview", + "email": "vgenaev@gmail.com", + "dependentChangeType": "patch" +} diff --git a/packages/react-components/react-headless-components-preview/library/etc/positioning.api.md b/packages/react-components/react-headless-components-preview/library/etc/positioning.api.md index 07d315e12e20a9..539819caed269d 100644 --- a/packages/react-components/react-headless-components-preview/library/etc/positioning.api.md +++ b/packages/react-components/react-headless-components-preview/library/etc/positioning.api.md @@ -11,7 +11,6 @@ import type { PositioningProps as PositioningProps_2 } from '@fluentui/react-pos import { PositioningShorthand } from '@fluentui/react-positioning'; import { PositioningShorthandValue } from '@fluentui/react-positioning'; import type * as React_2 from 'react'; -import { resolvePositioningShorthand } from '@fluentui/react-positioning'; export { Alignment } @@ -50,7 +49,8 @@ export const POSITIONS: { readonly after: "after"; }; -export { resolvePositioningShorthand } +// @public (undocumented) +export function resolvePositioningShorthand(shorthand: PositioningShorthand | undefined | null): Readonly; // @public (undocumented) export function usePositioning(options: PositioningProps): PositioningReturn; diff --git a/packages/react-components/react-headless-components-preview/library/src/hooks/usePositioning/index.ts b/packages/react-components/react-headless-components-preview/library/src/hooks/usePositioning/index.ts index f2d52d9a89aa0a..8d928adb44e0e7 100644 --- a/packages/react-components/react-headless-components-preview/library/src/hooks/usePositioning/index.ts +++ b/packages/react-components/react-headless-components-preview/library/src/hooks/usePositioning/index.ts @@ -1,4 +1,4 @@ -export { resolvePositioningShorthand } from '@fluentui/react-positioning'; +export { resolvePositioningShorthand } from './utils'; export { usePositioning } from './usePositioning'; export { getPlacementString } from './utils'; export { POSITIONS, ALIGNMENTS } from './constants'; diff --git a/packages/react-components/react-headless-components-preview/library/src/hooks/usePositioning/utils/index.ts b/packages/react-components/react-headless-components-preview/library/src/hooks/usePositioning/utils/index.ts index 8506fa430c6121..b46c3bf29c2d08 100644 --- a/packages/react-components/react-headless-components-preview/library/src/hooks/usePositioning/utils/index.ts +++ b/packages/react-components/react-headless-components-preview/library/src/hooks/usePositioning/utils/index.ts @@ -4,3 +4,4 @@ export { debounce } from './debounce'; export { applyOffset, resolveOffset } from './offset'; export { getCoverSelfAlignment, getPlacementString, shorthandToPositionArea } from './placement'; export { resolveElementRef } from './resolveElementRef'; +export { resolvePositioningShorthand } from './resolvePositioningShorthand'; diff --git a/packages/react-components/react-headless-components-preview/library/src/hooks/usePositioning/utils/placement.ts b/packages/react-components/react-headless-components-preview/library/src/hooks/usePositioning/utils/placement.ts index 812e5919fd1238..58795b4fef908c 100644 --- a/packages/react-components/react-headless-components-preview/library/src/hooks/usePositioning/utils/placement.ts +++ b/packages/react-components/react-headless-components-preview/library/src/hooks/usePositioning/utils/placement.ts @@ -1,7 +1,7 @@ -import { resolvePositioningShorthand } from '@fluentui/react-positioning'; import type { Alignment, Position, PositioningShorthandValue } from '@fluentui/react-positioning'; import type { LogicalAlignment } from '../types'; import { ALIGNMENTS, POSITIONS, POSITION_AREA_MAP } from '../constants'; +import { resolvePositioningShorthand } from './resolvePositioningShorthand'; const ALIGN_ALIASES: Record = { top: ALIGNMENTS.start, diff --git a/packages/react-components/react-headless-components-preview/library/src/hooks/usePositioning/utils/resolvePositioningShorthand.ts b/packages/react-components/react-headless-components-preview/library/src/hooks/usePositioning/utils/resolvePositioningShorthand.ts new file mode 100644 index 00000000000000..88e7b85f965e8a --- /dev/null +++ b/packages/react-components/react-headless-components-preview/library/src/hooks/usePositioning/utils/resolvePositioningShorthand.ts @@ -0,0 +1,30 @@ +import type { PositioningProps, PositioningShorthand, PositioningShorthandValue } from '@fluentui/react-positioning'; + +const shorthandLookup: Record> = { + above: { position: 'above', align: 'center' }, + 'above-start': { position: 'above', align: 'start' }, + 'above-end': { position: 'above', align: 'end' }, + below: { position: 'below', align: 'center' }, + 'below-start': { position: 'below', align: 'start' }, + 'below-end': { position: 'below', align: 'end' }, + before: { position: 'before', align: 'center' }, + 'before-top': { position: 'before', align: 'top' }, + 'before-bottom': { position: 'before', align: 'bottom' }, + after: { position: 'after', align: 'center' }, + 'after-top': { position: 'after', align: 'top' }, + 'after-bottom': { position: 'after', align: 'bottom' }, +}; + +export function resolvePositioningShorthand( + shorthand: PositioningShorthand | undefined | null, +): Readonly { + if (shorthand === undefined || shorthand === null) { + return {}; + } + + if (typeof shorthand === 'string') { + return shorthandLookup[shorthand]; + } + + return shorthand as Readonly; +}