expressionBlurb = (type, stored, table, req) => {
  const allFields = table.fields;
  const fields = stored
    ? allFields.filter((f) => !f.stored || f.expression === "__aggregation")
    : allFields.filter((f) => !f.calculated);
  const funs = getState().functions;
  const funNames = Object.entries(funs)
    .filter(([k, v]) => !(!stored && v.isAsync))
    .map(([k, v]) => k);
  const examples = table.getFormulaExamples(type);
  return [
    p(
      req.__(
        "Please enter the formula for the new field as a JavaScript expression. The expression must result in a %s type",
        `<strong>${toJsType(type)}</strong>`
      )
    ),
    p(
      req.__(`Fields you can use as variables: `),
      fields.map((f) => code(f.name)).join(", ")
    ),
    funNames.length > 0
      ? p(
          req.__(
            `Functions you can use (in addition to standard JavaScript functions): `
          ),
          funNames.map((f) => code(f)).join(", ")
        )
      : "",
    examples && examples.length > 0 ? p(req.__("Examples:")) : "",
    examples ? ul(examples.map((e) => li(code(e)))) : "",
  ];
}
@param {string} type
@param {*} stored
@param {Table} table
@param {object} req
@returns {p[]}