/** * Item-equality helpers for Select. Mirrors Base UI React's * `packages/react/src/internals/itemEquality.ts`. The Solid port copies * the three functions the select machinery needs (default comparison, * find-index, remove-from-array). Kept local under `select/utils/` rather * than promoted to `src/internals/` since no other compound uses them yet. */ export function defaultItemEquality(a: unknown, b: unknown): boolean { return Object.is(a, b); } export function compareItemEquality( itemValue: unknown, selectedValue: unknown, comparer: (a: unknown, b: unknown) => boolean, ): boolean { try { return comparer(itemValue, selectedValue); } catch { return false; } } export function findItemIndex( values: ReadonlyArray, target: unknown, comparer: (a: unknown, b: unknown) => boolean, ): number { for (let i = 0; i < values.length; i += 1) { if (compareItemEquality(values[i], target, comparer)) return i; } return -1; } export function removeItem( list: ReadonlyArray, item: T, comparer: (a: unknown, b: unknown) => boolean, ): T[] { const idx = findItemIndex(list, item, comparer); if (idx === -1) return list.slice(); const next = list.slice(); next.splice(idx, 1); return next; }