popover.ts 619 B

123456789101112131415161718192021
  1. import { AlpineContext, AlpineEvent } from "../alpine.types";
  2. export function popover(open = false, focus = false) {
  3. let restoreEl: HTMLDivElement | undefined = undefined;
  4. return {
  5. open,
  6. onEscape() {
  7. this.open = false;
  8. restoreEl?.focus();
  9. },
  10. onClosePopoverGroup(e: AlpineEvent) {
  11. e.detail.contains(this.$el) && (this.open = false);
  12. },
  13. toggle(e: AlpineEvent) {
  14. this.open = !this.open;
  15. this.open ? restoreEl = e.currentTarget as HTMLDivElement : restoreEl?.focus()
  16. },
  17. } as AlpineContext;
  18. }