Assistant: codex Assistant-Model: gpt-6-astra Assistant-Session: 01a0cffe-206f-7323-89d3-b20ca4cf4bf9
49 lines
2.2 KiB
JavaScript
49 lines
2.2 KiB
JavaScript
// Experimental in-memory patch to one pinned module, not an upstream/product change.
|
|
export function routeEscape(source) {
|
|
const start = source.indexOf(' const isHighestLayer = node ? index === layers.length - 1 : false;');
|
|
const end = source.indexOf(' React.useEffect(() => {\n if (!node) return;', start);
|
|
if (start < 0 || end < 0) throw new Error('Pinned source locators changed');
|
|
const helper = `
|
|
const fepDocuments = new WeakMap();
|
|
function fepRegister(doc, node, callback) {
|
|
let state = fepDocuments.get(doc);
|
|
if (!state) {
|
|
state = { owners: new Map() };
|
|
state.listener = event => {
|
|
if (event.key !== 'Escape' || event.defaultPrevented) return;
|
|
const entry = [...state.owners].filter(([element]) => element.isConnected).at(-1);
|
|
if (!entry) return;
|
|
window.routingObserved.trace.push({kind:'dispatch', owner:entry[0].getAttribute('aria-labelledby')});
|
|
// Snapshot one owner. No fall-through to the parent after cancellation or teardown.
|
|
entry[1](event);
|
|
};
|
|
doc.addEventListener('keydown', state.listener, {capture:true});
|
|
fepDocuments.set(doc, state);
|
|
}
|
|
state.owners.set(node, callback);
|
|
window.routingObserved.trace.push({kind:'register', owner:node.getAttribute('aria-labelledby'), count:state.owners.size});
|
|
return () => {
|
|
state.owners.delete(node);
|
|
window.routingObserved.trace.push({kind:'unregister', owner:node.getAttribute('aria-labelledby'), count:state.owners.size});
|
|
if (!state.owners.size) {
|
|
doc.removeEventListener('keydown', state.listener, {capture:true});
|
|
fepDocuments.delete(doc);
|
|
window.routingObserved.trace.push({kind:'listener-removed'});
|
|
}
|
|
};
|
|
}
|
|
`;
|
|
const replacement = ` const fepHandler = React.useRef(null);
|
|
React.useLayoutEffect(() => {
|
|
fepHandler.current = event => {
|
|
onEscapeKeyDown?.(event);
|
|
if (!event.defaultPrevented && onDismiss) {event.preventDefault();onDismiss();}
|
|
};
|
|
});
|
|
React.useLayoutEffect(() => {
|
|
if (!node) return;
|
|
return fepRegister(ownerDocument, node, event => fepHandler.current?.(event));
|
|
}, [node, ownerDocument]);
|
|
`;
|
|
return helper + source.slice(0,start) + replacement + source.slice(end);
|
|
}
|