Files
Andrei 58f8093689 Rebrand from 'Redirect Intelligence v2' to 'URL Tracker Tool V2' throughout UI
- Updated all component headers and documentation
- Changed navbar and footer branding
- Updated homepage hero badge
- Modified page title in index.html
- Simplified footer text to 'Built with ❤️'
- Consistent V2 capitalization across all references
2025-08-19 19:12:23 +00:00

70 lines
2.4 KiB
JavaScript

import _extends from "@babel/runtime/helpers/esm/extends";
import { useContext, useMemo, useRef } from 'react';
import { focusScope } from './scope';
import { mediumEffect } from './medium';
import { extractRef } from './util';
var collapseRefs = function collapseRefs(shards) {
return shards.map(extractRef).filter(Boolean);
};
var withMedium = function withMedium(fn) {
return new Promise(function (resolve) {
return mediumEffect.useMedium(function () {
resolve(fn.apply(void 0, arguments));
});
});
};
export var useFocusController = function useFocusController() {
for (var _len = arguments.length, shards = new Array(_len), _key = 0; _key < _len; _key++) {
shards[_key] = arguments[_key];
}
if (!shards.length) {
throw new Error('useFocusController requires at least one target element');
}
var ref = useRef(shards);
ref.current = shards;
return useMemo(function () {
return {
autoFocus: function autoFocus(focusOptions) {
if (focusOptions === void 0) {
focusOptions = {};
}
return withMedium(function (car) {
return car.moveFocusInside(collapseRefs(ref.current), null, focusOptions);
});
},
focusNext: function focusNext(options) {
return withMedium(function (car) {
car.moveFocusInside(collapseRefs(ref.current), null);
car.focusNextElement(document.activeElement, _extends({
scope: collapseRefs(ref.current)
}, options));
});
},
focusPrev: function focusPrev(options) {
return withMedium(function (car) {
car.moveFocusInside(collapseRefs(ref.current), null);
car.focusPrevElement(document.activeElement, _extends({
scope: collapseRefs(ref.current)
}, options));
});
},
focusFirst: function focusFirst(options) {
return withMedium(function (car) {
car.focusFirstElement(collapseRefs(ref.current), options);
});
},
focusLast: function focusLast(options) {
return withMedium(function (car) {
car.focusLastElement(collapseRefs(ref.current), options);
});
}
};
}, []);
};
export var useFocusScope = function useFocusScope() {
var scope = useContext(focusScope);
if (!scope) {
throw new Error('FocusLock is required to operate with FocusScope');
}
return useFocusController.apply(void 0, [scope.observed].concat(scope.shards));
};