@lion/ui
Version:
A package of extendable web components
33 lines (30 loc) • 854 B
JavaScript
/**
* @typedef {import('@lion/ui/types/overlays.js').OverlayConfig} OverlayConfig
* @typedef {import('@lion/ui/overlays.js').OverlayController} OverlayController
*/
/**
* Use for popovers/dropdowns, (modal) dialogs etc...
* @returns {Partial<OverlayConfig>}
*/
export function withClickInteraction() {
return {
visibilityTriggerFunction: (
/** @type {{ controller: OverlayController }} */ { controller },
) => {
function handleOpenClosed() {
if (controller._hasDisabledInvoker()) {
return;
}
controller.toggle();
}
return {
init: () => {
controller.invokerNode?.addEventListener('click', handleOpenClosed);
},
teardown: () => {
controller.invokerNode?.removeEventListener('click', handleOpenClosed);
},
};
},
};
}