I think the only piece of that which is GoJS specific is how you deal with the Palette (or any Diagram, really).
First, initializing the list of choices:
Chance are that you only have Nodes in your Palette. (That would include Groups.) So you can find all of the nodes in your palette with: myPalette.nodes. You then need to extract the information (probably just a string) from each of those nodes. That piece of the task is completely app-specific.
Second filtering out all of the palette nodes that don’t meet some criteria:
This is a matter of setting visible on each node to true or false depending on whether they meet the selection criteria so far. Something like:
Call Diagram.scrollToRect or Diagram.centerRect. Or better yet, call CommandHandler.scrollToPart, CommandHandler | GoJS API, which does so with animation.