diff --git a/packages/core/package.json b/packages/core/package.json index f9d5c9eb..95acc164 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@viamrobotics/prime-core", - "version": "0.0.78", + "version": "0.0.79", "publishConfig": { "access": "public" }, diff --git a/packages/core/src/lib/floating/floating-size.ts b/packages/core/src/lib/floating/floating-size.ts new file mode 100644 index 00000000..a72c4462 --- /dev/null +++ b/packages/core/src/lib/floating/floating-size.ts @@ -0,0 +1,9 @@ +import type { FloatingSizeOptions } from './floating-style'; + +export const matchWidth: FloatingSizeOptions = { + apply({ rects, elements }) { + Object.assign(elements.floating.style, { + width: `${rects.reference.width}px`, + }); + }, +}; diff --git a/packages/core/src/lib/floating/floating-style.ts b/packages/core/src/lib/floating/floating-style.ts index 8b16d4dd..6355b6b3 100644 --- a/packages/core/src/lib/floating/floating-style.ts +++ b/packages/core/src/lib/floating/floating-style.ts @@ -11,6 +11,10 @@ import { type Side, type ComputePositionConfig, type ReferenceElement, + type OffsetOptions, + type FlipOptions, + type ShiftOptions, + type SizeOptions, } from '@floating-ui/dom'; import { derived, writable, type Readable } from 'svelte/store'; @@ -19,6 +23,10 @@ import { noop } from 'lodash-es'; export type { Placement as FloatingPlacement, ReferenceElement as FloatingReferenceElement, + OffsetOptions as FloatingOffsetOptions, + FlipOptions as FloatingFlipOptions, + ShiftOptions as FloatingShiftOptions, + SizeOptions as FloatingSizeOptions, } from '@floating-ui/dom'; export interface FloatingStyleStore @@ -43,11 +51,11 @@ export interface State { referenceElement?: ReferenceElement | undefined; floatingElement?: HTMLElement | undefined; arrowElement?: Element | undefined; - placement?: Placement; - offset?: number; - flip?: boolean; - shift?: number; - matchWidth?: boolean; + placement?: Placement | undefined; + offset?: OffsetOptions | undefined; + flip?: FlipOptions | undefined; + shift?: ShiftOptions | undefined; + size?: SizeOptions | undefined; auto?: boolean; } @@ -111,27 +119,16 @@ const calculateStyle = async (state: State): Promise => { }; const getConfig = (state: State): ComputePositionConfig => { - const { arrowElement, placement, offset, flip, shift, matchWidth } = state; + const { arrowElement, placement, offset, flip, shift, size } = state; return { placement: placement ?? 'top', middleware: [ offset !== undefined && offsetMiddleware(offset), - flip && - flipMiddleware({ - fallbackAxisSideDirection: 'start', - crossAxis: shift === undefined, - }), - shift !== undefined && shiftMiddleware({ padding: shift }), + flip !== undefined && flipMiddleware(flip), + shift !== undefined && shiftMiddleware(shift), arrowElement && arrowMiddleware({ element: arrowElement }), - matchWidth && - sizeMiddleware({ - apply({ rects, elements }) { - Object.assign(elements.floating.style, { - width: `${rects.reference.width}px`, - }); - }, - }), + size !== undefined && sizeMiddleware(size), ], }; }; diff --git a/packages/core/src/lib/floating/floating.svelte b/packages/core/src/lib/floating/floating.svelte index 275041eb..c349d1a9 100644 --- a/packages/core/src/lib/floating/floating.svelte +++ b/packages/core/src/lib/floating/floating.svelte @@ -5,12 +5,18 @@ import { floatingStyle, type FloatingReferenceElement, type FloatingPlacement, + type FloatingFlipOptions, + type FloatingShiftOptions, + type FloatingSizeOptions, } from './floating-style'; export let referenceElement: FloatingReferenceElement | undefined; export let placement: FloatingPlacement = 'bottom-start'; -export let offset = 0; -export let matchWidth = false; +export let offset: number | undefined = undefined; +export let flip: FloatingFlipOptions | undefined = undefined; +export let shift: FloatingShiftOptions | undefined = undefined; +export let size: FloatingSizeOptions | undefined = undefined; +export let auto = false; export let onClickOutside: ((target: Element) => unknown) | undefined = undefined; @@ -25,7 +31,10 @@ $: style.register({ floatingElement, placement, offset, - matchWidth, + flip, + shift, + size, + auto, }); diff --git a/packages/core/src/lib/floating/index.ts b/packages/core/src/lib/floating/index.ts index 36cc2396..aacb92c1 100644 --- a/packages/core/src/lib/floating/index.ts +++ b/packages/core/src/lib/floating/index.ts @@ -6,4 +6,5 @@ export { type FloatingStyle, } from './floating-style'; +export * from './floating-size'; export { default as Floating } from './floating.svelte'; diff --git a/packages/core/src/lib/select/searchable-select.svelte b/packages/core/src/lib/select/searchable-select.svelte index 56d3f429..59092549 100644 --- a/packages/core/src/lib/select/searchable-select.svelte +++ b/packages/core/src/lib/select/searchable-select.svelte @@ -12,7 +12,7 @@ Select an option from a list, with search -->