static getCulpritSubItems(insight, event, TraceElements) {
    const culprits = insight.shifts.get(event);
    if (!culprits) {
      return;
    }

    /** @type {SubItem[]} */
    const subItems = [];
    for (const unsizedImage of culprits.unsizedImages) {
      subItems.push({
        extra: makeNodeItemForNodeId(TraceElements, unsizedImage.backendNodeId),
        cause: insightStr_(InsightUIStrings.unsizedImages),
      });
    }
    for (const request of culprits.fontRequests) {
      const url = request.args.data.url;
      subItems.push({
        extra: {type: 'url', value: url},
        cause: insightStr_(InsightUIStrings.fontRequest),
      });
    }
    if (culprits.iframeIds.length) {
      subItems.push({
        cause: insightStr_(InsightUIStrings.injectedIframe),
      });
    }

    if (subItems.length) {
      return {type: 'subitems', items: subItems};
    }
  }
@param {import('@paulirish/trace_engine/models/trace/insights/CLSCulprits.js').CLSCulpritsInsightModel} insight
@param {import('../../lib/trace-engine.js').SaneSyntheticLayoutShift} event
@param {LH.Artifacts.TraceElement[]} TraceElements
@return {LH.Audit.Details.TableSubItems|undefined}