Function that wraps an IFrame as an Observable GraphistryState - other methods in this library can be piped with it

Example

<iframe id="viz" src="https://hub.graphistry.com/graph/graph.html?dataset=Miserables" />
<script>
document.addEventListener("DOMContentLoaded", function () {

    graphistryJS(document.getElementById('viz'))
       .pipe(
          tap((g) => {
            console.log('iframe ready; opening filters, pausing, then adding columns');
            document.getElementById('controls').style.opacity=1.0);
            window.g = g;
          }),
          openFilters,
          delay(5000),
          switchMap((g) => {
            console.log('filters opened & delayed; adding columns');
            const columns = [
                ['edge', 'highways', [66, 101, 280], 'number'],
                ['point', 'theme parks', ['six flags', 'disney world', 'great america'], 'string']
            ];
            return (
                 forkJoin(columns.map(([type, name, values, type]) => addColumn(type, name, values, type)))
                 .pipe(map(() => g)))
       })
       .subscribe(
           (g) => { console.log('event', g); },
           (err) => { console.log('error', err); },
          () => { console.log('all done'); }
        });
</script>