tblGetColMeta(tblEl, options = {}) {
    if (!options.pad) options.pad = 3;
    if (tblEl.cols) return tblEl.cols;
    let cols = tblEl.querySelector("tr[data-col-reference]")?.children;
    if (!cols) cols = tblEl.querySelector("thead>tr:first-of-type")?.children;
    if (!cols) cols = tblEl.querySelector("tr:first-of-type")?.children;
    if (!cols) {
      _a.log(1, "Ui:tblGetColMeta", "No columns found in table")();
      return [];
    }
    const colData = [];
    let cellEl;
    for (cellEl of cols) {
      const hasName = !!cellEl.dataset.colName;
      const colName = cellEl.dataset.colName;
      const colIndex = cellEl.cellIndex + 1;
      const colKey = hasName ? colName : `C${String(cellEl.cellIndex + 1).padStart(options.pad, "0")}`;
      colData.push({
        index: colIndex,
        hasName,
        name: colName,
        key: colKey,
        title: cellEl.textContent
      });
    }
    tblEl.cols = colData;
    return colData;
  }
Returns either the existing or calculated column metadata given any table
First checks if the data is on the `cols` custom property of the table
If not, then looks 1st for a row with a `data-col-reference` attribute. Then for the first TR of the thead. Then for the first TR of the table.
@param {HTMLTableElement} tblEl DOM table element
@param {object} [options] Additional options. Default={}
  @param {number=} options.pad Optional, default=3. Will be used to front-pad unnamed column references with zeros. e.g. 3 => "C002"/"C012"/"C342"
@returns {Array<columnDefinition>} Column metadata = array of column definitions