Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

@looker/embed-sdk

Package Overview
Dependencies
Maintainers
10
Versions
25
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@looker/embed-sdk - npm Package Compare versions

Comparing version 1.6.1 to 1.6.2

2

dist/main.js
/*! For license information please see main.js.LICENSE.txt */
!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.LookerEmbedSDK=e():t.LookerEmbedSDK=e()}(self,(function(){return(()=>{var t={105:function(t,e,n){"use strict";var r=this&&this.__assign||function(){return(r=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var o in e=arguments[n])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t}).apply(this,arguments)},o=this&&this.__awaiter||function(t,e,n,r){return new(n||(n=Promise))((function(o,i){function s(t){try{u(r.next(t))}catch(t){i(t)}}function a(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(s,a)}u((r=r.apply(t,e||[])).next())}))},i=this&&this.__generator||function(t,e){var n,r,o,i,s={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(i){return function(a){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;s;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return s.label++,{value:i[1],done:!1};case 5:s.label++,r=i[1],i=[0];continue;case 7:i=s.ops.pop(),s.trys.pop();continue;default:if(!((o=(o=s.trys).length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){s=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]<o[3])){s.label=i[1];break}if(6===i[0]&&s.label<o[1]){s.label=o[1],o=i;break}if(o&&s.label<o[2]){s.label=o[2],s.ops.push(i);break}o[2]&&s.ops.pop(),s.trys.pop();continue}i=e.call(t,s)}catch(t){i=[6,t],r=0}finally{n=o=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,a])}}};Object.defineProperty(e,"__esModule",{value:!0});var s=n(346),a=n(529);n(310);var u,c=n(227);!function(t){t[t.Connecting=0]="Connecting",t[t.Syn=1]="Syn",t[t.Connected=2]="Connected"}(u=e.ChattyClientStates||(e.ChattyClientStates={}));var l=function(){function t(t){this._clientWindow=window,this._connection=null,this._hostWindow=this._clientWindow.parent,this._state=u.Connecting,this._sequence=0,this._receivers={},this._handlers=t.handlers,this._targetOrigin=t.targetOrigin,this._defaultTimeout=t.defaultTimeout,this._channel=new MessageChannel}return Object.defineProperty(t.prototype,"connection",{get:function(){return this._connection},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"isConnected",{get:function(){return this._state===u.Connected},enumerable:!0,configurable:!0}),t.prototype.connect=function(){return o(this,void 0,void 0,(function(){var e=this;return i(this,(function(n){return this._connection||(this._connection=new Promise((function(n,r){e._channel.port1.onmessage=function(r){switch(t._debug("received",r.data.action,r.data.data),r.data.action){case a.ChattyHostMessages.SynAck:e._state=u.Connected,e.sendMsg(s.ChattyClientMessages.Ack),n({send:function(t){for(var n=[],r=1;r<arguments.length;r++)n[r-1]=arguments[r];e.sendMsg(s.ChattyClientMessages.Message,{eventName:t,payload:n})},sendAndReceive:function(t){for(var n=[],r=1;r<arguments.length;r++)n[r-1]=arguments[r];return o(e,void 0,void 0,(function(){var e,r=this;return i(this,(function(o){return e=++this._sequence,this.sendMsg(s.ChattyClientMessages.MessageWithResponse,{eventName:t,payload:n},e),[2,new Promise((function(t,n){var o;r._defaultTimeout>-1&&(o=setTimeout((function(){delete r._receivers[e],n(new Error("Timeout"))}),r._defaultTimeout)),r._receivers[e]={resolve:t,reject:n,timeoutId:o}}))]}))}))}});break;case a.ChattyHostMessages.Message:e._handlers[r.data.data.eventName]&&e._handlers[r.data.data.eventName].forEach((function(t){return t.apply(e,r.data.data.payload)}));break;case a.ChattyHostMessages.MessageWithResponse:var c=r.data.data,l=c.eventName,h=c.payload,d=c.sequence,f=[];e._handlers[l]&&(f=e._handlers[l].map((function(t){return t.apply(e,h)}))),Promise.all(f).then((function(t){e.sendMsg(s.ChattyClientMessages.Response,{eventName:l,payload:t},d)})).catch((function(t){e.sendMsg(s.ChattyClientMessages.ResponseError,{eventName:l,payload:t.toString()},d)}));break;case a.ChattyHostMessages.Response:var p=e._receivers[r.data.data.sequence];p&&(delete e._receivers[r.data.data.sequence],p.timeoutId&&clearTimeout(p.timeoutId),p.resolve(r.data.data.payload));break;case a.ChattyHostMessages.ResponseError:var y=e._receivers[r.data.data.sequence];y&&(delete e._receivers[r.data.data.sequence],y.timeoutId&&clearTimeout(y.timeoutId),y.reject("string"==typeof r.data.data.payload?new Error(r.data.data.payload):r.data.data.payload))}},e.initiateHandshake()}))),[2,this._connection]}))}))},t.prototype.initiateHandshake=function(){t._debug("connecting to",this._targetOrigin),this._hostWindow.postMessage({action:s.ChattyClientMessages.Syn},this._targetOrigin,[this._channel.port2]),this._state=u.Syn},t.prototype.sendMsg=function(e,n,o){void 0===n&&(n={});var i=o?{sequence:o}:{},s=r(r({},n),i);t._debug("sending",e,s),this._channel.port1.postMessage({action:e,data:s})},t._debug=c("looker:chatty:client"),t}();e.ChattyClient=l},955:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(105),o=function(){function t(){this._targetOrigin="*",this._handlers={},this._defaultTimeout=3e4}return Object.defineProperty(t.prototype,"targetOrigin",{get:function(){return this._targetOrigin},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"handlers",{get:function(){return this._handlers},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"defaultTimeout",{get:function(){return this._defaultTimeout},enumerable:!0,configurable:!0}),t.prototype.off=function(t,e){this._handlers[t]&&(this._handlers[t]=this._handlers[t].filter((function(t){return t!==e})))},t.prototype.on=function(t,e){return this._handlers[t]=this._handlers[t]||[],this._handlers[t].push(e),this},t.prototype.withDefaultTimeout=function(t){return this._defaultTimeout=t,this},t.prototype.withTargetOrigin=function(t){return this._targetOrigin=t,this},t.prototype.build=function(){return new r.ChattyClient(this)},t}();e.ChattyClientBuilder=o},346:(t,e)=>{"use strict";var n;Object.defineProperty(e,"__esModule",{value:!0}),(n=e.ChattyClientMessages||(e.ChattyClientMessages={}))[n.Syn=0]="Syn",n[n.Ack=1]="Ack",n[n.Message=2]="Message",n[n.MessageWithResponse=3]="MessageWithResponse",n[n.Response=4]="Response",n[n.ResponseError=5]="ResponseError"},474:function(t,e,n){"use strict";var r=this&&this.__assign||function(){return(r=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var o in e=arguments[n])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t}).apply(this,arguments)},o=this&&this.__awaiter||function(t,e,n,r){return new(n||(n=Promise))((function(o,i){function s(t){try{u(r.next(t))}catch(t){i(t)}}function a(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(s,a)}u((r=r.apply(t,e||[])).next())}))},i=this&&this.__generator||function(t,e){var n,r,o,i,s={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(i){return function(a){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;s;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return s.label++,{value:i[1],done:!1};case 5:s.label++,r=i[1],i=[0];continue;case 7:i=s.ops.pop(),s.trys.pop();continue;default:if(!((o=(o=s.trys).length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){s=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]<o[3])){s.label=i[1];break}if(6===i[0]&&s.label<o[1]){s.label=o[1],o=i;break}if(o&&s.label<o[2]){s.label=o[2],s.ops.push(i);break}o[2]&&s.ops.pop(),s.trys.pop();continue}i=e.call(t,s)}catch(t){i=[6,t],r=0}finally{n=o=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,a])}}};Object.defineProperty(e,"__esModule",{value:!0});var s=n(346),a=n(529);n(310);var u,c=n(227);!function(t){t[t.Connecting=0]="Connecting",t[t.SynAck=1]="SynAck",t[t.Connected=2]="Connected"}(u=e.ChattyHostStates||(e.ChattyHostStates={}));var l=function(){function t(t){var e=this;this._hostWindow=window,this._connection=null,this._state=u.Connecting,this._sequence=0,this._receivers={},this.iframe=document.createElement("iframe"),t.sandboxAttrs.forEach((function(t){return e.iframe.sandbox.add(t)})),"allow"in this.iframe&&(this.iframe.allow=t.allowAttrs.join("; ")),this.iframe.frameBorder=t.getFrameBorder(),t.url?this.iframe.src=t.url:t.source?this.iframe.srcdoc=t.source:console.warn("url or source required to initialize Chatty host correctly"),this._appendTo=t.el,this._handlers=t.handlers,this._port=null,this._targetOrigin=t.targetOrigin,this._defaultTimeout=t.defaultTimeout}return Object.defineProperty(t.prototype,"connection",{get:function(){return this._connection},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"isConnected",{get:function(){return this._state===u.Connected},enumerable:!0,configurable:!0}),t.prototype.connect=function(){return o(this,void 0,void 0,(function(){var e,n=this;return i(this,(function(r){return this._connection?[2,this._connection]:(e=function(){return o(n,void 0,void 0,(function(){var e=this;return i(this,(function(n){return[2,new Promise((function(n,r){var c=function(r){switch(t._debug("port received",r.data.action,r.data.data),r.data.action){case s.ChattyClientMessages.Ack:e._state=u.Connected,n({send:function(t){for(var n=[],r=1;r<arguments.length;r++)n[r-1]=arguments[r];e.sendMsg(a.ChattyHostMessages.Message,{eventName:t,payload:n})},sendAndReceive:function(t){for(var n=[],r=1;r<arguments.length;r++)n[r-1]=arguments[r];return o(e,void 0,void 0,(function(){var e,r=this;return i(this,(function(o){return e=++this._sequence,this.sendMsg(a.ChattyHostMessages.MessageWithResponse,{eventName:t,payload:n},e),[2,new Promise((function(t,n){var o;r._defaultTimeout>-1&&(o=setTimeout((function(){delete r._receivers[e],n(new Error("Timeout"))}),r._defaultTimeout)),r._receivers[e]={resolve:t,reject:n,timeoutId:o}}))]}))}))}});break;case s.ChattyClientMessages.Message:e._handlers[r.data.data.eventName]&&e._handlers[r.data.data.eventName].forEach((function(t){return t.apply(e,r.data.data.payload)}));break;case s.ChattyClientMessages.MessageWithResponse:var c=r.data.data,l=c.eventName,h=c.payload,d=c.sequence,f=[];e._handlers[l]&&(f=e._handlers[l].map((function(t){return t.apply(e,h)}))),Promise.all(f).then((function(t){e.sendMsg(a.ChattyHostMessages.Response,{eventName:l,payload:t},d)})).catch((function(t){e.sendMsg(a.ChattyHostMessages.ResponseError,{eventName:l,payload:t.toString()},d)}));break;case s.ChattyClientMessages.Response:(p=e._receivers[r.data.data.sequence])&&(delete e._receivers[r.data.data.sequence],p.timeoutId&&clearTimeout(p.timeoutId),p.resolve(r.data.data.payload));break;case s.ChattyClientMessages.ResponseError:var p;(p=e._receivers[r.data.data.sequence])&&(delete e._receivers[r.data.data.sequence],p.timeoutId&&clearTimeout(p.timeoutId),p.reject("string"==typeof r.data.data.payload?new Error(r.data.data.payload):r.data.data.payload))}};e._hostWindow.addEventListener("message",(function(n){if(e.isValidMsg(n))switch(t._debug("window received",n.data.action,n.data.data),n.data.action){case s.ChattyClientMessages.Syn:if(e._port){if(!(e._targetOrigin&&"*"===e._targetOrigin||e._targetOrigin===n.origin))return void t._debug("rejected new connection from",n.origin);t._debug("reconnecting to",n.origin),e._port.close()}e._port=n.ports[0],e._port.onmessage=c,e.sendMsg(a.ChattyHostMessages.SynAck),e._state=u.SynAck}else t._debug("window received invalid",n)}))}))]}))}))},this._appendTo.appendChild(this.iframe),[2,this._connection=e()])}))}))},t.prototype.sendMsg=function(e,n,o){void 0===n&&(n={});var i=o?{sequence:o}:{},s=r(r({},n),i);t._debug("sending",e,s),this._port.postMessage({action:e,data:s})},t.prototype.isValidMsg=function(t){return t.source===this.iframe.contentWindow&&(!this._targetOrigin||"*"===this._targetOrigin||this._targetOrigin===t.origin)},t._debug=c("looker:chatty:host"),t}();e.ChattyHost=l},777:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(474),o=function(){function t(t,e){this._url=t,this._source=e,this._appendTo=null,this._handlers={},this._sandboxAttrs=[],this._allowAttrs=[],this._frameBorder="0",this._targetOrigin=null,this._defaultTimeout=3e4}return Object.defineProperty(t.prototype,"el",{get:function(){return this._appendTo||document.body},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"handlers",{get:function(){return this._handlers},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"sandboxAttrs",{get:function(){return this._sandboxAttrs},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"allowAttrs",{get:function(){return this._allowAttrs},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"targetOrigin",{get:function(){return this._targetOrigin},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"url",{get:function(){return this._url},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"source",{get:function(){return this._source},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"defaultTimeout",{get:function(){return this._defaultTimeout},enumerable:!0,configurable:!0}),t.prototype.appendTo=function(t){return this._appendTo=t,this},t.prototype.off=function(t,e){this._handlers[t]&&(this._handlers[t]=this._handlers[t].filter((function(t){return t!==e})))},t.prototype.on=function(t,e){return this._handlers[t]=this._handlers[t]||[],this._handlers[t].push(e),this},t.prototype.withDefaultTimeout=function(t){return this._defaultTimeout=t,this},t.prototype.getFrameBorder=function(){return this._frameBorder},t.prototype.frameBorder=function(t){return this._frameBorder=t,this},t.prototype.sandbox=function(t){return this.withSandboxAttribute(t),this},t.prototype.withSandboxAttribute=function(t){return this._sandboxAttrs.push(t),this},t.prototype.withAllowAttribute=function(t){return this._allowAttrs.push(t),this},t.prototype.withTargetOrigin=function(t){return this._targetOrigin=t,this},t.prototype.build=function(){return new r.ChattyHost(this)},t}();e.ChattyHostBuilder=o},529:(t,e)=>{"use strict";var n;Object.defineProperty(e,"__esModule",{value:!0}),(n=e.ChattyHostMessages||(e.ChattyHostMessages={}))[n.SynAck=0]="SynAck",n[n.Message=1]="Message",n[n.MessageWithResponse=2]="MessageWithResponse",n[n.Response=3]="Response",n[n.ResponseError=4]="ResponseError"},541:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(955),o=n(777),i=n(955);e.ChattyClientBuilder=i.ChattyClientBuilder;var s=n(777);e.ChattyHostBuilder=s.ChattyHostBuilder;var a=n(105);e.ChattyClient=a.ChattyClient;var u=n(474);e.ChattyHost=u.ChattyHost;var c=function(){function t(){}return t.createHost=function(t){return new o.ChattyHostBuilder(t)},t.createHostFromSource=function(t){return new o.ChattyHostBuilder(void 0,t)},t.createClient=function(){return new r.ChattyClientBuilder},t}();e.Chatty=c},711:function(t,e,n){"use strict";var r,o=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])})(t,e)},function(t,e){function n(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)}),i=this&&this.__awaiter||function(t,e,n,r){return new(n||(n=Promise))((function(o,i){function s(t){try{u(r.next(t))}catch(t){i(t)}}function a(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(s,a)}u((r=r.apply(t,e||[])).next())}))},s=this&&this.__generator||function(t,e){var n,r,o,i,s={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(i){return function(a){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;s;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return s.label++,{value:i[1],done:!1};case 5:s.label++,r=i[1],i=[0];continue;case 7:i=s.ops.pop(),s.trys.pop();continue;default:if(!((o=(o=s.trys).length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){s=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]<o[3])){s.label=i[1];break}if(6===i[0]&&s.label<o[1]){s.label=o[1],o=i;break}if(o&&s.label<o[2]){s.label=o[2],s.ops.push(i);break}o[2]&&s.ops.pop(),s.trys.pop();continue}i=e.call(t,s)}catch(t){i=[6,t],r=0}finally{n=o=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,a])}}};Object.defineProperty(e,"__esModule",{value:!0}),e.LookerEmbedDashboard=void 0;var a=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e.prototype.run=function(){this.send("dashboard:run")},e.prototype.stop=function(){this.send("dashboard:stop")},e.prototype.updateFilters=function(t){this.send("dashboard:filters:update",{filters:t})},e.prototype.setOptions=function(t){this.send("dashboard:options:set",t)},e.prototype.openScheduleDialog=function(){return i(this,void 0,void 0,(function(){return s(this,(function(t){return[2,this.sendAndReceive("dashboard:schedule_modal:open")]}))}))},e.prototype.loadDashboard=function(t,e){return void 0===e&&(e=!1),i(this,void 0,void 0,(function(){return s(this,(function(n){return[2,this.sendAndReceive("dashboard:load",{id:t,pushHistory:e})]}))}))},e}(n(211).LookerEmbedBase);e.LookerEmbedDashboard=a},354:function(t,e,n){"use strict";var r=this&&this.__awaiter||function(t,e,n,r){return new(n||(n=Promise))((function(o,i){function s(t){try{u(r.next(t))}catch(t){i(t)}}function a(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(s,a)}u((r=r.apply(t,e||[])).next())}))},o=this&&this.__generator||function(t,e){var n,r,o,i,s={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(i){return function(a){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;s;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return s.label++,{value:i[1],done:!1};case 5:s.label++,r=i[1],i=[0];continue;case 7:i=s.ops.pop(),s.trys.pop();continue;default:if(!((o=(o=s.trys).length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){s=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]<o[3])){s.label=i[1];break}if(6===i[0]&&s.label<o[1]){s.label=o[1],o=i;break}if(o&&s.label<o[2]){s.label=o[2],s.ops.push(i);break}o[2]&&s.ops.pop(),s.trys.pop();continue}i=e.call(t,s)}catch(t){i=[6,t],r=0}finally{n=o=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,a])}}};Object.defineProperty(e,"__esModule",{value:!0}),e.EmbedClient=void 0;var i=n(541),s=/^https?:\/\//,a=function(){function t(t){this._builder=t,this._hostBuilder=null,this._host=null,this._connection=null,this._client=null}return Object.defineProperty(t.prototype,"connection",{get:function(){return this._connection},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"isConnected",{get:function(){return!!this._connection},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"targetOrigin",{get:function(){if(this._builder.sandboxedHost)return"*";var t=this._builder.apiHost;return s.test(t)?t:"https://"+t},enumerable:!1,configurable:!0}),t.prototype.createIframe=function(t){return r(this,void 0,void 0,(function(){var e,n,r,s,a,u,c,l,h,d,f=this;return o(this,(function(o){for(e in this._hostBuilder=i.Chatty.createHost(t),this._builder.handlers)for(n=function(t){r._hostBuilder.on(e,(function(){for(var e=[],n=0;n<arguments.length;n++)e[n]=arguments[n];return t.apply(f._client,e)}))},r=this,s=0,a=this._builder.handlers[e];s<a.length;s++)u=a[s],n(u);for(c=0,l=this._builder.sandboxAttrs;c<l.length;c++)h=l[c],this._hostBuilder.withSandboxAttribute(h);return this._host=this._hostBuilder.frameBorder(this._builder.frameBorder).withTargetOrigin(this.targetOrigin).appendTo(this._builder.el).build(),this._builder.classNames.length&&(d=this._host.iframe.classList).add.apply(d,this._builder.classNames),[2,this._host.connect().then((function(t){return f._client=new f._builder.clientConstructor(t),f._client}))]}))}))},t.prototype.createUrl=function(){return r(this,void 0,void 0,(function(){var t,e,n,i,s,a,u=this;return o(this,(function(c){if(t=this._builder.embedUrl,!(null==(e=this._builder.auth)?void 0:e.url))return[2,""+this._builder.apiHost+t];if(n=e.url+"?src="+encodeURIComponent(t),e.params)for(i=0,s=e.params;i<s.length;i++)a=s[i],n+="&"+encodeURIComponent(a.name)+"="+encodeURIComponent(a.value);return[2,new Promise((function(t,i){return r(u,void 0,void 0,(function(){var r,s,a,u;return o(this,(function(o){if((r=new XMLHttpRequest).open("GET",n),e.withCredentials&&(r.withCredentials=e.withCredentials),r.setRequestHeader("Cache-Control","no-cache"),e.headers)for(s=0,a=e.headers;s<a.length;s++)u=a[s],r.setRequestHeader(u.name,u.value);return r.onload=function(){200===r.status?t(JSON.parse(r.responseText).url):i(r.statusText)},r.onerror=function(){return i(r.statusText)},r.send(),[2]}))}))}))]}))}))},t.prototype.connect=function(){return r(this,void 0,void 0,(function(){var t=this;return o(this,(function(e){return this._connection||(this._builder.url?this._connection=this.createIframe(this._builder.url):this._connection=this.createUrl().then((function(e){return r(t,void 0,void 0,(function(){return o(this,(function(t){return[2,this.createIframe(e)]}))}))}))),[2,this._connection]}))}))},t}();e.EmbedClient=a},211:function(t,e){"use strict";var n=this&&this.__awaiter||function(t,e,n,r){return new(n||(n=Promise))((function(o,i){function s(t){try{u(r.next(t))}catch(t){i(t)}}function a(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(s,a)}u((r=r.apply(t,e||[])).next())}))},r=this&&this.__generator||function(t,e){var n,r,o,i,s={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(i){return function(a){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;s;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return s.label++,{value:i[1],done:!1};case 5:s.label++,r=i[1],i=[0];continue;case 7:i=s.ops.pop(),s.trys.pop();continue;default:if(!((o=(o=s.trys).length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){s=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]<o[3])){s.label=i[1];break}if(6===i[0]&&s.label<o[1]){s.label=o[1],o=i;break}if(o&&s.label<o[2]){s.label=o[2],s.ops.push(i);break}o[2]&&s.ops.pop(),s.trys.pop();continue}i=e.call(t,s)}catch(t){i=[6,t],r=0}finally{n=o=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,a])}}};Object.defineProperty(e,"__esModule",{value:!0}),e.LookerEmbedBase=void 0;var o=function(){function t(t){this._host=t}return t.prototype.send=function(t,e){this._host.send(t,e)},t.prototype.sendAndReceive=function(t,e){return n(this,void 0,void 0,(function(){return r(this,(function(n){return[2,this._host.sendAndReceive(t,e)]}))}))},t}();e.LookerEmbedBase=o},886:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.EmbedBuilder=void 0;var r=n(354);function o(t){return t.replace(/,/g,"^,")}var i=function(){function t(t,e,n,r){if(this._hostSettings=t,this._type=e,this._endpoint=n,this._clientConstructor=r,this._handlers={},this._appendTo=null,this._sandboxAttrs=[],this._classNames=[],this._frameBorder="0",this._suffix="",this.sandboxedHost)this._params={embed_domain:this._hostSettings.apiHost,sdk:"2",sandboxed_host:"true"};else{var o=window.location.origin;this._params={embed_domain:o,sdk:"2"}}}return t.prototype.withFrameBorder=function(t){return this._frameBorder=t,this},t.prototype.withId=function(t){return this._id=t,this},t.prototype.withParams=function(t){for(var e in t)this._params[e]=t[e];return this},t.prototype.withFilters=function(t,e){if(void 0===e&&(e=!1),"dashboard"===this.type)for(var n in t)this._params[n]=e?o(t[n]):t[n];else for(var n in t)this._params["f["+n+"]"]=e?o(t[n]):t[n];return this},t.prototype.withSandboxAttr=function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return this._sandboxAttrs=this._sandboxAttrs.concat(t),this},t.prototype.withClassName=function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return this._classNames=this._classNames.concat(t),this},t.prototype.withNext=function(t){return void 0===t&&(t="-next"),this._suffix=t,this._endpoint+=this._suffix,this},t.prototype.withTheme=function(t){return this._params.theme=t,this},t.prototype.withApiHost=function(t){if(this._hostSettings.apiHost){if(this._hostSettings.apiHost!==t)throw new Error("not allowed to change api host")}else this._hostSettings.apiHost=t,this.sandboxedHost&&(this._params.embed_domain=t,this._params.sandboxed_host="true");return this},t.prototype.withAuthUrl=function(t){var e;if(null===(e=this._hostSettings.auth)||void 0===e?void 0:e.url){if(this._hostSettings.auth.url!==t)throw new Error("not allowed to change auth url")}else this._hostSettings.auth={url:t};return this},t.prototype.withAuth=function(t){if(this._hostSettings.auth){if(this._hostSettings.auth!==t)throw new Error("not allowed to change auth")}else this._hostSettings.auth=t;return this},t.prototype.withUrl=function(t){return this._url=t,this},Object.defineProperty(t.prototype,"sandboxedHost",{get:function(){if(void 0===this._sandboxedHost){var t=window.location.origin;this._sandboxedHost="null"===t||!t}return this._sandboxedHost},set:function(t){this._sandboxedHost=t},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"el",{get:function(){return this._appendTo||document.body},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"frameBorder",{get:function(){return this._frameBorder},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"endpoint",{get:function(){return this._endpoint},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"type",{get:function(){return this._type},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"apiHost",{get:function(){return this._hostSettings.apiHost},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"url",{get:function(){return this._url},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"authUrl",{get:function(){var t;return null===(t=this._hostSettings.auth)||void 0===t?void 0:t.url},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"auth",{get:function(){return this._hostSettings.auth},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"embedUrl",{get:function(){var t=function(t){var e=[];for(var n in t)e.push(encodeURIComponent(n)+"="+encodeURIComponent(t[n]));return e.join("&")}(this._params);return this.endpoint+"/"+this.id+"?"+t},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"handlers",{get:function(){return this._handlers},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"sandboxAttrs",{get:function(){return this._sandboxAttrs},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"classNames",{get:function(){return this._classNames},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"suffix",{get:function(){return this._suffix},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"id",{get:function(){return this._id},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"clientConstructor",{get:function(){return this._clientConstructor},enumerable:!1,configurable:!0}),t.prototype.appendTo=function(t){return this._appendTo="string"==typeof t?document.querySelector(t):t,this},t.prototype.on=function(t,e){return this._handlers[t]=this._handlers[t]?this._handlers[t]:[],this._handlers[t].push(e),this},t.prototype.build=function(){return new r.EmbedClient(this)},t}();e.EmbedBuilder=i},662:function(t,e,n){"use strict";var r,o=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])})(t,e)},function(t,e){function n(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)});Object.defineProperty(e,"__esModule",{value:!0}),e.LookerEmbedExplore=void 0;var i=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e.prototype.run=function(){this.send("look:run")},e.prototype.updateFilters=function(t){this.send("look:filters:update",{filters:t})},e}(n(211).LookerEmbedBase);e.LookerEmbedExplore=i},438:function(t,e,n){"use strict";var r,o=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])})(t,e)},function(t,e){function n(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)});Object.defineProperty(e,"__esModule",{value:!0}),e.LookerEmbedExtension=void 0;var i=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e}(n(211).LookerEmbedBase);e.LookerEmbedExtension=i},433:function(t,e,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(t,e,n,r){void 0===r&&(r=n),Object.defineProperty(t,r,{enumerable:!0,get:function(){return e[n]}})}:function(t,e,n,r){void 0===r&&(r=n),t[r]=e[n]}),o=this&&this.__exportStar||function(t,e){for(var n in t)"default"===n||e.hasOwnProperty(n)||r(e,t,n)};Object.defineProperty(e,"__esModule",{value:!0}),e.LookerEmbedSDK=void 0;var i=n(886),s=n(711),a=n(662),u=n(438),c=n(684);o(n(924),e);var l=function(){function t(){}return t.init=function(t,e){this.apiHost=t,this.auth="string"==typeof e?{url:e}:e},t.createDashboardWithUrl=function(t){return new i.EmbedBuilder(this,"dashboard","/embed/dashboards",s.LookerEmbedDashboard).withUrl(t)},t.createDashboardWithId=function(t){return new i.EmbedBuilder(this,"dashboard","/embed/dashboards",s.LookerEmbedDashboard).withId(t)},t.createExploreWithUrl=function(t){return new i.EmbedBuilder(this,"explore","/embed/explore",a.LookerEmbedExplore).withUrl(t)},t.createExploreWithId=function(t){return t=t.replace("::","/"),new i.EmbedBuilder(this,"explore","/embed/explore",a.LookerEmbedExplore).withId(t)},t.createLookWithUrl=function(t){return new i.EmbedBuilder(this,"look","/embed/looks",c.LookerEmbedLook).withUrl(t)},t.createLookWithId=function(t){return new i.EmbedBuilder(this,"look","/embed/looks",c.LookerEmbedLook).withId(t)},t.createExtensionWithUrl=function(t){return new i.EmbedBuilder(this,"extension","/embed/extensions",u.LookerEmbedExtension).withUrl(t)},t.createExtensionWithId=function(t){return new i.EmbedBuilder(this,"extension","/embed/extensions",u.LookerEmbedExtension).withId(t)},t}();e.LookerEmbedSDK=l},684:function(t,e,n){"use strict";var r,o=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])})(t,e)},function(t,e){function n(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)});Object.defineProperty(e,"__esModule",{value:!0}),e.LookerEmbedLook=void 0;var i=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e.prototype.run=function(){this.send("look:run")},e.prototype.updateFilters=function(t){this.send("look:filters:update",{filters:t})},e}(n(211).LookerEmbedBase);e.LookerEmbedLook=i},924:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},227:(t,e,n)=>{function r(){var t;try{t=e.storage.debug}catch(t){}return!t&&"undefined"!=typeof process&&"env"in process&&(t=process.env.DEBUG),t}(e=t.exports=n(658)).log=function(){return"object"==typeof console&&console.log&&Function.prototype.apply.call(console.log,console,arguments)},e.formatArgs=function(t){var n=this.useColors;if(t[0]=(n?"%c":"")+this.namespace+(n?" %c":" ")+t[0]+(n?"%c ":" ")+"+"+e.humanize(this.diff),n){var r="color: "+this.color;t.splice(1,0,r,"color: inherit");var o=0,i=0;t[0].replace(/%[a-zA-Z%]/g,(function(t){"%%"!==t&&(o++,"%c"===t&&(i=o))})),t.splice(i,0,r)}},e.save=function(t){try{null==t?e.storage.removeItem("debug"):e.storage.debug=t}catch(t){}},e.load=r,e.useColors=function(){return!("undefined"==typeof window||!window.process||"renderer"!==window.process.type)||("undefined"!=typeof document&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||"undefined"!=typeof window&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&parseInt(RegExp.$1,10)>=31||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/))},e.storage="undefined"!=typeof chrome&&void 0!==chrome.storage?chrome.storage.local:function(){try{return window.localStorage}catch(t){}}(),e.colors=["lightseagreen","forestgreen","goldenrod","dodgerblue","darkorchid","crimson"],e.formatters.j=function(t){try{return JSON.stringify(t)}catch(t){return"[UnexpectedJSONParseError]: "+t.message}},e.enable(r())},658:(t,e,n)=>{var r;function o(t){function n(){if(n.enabled){var t=n,o=+new Date,i=o-(r||o);t.diff=i,t.prev=r,t.curr=o,r=o;for(var s=new Array(arguments.length),a=0;a<s.length;a++)s[a]=arguments[a];s[0]=e.coerce(s[0]),"string"!=typeof s[0]&&s.unshift("%O");var u=0;s[0]=s[0].replace(/%([a-zA-Z%])/g,(function(n,r){if("%%"===n)return n;u++;var o=e.formatters[r];if("function"==typeof o){var i=s[u];n=o.call(t,i),s.splice(u,1),u--}return n})),e.formatArgs.call(t,s);var c=n.log||e.log||console.log.bind(console);c.apply(t,s)}}return n.namespace=t,n.enabled=e.enabled(t),n.useColors=e.useColors(),n.color=function(t){var n,r=0;for(n in t)r=(r<<5)-r+t.charCodeAt(n),r|=0;return e.colors[Math.abs(r)%e.colors.length]}(t),"function"==typeof e.init&&e.init(n),n}(e=t.exports=o.debug=o.default=o).coerce=function(t){return t instanceof Error?t.stack||t.message:t},e.disable=function(){e.enable("")},e.enable=function(t){e.save(t),e.names=[],e.skips=[];for(var n=("string"==typeof t?t:"").split(/[\s,]+/),r=n.length,o=0;o<r;o++)n[o]&&("-"===(t=n[o].replace(/\*/g,".*?"))[0]?e.skips.push(new RegExp("^"+t.substr(1)+"$")):e.names.push(new RegExp("^"+t+"$")))},e.enabled=function(t){var n,r;for(n=0,r=e.skips.length;n<r;n++)if(e.skips[n].test(t))return!1;for(n=0,r=e.names.length;n<r;n++)if(e.names[n].test(t))return!0;return!1},e.humanize=n(824),e.names=[],e.skips=[],e.formatters={}},310:(t,e,n)=>{"use strict";t.exports=n(702).polyfill()},702:function(t,e,n){t.exports=function(){"use strict";function t(t){return"function"==typeof t}var e=Array.isArray?Array.isArray:function(t){return"[object Array]"===Object.prototype.toString.call(t)},r=0,o=void 0,i=void 0,s=function(t,e){f[r]=t,f[r+1]=e,2===(r+=2)&&(i?i(p):v())};var a="undefined"!=typeof window?window:void 0,u=a||{},c=u.MutationObserver||u.WebKitMutationObserver,l="undefined"==typeof self&&"undefined"!=typeof process&&"[object process]"==={}.toString.call(process),h="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel;function d(){var t=setTimeout;return function(){return t(p,1)}}var f=new Array(1e3);function p(){for(var t=0;t<r;t+=2)(0,f[t])(f[t+1]),f[t]=void 0,f[t+1]=void 0;r=0}var y,b,_,g,v=void 0;function m(t,e){var n=this,r=new this.constructor(x);void 0===r[C]&&B(r);var o=n._state;if(o){var i=arguments[o-1];s((function(){return T(o,r,i,n._result)}))}else A(n,r,t,e);return r}function w(t){if(t&&"object"==typeof t&&t.constructor===this)return t;var e=new this(x);return E(e,t),e}v=l?function(){return process.nextTick(p)}:c?(b=0,_=new c(p),g=document.createTextNode(""),_.observe(g,{characterData:!0}),function(){g.data=b=++b%2}):h?((y=new MessageChannel).port1.onmessage=p,function(){return y.port2.postMessage(0)}):void 0===a?function(){try{var t=Function("return this")().require("vertx");return void 0!==(o=t.runOnLoop||t.runOnContext)?function(){o(p)}:d()}catch(t){return d()}}():d();var C=Math.random().toString(36).substring(2);function x(){}var O=void 0;function k(e,n,r){n.constructor===e.constructor&&r===m&&n.constructor.resolve===w?function(t,e){1===e._state?j(t,e._result):2===e._state?P(t,e._result):A(e,void 0,(function(e){return E(t,e)}),(function(e){return P(t,e)}))}(e,n):void 0===r?j(e,n):t(r)?function(t,e,n){s((function(t){var r=!1,o=function(t,e,n,r){try{t.call(e,n,r)}catch(t){return t}}(n,e,(function(n){r||(r=!0,e!==n?E(t,n):j(t,n))}),(function(e){r||(r=!0,P(t,e))}),t._label);!r&&o&&(r=!0,P(t,o))}),t)}(e,n,r):j(e,n)}function E(t,e){if(t===e)P(t,new TypeError("You cannot resolve a promise with itself"));else if(o=typeof(r=e),null===r||"object"!==o&&"function"!==o)j(t,e);else{var n=void 0;try{n=e.then}catch(e){return void P(t,e)}k(t,e,n)}var r,o}function M(t){t._onerror&&t._onerror(t._result),S(t)}function j(t,e){t._state===O&&(t._result=e,t._state=1,0!==t._subscribers.length&&s(S,t))}function P(t,e){t._state===O&&(t._state=2,t._result=e,s(M,t))}function A(t,e,n,r){var o=t._subscribers,i=o.length;t._onerror=null,o[i]=e,o[i+1]=n,o[i+2]=r,0===i&&t._state&&s(S,t)}function S(t){var e=t._subscribers,n=t._state;if(0!==e.length){for(var r=void 0,o=void 0,i=t._result,s=0;s<e.length;s+=3)r=e[s],o=e[s+n],r?T(n,r,o,i):o(i);t._subscribers.length=0}}function T(e,n,r,o){var i=t(r),s=void 0,a=void 0,u=!0;if(i){try{s=r(o)}catch(t){u=!1,a=t}if(n===s)return void P(n,new TypeError("A promises callback cannot return that same promise."))}else s=o;n._state!==O||(i&&u?E(n,s):!1===u?P(n,a):1===e?j(n,s):2===e&&P(n,s))}var H=0;function B(t){t[C]=H++,t._state=void 0,t._result=void 0,t._subscribers=[]}var R=function(){function t(t,n){this._instanceConstructor=t,this.promise=new t(x),this.promise[C]||B(this.promise),e(n)?(this.length=n.length,this._remaining=n.length,this._result=new Array(this.length),0===this.length?j(this.promise,this._result):(this.length=this.length||0,this._enumerate(n),0===this._remaining&&j(this.promise,this._result))):P(this.promise,new Error("Array Methods must be provided an Array"))}return t.prototype._enumerate=function(t){for(var e=0;this._state===O&&e<t.length;e++)this._eachEntry(t[e],e)},t.prototype._eachEntry=function(t,e){var n=this._instanceConstructor,r=n.resolve;if(r===w){var o=void 0,i=void 0,s=!1;try{o=t.then}catch(t){s=!0,i=t}if(o===m&&t._state!==O)this._settledAt(t._state,e,t._result);else if("function"!=typeof o)this._remaining--,this._result[e]=t;else if(n===L){var a=new n(x);s?P(a,i):k(a,t,o),this._willSettleAt(a,e)}else this._willSettleAt(new n((function(e){return e(t)})),e)}else this._willSettleAt(r(t),e)},t.prototype._settledAt=function(t,e,n){var r=this.promise;r._state===O&&(this._remaining--,2===t?P(r,n):this._result[e]=n),0===this._remaining&&j(r,this._result)},t.prototype._willSettleAt=function(t,e){var n=this;A(t,void 0,(function(t){return n._settledAt(1,e,t)}),(function(t){return n._settledAt(2,e,t)}))},t}();var L=function(){function e(t){this[C]=H++,this._result=this._state=void 0,this._subscribers=[],x!==t&&("function"!=typeof t&&function(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}(),this instanceof e?function(t,e){try{e((function(e){E(t,e)}),(function(e){P(t,e)}))}catch(e){P(t,e)}}(this,t):function(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}())}return e.prototype.catch=function(t){return this.then(null,t)},e.prototype.finally=function(e){var n=this,r=n.constructor;return t(e)?n.then((function(t){return r.resolve(e()).then((function(){return t}))}),(function(t){return r.resolve(e()).then((function(){throw t}))})):n.then(e,e)},e}();return L.prototype.then=m,L.all=function(t){return new R(this,t).promise},L.race=function(t){var n=this;return e(t)?new n((function(e,r){for(var o=t.length,i=0;i<o;i++)n.resolve(t[i]).then(e,r)})):new n((function(t,e){return e(new TypeError("You must pass an array to race."))}))},L.resolve=w,L.reject=function(t){var e=new this(x);return P(e,t),e},L._setScheduler=function(t){i=t},L._setAsap=function(t){s=t},L._asap=s,L.polyfill=function(){var t=void 0;if(void 0!==n.g)t=n.g;else if("undefined"!=typeof self)t=self;else try{t=Function("return this")()}catch(t){throw new Error("polyfill failed because global object is unavailable in this environment")}var e=t.Promise;if(e){var r=null;try{r=Object.prototype.toString.call(e.resolve())}catch(t){}if("[object Promise]"===r&&!e.cast)return}t.Promise=L},L.Promise=L,L}()},824:t=>{var e=1e3,n=60*e,r=60*n,o=24*r;function i(t,e,n){if(!(t<e))return t<1.5*e?Math.floor(t/e)+" "+n:Math.ceil(t/e)+" "+n+"s"}t.exports=function(t,s){s=s||{};var a,u=typeof t;if("string"===u&&t.length>0)return function(t){if(!((t=String(t)).length>100)){var i=/^((?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(t);if(i){var s=parseFloat(i[1]);switch((i[2]||"ms").toLowerCase()){case"years":case"year":case"yrs":case"yr":case"y":return 315576e5*s;case"days":case"day":case"d":return s*o;case"hours":case"hour":case"hrs":case"hr":case"h":return s*r;case"minutes":case"minute":case"mins":case"min":case"m":return s*n;case"seconds":case"second":case"secs":case"sec":case"s":return s*e;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return s;default:return}}}}(t);if("number"===u&&!1===isNaN(t))return s.long?i(a=t,o,"day")||i(a,r,"hour")||i(a,n,"minute")||i(a,e,"second")||a+" ms":function(t){return t>=o?Math.round(t/o)+"d":t>=r?Math.round(t/r)+"h":t>=n?Math.round(t/n)+"m":t>=e?Math.round(t/e)+"s":t+"ms"}(t);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(t))}}},e={};function n(r){var o=e[r];if(void 0!==o)return o.exports;var i=e[r]={exports:{}};return t[r].call(i.exports,i,i.exports,n),i.exports}return n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),n(433)})()}));
!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.LookerEmbedSDK=e():t.LookerEmbedSDK=e()}(self,(()=>(()=>{var t={105:function(t,e,n){"use strict";var r=this&&this.__assign||function(){return r=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var o in e=arguments[n])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},r.apply(this,arguments)},o=this&&this.__awaiter||function(t,e,n,r){return new(n||(n=Promise))((function(o,i){function s(t){try{u(r.next(t))}catch(t){i(t)}}function a(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(s,a)}u((r=r.apply(t,e||[])).next())}))},i=this&&this.__generator||function(t,e){var n,r,o,i,s={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(i){return function(a){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;s;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return s.label++,{value:i[1],done:!1};case 5:s.label++,r=i[1],i=[0];continue;case 7:i=s.ops.pop(),s.trys.pop();continue;default:if(!((o=(o=s.trys).length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){s=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]<o[3])){s.label=i[1];break}if(6===i[0]&&s.label<o[1]){s.label=o[1],o=i;break}if(o&&s.label<o[2]){s.label=o[2],s.ops.push(i);break}o[2]&&s.ops.pop(),s.trys.pop();continue}i=e.call(t,s)}catch(t){i=[6,t],r=0}finally{n=o=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,a])}}};Object.defineProperty(e,"__esModule",{value:!0}),e.ChattyClient=e.ChattyClientStates=void 0;var s,a=n(686),u=n(346),c=n(529);n(310),function(t){t[t.Connecting=0]="Connecting",t[t.Syn=1]="Syn",t[t.Connected=2]="Connected"}(s=e.ChattyClientStates||(e.ChattyClientStates={}));var l=function(){function t(t){this._clientWindow=window,this._connection=null,this._hostWindow=this._clientWindow.parent,this._state=s.Connecting,this._sequence=0,this._receivers={},this._handlers=t.handlers,this._targetOrigin=t.targetOrigin,this._defaultTimeout=t.defaultTimeout,this._channel=new MessageChannel}return Object.defineProperty(t.prototype,"connection",{get:function(){return this._connection},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"isConnected",{get:function(){return this._state===s.Connected},enumerable:!1,configurable:!0}),t.prototype.connect=function(){return o(this,void 0,void 0,(function(){var e=this;return i(this,(function(n){return this._connection||(this._connection=new Promise((function(n,r){e._channel.port1.onmessage=function(r){switch(t._debug("received",r.data.action,r.data.data),r.data.action){case c.ChattyHostMessages.SynAck:e._state=s.Connected,e.sendMsg(u.ChattyClientMessages.Ack),n({send:function(t){for(var n=[],r=1;r<arguments.length;r++)n[r-1]=arguments[r];e.sendMsg(u.ChattyClientMessages.Message,{eventName:t,payload:n})},sendAndReceive:function(t){for(var n=[],r=1;r<arguments.length;r++)n[r-1]=arguments[r];return o(e,void 0,void 0,(function(){var e,r=this;return i(this,(function(o){return e=++this._sequence,this.sendMsg(u.ChattyClientMessages.MessageWithResponse,{eventName:t,payload:n},e),[2,new Promise((function(t,n){var o;r._defaultTimeout>-1&&(o=setTimeout((function(){delete r._receivers[e],n(new Error("Timeout"))}),r._defaultTimeout)),r._receivers[e]={reject:n,resolve:t,timeoutId:o}}))]}))}))}});break;case c.ChattyHostMessages.Message:e._handlers[r.data.data.eventName]&&e._handlers[r.data.data.eventName].forEach((function(t){return t.apply(e,r.data.data.payload)}));break;case c.ChattyHostMessages.MessageWithResponse:var a=r.data.data,l=a.eventName,h=a.payload,d=a.sequence,f=[];e._handlers[l]&&(f=e._handlers[l].map((function(t){return t.apply(e,h)}))),Promise.all(f).then((function(t){e.sendMsg(u.ChattyClientMessages.Response,{eventName:l,payload:t},d)})).catch((function(t){e.sendMsg(u.ChattyClientMessages.ResponseError,{eventName:l,payload:t.toString()},d)}));break;case c.ChattyHostMessages.Response:(p=e._receivers[r.data.data.sequence])&&(delete e._receivers[r.data.data.sequence],p.timeoutId&&clearTimeout(p.timeoutId),p.resolve(r.data.data.payload));break;case c.ChattyHostMessages.ResponseError:var p;(p=e._receivers[r.data.data.sequence])&&(delete e._receivers[r.data.data.sequence],p.timeoutId&&clearTimeout(p.timeoutId),p.reject("string"==typeof r.data.data.payload?new Error(r.data.data.payload):r.data.data.payload))}},e.initiateHandshake()}))),[2,this._connection]}))}))},t.prototype.initiateHandshake=function(){t._debug("connecting to",this._targetOrigin),this._hostWindow.postMessage({action:u.ChattyClientMessages.Syn},this._targetOrigin,[this._channel.port2]),this._state=s.Syn},t.prototype.sendMsg=function(e,n,o){void 0===n&&(n={});var i=o?{sequence:o}:{},s=r(r({},n),i);t._debug("sending",e,s),this._channel.port1.postMessage({action:e,data:s})},t._debug=a("looker:chatty:client"),t}();e.ChattyClient=l},955:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ChattyClientBuilder=void 0;var r=n(105),o=function(){function t(){this._targetOrigin="*",this._handlers={},this._defaultTimeout=3e4}return Object.defineProperty(t.prototype,"targetOrigin",{get:function(){return this._targetOrigin},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"handlers",{get:function(){return this._handlers},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"defaultTimeout",{get:function(){return this._defaultTimeout},enumerable:!1,configurable:!0}),t.prototype.off=function(t,e){this._handlers[t]&&(this._handlers[t]=this._handlers[t].filter((function(t){return t!==e})))},t.prototype.on=function(t,e){return this._handlers[t]=this._handlers[t]||[],this._handlers[t].push(e),this},t.prototype.withDefaultTimeout=function(t){return this._defaultTimeout=t,this},t.prototype.withTargetOrigin=function(t){return this._targetOrigin=t,this},t.prototype.build=function(){return new r.ChattyClient(this)},t}();e.ChattyClientBuilder=o},346:(t,e)=>{"use strict";var n;Object.defineProperty(e,"__esModule",{value:!0}),e.ChattyClientMessages=void 0,(n=e.ChattyClientMessages||(e.ChattyClientMessages={}))[n.Syn=0]="Syn",n[n.Ack=1]="Ack",n[n.Message=2]="Message",n[n.MessageWithResponse=3]="MessageWithResponse",n[n.Response=4]="Response",n[n.ResponseError=5]="ResponseError"},474:function(t,e,n){"use strict";var r=this&&this.__assign||function(){return r=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var o in e=arguments[n])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},r.apply(this,arguments)},o=this&&this.__awaiter||function(t,e,n,r){return new(n||(n=Promise))((function(o,i){function s(t){try{u(r.next(t))}catch(t){i(t)}}function a(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(s,a)}u((r=r.apply(t,e||[])).next())}))},i=this&&this.__generator||function(t,e){var n,r,o,i,s={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(i){return function(a){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;s;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return s.label++,{value:i[1],done:!1};case 5:s.label++,r=i[1],i=[0];continue;case 7:i=s.ops.pop(),s.trys.pop();continue;default:if(!((o=(o=s.trys).length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){s=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]<o[3])){s.label=i[1];break}if(6===i[0]&&s.label<o[1]){s.label=o[1],o=i;break}if(o&&s.label<o[2]){s.label=o[2],s.ops.push(i);break}o[2]&&s.ops.pop(),s.trys.pop();continue}i=e.call(t,s)}catch(t){i=[6,t],r=0}finally{n=o=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,a])}}};Object.defineProperty(e,"__esModule",{value:!0}),e.ChattyHost=e.ChattyHostStates=void 0;var s,a=n(686),u=n(346),c=n(529);n(310),function(t){t[t.Connecting=0]="Connecting",t[t.SynAck=1]="SynAck",t[t.Connected=2]="Connected"}(s=e.ChattyHostStates||(e.ChattyHostStates={}));var l=function(){function t(t){var e=this;this._hostWindow=window,this._connection=null,this._state=s.Connecting,this._sequence=0,this._receivers={},this.iframe=document.createElement("iframe"),t.sandboxAttrs.forEach((function(t){return e.iframe.sandbox.add(t)})),"allow"in this.iframe&&(this.iframe.allow=t.allowAttrs.join("; ")),this.iframe.frameBorder=t.getFrameBorder(),t.url?this.iframe.src=t.url:t.source?this.iframe.srcdoc=t.source:console.warn("url or source required to initialize Chatty host correctly"),this._appendTo=t.el,this._handlers=t.handlers,this._port=null,this._targetOrigin=t.targetOrigin,this._defaultTimeout=t.defaultTimeout}return Object.defineProperty(t.prototype,"connection",{get:function(){return this._connection},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"isConnected",{get:function(){return this._state===s.Connected},enumerable:!1,configurable:!0}),t.prototype.connect=function(){return o(this,void 0,void 0,(function(){var e,n=this;return i(this,(function(r){return this._connection?[2,this._connection]:(e=function(){return o(n,void 0,void 0,(function(){var e=this;return i(this,(function(n){return[2,new Promise((function(n,r){var a=function(r){switch(t._debug("port received",r.data.action,r.data.data),r.data.action){case u.ChattyClientMessages.Ack:e._state=s.Connected,n({send:function(t){for(var n=[],r=1;r<arguments.length;r++)n[r-1]=arguments[r];e.sendMsg(c.ChattyHostMessages.Message,{eventName:t,payload:n})},sendAndReceive:function(t){for(var n=[],r=1;r<arguments.length;r++)n[r-1]=arguments[r];return o(e,void 0,void 0,(function(){var e,r=this;return i(this,(function(o){return e=++this._sequence,this.sendMsg(c.ChattyHostMessages.MessageWithResponse,{eventName:t,payload:n},e),[2,new Promise((function(t,n){var o;r._defaultTimeout>-1&&(o=setTimeout((function(){delete r._receivers[e],n(new Error("Timeout"))}),r._defaultTimeout)),r._receivers[e]={reject:n,resolve:t,timeoutId:o}}))]}))}))}});break;case u.ChattyClientMessages.Message:e._handlers[r.data.data.eventName]&&e._handlers[r.data.data.eventName].forEach((function(t){return t.apply(e,r.data.data.payload)}));break;case u.ChattyClientMessages.MessageWithResponse:var a=r.data.data,l=a.eventName,h=a.payload,d=a.sequence,f=[];e._handlers[l]&&(f=e._handlers[l].map((function(t){return t.apply(e,h)}))),Promise.all(f).then((function(t){e.sendMsg(c.ChattyHostMessages.Response,{eventName:l,payload:t},d)})).catch((function(t){e.sendMsg(c.ChattyHostMessages.ResponseError,{eventName:l,payload:t.toString()},d)}));break;case u.ChattyClientMessages.Response:(p=e._receivers[r.data.data.sequence])&&(delete e._receivers[r.data.data.sequence],p.timeoutId&&clearTimeout(p.timeoutId),p.resolve(r.data.data.payload));break;case u.ChattyClientMessages.ResponseError:var p;(p=e._receivers[r.data.data.sequence])&&(delete e._receivers[r.data.data.sequence],p.timeoutId&&clearTimeout(p.timeoutId),p.reject("string"==typeof r.data.data.payload?new Error(r.data.data.payload):r.data.data.payload))}};e._hostWindow.addEventListener("message",(function(n){if(e.isValidMsg(n)){if(t._debug("window received",n.data.action,n.data.data),n.data.action===u.ChattyClientMessages.Syn){if(e._port){if(!(e._targetOrigin&&"*"===e._targetOrigin||e._targetOrigin===n.origin))return void t._debug("rejected new connection from",n.origin);t._debug("reconnecting to",n.origin),e._port.close()}e._port=n.ports[0],e._port.onmessage=a,e.sendMsg(c.ChattyHostMessages.SynAck),e._state=s.SynAck}}else t._debug("window received invalid",n)}))}))]}))}))},this._appendTo.appendChild(this.iframe),[2,this._connection=e()])}))}))},t.prototype.sendMsg=function(e,n,o){void 0===n&&(n={});var i=o?{sequence:o}:{},s=r(r({},n),i);t._debug("sending",e,s),this._port.postMessage({action:e,data:s})},t.prototype.isValidMsg=function(t){return t.source===this.iframe.contentWindow&&(!this._targetOrigin||"*"===this._targetOrigin||this._targetOrigin===t.origin)},t._debug=a("looker:chatty:host"),t}();e.ChattyHost=l},777:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ChattyHostBuilder=void 0;var r=n(474),o=function(){function t(t,e){this._url=t,this._source=e,this._appendTo=null,this._handlers={},this._sandboxAttrs=[],this._allowAttrs=[],this._frameBorder="0",this._targetOrigin=null,this._defaultTimeout=3e4}return Object.defineProperty(t.prototype,"el",{get:function(){return this._appendTo||document.body},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"handlers",{get:function(){return this._handlers},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"sandboxAttrs",{get:function(){return this._sandboxAttrs},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"allowAttrs",{get:function(){return this._allowAttrs},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"targetOrigin",{get:function(){return this._targetOrigin},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"url",{get:function(){return this._url},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"source",{get:function(){return this._source},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"defaultTimeout",{get:function(){return this._defaultTimeout},enumerable:!1,configurable:!0}),t.prototype.appendTo=function(t){return this._appendTo=t,this},t.prototype.off=function(t,e){this._handlers[t]&&(this._handlers[t]=this._handlers[t].filter((function(t){return t!==e})))},t.prototype.on=function(t,e){return this._handlers[t]=this._handlers[t]||[],this._handlers[t].push(e),this},t.prototype.withDefaultTimeout=function(t){return this._defaultTimeout=t,this},t.prototype.getFrameBorder=function(){return this._frameBorder},t.prototype.frameBorder=function(t){return this._frameBorder=t,this},t.prototype.sandbox=function(t){return this.withSandboxAttribute(t),this},t.prototype.withSandboxAttribute=function(t){return this._sandboxAttrs.push(t),this},t.prototype.withAllowAttribute=function(t){return this._allowAttrs.push(t),this},t.prototype.withTargetOrigin=function(t){return this._targetOrigin=t,this},t.prototype.build=function(){return new r.ChattyHost(this)},t}();e.ChattyHostBuilder=o},529:(t,e)=>{"use strict";var n;Object.defineProperty(e,"__esModule",{value:!0}),e.ChattyHostMessages=void 0,(n=e.ChattyHostMessages||(e.ChattyHostMessages={}))[n.SynAck=0]="SynAck",n[n.Message=1]="Message",n[n.MessageWithResponse=2]="MessageWithResponse",n[n.Response=3]="Response",n[n.ResponseError=4]="ResponseError"},541:function(t,e,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(t,e,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(e,n);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[n]}}),Object.defineProperty(t,r,o)}:function(t,e,n,r){void 0===r&&(r=n),t[r]=e[n]}),o=this&&this.__exportStar||function(t,e){for(var n in t)"default"===n||Object.prototype.hasOwnProperty.call(e,n)||r(e,t,n)};Object.defineProperty(e,"__esModule",{value:!0}),e.Chatty=e.ChattyHost=e.ChattyClient=e.ChattyHostBuilder=e.ChattyClientBuilder=void 0;var i=n(955),s=n(777),a=n(955);Object.defineProperty(e,"ChattyClientBuilder",{enumerable:!0,get:function(){return a.ChattyClientBuilder}});var u=n(777);Object.defineProperty(e,"ChattyHostBuilder",{enumerable:!0,get:function(){return u.ChattyHostBuilder}});var c=n(105);Object.defineProperty(e,"ChattyClient",{enumerable:!0,get:function(){return c.ChattyClient}});var l=n(474);Object.defineProperty(e,"ChattyHost",{enumerable:!0,get:function(){return l.ChattyHost}}),o(n(248),e);var h=function(){function t(){}return t.createHost=function(t){return new s.ChattyHostBuilder(t)},t.createHostFromSource=function(t){return new s.ChattyHostBuilder(void 0,t)},t.createClient=function(){return new i.ChattyClientBuilder},t}();e.Chatty=h},248:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},686:(t,e,n)=>{function r(){var t;try{t=e.storage.debug}catch(t){}return!t&&"undefined"!=typeof process&&"env"in process&&(t=process.env.DEBUG),t}(e=t.exports=n(514)).log=function(){return"object"==typeof console&&console.log&&Function.prototype.apply.call(console.log,console,arguments)},e.formatArgs=function(t){var n=this.useColors;if(t[0]=(n?"%c":"")+this.namespace+(n?" %c":" ")+t[0]+(n?"%c ":" ")+"+"+e.humanize(this.diff),n){var r="color: "+this.color;t.splice(1,0,r,"color: inherit");var o=0,i=0;t[0].replace(/%[a-zA-Z%]/g,(function(t){"%%"!==t&&(o++,"%c"===t&&(i=o))})),t.splice(i,0,r)}},e.save=function(t){try{null==t?e.storage.removeItem("debug"):e.storage.debug=t}catch(t){}},e.load=r,e.useColors=function(){return!("undefined"==typeof window||!window.process||"renderer"!==window.process.type)||("undefined"!=typeof document&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||"undefined"!=typeof window&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&parseInt(RegExp.$1,10)>=31||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/))},e.storage="undefined"!=typeof chrome&&void 0!==chrome.storage?chrome.storage.local:function(){try{return window.localStorage}catch(t){}}(),e.colors=["lightseagreen","forestgreen","goldenrod","dodgerblue","darkorchid","crimson"],e.formatters.j=function(t){try{return JSON.stringify(t)}catch(t){return"[UnexpectedJSONParseError]: "+t.message}},e.enable(r())},514:(t,e,n)=>{var r;function o(t){function n(){if(n.enabled){var t=n,o=+new Date,i=o-(r||o);t.diff=i,t.prev=r,t.curr=o,r=o;for(var s=new Array(arguments.length),a=0;a<s.length;a++)s[a]=arguments[a];s[0]=e.coerce(s[0]),"string"!=typeof s[0]&&s.unshift("%O");var u=0;s[0]=s[0].replace(/%([a-zA-Z%])/g,(function(n,r){if("%%"===n)return n;u++;var o=e.formatters[r];if("function"==typeof o){var i=s[u];n=o.call(t,i),s.splice(u,1),u--}return n})),e.formatArgs.call(t,s);var c=n.log||e.log||console.log.bind(console);c.apply(t,s)}}return n.namespace=t,n.enabled=e.enabled(t),n.useColors=e.useColors(),n.color=function(t){var n,r=0;for(n in t)r=(r<<5)-r+t.charCodeAt(n),r|=0;return e.colors[Math.abs(r)%e.colors.length]}(t),"function"==typeof e.init&&e.init(n),n}(e=t.exports=o.debug=o.default=o).coerce=function(t){return t instanceof Error?t.stack||t.message:t},e.disable=function(){e.enable("")},e.enable=function(t){e.save(t),e.names=[],e.skips=[];for(var n=("string"==typeof t?t:"").split(/[\s,]+/),r=n.length,o=0;o<r;o++)n[o]&&("-"===(t=n[o].replace(/\*/g,".*?"))[0]?e.skips.push(new RegExp("^"+t.substr(1)+"$")):e.names.push(new RegExp("^"+t+"$")))},e.enabled=function(t){var n,r;for(n=0,r=e.skips.length;n<r;n++)if(e.skips[n].test(t))return!1;for(n=0,r=e.names.length;n<r;n++)if(e.names[n].test(t))return!0;return!1},e.humanize=n(553),e.names=[],e.skips=[],e.formatters={}},553:t=>{var e=1e3,n=60*e,r=60*n,o=24*r;function i(t,e,n){if(!(t<e))return t<1.5*e?Math.floor(t/e)+" "+n:Math.ceil(t/e)+" "+n+"s"}t.exports=function(t,s){s=s||{};var a,u=typeof t;if("string"===u&&t.length>0)return function(t){if(!((t=String(t)).length>100)){var i=/^((?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(t);if(i){var s=parseFloat(i[1]);switch((i[2]||"ms").toLowerCase()){case"years":case"year":case"yrs":case"yr":case"y":return 315576e5*s;case"days":case"day":case"d":return s*o;case"hours":case"hour":case"hrs":case"hr":case"h":return s*r;case"minutes":case"minute":case"mins":case"min":case"m":return s*n;case"seconds":case"second":case"secs":case"sec":case"s":return s*e;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return s;default:return}}}}(t);if("number"===u&&!1===isNaN(t))return s.long?i(a=t,o,"day")||i(a,r,"hour")||i(a,n,"minute")||i(a,e,"second")||a+" ms":function(t){return t>=o?Math.round(t/o)+"d":t>=r?Math.round(t/r)+"h":t>=n?Math.round(t/n)+"m":t>=e?Math.round(t/e)+"s":t+"ms"}(t);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(t))}},711:function(t,e,n){"use strict";var r,o=this&&this.__extends||(r=function(t,e){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},r(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function n(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)}),i=this&&this.__awaiter||function(t,e,n,r){return new(n||(n=Promise))((function(o,i){function s(t){try{u(r.next(t))}catch(t){i(t)}}function a(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(s,a)}u((r=r.apply(t,e||[])).next())}))},s=this&&this.__generator||function(t,e){var n,r,o,i,s={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(i){return function(a){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;s;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return s.label++,{value:i[1],done:!1};case 5:s.label++,r=i[1],i=[0];continue;case 7:i=s.ops.pop(),s.trys.pop();continue;default:if(!((o=(o=s.trys).length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){s=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]<o[3])){s.label=i[1];break}if(6===i[0]&&s.label<o[1]){s.label=o[1],o=i;break}if(o&&s.label<o[2]){s.label=o[2],s.ops.push(i);break}o[2]&&s.ops.pop(),s.trys.pop();continue}i=e.call(t,s)}catch(t){i=[6,t],r=0}finally{n=o=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,a])}}};Object.defineProperty(e,"__esModule",{value:!0}),e.LookerEmbedDashboard=void 0;var a=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e.prototype.run=function(){this.send("dashboard:run")},e.prototype.stop=function(){this.send("dashboard:stop")},e.prototype.edit=function(){this.send("dashboard:edit")},e.prototype.updateFilters=function(t){this.send("dashboard:filters:update",{filters:t})},e.prototype.setOptions=function(t){this.send("dashboard:options:set",t)},e.prototype.openScheduleDialog=function(){return i(this,void 0,void 0,(function(){return s(this,(function(t){return[2,this.sendAndReceive("dashboard:schedule_modal:open")]}))}))},e.prototype.loadDashboard=function(t,e){return void 0===e&&(e=!1),i(this,void 0,void 0,(function(){return s(this,(function(n){return[2,this.sendAndReceive("dashboard:load",{id:t,pushHistory:e})]}))}))},e}(n(211).LookerEmbedBase);e.LookerEmbedDashboard=a},354:function(t,e,n){"use strict";var r=this&&this.__awaiter||function(t,e,n,r){return new(n||(n=Promise))((function(o,i){function s(t){try{u(r.next(t))}catch(t){i(t)}}function a(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(s,a)}u((r=r.apply(t,e||[])).next())}))},o=this&&this.__generator||function(t,e){var n,r,o,i,s={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(i){return function(a){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;s;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return s.label++,{value:i[1],done:!1};case 5:s.label++,r=i[1],i=[0];continue;case 7:i=s.ops.pop(),s.trys.pop();continue;default:if(!((o=(o=s.trys).length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){s=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]<o[3])){s.label=i[1];break}if(6===i[0]&&s.label<o[1]){s.label=o[1],o=i;break}if(o&&s.label<o[2]){s.label=o[2],s.ops.push(i);break}o[2]&&s.ops.pop(),s.trys.pop();continue}i=e.call(t,s)}catch(t){i=[6,t],r=0}finally{n=o=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,a])}}};Object.defineProperty(e,"__esModule",{value:!0}),e.EmbedClient=void 0;var i=n(541),s=/^https?:\/\//,a=function(){function t(t){this._builder=t,this._hostBuilder=null,this._host=null,this._connection=null,this._client=null}return Object.defineProperty(t.prototype,"connection",{get:function(){return this._connection},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"isConnected",{get:function(){return!!this._connection},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"targetOrigin",{get:function(){if(this._builder.sandboxedHost)return"*";var t=this._builder.apiHost;return s.test(t)?t:"https://".concat(t)},enumerable:!1,configurable:!0}),t.prototype.createIframe=function(t){return r(this,void 0,void 0,(function(){var e,n,r,s,a,u,c,l,h,d,f=this;return o(this,(function(o){for(e in this._hostBuilder=i.Chatty.createHost(t),this._builder.handlers)for(n=function(t){r._hostBuilder.on(e,(function(){for(var e=[],n=0;n<arguments.length;n++)e[n]=arguments[n];return t.apply(f._client,e)}))},r=this,s=0,a=this._builder.handlers[e];s<a.length;s++)u=a[s],n(u);for(c=0,l=this._builder.sandboxAttrs;c<l.length;c++)h=l[c],this._hostBuilder.withSandboxAttribute(h);return this._host=this._hostBuilder.frameBorder(this._builder.frameBorder).withTargetOrigin(this.targetOrigin).appendTo(this._builder.el).build(),this._builder.classNames.length&&(d=this._host.iframe.classList).add.apply(d,this._builder.classNames),[2,this._host.connect().then((function(t){return f._client=new f._builder.clientConstructor(t),f._client}))]}))}))},t.prototype.createUrl=function(){return r(this,void 0,void 0,(function(){var t,e,n,i,s,a,u=this;return o(this,(function(c){if(t=this._builder.embedUrl,!(null==(e=this._builder.auth)?void 0:e.url))return[2,"".concat(this._builder.apiHost).concat(t)];if(n="".concat(e.url,"?src=").concat(encodeURIComponent(t)),e.params)for(i=0,s=e.params;i<s.length;i++)a=s[i],n+="&".concat(encodeURIComponent(a.name),"=").concat(encodeURIComponent(a.value));return[2,new Promise((function(t,i){return r(u,void 0,void 0,(function(){var r,s,a,u;return o(this,(function(o){if((r=new XMLHttpRequest).open("GET",n),e.withCredentials&&(r.withCredentials=e.withCredentials),r.setRequestHeader("Cache-Control","no-cache"),e.headers)for(s=0,a=e.headers;s<a.length;s++)u=a[s],r.setRequestHeader(u.name,u.value);return r.onload=function(){200===r.status?t(JSON.parse(r.responseText).url):i(r.statusText)},r.onerror=function(){return i(r.statusText)},r.send(),[2]}))}))}))]}))}))},t.prototype.connect=function(){return r(this,void 0,void 0,(function(){var t=this;return o(this,(function(e){return this._connection||(this._builder.url?this._connection=this.createIframe(this._builder.url):this._connection=this.createUrl().then((function(e){return r(t,void 0,void 0,(function(){return o(this,(function(t){return[2,this.createIframe(e)]}))}))}))),[2,this._connection]}))}))},t}();e.EmbedClient=a},211:function(t,e){"use strict";var n=this&&this.__awaiter||function(t,e,n,r){return new(n||(n=Promise))((function(o,i){function s(t){try{u(r.next(t))}catch(t){i(t)}}function a(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(s,a)}u((r=r.apply(t,e||[])).next())}))},r=this&&this.__generator||function(t,e){var n,r,o,i,s={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(i){return function(a){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;s;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return s.label++,{value:i[1],done:!1};case 5:s.label++,r=i[1],i=[0];continue;case 7:i=s.ops.pop(),s.trys.pop();continue;default:if(!((o=(o=s.trys).length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){s=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]<o[3])){s.label=i[1];break}if(6===i[0]&&s.label<o[1]){s.label=o[1],o=i;break}if(o&&s.label<o[2]){s.label=o[2],s.ops.push(i);break}o[2]&&s.ops.pop(),s.trys.pop();continue}i=e.call(t,s)}catch(t){i=[6,t],r=0}finally{n=o=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,a])}}};Object.defineProperty(e,"__esModule",{value:!0}),e.LookerEmbedBase=void 0;var o=function(){function t(t){this._host=t}return t.prototype.send=function(t,e){this._host.send(t,e)},t.prototype.sendAndReceive=function(t,e){return n(this,void 0,void 0,(function(){return r(this,(function(n){return[2,this._host.sendAndReceive(t,e)]}))}))},t}();e.LookerEmbedBase=o},886:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.EmbedBuilder=void 0;var r=n(354);function o(t){return t.replace(/,/g,"^,")}var i=function(){function t(t,e,n,r){if(this._hostSettings=t,this._type=e,this._endpoint=n,this._clientConstructor=r,this._handlers={},this._appendTo=null,this._sandboxAttrs=[],this._classNames=[],this._frameBorder="0",this._suffix="",this.sandboxedHost)this._params={embed_domain:this._hostSettings.apiHost,sandboxed_host:"true",sdk:"2"};else{var o=window.location.origin;this._params={embed_domain:o,sdk:"2"}}}return t.prototype.withFrameBorder=function(t){return this._frameBorder=t,this},t.prototype.withId=function(t){return this._id=t,this},t.prototype.withParams=function(t){for(var e in t)this._params[e]=t[e];return this},t.prototype.withFilters=function(t,e){if(void 0===e&&(e=!1),"dashboard"===this.type)for(var n in t)this._params[n]=e?o(t[n]):t[n];else for(var n in t)this._params["f[".concat(n,"]")]=e?o(t[n]):t[n];return this},t.prototype.withSandboxAttr=function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return this._sandboxAttrs=this._sandboxAttrs.concat(t),this},t.prototype.withClassName=function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return this._classNames=this._classNames.concat(t),this},t.prototype.withNext=function(t){return void 0===t&&(t="-next"),this._suffix=t,this._endpoint+=this._suffix,this},t.prototype.withTheme=function(t){return this._params.theme=t,this},t.prototype.withApiHost=function(t){if(this._hostSettings.apiHost){if(this._hostSettings.apiHost!==t)throw new Error("not allowed to change api host")}else this._hostSettings.apiHost=t,this.sandboxedHost&&(this._params.embed_domain=t,this._params.sandboxed_host="true");return this},t.prototype.withAuthUrl=function(t){var e;if(null===(e=this._hostSettings.auth)||void 0===e?void 0:e.url){if(this._hostSettings.auth.url!==t)throw new Error("not allowed to change auth url")}else this._hostSettings.auth={url:t};return this},t.prototype.withAuth=function(t){if(this._hostSettings.auth){if(this._hostSettings.auth!==t)throw new Error("not allowed to change auth")}else this._hostSettings.auth=t;return this},t.prototype.withUrl=function(t){return this._url=t,this},Object.defineProperty(t.prototype,"sandboxedHost",{get:function(){if(void 0===this._sandboxedHost){var t=window.location.origin;this._sandboxedHost="null"===t||!t}return this._sandboxedHost},set:function(t){this._sandboxedHost=t},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"el",{get:function(){return this._appendTo||document.body},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"frameBorder",{get:function(){return this._frameBorder},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"endpoint",{get:function(){return this._endpoint},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"type",{get:function(){return this._type},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"apiHost",{get:function(){return this._hostSettings.apiHost},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"url",{get:function(){return this._url},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"authUrl",{get:function(){var t;return null===(t=this._hostSettings.auth)||void 0===t?void 0:t.url},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"auth",{get:function(){return this._hostSettings.auth},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"embedUrl",{get:function(){var t=function(t){var e=[];for(var n in t)e.push("".concat(encodeURIComponent(n),"=").concat(encodeURIComponent(t[n])));return e.join("&")}(this._params);return"".concat(this.endpoint,"/").concat(this.id,"?").concat(t)},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"handlers",{get:function(){return this._handlers},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"sandboxAttrs",{get:function(){return this._sandboxAttrs},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"classNames",{get:function(){return this._classNames},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"suffix",{get:function(){return this._suffix},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"id",{get:function(){return this._id},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"clientConstructor",{get:function(){return this._clientConstructor},enumerable:!1,configurable:!0}),t.prototype.appendTo=function(t){return this._appendTo="string"==typeof t?document.querySelector(t):t,this},t.prototype.on=function(t,e){return this._handlers[t]=this._handlers[t]?this._handlers[t]:[],this._handlers[t].push(e),this},t.prototype.build=function(){return new r.EmbedClient(this)},t}();e.EmbedBuilder=i},662:function(t,e,n){"use strict";var r,o=this&&this.__extends||(r=function(t,e){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},r(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function n(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)});Object.defineProperty(e,"__esModule",{value:!0}),e.LookerEmbedExplore=void 0;var i=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e.prototype.run=function(){this.send("look:run")},e.prototype.updateFilters=function(t){this.send("look:filters:update",{filters:t})},e}(n(211).LookerEmbedBase);e.LookerEmbedExplore=i},438:function(t,e,n){"use strict";var r,o=this&&this.__extends||(r=function(t,e){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},r(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function n(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)});Object.defineProperty(e,"__esModule",{value:!0}),e.LookerEmbedExtension=void 0;var i=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e}(n(211).LookerEmbedBase);e.LookerEmbedExtension=i},433:function(t,e,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(t,e,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(e,n);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[n]}}),Object.defineProperty(t,r,o)}:function(t,e,n,r){void 0===r&&(r=n),t[r]=e[n]}),o=this&&this.__exportStar||function(t,e){for(var n in t)"default"===n||Object.prototype.hasOwnProperty.call(e,n)||r(e,t,n)};Object.defineProperty(e,"__esModule",{value:!0}),e.LookerEmbedSDK=void 0;var i=n(886),s=n(711),a=n(662),u=n(438),c=n(684);o(n(924),e);var l=function(){function t(){}return t.init=function(t,e){this.apiHost=t,this.auth="string"==typeof e?{url:e}:e},t.createDashboardWithUrl=function(t){return new i.EmbedBuilder(this,"dashboard","/embed/dashboards",s.LookerEmbedDashboard).withUrl(t)},t.createDashboardWithId=function(t){return new i.EmbedBuilder(this,"dashboard","/embed/dashboards",s.LookerEmbedDashboard).withId(t)},t.createExploreWithUrl=function(t){return new i.EmbedBuilder(this,"explore","/embed/explore",a.LookerEmbedExplore).withUrl(t)},t.createExploreWithId=function(t){return t=t.replace("::","/"),new i.EmbedBuilder(this,"explore","/embed/explore",a.LookerEmbedExplore).withId(t)},t.createLookWithUrl=function(t){return new i.EmbedBuilder(this,"look","/embed/looks",c.LookerEmbedLook).withUrl(t)},t.createLookWithId=function(t){return new i.EmbedBuilder(this,"look","/embed/looks",c.LookerEmbedLook).withId(t)},t.createExtensionWithUrl=function(t){return new i.EmbedBuilder(this,"extension","/embed/extensions",u.LookerEmbedExtension).withUrl(t)},t.createExtensionWithId=function(t){return new i.EmbedBuilder(this,"extension","/embed/extensions",u.LookerEmbedExtension).withId(t)},t}();e.LookerEmbedSDK=l},684:function(t,e,n){"use strict";var r,o=this&&this.__extends||(r=function(t,e){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},r(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function n(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)});Object.defineProperty(e,"__esModule",{value:!0}),e.LookerEmbedLook=void 0;var i=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e.prototype.run=function(){this.send("look:run")},e.prototype.updateFilters=function(t){this.send("look:filters:update",{filters:t})},e}(n(211).LookerEmbedBase);e.LookerEmbedLook=i},924:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},310:(t,e,n)=>{"use strict";t.exports=n(702).polyfill()},702:function(t,e,n){t.exports=function(){"use strict";function t(t){return"function"==typeof t}var e=Array.isArray?Array.isArray:function(t){return"[object Array]"===Object.prototype.toString.call(t)},r=0,o=void 0,i=void 0,s=function(t,e){f[r]=t,f[r+1]=e,2===(r+=2)&&(i?i(p):v())};var a="undefined"!=typeof window?window:void 0,u=a||{},c=u.MutationObserver||u.WebKitMutationObserver,l="undefined"==typeof self&&"undefined"!=typeof process&&"[object process]"==={}.toString.call(process),h="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel;function d(){var t=setTimeout;return function(){return t(p,1)}}var f=new Array(1e3);function p(){for(var t=0;t<r;t+=2)(0,f[t])(f[t+1]),f[t]=void 0,f[t+1]=void 0;r=0}var y,b,_,g,v=void 0;function m(t,e){var n=this,r=new this.constructor(O);void 0===r[C]&&B(r);var o=n._state;if(o){var i=arguments[o-1];s((function(){return T(o,r,i,n._result)}))}else S(n,r,t,e);return r}function w(t){if(t&&"object"==typeof t&&t.constructor===this)return t;var e=new this(O);return E(e,t),e}v=l?function(){return process.nextTick(p)}:c?(b=0,_=new c(p),g=document.createTextNode(""),_.observe(g,{characterData:!0}),function(){g.data=b=++b%2}):h?((y=new MessageChannel).port1.onmessage=p,function(){return y.port2.postMessage(0)}):void 0===a?function(){try{var t=Function("return this")().require("vertx");return void 0!==(o=t.runOnLoop||t.runOnContext)?function(){o(p)}:d()}catch(t){return d()}}():d();var C=Math.random().toString(36).substring(2);function O(){}var x=void 0;function j(e,n,r){n.constructor===e.constructor&&r===m&&n.constructor.resolve===w?function(t,e){1===e._state?M(t,e._result):2===e._state?P(t,e._result):S(e,void 0,(function(e){return E(t,e)}),(function(e){return P(t,e)}))}(e,n):void 0===r?M(e,n):t(r)?function(t,e,n){s((function(t){var r=!1,o=function(t,e,n,r){try{t.call(e,n,r)}catch(t){return t}}(n,e,(function(n){r||(r=!0,e!==n?E(t,n):M(t,n))}),(function(e){r||(r=!0,P(t,e))}),t._label);!r&&o&&(r=!0,P(t,o))}),t)}(e,n,r):M(e,n)}function E(t,e){if(t===e)P(t,new TypeError("You cannot resolve a promise with itself"));else if(o=typeof(r=e),null===r||"object"!==o&&"function"!==o)M(t,e);else{var n=void 0;try{n=e.then}catch(e){return void P(t,e)}j(t,e,n)}var r,o}function k(t){t._onerror&&t._onerror(t._result),A(t)}function M(t,e){t._state===x&&(t._result=e,t._state=1,0!==t._subscribers.length&&s(A,t))}function P(t,e){t._state===x&&(t._state=2,t._result=e,s(k,t))}function S(t,e,n,r){var o=t._subscribers,i=o.length;t._onerror=null,o[i]=e,o[i+1]=n,o[i+2]=r,0===i&&t._state&&s(A,t)}function A(t){var e=t._subscribers,n=t._state;if(0!==e.length){for(var r=void 0,o=void 0,i=t._result,s=0;s<e.length;s+=3)r=e[s],o=e[s+n],r?T(n,r,o,i):o(i);t._subscribers.length=0}}function T(e,n,r,o){var i=t(r),s=void 0,a=void 0,u=!0;if(i){try{s=r(o)}catch(t){u=!1,a=t}if(n===s)return void P(n,new TypeError("A promises callback cannot return that same promise."))}else s=o;n._state!==x||(i&&u?E(n,s):!1===u?P(n,a):1===e?M(n,s):2===e&&P(n,s))}var H=0;function B(t){t[C]=H++,t._state=void 0,t._result=void 0,t._subscribers=[]}var R=function(){function t(t,n){this._instanceConstructor=t,this.promise=new t(O),this.promise[C]||B(this.promise),e(n)?(this.length=n.length,this._remaining=n.length,this._result=new Array(this.length),0===this.length?M(this.promise,this._result):(this.length=this.length||0,this._enumerate(n),0===this._remaining&&M(this.promise,this._result))):P(this.promise,new Error("Array Methods must be provided an Array"))}return t.prototype._enumerate=function(t){for(var e=0;this._state===x&&e<t.length;e++)this._eachEntry(t[e],e)},t.prototype._eachEntry=function(t,e){var n=this._instanceConstructor,r=n.resolve;if(r===w){var o=void 0,i=void 0,s=!1;try{o=t.then}catch(t){s=!0,i=t}if(o===m&&t._state!==x)this._settledAt(t._state,e,t._result);else if("function"!=typeof o)this._remaining--,this._result[e]=t;else if(n===L){var a=new n(O);s?P(a,i):j(a,t,o),this._willSettleAt(a,e)}else this._willSettleAt(new n((function(e){return e(t)})),e)}else this._willSettleAt(r(t),e)},t.prototype._settledAt=function(t,e,n){var r=this.promise;r._state===x&&(this._remaining--,2===t?P(r,n):this._result[e]=n),0===this._remaining&&M(r,this._result)},t.prototype._willSettleAt=function(t,e){var n=this;S(t,void 0,(function(t){return n._settledAt(1,e,t)}),(function(t){return n._settledAt(2,e,t)}))},t}();var L=function(){function e(t){this[C]=H++,this._result=this._state=void 0,this._subscribers=[],O!==t&&("function"!=typeof t&&function(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}(),this instanceof e?function(t,e){try{e((function(e){E(t,e)}),(function(e){P(t,e)}))}catch(e){P(t,e)}}(this,t):function(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}())}return e.prototype.catch=function(t){return this.then(null,t)},e.prototype.finally=function(e){var n=this,r=n.constructor;return t(e)?n.then((function(t){return r.resolve(e()).then((function(){return t}))}),(function(t){return r.resolve(e()).then((function(){throw t}))})):n.then(e,e)},e}();return L.prototype.then=m,L.all=function(t){return new R(this,t).promise},L.race=function(t){var n=this;return e(t)?new n((function(e,r){for(var o=t.length,i=0;i<o;i++)n.resolve(t[i]).then(e,r)})):new n((function(t,e){return e(new TypeError("You must pass an array to race."))}))},L.resolve=w,L.reject=function(t){var e=new this(O);return P(e,t),e},L._setScheduler=function(t){i=t},L._setAsap=function(t){s=t},L._asap=s,L.polyfill=function(){var t=void 0;if(void 0!==n.g)t=n.g;else if("undefined"!=typeof self)t=self;else try{t=Function("return this")()}catch(t){throw new Error("polyfill failed because global object is unavailable in this environment")}var e=t.Promise;if(e){var r=null;try{r=Object.prototype.toString.call(e.resolve())}catch(t){}if("[object Promise]"===r&&!e.cast)return}t.Promise=L},L.Promise=L,L}()}},e={};function n(r){var o=e[r];if(void 0!==o)return o.exports;var i=e[r]={exports:{}};return t[r].call(i.exports,i,i.exports,n),i.exports}return n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),n(433)})()));

