onTopic(topic, callback) {
    if (!__privateGet(this, _msgRecvdByTopicCallbacks)[topic]) __privateGet(this, _msgRecvdByTopicCallbacks)[topic] = { _nextRef: 1 };
    else __privateGet(this, _msgRecvdByTopicCallbacks)[topic]._nextRef++;
    const nextCbRef = __privateGet(this, _msgRecvdByTopicCallbacks)[topic]._nextRef;
    const msgRecvdEvtCallback = __privateGet(this, _msgRecvdByTopicCallbacks)[topic][nextCbRef] = function msgRecvdEvtCallback2(e) {
      const msg = e.detail;
      if (msg.topic === topic) {
        callback.call(msg, msg);
      }
    };
    document.addEventListener("uibuilder:stdMsgReceived", msgRecvdEvtCallback);
    return nextCbRef;
  }
Register a change callback for a specific msg.topic
Similar to onChange but more convenient if needing to differentiate by msg.topic.
@example let otRef = uibuilder.onTopic('mytopic', function(){ console.log('Received a msg with msg.topic=`mytopic`. msg: ', this) })
To cancel a change listener: uibuilder.cancelTopic('mytopic', otRef)

@param {string} topic The msg.topic we want to listen for
@param {Function} callback The function that will run when an appropriate msg is received. `this` inside the callback as well as the cb's single argument is the received msg.
@returns {number} A reference to the callback to cancel, save and pass to uibuilder.cancelTopic if you need to remove a listener