HEX
Server: nginx/1.18.0
System: Linux test-ipsremont 5.4.0-214-generic #234-Ubuntu SMP Fri Mar 14 23:50:27 UTC 2025 x86_64
User: ips (1000)
PHP: 8.0.30
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: /var/www/quadcode/one-time-popup/src/utils/load-fonts /loadFonts.ts
interface LoadFontParams {
  name: string;
  fontUrl: string;
  weight?: string;
  style?: string;
  display?: FontDisplay;
}

/**
 * Programmatically loads a font and registers it in the document.
 * The font file must be located in the public folder.
 * @example
 * await loadFont({
 * name: 'Suisse Intl',
 * fontUrl: '/fonts/SuisseIntl-Medium.woff',
 * weight: '500'
 * });
 * @param {LoadFontParams} params - The font configuration object.
 * @returns {Promise<void>} A promise that resolves after successful font registration.
 */
export const loadFont = async (params: LoadFontParams): Promise<void> => {
  const font = new FontFace(params.name, `url(${params.fontUrl})`, {
    weight: params.weight || '400',
    style: params.style || 'normal',
    display: params.display || 'swap',
  });

  try {
    const loadedFont = await font.load();
    document.fonts.add(loadedFont);
  } catch (err) {
    console.error('Font loading failed:', err);
  }
};

/**
 * Batch loads and registers multiple fonts in the Light DOM.
 * Essential for resolving font rendering issues within a Shadow Root.
 * @example
 * const fonts: LoadFontParams[] = [
 * { name: 'Suisse Intl', fontUrl: '/fonts/Suisse-Bold.woff', weight: '700' },
 * { name: 'Suisse Intl', fontUrl: '/fonts/Suisse-Medium.woff', weight: '500' }
 * ];
 * await loadFonts(fonts);
 * @param {LoadFontParams[]} fonts - An array of font configuration objects.
 * @returns {Promise<void[]>} A promise that resolves once all fonts have been processed.
 */
export const loadFonts = async (fonts: LoadFontParams[]): Promise<void[]> => {
  return Promise.all(fonts.map((font) => loadFont(font)));
};