@@ -1,2 +0,2 @@

import { LookerDashboardOptions, LookerEmbedFilterParams } from './types';
import type { LookerDashboardOptions, LookerEmbedFilterParams } from './types';
import { LookerEmbedBase } from './embed_base';

@@ -19,2 +19,8 @@ /**

/**
* Convenience method for sending an edit message to the embedded dashboard.
*
* Requires Looker 22.20 and Dashboards Next (see [[EmbedBuilder.withNext]]).
*/
edit(): void;
/**
* Convenience method for updating the filters of the embedded dashboard.

@@ -21,0 +27,0 @@ *

"use strict";
/*
* The MIT License (MIT)
*
* Copyright (c) 2019 Looker Data Sciences, Inc.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
MIT License
Copyright (c) 2019 Looker Data Sciences, Inc.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/

@@ -29,6 +31,8 @@ var __extends = (this && this.__extends) || (function () {

({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
if (typeof b !== "function" && b !== null)
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
extendStatics(d, b);

@@ -102,2 +106,10 @@ function __() { this.constructor = d; }

/**
* Convenience method for sending an edit message to the embedded dashboard.
*
* Requires Looker 22.20 and Dashboards Next (see [[EmbedBuilder.withNext]]).
*/
LookerEmbedDashboard.prototype.edit = function () {
this.send('dashboard:edit');
};
/**
* Convenience method for updating the filters of the embedded dashboard.

@@ -104,0 +116,0 @@ *

@@ -1,2 +0,2 @@

import { ChattyHostConnection } from '@looker/chatty';
import type { ChattyHostConnection } from '@looker/chatty';
export declare class LookerEmbedBase {

@@ -3,0 +3,0 @@ private _host;

"use strict";
/*
* The MIT License (MIT)
*
* Copyright (c) 2019 Looker Data Sciences, Inc.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
MIT License
Copyright (c) 2019 Looker Data Sciences, Inc.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/

@@ -25,0 +27,0 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {

@@ -1,4 +0,4 @@

import { ChattyHostConnection, CallbackStore } from '@looker/chatty';
import type { ChattyHostConnection, CallbackStore } from '@looker/chatty';
import { EmbedClient } from './embed';
import { LookerAuthConfig, LookerEmbedEventMap, LookerEmbedFilterParams } from './types';
import type { LookerAuthConfig, LookerEmbedEventMap, LookerEmbedFilterParams } from './types';
declare type EmbedClientConstructor<T> = {

@@ -11,3 +11,3 @@ new (host: ChattyHostConnection): T;

}
interface UrlParams {
export interface UrlParams {
[key: string]: string;

@@ -14,0 +14,0 @@ }

"use strict";
/*
* The MIT License (MIT)
*
* Copyright (c) 2019 Looker Data Sciences, Inc.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
MIT License
Copyright (c) 2019 Looker Data Sciences, Inc.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/

@@ -31,3 +33,3 @@ Object.defineProperty(exports, "__esModule", { value: true });

for (var key in params) {
result.push(encodeURIComponent(key) + "=" + encodeURIComponent(params[key]));
result.push("".concat(encodeURIComponent(key), "=").concat(encodeURIComponent(params[key])));
}

@@ -61,4 +63,4 @@ return result.join('&');

embed_domain: this._hostSettings.apiHost,
sandboxed_host: 'true',
sdk: '2',
sandboxed_host: 'true'
};

@@ -70,3 +72,3 @@ }

embed_domain: embedDomain,
sdk: '2'
sdk: '2',
};

@@ -112,3 +114,5 @@ }

for (var key in filters) {
this._params[key] = escape ? escapeFilterParam(filters[key]) : filters[key];
this._params[key] = escape
? escapeFilterParam(filters[key])
: filters[key];
}

@@ -118,3 +122,5 @@ }

for (var key in filters) {
this._params["f[" + key + "]"] = escape ? escapeFilterParam(filters[key]) : filters[key];
this._params["f[".concat(key, "]")] = escape
? escapeFilterParam(filters[key])
: filters[key];
}

@@ -333,3 +339,3 @@ }

var params = stringify(this._params);
return this.endpoint + "/" + this.id + "?" + params;
return "".concat(this.endpoint, "/").concat(this.id, "?").concat(params);
},

@@ -336,0 +342,0 @@ enumerable: false,

@@ -1,3 +0,3 @@

import { EmbedBuilder } from './embed_builder';
import { ChattyHost, ChattyHostBuilder } from '@looker/chatty';
import type { ChattyHost, ChattyHostBuilder } from '@looker/chatty';
import type { EmbedBuilder } from './embed_builder';
/**

@@ -4,0 +4,0 @@ * Wrapper for Looker embedded content. Provides a mechanism for creating the embedded content element,

"use strict";
/*
* The MIT License (MIT)
*
* Copyright (c) 2019 Looker Data Sciences, Inc.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
MIT License
Copyright (c) 2019 Looker Data Sciences, Inc.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/

@@ -107,3 +109,3 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {

var apiHost = this._builder.apiHost;
return IS_URL.test(apiHost) ? apiHost : "https://" + apiHost;
return IS_URL.test(apiHost) ? apiHost : "https://".concat(apiHost);
},

@@ -150,4 +152,4 @@ enumerable: false,

}
return [2 /*return*/, this._host.connect()
.then(function (host) {
return [2 /*return*/, this._host.connect().then(function (host) {
// eslint-disable-next-line new-cap
_this._client = new _this._builder.clientConstructor(host);

@@ -167,10 +169,11 @@ return _this._client;

if (!(auth === null || auth === void 0 ? void 0 : auth.url))
return [2 /*return*/, "" + this._builder.apiHost + src];
url = auth.url + "?src=" + encodeURIComponent(src);
return [2 /*return*/, "".concat(this._builder.apiHost).concat(src)];
url = "".concat(auth.url, "?src=").concat(encodeURIComponent(src));
if (auth.params) {
for (_i = 0, _a = auth.params; _i < _a.length; _i++) {
param = _a[_i];
url += "&" + encodeURIComponent(param.name) + "=" + encodeURIComponent(param.value);
url += "&".concat(encodeURIComponent(param.name), "=").concat(encodeURIComponent(param.value));
}
}
// eslint-disable-next-line no-async-promise-executor
return [2 /*return*/, new Promise(function (resolve, reject) { return __awaiter(_this, void 0, void 0, function () {

@@ -177,0 +180,0 @@ var xhr, _i, _a, header;

@@ -1,2 +0,2 @@

import { LookerEmbedFilterParams } from './types';
import type { LookerEmbedFilterParams } from './types';
import { LookerEmbedBase } from './embed_base';

@@ -3,0 +3,0 @@ /**

"use strict";
/*
* The MIT License (MIT)
*
* Copyright (c) 2019 Looker Data Sciences, Inc.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
MIT License
Copyright (c) 2019 Looker Data Sciences, Inc.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/

@@ -29,6 +31,8 @@ var __extends = (this && this.__extends) || (function () {

({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
if (typeof b !== "function" && b !== null)
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
extendStatics(d, b);

@@ -35,0 +39,0 @@ function __() { this.constructor = d; }

"use strict";
/*
* The MIT License (MIT)
*
* Copyright (c) 2019 Looker Data Sciences, Inc.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
MIT License
Copyright (c) 2019 Looker Data Sciences, Inc.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/

@@ -29,6 +31,8 @@ var __extends = (this && this.__extends) || (function () {

({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
if (typeof b !== "function" && b !== null)
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
extendStatics(d, b);

@@ -35,0 +39,0 @@ function __() { this.constructor = d; }

@@ -6,3 +6,3 @@ import { EmbedBuilder } from './embed_builder';

import { LookerEmbedLook } from './look_client';
import { LookerAuthConfig } from './types';
import type { LookerAuthConfig } from './types';
export type { LookerEmbedDashboard } from './dashboard_client';

@@ -12,2 +12,5 @@ export type { LookerEmbedExplore } from './explore_client';

export type { LookerEmbedLook } from './look_client';
export type { LookerEmbedBase } from './embed_base';
export type { EmbedBuilder, UrlParams } from './embed_builder';
export type { EmbedClient } from './embed';
export * from './types';

@@ -14,0 +17,0 @@ export declare class LookerEmbedSDK {

"use strict";
/*
* The MIT License (MIT)
*
* Copyright (c) 2019 Looker Data Sciences, Inc.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
MIT License
Copyright (c) 2019 Looker Data Sciences, Inc.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {

@@ -33,3 +39,3 @@ if (k2 === undefined) k2 = k;

var __exportStar = (this && this.__exportStar) || function(m, exports) {
for (var p in m) if (p !== "default" && !exports.hasOwnProperty(p)) __createBinding(exports, m, p);
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
};

@@ -36,0 +42,0 @@ Object.defineProperty(exports, "__esModule", { value: true });

@@ -1,2 +0,2 @@

import { LookerEmbedFilterParams } from './types';
import type { LookerEmbedFilterParams } from './types';
import { LookerEmbedBase } from './embed_base';

@@ -3,0 +3,0 @@ /**

"use strict";
/*
* The MIT License (MIT)
*
* Copyright (c) 2019 Looker Data Sciences, Inc.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
MIT License
Copyright (c) 2019 Looker Data Sciences, Inc.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/

@@ -29,6 +31,8 @@ var __extends = (this && this.__extends) || (function () {

({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
if (typeof b !== "function" && b !== null)
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
extendStatics(d, b);

@@ -35,0 +39,0 @@ function __() { this.constructor = d; }

@@ -1,4 +0,4 @@

import { LookerEmbedBase } from './embed_base';
import { LookerEmbedDashboard } from './dashboard_client';
import { LookerEmbedLook } from './look_client';
import type { LookerEmbedBase } from './embed_base';
import type { LookerEmbedDashboard } from './dashboard_client';
import type { LookerEmbedLook } from './look_client';
/**

@@ -30,3 +30,3 @@ * Auth server configuration

*/
interface DashboardLayout {
export interface DashboardLayout {
id: string;

@@ -46,3 +46,3 @@ dashboard_id: string;

*/
interface DashboardLayoutComponent {
export interface DashboardLayoutComponent {
id: string;

@@ -104,2 +104,3 @@ dashboard_layout_id: string;

title: string;
canEdit: boolean;
dashboard_filters: LookerEmbedFilterParams;

@@ -295,3 +296,17 @@ absoluteUrl: string;

/**
* Dashboard saved event
* Dashboard editing started event.
* Not available to legacy dashboards.
* Looker 22.20
*/
'dashboard:edit:start': (this: LookerEmbedDashboard, event: DashboardEvent) => void;
/**
* Dashboard editing cancelled event.
* Not available to legacy dashboards.
* Looker 22.20
*/
'dashboard:edit:cancel': (this: LookerEmbedDashboard, event: DashboardEvent) => void;
/**
* Dashboard saved event. Fired when a dashboard
* being edited is saved. Use in conjunction with
* `dashboard:edit:start` and `dashboard:edit:save`.
* Looker 21.6

@@ -334,2 +349,1 @@ */

}
export {};
"use strict";
/*
* The MIT License (MIT)
*
* Copyright (c) 2019 Looker Data Sciences, Inc.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
MIT License
Copyright (c) 2019 Looker Data Sciences, Inc.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/
Object.defineProperty(exports, "__esModule", { value: true });
{
"name": "@looker/embed-sdk",
"version": "1.6.1",
"version": "1.6.2",
"description": "A toolkit for embedding Looker",

@@ -11,4 +11,4 @@ "main": "lib/index.js",

"engines": {
"node": ">=8.6.0",
"npm": ">=5.5.1"
"node": ">=14.0.0",
"npm": ">=8.0.0"
},

@@ -24,9 +24,9 @@ "files": [

"clean": "rm -rf lib dist",
"docs": "typedoc --mode file --out docs",
"lint": "tslint --project tsconfig-lint.json --format stylish",
"lint-fix": "tslint --fix --project tsconfig-lint.json --format stylish",
"docs": "typedoc --gitRevision master --githubPages false --out docs src/index.ts",
"lint": "eslint --format stylish '**/*.ts'",
"lint-fix": "eslint --format stylish --fix '**/*.ts'",
"start": "npm run build_utils && webpack serve --config webpack-devserver.config.js --hot --inline --color --progress",
"prepare": "npm run build",
"prepublishOnly": "npm run test-once",
"python": "webpack --config webpack-devserver.config.js && python demo/demo.py",
"python": "webpack --config webpack-devserver.config.js && pip install -r demo/requirements.txt && python demo/demo.py",
"test": "npm run lint && karma start karma.conf.js",

@@ -46,25 +46,30 @@ "test-once": "npm run lint && karma start karma.conf.js --single-run "

"devDependencies": {
"@babel/core": "^7.3.3",
"@babel/core": "^7.16.7",
"@looker/eslint-config-oss": "^1.7.21",
"@looker/eslint-plugin": "^1.0.0",
"@typescript-eslint/eslint-plugin": "^5.9.1",
"@typescript-eslint/typescript-estree": "^5.9.1",
"babel-loader": "^8.2.3",
"eslint": "^8.13.0",
"eslint-plugin-promise": "^6.0.0",
"eslint-plugin-testing-library": "^5.0.3",
"@types/create-hmac": "^1.1.0",
"@types/jasmine": "^2.8.2",
"@types/node": "^11.12.1",
"babel-loader": "^8.0.5",
"create-hmac": "^1.1.7",
"dotenv": "^6.2.0",
"jasmine-core": "^2.8.0",
"karma": "^6.3.4",
"karma-chrome-launcher": "^2.2.0",
"karma-jasmine": "^1.1.1",
"karma-typescript": "^5.0.3",
"karma-typescript-es6-transform": "^4.0.0",
"jasmine-core": "^4.0.0",
"karma": "^6.3.11",
"karma-chrome-launcher": "^3.1.0",
"karma-jasmine": "^4.0.1",
"karma-typescript": "^5.5.3",
"karma-typescript-es6-transform": "^5.5.3",
"pre-commit": "^1.2.2",
"ts-loader": "^5.3.3",
"tslint": "^6.1.3",
"tslint-config-standard": "^9.0.0",
"tslint-defocus": "^2.0.6",
"tslint-eslint-rules": "^5.4.0",
"typedoc": "^0.17.8",
"typescript": "^3.9.7",
"webpack": "^5.45.1",
"webpack-cli": "^4.7.2",
"prettier": "^2.4.1",
"ts-loader": "^9.2.6",
"typedoc": "^0.22.10",
"typescript": "^4.5.4",
"typescript-tslint-plugin": "^1.0.1",
"webpack": "^5.66.0",
"webpack-cli": "^4.9.1",
"webpack-dev-server": "^3.11.2",

@@ -74,7 +79,32 @@ "xhr-mock": "^2.5.1"

"dependencies": {
"@looker/chatty": "^2.3.0"
"@looker/chatty": "^2.3.2"
},
"pre-commit": [
"test-once"
]
],
"eslintConfig": {
"extends": [
"@looker/eslint-config-oss"
],
"rules": {
"@typescript-eslint/no-explicit-any": "off",
"@typescript-eslint/no-non-null-assertion": "off",
"no-console": [
"error",
{
"allow": [
"info",
"warn",
"error"
]
}
],
"no-useless-constructor": "off"
}
},
"overrides": {
"remark-parse": "9.0.0",
"glob-parent": "5.1.2",
"node-forge": "1.3.1"
}
}

@@ -42,4 +42,3 @@ # Looker JavaScript Embed SDK

First initialize the SDK with address of your Looker server and, optionally, the endpoint on your server that will perform authentication. (Note: Port must be included if it is required to reach the Looker server from browser clients, e.g. looker.example.com:443)
These are used by all the embedded content.
First initialize the SDK with address of your Looker server and the endpoint on your server that will perform authentication. (Note: Port must be included if it is required to reach the Looker server from browser clients, e.g. looker.example.com:1919, but the protocol (http/https) should *not* be included.)

@@ -50,5 +49,5 @@ ```javascript

Then the embedded content is built using a series of steps to define its parameters. Some if these parameters are optional, and some are mandatory.
In this example, `/auth` is a backend service that you must implement as described in the [Auth](#the-auth-endpoint) section.
The process starts with creating the builder with an `id`, or a `url` created by the processed described [here](https://docs.looker.com/r/sdk/sso-embed):
After the SDK is initialized, begin by creating the builder with an `id`. For example, to create a dashboard embed builder:

@@ -59,8 +58,2 @@ ```javascript

or
```javascript
LookerEmbedSDK.createDashboardWithUrl(url)
```
You can then add additional attributes to the builder to complete your setup:

@@ -89,2 +82,5 @@

The `createDashboardWithId` function will call your backend `/auth` endpoint when `build` is invoked and requires a signed embed URL in response. Subsequent embeds can be generated using `createDashboardWithUrl` which accepts a partial URL matching [this form](https://docs.looker.com/reference/embedding/sso-embed#building_the_embed_url), for example: `/embed/dashboards/`. The URL create functions will not call your backend `/auth` service. If you are embedding multiple items on a single page, use ID create functions first and then URL create functions subsequently to avoid redundant calls to your auth backend.
If you want to send and receive messages to the embedded element you need to call `connect()` which returns a Promise that resolves to the communication interface of the given element:

@@ -110,23 +106,47 @@

Because the embed secret needs to be carefully guarded, embed SSO URLs cannot be created in the browser. To make the process easier and secure, you can instead do the following:
In order to use the embed SDK on the frontend you must supply a backend service that handles authentication. This service is called by the SDK to generate a signed iframe URL that is unique to the requesting user. The backend process can either generate the signed embed URL itself using an embed secret or the backend process can generate the URL by calling the Looker API. Manual URL generation and signing avoids calling the Looker API resulting in decreased latency. Calling the Looker API requires less code and can be easier to maintain.
1. Implement a URL signing function in your web server. The server should return a signed URL using one of the processes documented in the [Looker Embed SSO Examples](https://github.com/looker/looker_embed_sso_examples) Github repository.
### Backend Process
The *backend* process entails hosting a service at an endpoint such as `/auth` which does the following:
2. Pass the embed SSO URL to that signing endpoint in the embed SDK. The location of the endpoint is specified by the `authUrl` parameter in `LookerEmbedSDK.init()`.
1. The backend service initializes the [Looker API SDK](https://docs.looker.com/reference/api-and-integration/api-sdk) based on a client API key and secret typically stored in `Looker.ini` file.
If specified, whenever an embed element is created using just an ID, its embed URL is generated using the type of the element, the provided Looker host, and any provided parameters. For example:
2. The Embed SDK calls the backend service and provides a query string containing the desired embedding.
3. The backend service takes the information from the Embed SDK *along with any information about the currently authenticated user* and genereates the signed URL. For example, this Python code represents a partial example of a backend that generates the signed URL by calling the Looker API:
```python
# receives a request path that includes /looker_auth
# as well as the target URL in a query string
req_parts = urlparse(request_path)
req_query = parse_qs(req_parts.query)
embed_url = req_query['src'][0]
target_url = 'https://' + LOOKER_HOST + '/login/embed/' + urllib.parse.quote_plus(embed_url)
target_sso_url = looker_sdk.models.EmbedSsoParams(target_url, ...) # ... corresponds to very important user attributes
sso_url = looker_api_sdk.create_sso_embed_url(body = target_sso_url) # this is the signed embed URL that is returned
```
### Frontend Process
The *frontend* process using the Embed SDK entails:
1. The embed SDK is initialized with the Looker host and the backend service:
```javascript
LookerEmbedSDK.init('looker.example.com', '/looker_auth')
LookerEmbedSDK.init('looker.example.com', '/auth')
```
2. Anytime you invoke a builder with the ID create function the Embed SDK makes a request to the backend, `/looker_auth`, containing a query string with the desired content embed URL along with any provided parameters:
```javascript
LookerEmbedSDK.createcreateDashboardWithId(11)
.build()
// results in a request that includes a query string with:
// /embed/dashboards/11?sdk=2&embed_deomain=https://yourhost.example.com&...
```
This will call the /looker_auth endpoint and return a signed SSO URL that can be used to create the embedded content:
3. The Embed SDK inserts an iframe using the signed URL returned from the backend as the src.
```html
src=https://looker.example.com/embed/dashboards/11?sdk=2&embed_host=https://yourhost.example.com
```
### Advanced Auth Configuration
### Advanced Auth Configuration
The Auth endpoint can be configured further, allowing custom Request Headers, as well as CORS support by passing an options object to the `init` method

@@ -146,3 +166,5 @@

A signing helper method `createSignedUrl()` is provided in
If you prefer, your backend service can [implement the signature function](https://github.com/looker/looker_embed_sso_examples) instead of calling the Looker API by using a [Looker Embed secret](https://docs.looker.com/r/sdk/sso-embed). Manually generating the signed URL avoids a call to the Looker API but is more error prone.
One example of a helper method that generates a signed URL, `createSignedUrl()`, is provided in
[server_utils/auth_utils.ts](blob/master/demo/demo_config.ts). Its usage is as follows:

@@ -156,3 +178,3 @@

const src = req.query.src;
const host = 'https://looker.example.com'
const host = 'looker.example.com'
const secret = YOUR_EMBED_SECRET

@@ -185,10 +207,4 @@ const user = authenticatedUser

There is a simple demo provided, but because of Looker's attention to security, it requires a bit of setup. It also requires Looker's "Embed Secret". Because the embed secret can grant access to all of your data:
A simple demo is provided in the `/demo` directory that uses a basic JS frontend and a Python backend. The example backend `demo.py` uses the Looker API to create a signed URL. The example backend `demo_self_signed.py` uses the embed secret and a helper function to sign the URL. The instructions below are for the example using the Looker API.
* Do not share your secret with anyone you do not want to have complete access to your instance.
* Do not reset your secret if you already are using it in another context.
* Your code should never store the secret in the web browser.
### Step 1 - Enable Embedding in your Looker instance

@@ -201,13 +217,15 @@

* Turn on "Embed Authentication"
* In order to view your "Embed Secret" you must reset it. Copy the secret to someplace secure.
* In order to use embedding you must generate an "Embed Secret"
### Step 2 - Customize the Demo settings for your Looker instance
* Provide your embed secret to the server. You can do this a couple ways.
* If you are using the main `demo.py`, provide your API credentials to the server by updating `demo/looker.ini` following [these instructions](https://community.looker.com/technical-tips-tricks-1021/the-how-to-on-initializing-the-sdk-with-different-profiles-in-your-ini-file-26846), with credentials obtained from [the Users page](https://docs.looker.com/reference/api-and-integration/api-auth).
* Alternatively, if you are using `demo_self_signed.py`, provide your embed secret to the server. You can do this a couple ways.
* Set it as `LOOKER_EMBED_SECRET` in your shell environment.
* Create a file named `.env` in the root of the sdk directory. Add a line to that file: `LOOKER_EMBED_SECRET="YourLookerSecret"`
* Provide your Looker instance host address to the server by either:
* Setting it as `LOOKER_EMBED_HOST` in your shell environment.
* Adding `LOOKER_EMBED_HOST="yourinstance.looker.com:yourport"` to the `.env` file.
* Provide your Looker instance host address to the server:
* Create a `.env` file in the main embed-sdk directory and add `LOOKER_EMBED_HOST="yourinstance.looker.com:yourport"`
* **The Looker embed host should not include the protocol!**

@@ -217,3 +235,5 @@ * Edit the `demo/demo_config.ts` file to be appropriate for the pages you want to embed.

```javascript
// The address of your Looker instance. Required.
// The address of your Looker instance. Required.
// Include the port if it is necessary when accessing looker in a browser
// Do NOT include the protocol
export const lookerHost = 'self-signed.looker.com:9999'

@@ -227,3 +247,3 @@

* Edit the `demo/demo_user.json` file to be appropriate for the type of user you want to embed.
* Edit the `demo/demo_user.json` file to be appropriate for the type of user you want to embed. Normally your backend service would use information about the user logged into your embedding application (e.g your customer portal) to inform Looker about important user properties that control data access controls.

@@ -283,15 +303,9 @@ ```javascript

#### Node server
Run the following commands from the top-level embed-sdk directory.
* `npm install`
* `npm start`
* The server will print out what host and port it is running on. If it is different than `http://localhost:8080` then you will need to add that to your Embedded Domain Whitelist.
#### Python server
* `npm install`
* `npm run python`
* The server will print out what host and port it is running on.
You may need to `pip install six` to install the Python 2/3 compatibility layer.
If you want to use the `demo_self_signed.py` example you will need to update `packages.json` and replace `demo.py` with `demo_self_signed.py`.

@@ -298,0 +312,0 @@ ## Troubleshooting

/*
* The MIT License (MIT)
*
* Copyright (c) 2019 Looker Data Sciences, Inc.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
MIT License
Copyright (c) 2019 Looker Data Sciences, Inc.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/
import { LookerDashboardOptions, LookerEmbedFilterParams } from './types'
import type { LookerDashboardOptions, LookerEmbedFilterParams } from './types'
import { LookerEmbedBase } from './embed_base'

@@ -38,3 +40,3 @@

run () {
run() {
this.send('dashboard:run')

@@ -49,3 +51,3 @@ }

stop () {
stop() {
this.send('dashboard:stop')

@@ -55,2 +57,12 @@ }

/**
* Convenience method for sending an edit message to the embedded dashboard.
*
* Requires Looker 22.20 and Dashboards Next (see [[EmbedBuilder.withNext]]).
*/
edit() {
this.send('dashboard:edit')
}
/**
* Convenience method for updating the filters of the embedded dashboard.

@@ -61,3 +73,3 @@ *

updateFilters (params: LookerEmbedFilterParams) {
updateFilters(params: LookerEmbedFilterParams) {
this.send('dashboard:filters:update', { filters: params })

@@ -72,3 +84,3 @@ }

setOptions (options: LookerDashboardOptions) {
setOptions(options: LookerDashboardOptions) {
this.send('dashboard:options:set', options)

@@ -83,3 +95,3 @@ }

async openScheduleDialog (): Promise<void> {
async openScheduleDialog(): Promise<void> {
return this.sendAndReceive('dashboard:schedule_modal:open')

@@ -98,5 +110,5 @@ }

async loadDashboard (id: string, pushHistory: boolean = false): Promise<void> {
async loadDashboard(id: string, pushHistory = false): Promise<void> {
return this.sendAndReceive('dashboard:load', { id, pushHistory })
}
}

@@ -0,27 +1,28 @@

/*
/*
* The MIT License (MIT)
*
* Copyright (c) 2019 Looker Data Sciences, Inc.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
MIT License
Copyright (c) 2019 Looker Data Sciences, Inc.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/
import { ChattyHostConnection }from '@looker/chatty'
import type { ChattyHostConnection } from '@looker/chatty'

@@ -34,3 +35,3 @@ export class LookerEmbedBase {

*/
constructor (private _host: ChattyHostConnection) {}
constructor(private _host: ChattyHostConnection) {}

@@ -45,3 +46,3 @@ /**

send (message: string, params?: any) {
send(message: string, params?: any) {
this._host.send(message, params)

@@ -58,5 +59,5 @@ }

async sendAndReceive (message: string, params?: any) {
async sendAndReceive(message: string, params?: any) {
return this._host.sendAndReceive(message, params)
}
}
/*
* The MIT License (MIT)
*
* Copyright (c) 2019 Looker Data Sciences, Inc.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
MIT License
Copyright (c) 2019 Looker Data Sciences, Inc.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/
import { ChattyHostConnection, CallbackStore } from '@looker/chatty'
import { deprecate } from 'util'
import type { ChattyHostConnection, CallbackStore } from '@looker/chatty'
import { EmbedClient } from './embed'
import { LookerAuthConfig, LookerEmbedEventMap, LookerEmbedFilterParams } from './types'
import type {
LookerAuthConfig,
LookerEmbedEventMap,
LookerEmbedFilterParams,
} from './types'
type EmbedClientConstructor<T> = { new(host: ChattyHostConnection): T ;}
type EmbedClientConstructor<T> = { new (host: ChattyHostConnection): T }

@@ -37,7 +42,7 @@ interface LookerEmbedHostSettings {

interface UrlParams {
export interface UrlParams {
[key: string]: string
}
function stringify (params: {[key: string]: string}) {
function stringify(params: { [key: string]: string }) {
const result = []

@@ -50,3 +55,3 @@ for (const key in params) {

function escapeFilterParam (param: string) {
function escapeFilterParam(param: string) {
return param.replace(/,/g, '^,')

@@ -76,3 +81,3 @@ }

constructor (
constructor(
private _hostSettings: LookerEmbedHostSettings,

@@ -86,4 +91,4 @@ private _type: string,

embed_domain: this._hostSettings.apiHost,
sandboxed_host: 'true',
sdk: '2',
sandboxed_host: 'true'
}

@@ -94,3 +99,3 @@ } else {

embed_domain: embedDomain,
sdk: '2'
sdk: '2',
}

@@ -104,3 +109,3 @@ }

withFrameBorder (attr: string) {
withFrameBorder(attr: string) {
this._frameBorder = attr

@@ -116,3 +121,3 @@ return this

withId (id: number | string) {
withId(id: number | string) {
this._id = id

@@ -129,3 +134,3 @@ return this

withParams (params: UrlParams) {
withParams(params: UrlParams) {
for (const key in params) {

@@ -143,10 +148,14 @@ this._params[key] = params[key]

withFilters (filters: LookerEmbedFilterParams, escape: boolean = false) {
withFilters(filters: LookerEmbedFilterParams, escape = false) {
if (this.type === 'dashboard') {
for (const key in filters) {
this._params[key] = escape ? escapeFilterParam(filters[key]) : filters[key]
this._params[key] = escape
? escapeFilterParam(filters[key])
: filters[key]
}
} else {
for (const key in filters) {
this._params[`f[${key}]`] = escape ? escapeFilterParam(filters[key]) : filters[key]
this._params[`f[${key}]`] = escape
? escapeFilterParam(filters[key])
: filters[key]
}

@@ -163,3 +172,3 @@ }

withSandboxAttr (...attr: string[]) {
withSandboxAttr(...attr: string[]) {
this._sandboxAttrs = this._sandboxAttrs.concat(attr)

@@ -174,3 +183,3 @@ return this

withClassName (...className: string[]) {
withClassName(...className: string[]) {
this._classNames = this._classNames.concat(className)

@@ -186,3 +195,3 @@ return this

withNext (suffix: string = '-next') {
withNext(suffix = '-next') {
this._suffix = suffix

@@ -199,3 +208,3 @@ this._endpoint += this._suffix

withTheme (theme: string) {
withTheme(theme: string) {
this._params.theme = theme

@@ -211,3 +220,3 @@ return this

withApiHost (apiHost: string) {
withApiHost(apiHost: string) {
if (!this._hostSettings.apiHost) {

@@ -231,3 +240,3 @@ this._hostSettings.apiHost = apiHost

withAuthUrl (authUrl: string) {
withAuthUrl(authUrl: string) {
if (!this._hostSettings.auth?.url) {

@@ -247,3 +256,3 @@ this._hostSettings.auth = { url: authUrl }

withAuth (auth: LookerAuthConfig) {
withAuth(auth: LookerAuthConfig) {
if (!this._hostSettings.auth) {

@@ -263,3 +272,3 @@ this._hostSettings.auth = auth

withUrl (url: string) {
withUrl(url: string) {
this._url = url

@@ -273,3 +282,3 @@ return this

set sandboxedHost (sandboxedHost: boolean) {
set sandboxedHost(sandboxedHost: boolean) {
this._sandboxedHost = sandboxedHost

@@ -282,3 +291,3 @@ }

get sandboxedHost () {
get sandboxedHost() {
if (this._sandboxedHost === undefined) {

@@ -295,3 +304,3 @@ const embedHostDomain = window.location.origin

get el () {
get el() {
return this._appendTo || document.body

@@ -304,3 +313,3 @@ }

get frameBorder () {
get frameBorder() {
return this._frameBorder

@@ -313,3 +322,3 @@ }

get endpoint () {
get endpoint() {
return this._endpoint

@@ -322,3 +331,3 @@ }

get type () {
get type() {
return this._type

@@ -331,3 +340,3 @@ }

get apiHost () {
get apiHost() {
return this._hostSettings.apiHost

@@ -340,3 +349,3 @@ }

get url () {
get url() {
return this._url

@@ -350,3 +359,3 @@ }

get authUrl () {
get authUrl() {
return this._hostSettings.auth?.url

@@ -359,3 +368,3 @@ }

get auth () {
get auth() {
return this._hostSettings.auth

@@ -368,3 +377,3 @@ }

get embedUrl () {
get embedUrl() {
const params = stringify(this._params)

@@ -378,3 +387,3 @@ return `${this.endpoint}/${this.id}?${params}`

get handlers () {
get handlers() {
return this._handlers

@@ -387,3 +396,3 @@ }

get sandboxAttrs () {
get sandboxAttrs() {
return this._sandboxAttrs

@@ -396,3 +405,3 @@ }

get classNames () {
get classNames() {
return this._classNames

@@ -405,3 +414,3 @@ }

get suffix () {
get suffix() {
return this._suffix

@@ -414,3 +423,3 @@ }

get id () {
get id() {
return this._id

@@ -423,3 +432,3 @@ }

get clientConstructor () {
get clientConstructor() {
return this._clientConstructor

@@ -435,3 +444,3 @@ }

appendTo (el: HTMLElement | string) {
appendTo(el: HTMLElement | string) {
if (typeof el === 'string') {

@@ -453,3 +462,6 @@ this._appendTo = document.querySelector(el)

on<K extends keyof LookerEmbedEventMap> (name: K, handler: LookerEmbedEventMap[K]) {
on<K extends keyof LookerEmbedEventMap>(
name: K,
handler: LookerEmbedEventMap[K]
) {
this._handlers[name] = this._handlers[name] ? this._handlers[name] : []

@@ -464,5 +476,5 @@ this._handlers[name].push(handler)

build (): EmbedClient<T> {
build(): EmbedClient<T> {
return new EmbedClient<T>(this)
}
}
/*
* The MIT License (MIT)
*
* Copyright (c) 2019 Looker Data Sciences, Inc.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
MIT License
Copyright (c) 2019 Looker Data Sciences, Inc.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/
import { EmbedBuilder } from './embed_builder'
import { Chatty, ChattyHost, ChattyHostBuilder } from '@looker/chatty'
import type { ChattyHost, ChattyHostBuilder } from '@looker/chatty'
import { Chatty } from '@looker/chatty'
import type { EmbedBuilder } from './embed_builder'

@@ -45,3 +48,3 @@ const IS_URL = /^https?:\/\//

constructor (private _builder: EmbedBuilder<T>) {}
constructor(private _builder: EmbedBuilder<T>) {}

@@ -53,3 +56,3 @@ /**

get connection () {
get connection() {
return this._connection

@@ -62,7 +65,7 @@ }

get isConnected () {
get isConnected() {
return !!this._connection
}
get targetOrigin () {
get targetOrigin() {
if (this._builder.sandboxedHost) {

@@ -75,7 +78,9 @@ return '*'

private async createIframe (url: string) {
private async createIframe(url: string) {
this._hostBuilder = Chatty.createHost(url)
for (const eventType in this._builder.handlers) {
for (const handler of this._builder.handlers[eventType]) {
this._hostBuilder.on(eventType, (...args) => handler.apply(this._client, args))
this._hostBuilder.on(eventType, (...args) =>
handler.apply(this._client, args)
)
}

@@ -98,10 +103,10 @@ }

return this._host.connect()
.then((host) => {
this._client = new this._builder.clientConstructor(host)
return this._client
})
return this._host.connect().then((host) => {
// eslint-disable-next-line new-cap
this._client = new this._builder.clientConstructor(host)
return this._client
})
}
private async createUrl () {
private async createUrl() {
const src = this._builder.embedUrl

@@ -114,6 +119,9 @@ const auth = this._builder.auth

for (const param of auth.params) {
url += `&${encodeURIComponent(param.name)}=${encodeURIComponent(param.value)}`
url += `&${encodeURIComponent(param.name)}=${encodeURIComponent(
param.value
)}`
}
}
// eslint-disable-next-line no-async-promise-executor
return new Promise<string>(async (resolve, reject) => {

@@ -149,3 +157,3 @@ // compute signature

async connect (): Promise<T> {
async connect(): Promise<T> {
if (this._connection) return this._connection

@@ -156,3 +164,5 @@

} else {
this._connection = this.createUrl().then(async (url) => this.createIframe(url))
this._connection = this.createUrl().then(async (url) =>
this.createIframe(url)
)
}

@@ -159,0 +169,0 @@ return this._connection

/*
* The MIT License (MIT)
*
* Copyright (c) 2019 Looker Data Sciences, Inc.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
MIT License
Copyright (c) 2019 Looker Data Sciences, Inc.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/
import { LookerEmbedFilterParams } from './types'
import type { LookerEmbedFilterParams } from './types'
import { LookerEmbedBase } from './embed_base'

@@ -38,3 +40,3 @@

run () {
run() {
this.send('look:run')

@@ -49,5 +51,5 @@ }

updateFilters (params: LookerEmbedFilterParams) {
updateFilters(params: LookerEmbedFilterParams) {
this.send('look:filters:update', { filters: params })
}
}
/*
* The MIT License (MIT)
*
* Copyright (c) 2019 Looker Data Sciences, Inc.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
MIT License
Copyright (c) 2019 Looker Data Sciences, Inc.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/

@@ -24,0 +26,0 @@

/*
* The MIT License (MIT)
*
* Copyright (c) 2019 Looker Data Sciences, Inc.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
MIT License
Copyright (c) 2019 Looker Data Sciences, Inc.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/

@@ -30,3 +32,3 @@

import { LookerEmbedLook } from './look_client'
import { LookerAuthConfig } from './types'
import type { LookerAuthConfig } from './types'

@@ -37,6 +39,8 @@ export type { LookerEmbedDashboard } from './dashboard_client'

export type { LookerEmbedLook } from './look_client'
export type { LookerEmbedBase } from './embed_base'
export type { EmbedBuilder, UrlParams } from './embed_builder'
export type { EmbedClient } from './embed'
export * from './types'
export class LookerEmbedSDK {
/**

@@ -50,3 +54,3 @@ * Initialize the Embed SDK.

static init (apiHost: string, auth?: string | LookerAuthConfig) {
static init(apiHost: string, auth?: string | LookerAuthConfig) {
this.apiHost = apiHost

@@ -62,4 +66,9 @@ this.auth = typeof auth === 'string' ? { url: auth } : auth

static createDashboardWithUrl (url: string) {
return new EmbedBuilder<LookerEmbedDashboard>(this, 'dashboard', '/embed/dashboards', LookerEmbedDashboard).withUrl(url)
static createDashboardWithUrl(url: string) {
return new EmbedBuilder<LookerEmbedDashboard>(
this,
'dashboard',
'/embed/dashboards',
LookerEmbedDashboard
).withUrl(url)
}

@@ -73,4 +82,9 @@

static createDashboardWithId (id: string | number) {
return new EmbedBuilder<LookerEmbedDashboard>(this, 'dashboard', '/embed/dashboards', LookerEmbedDashboard).withId(id)
static createDashboardWithId(id: string | number) {
return new EmbedBuilder<LookerEmbedDashboard>(
this,
'dashboard',
'/embed/dashboards',
LookerEmbedDashboard
).withId(id)
}

@@ -84,4 +98,9 @@

static createExploreWithUrl (url: string) {
return new EmbedBuilder<LookerEmbedExplore>(this, 'explore', '/embed/explore', LookerEmbedExplore).withUrl(url)
static createExploreWithUrl(url: string) {
return new EmbedBuilder<LookerEmbedExplore>(
this,
'explore',
'/embed/explore',
LookerEmbedExplore
).withUrl(url)
}

@@ -95,5 +114,10 @@

static createExploreWithId (id: string) {
static createExploreWithId(id: string) {
id = id.replace('::', '/') // Handle old format explore ids.
return new EmbedBuilder<LookerEmbedExplore>(this, 'explore', '/embed/explore', LookerEmbedExplore).withId(id)
return new EmbedBuilder<LookerEmbedExplore>(
this,
'explore',
'/embed/explore',
LookerEmbedExplore
).withId(id)
}

@@ -107,4 +131,9 @@

static createLookWithUrl (url: string) {
return new EmbedBuilder<LookerEmbedLook>(this, 'look', '/embed/looks', LookerEmbedLook).withUrl(url)
static createLookWithUrl(url: string) {
return new EmbedBuilder<LookerEmbedLook>(
this,
'look',
'/embed/looks',
LookerEmbedLook
).withUrl(url)
}

@@ -118,4 +147,9 @@

static createLookWithId (id: number) {
return new EmbedBuilder<LookerEmbedLook>(this, 'look', '/embed/looks', LookerEmbedLook).withId(id)
static createLookWithId(id: number) {
return new EmbedBuilder<LookerEmbedLook>(
this,
'look',
'/embed/looks',
LookerEmbedLook
).withId(id)
}

@@ -129,4 +163,9 @@

static createExtensionWithUrl (url: string) {
return new EmbedBuilder<LookerEmbedExtension>(this, 'extension', '/embed/extensions', LookerEmbedExtension).withUrl(url)
static createExtensionWithUrl(url: string) {
return new EmbedBuilder<LookerEmbedExtension>(
this,
'extension',
'/embed/extensions',
LookerEmbedExtension
).withUrl(url)
}

@@ -140,4 +179,9 @@

static createExtensionWithId (id: string) {
return new EmbedBuilder<LookerEmbedExtension>(this, 'extension', '/embed/extensions', LookerEmbedExtension).withId(id)
static createExtensionWithId(id: string) {
return new EmbedBuilder<LookerEmbedExtension>(
this,
'extension',
'/embed/extensions',
LookerEmbedExtension
).withId(id)
}

@@ -144,0 +188,0 @@

/*
* The MIT License (MIT)
*
* Copyright (c) 2019 Looker Data Sciences, Inc.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
MIT License
Copyright (c) 2019 Looker Data Sciences, Inc.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/
import { LookerEmbedFilterParams } from './types'
import type { LookerEmbedFilterParams } from './types'
import { LookerEmbedBase } from './embed_base'

@@ -38,3 +40,3 @@

run () {
run() {
this.send('look:run')

@@ -49,5 +51,5 @@ }

updateFilters (params: LookerEmbedFilterParams) {
updateFilters(params: LookerEmbedFilterParams) {
this.send('look:filters:update', { filters: params })
}
}
/*
* The MIT License (MIT)
*
* Copyright (c) 2019 Looker Data Sciences, Inc.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
MIT License
Copyright (c) 2019 Looker Data Sciences, Inc.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/
import { LookerEmbedBase } from './embed_base'
import { LookerEmbedDashboard } from './dashboard_client'
import { LookerEmbedLook } from './look_client'
import type { LookerEmbedBase } from './embed_base'
import type { LookerEmbedDashboard } from './dashboard_client'
import type { LookerEmbedLook } from './look_client'

@@ -53,3 +55,3 @@ /**

interface DashboardLayout {
export interface DashboardLayout {
id: string

@@ -71,3 +73,3 @@ dashboard_id: string

interface DashboardLayoutComponent {
export interface DashboardLayoutComponent {
id: string

@@ -143,2 +145,3 @@ dashboard_layout_id: string

title: string
canEdit: boolean
dashboard_filters: LookerEmbedFilterParams

@@ -377,10 +380,42 @@ absoluteUrl: string

export interface LookerEmbedEventMap {
'dashboard:run:start': (this: LookerEmbedDashboard, event: DashboardEvent) => void
'dashboard:run:complete': (this: LookerEmbedDashboard, event: DashboardEvent) => void
'dashboard:filters:changed': (this: LookerEmbedDashboard, event: DashboardEvent) => void
'dashboard:run:start': (
this: LookerEmbedDashboard,
event: DashboardEvent
) => void
'dashboard:run:complete': (
this: LookerEmbedDashboard,
event: DashboardEvent
) => void
'dashboard:filters:changed': (
this: LookerEmbedDashboard,
event: DashboardEvent
) => void
/**
* Dashboard saved event
* Dashboard editing started event.
* Not available to legacy dashboards.
* Looker 22.20
*/
'dashboard:edit:start': (
this: LookerEmbedDashboard,
event: DashboardEvent
) => void
/**
* Dashboard editing cancelled event.
* Not available to legacy dashboards.
* Looker 22.20
*/
'dashboard:edit:cancel': (
this: LookerEmbedDashboard,
event: DashboardEvent
) => void
/**
* Dashboard saved event. Fired when a dashboard
* being edited is saved. Use in conjunction with
* `dashboard:edit:start` and `dashboard:edit:save`.
* Looker 21.6
*/
'dashboard:save:complete': (this: LookerEmbedDashboard, event: DashboardEvent) => void
'dashboard:save:complete': (
this: LookerEmbedDashboard,
event: DashboardEvent
) => void
/**

@@ -390,6 +425,18 @@ * Dashboard deleted event

*/
'dashboard:delete:complete': (this: LookerEmbedDashboard, event: DashboardEvent) => void
'dashboard:tile:start': (this: LookerEmbedDashboard, event: DashboardTileEvent) => void
'dashboard:tile:complete': (this: LookerEmbedDashboard, event: DashboardTileEvent) => void
'dashboard:tile:download': (this: LookerEmbedDashboard, event: DashboardTileDownloadEvent) => void
'dashboard:delete:complete': (
this: LookerEmbedDashboard,
event: DashboardEvent
) => void
'dashboard:tile:start': (
this: LookerEmbedDashboard,
event: DashboardTileEvent
) => void
'dashboard:tile:complete': (
this: LookerEmbedDashboard,
event: DashboardTileEvent
) => void
'dashboard:tile:download': (
this: LookerEmbedDashboard,
event: DashboardTileDownloadEvent
) => void
'dashboard:tile:explore': (

@@ -404,4 +451,10 @@ this: LookerEmbedDashboard,

'drillmenu:click': (this: LookerEmbedBase, event: DrillMenuEvent) => CancellableEventResponse | undefined
'drillmodal:explore': (this: LookerEmbedBase, event: DrillModalExploreEvent) => CancellableEventResponse | undefined
'drillmenu:click': (
this: LookerEmbedBase,
event: DrillMenuEvent
) => CancellableEventResponse | undefined
'drillmodal:explore': (
this: LookerEmbedBase,
event: DrillModalExploreEvent
) => CancellableEventResponse | undefined

@@ -429,5 +482,8 @@ 'explore:run:start': (this: LookerEmbedLook, event: ExploreEvent) => void

'page:changed': (this: LookerEmbedBase, event: PageChangedEvent) => void
'page:properties:changed': (this: LookerEmbedBase, event: PagePropertiesChangedEvent) => void
'page:properties:changed': (
this: LookerEmbedBase,
event: PagePropertiesChangedEvent
) => void
[key: string]: any
}
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc