import type { ReactNode } from 'react' import type { OptionWithDescription } from './select.js' type OptionMapItem = { label: ReactNode value: T description?: string previous: OptionMapItem | undefined next: OptionMapItem | undefined index: number } export default class OptionMap extends Map> { readonly first: OptionMapItem | undefined readonly last: OptionMapItem | undefined constructor(options: OptionWithDescription[]) { const items: Array<[T, OptionMapItem]> = [] let firstItem: OptionMapItem | undefined let lastItem: OptionMapItem | undefined let previous: OptionMapItem | undefined let index = 0 for (const option of options) { const item = { label: option.label, value: option.value, description: option.description, previous, next: undefined, index, } if (previous) { previous.next = item } firstItem ||= item lastItem = item items.push([option.value, item]) index++ previous = item } super(items) this.first = firstItem this.last = lastItem } }