docs: function handleEventFor(path, item, event){
    if (!isPathMatchSelector(path, item.selector))
      return;
  
    var data = basis.object.slice(item.data);
    var INPUT_EVENTS = ['keyup', 'keydown', 'keypress', 'input']; // when a user is typing
  
    if (INPUT_EVENTS.indexOf(event.type) != -1)
    {
      data.inputValue = event.target.value;
  
      if (typeof data.transformWithUIEvent === 'function')
        data = data.transformWithUIEvent(data, event);
  
      return {
        debounce: true,
        dataToTrack: {
          type: 'ui',
          path: stringifyPath(path),
          selector: stringifyPath(item.selector),
          event: event.type,
          data: data
        }
      };
    }
    else
    {
      if (typeof data.transformWithUIEvent === 'function')
        data = data.transformWithUIEvent(data, event);
  
      // roleId can be data generated
      if (item.selectorStr.indexOf('*') !== -1)
      {
        var roleId = path[path.length - 1].roleId;
        var starWasFound = false;
  
        for (var key in data)
          if (hasOwnProperty.call(data, key))
            if (data[key] === '*')
            {
              data[key] = roleId;
              starWasFound = true;
              break;
            }
  
        if (!starWasFound)
        {
          data = JSON.parse(JSON.stringify(data));
          setDeep(data, '*', roleId);
        }
      }
  
      return {
        dataToTrack: {
          type: 'ui',
          path: stringifyPath(path),
          selector: stringifyPath(item.selector),
          event: event.type,
          data: data
        }
      };
    }
  }