(function (root, factory) { const createSearchPreview = factory(); if (typeof module === 'object' && module.exports) module.exports = createSearchPreview; if (root) root.createSearchPreview = createSearchPreview; })(typeof globalThis !== 'undefined' ? globalThis : this, function () { return function createSearchPreview({ fetchJson, claim, onState }) { let generation = 0; let current = null; let claimRequest = null; return { open(item) { generation += 1; const requestGeneration = generation; current = { ...item }; onState({ status: 'loading', item: current }); return fetchJson(current).then(detail => { if (requestGeneration === generation) { onState({ status: 'ready', item: current, detail }); } return detail; }).catch(error => { if (requestGeneration === generation) { onState({ status: 'error', item: current, error }); } throw error; }); }, close() { generation += 1; current = null; onState({ status: 'closed' }); }, claim(detail) { if (claimRequest) return claimRequest; onState({ status: 'claiming', item: current, detail }); claimRequest = claim(detail).then(result => { onState({ status: 'claimed', item: current, detail, result }); return result; }).catch(error => { onState({ status: 'ready', item: current, detail, error }); throw error; }).finally(() => { claimRequest = null; }); return claimRequest; }, }; }; });