Parsed: 131555

function wp_get_typography_font_size_value( $preset, $should_use_fluid_typography = false ) {
  if ( ! isset( $preset['size'] ) ) {
    return null;
  }

  /*
	 * Catches empty values and 0/'0'.
	 * Fluid calculations cannot be performed on 0.
	 */
  if ( empty( $preset['size'] ) ) {
    return $preset['size'];
  }

  // Checks if fluid font sizes are activated.
  $typography_settings         = wp_get_global_settings( array( 'typography' ) );
  $should_use_fluid_typography = isset( $typography_settings['fluid'] ) && true === $typography_settings['fluid'] ? true : $should_use_fluid_typography;

  if ( ! $should_use_fluid_typography ) {
    return $preset['size'];
  }

  // Defaults.
  $default_maximum_viewport_width   = '1600px';
  $default_minimum_viewport_width   = '768px';
  $default_minimum_font_size_factor = 0.75;
  $default_scale_factor             = 1;
  $default_minimum_font_size_limit  = '14px';

  // Font sizes.
  $fluid_font_size_settings = isset( $preset['fluid'] ) ? $preset['fluid'] : null;

  // A font size has explicitly bypassed fluid calculations.
  if ( false === $fluid_font_size_settings ) {
    return $preset['size'];
  }

  // Try to grab explicit min and max fluid font sizes.
  $minimum_font_size_raw = isset( $fluid_font_size_settings['min'] ) ? $fluid_font_size_settings['min'] : null;
  $maximum_font_size_raw = isset( $fluid_font_size_settings['max'] ) ? $fluid_font_size_settings['max'] : null;

  // Font sizes.
  $preferred_size = wp_get_typography_value_and_unit( $preset['size'] );

  // Protects against unsupported units.
  if ( empty( $preferred_size['unit'] ) ) {
    return $preset['size'];
  }

  /*
	 * Normalizes the minimum font size limit according to the incoming unit,
	 * in order to perform comparative checks.
	 */
  $minimum_font_size_limit = wp_get_typography_value_and_unit(
    $default_minimum_font_size_limit,
    array(
      'coerce_to' => $preferred_size['unit'],
    )
  );

  // Don't enforce minimum font size if a font size has explicitly set a min and max value.
  if ( ! empty( $minimum_font_size_limit ) && ( ! $minimum_font_size_raw && ! $maximum_font_size_raw ) ) {
    /*
		 * If a minimum size was not passed to this function
		 * and the user-defined font size is lower than $minimum_font_size_limit,
		 * do not calculate a fluid value.
		 */
    if ( $preferred_size['value'] <= $minimum_font_size_limit['value'] ) {
      return $preset['size'];
    }
  }

  // If no fluid max font size is available use the incoming value.
  if ( ! $maximum_font_size_raw ) {
    $maximum_font_size_raw = $preferred_size['value'] . $preferred_size['unit'];
  }

  /*
	 * If no minimumFontSize is provided, create one using
	 * the given font size multiplied by the min font size scale factor.
	 */
  if ( ! $minimum_font_size_raw ) {
    $calculated_minimum_font_size = round(
      $preferred_size['value'] * $default_minimum_font_size_factor,
      3
    );

    // Only use calculated min font size if it's > $minimum_font_size_limit value.
    if ( ! empty( $minimum_font_size_limit ) && $calculated_minimum_font_size <= $minimum_font_size_limit['value'] ) {
      $minimum_font_size_raw = $minimum_font_size_limit['value'] . $minimum_font_size_limit['unit'];
    } else {
      $minimum_font_size_raw = $calculated_minimum_font_size . $preferred_size['unit'];
    }
  }

  $fluid_font_size_value = wp_get_computed_fluid_typography_value(
    array(
      'minimum_viewport_width' => $default_minimum_viewport_width,
      'maximum_viewport_width' => $default_maximum_viewport_width,
      'minimum_font_size'      => $minimum_font_size_raw,
      'maximum_font_size'      => $maximum_font_size_raw,
      'scale_factor'           => $default_scale_factor,
    )
  );

  if ( ! empty( $fluid_font_size_value ) ) {
    return $fluid_font_size_value;
  }

  return $preset['size'];
}