static makePhaseTable(phases) {
    const {ttfb, loadDelay, loadTime, renderDelay} = phases;

    /** @type {LH.Audit.Details.Table['headings']} */
    const headings = [
      {key: 'label', valueType: 'text', label: str_(UIStrings.phase)},
      {key: 'duration', valueType: 'ms', label: str_(i18n.UIStrings.columnDuration)},
    ];

    /** @type {LH.Audit.Details.Table['items']} */
    let items = [
      /* eslint-disable max-len */
      {phase: 'timeToFirstByte', label: str_(UIStrings.timeToFirstByte), duration: ttfb},
      {phase: 'resourceLoadDelay', label: str_(UIStrings.resourceLoadDelay), duration: loadDelay},
      {phase: 'resourceLoadDuration', label: str_(UIStrings.resourceLoadDuration), duration: loadTime},
      {phase: 'elementRenderDelay', label: str_(UIStrings.elementRenderDelay), duration: renderDelay},
      /* eslint-enable max-len */
    ];

    if (loadDelay === undefined) {
      items = items.filter(item => item.phase !== 'resourceLoadDelay');
    }
    if (loadTime === undefined) {
      items = items.filter(item => item.phase !== 'resourceLoadDuration');
    }

    return Audit.makeTableDetails(headings, items);
  }
@param {Required<import('@paulirish/trace_engine/models/trace/insights/LCPPhases.js').LCPPhasesInsightModel>['phases']} phases
@return {LH.Audit.Details.Table}