browser-utils.ts 1013 B

1234567891011121314151617181920212223242526272829303132
  1. import type { Breakpoint } from '../interfaces/breakpoints';
  2. const EVENT_TYPE_CHANGE = 'change';
  3. export const addBreakpointListener = (
  4. breakpoint: Breakpoint,
  5. // biome-ignore lint/suspicious/noExplicitAny: ignore
  6. listener: (this: MediaQueryList, ev: MediaQueryListEvent) => any,
  7. ): MediaQueryList => {
  8. // get the value of '--bs-breakpoint-*'
  9. const breakpointPixel = Number.parseInt(
  10. window
  11. .getComputedStyle(document.documentElement)
  12. .getPropertyValue(`--bs-breakpoint-${breakpoint}`),
  13. 10,
  14. );
  15. const mediaQueryList = window.matchMedia(`(min-width: ${breakpointPixel}px)`);
  16. // add event listener
  17. mediaQueryList.addEventListener(EVENT_TYPE_CHANGE, listener);
  18. return mediaQueryList;
  19. };
  20. export const cleanupBreakpointListener = (
  21. mediaQueryList: MediaQueryList,
  22. // biome-ignore lint/suspicious/noExplicitAny: ignore
  23. listener: (this: MediaQueryList, ev: MediaQueryListEvent) => any,
  24. ): void => {
  25. mediaQueryList.removeEventListener(EVENT_TYPE_CHANGE, listener);
  26. };