@blackbaud/sky-addin-client 1.7.4 → 1.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -55,7 +55,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
55
55
  Object.defineProperty(exports, "__esModule", ({ value: true }));
56
56
  __exportStar(__webpack_require__(2), exports);
57
57
  __exportStar(__webpack_require__(3), exports);
58
- __exportStar(__webpack_require__(34), exports);
58
+ __exportStar(__webpack_require__(35), exports);
59
59
 
60
60
 
61
61
  /***/ }),
@@ -91,6 +91,31 @@ const allowedOrigins = [
91
91
  /^https\:\/\/[\w\-\.]+\.justgiving\.com$/,
92
92
  /^https\:\/\/sky\.blackbaudcdn\.net$/
93
93
  ];
94
+ /**
95
+ * Add-in types recognized by this client. Typed as a record so that every
96
+ * AddinType must be listed here.
97
+ */
98
+ const knownAddinTypes = {
99
+ 'action-button': true,
100
+ 'box': true,
101
+ 'button': true,
102
+ 'dataset': true,
103
+ 'flyout': true,
104
+ 'generic': true,
105
+ 'modal': true,
106
+ 'page': true,
107
+ 'tab': true,
108
+ 'tile': true,
109
+ 'vertical-tab-form': true
110
+ };
111
+ /**
112
+ * Inline declarations that make an element's background transparent. Inline styles
113
+ * are used rather than a style element so they are not blocked by a Content Security Policy.
114
+ */
115
+ const transparentBackgroundDeclarations = [
116
+ { property: 'background-color', value: 'transparent' },
117
+ { property: 'background-image', value: 'none' }
118
+ ];
94
119
  /**
95
120
  * Client for interacting with the parent page hosting the add-in.
96
121
  */
@@ -149,6 +174,14 @@ class AddinClient {
149
174
  * The add-in client will throw an error if an event is attempted but not one the supported types.
150
175
  */
151
176
  this.supportedEventTypes = [];
177
+ /**
178
+ * Indicates whether the client has been destroyed.
179
+ */
180
+ this.destroyed = false;
181
+ /**
182
+ * Inline background declarations replaced by this client to make the document transparent.
183
+ */
184
+ this.replacedBackgroundDeclarations = [];
152
185
  /**
153
186
  * Collection of regexs for our whitelist of host origins.
154
187
  */
@@ -170,6 +203,8 @@ class AddinClient {
170
203
  if (this.heightChangeIntervalId) {
171
204
  clearInterval(this.heightChangeIntervalId);
172
205
  }
206
+ this.cleanupTransparentBackground();
207
+ this.destroyed = true;
173
208
  }
174
209
  /**
175
210
  * Requests the host page to navigate.
@@ -401,6 +436,87 @@ class AddinClient {
401
436
  }, []);
402
437
  }
403
438
  }
439
+ /**
440
+ * Applies the client-owned document transparency for a modal add-in.
441
+ * @param style The modal style from the ready args.
442
+ */
443
+ applyModalStyle(style) {
444
+ if ((style === null || style === void 0 ? void 0 : style.transparentBackground) !== true) {
445
+ this.cleanupTransparentBackground();
446
+ return;
447
+ }
448
+ this.makeBackgroundTransparent(document.documentElement);
449
+ if (document.body) {
450
+ this.makeBackgroundTransparent(document.body);
451
+ }
452
+ else if (!this.bodyReadyHandler) {
453
+ // The body does not exist yet if ready is called while the document is still parsing.
454
+ this.bodyReadyHandler = () => {
455
+ this.bodyReadyHandler = undefined;
456
+ if (document.body) {
457
+ this.makeBackgroundTransparent(document.body);
458
+ }
459
+ };
460
+ document.addEventListener('DOMContentLoaded', this.bodyReadyHandler, { once: true });
461
+ }
462
+ }
463
+ /**
464
+ * Makes an element's background transparent with inline declarations, recording
465
+ * the declarations it replaces so they can be restored.
466
+ * @param element The element to make transparent.
467
+ */
468
+ makeBackgroundTransparent(element) {
469
+ for (const declaration of transparentBackgroundDeclarations) {
470
+ const property = declaration.property;
471
+ const value = element.style.getPropertyValue(property);
472
+ const priority = element.style.getPropertyPriority(property);
473
+ // Leave an existing transparent declaration alone, whether it was set by this client
474
+ // on an earlier ready call or by the add-in itself.
475
+ if (value !== declaration.value || priority !== 'important') {
476
+ this.replacedBackgroundDeclarations.push({
477
+ element,
478
+ priority,
479
+ property,
480
+ transparentValue: declaration.value,
481
+ value
482
+ });
483
+ element.style.setProperty(property, declaration.value, 'important');
484
+ }
485
+ }
486
+ }
487
+ /**
488
+ * Restores document background declarations replaced by this client.
489
+ */
490
+ cleanupTransparentBackground() {
491
+ if (this.bodyReadyHandler) {
492
+ document.removeEventListener('DOMContentLoaded', this.bodyReadyHandler);
493
+ this.bodyReadyHandler = undefined;
494
+ }
495
+ for (const replaced of this.replacedBackgroundDeclarations) {
496
+ const style = replaced.element.style;
497
+ // Don't restore over a declaration the add-in has changed since this client set it.
498
+ if (style.getPropertyValue(replaced.property) === replaced.transparentValue &&
499
+ style.getPropertyPriority(replaced.property) === 'important') {
500
+ if (replaced.value) {
501
+ style.setProperty(replaced.property, replaced.value, replaced.priority);
502
+ }
503
+ else {
504
+ style.removeProperty(replaced.property);
505
+ }
506
+ }
507
+ }
508
+ this.replacedBackgroundDeclarations = [];
509
+ }
510
+ /**
511
+ * Returns the add-in type provided by the host if this client recognizes it.
512
+ * @param addinType The add-in type provided by the host.
513
+ * @returns The add-in type, or undefined if it is missing or unrecognized.
514
+ */
515
+ getKnownAddinType(addinType) {
516
+ if (typeof addinType === 'string' && knownAddinTypes.hasOwnProperty(addinType)) {
517
+ return addinType;
518
+ }
519
+ }
404
520
  /**
405
521
  * Post a message to the host page informing it that the add-in is
406
522
  * now started and listening for messages from the host.
@@ -468,9 +584,14 @@ class AddinClient {
468
584
  this.supportedEventTypes = data.message.supportedEventTypes || [];
469
585
  // Pass key data to the add-in for it to initiailze.
470
586
  this.args.callbacks.init({
587
+ addinType: this.getKnownAddinType(data.message.addinType),
471
588
  context: data.message.context,
472
589
  envId: data.message.envId,
473
590
  ready: (args) => {
591
+ var _a;
592
+ if (!this.destroyed) {
593
+ this.applyModalStyle((_a = args === null || args === void 0 ? void 0 : args.modalConfig) === null || _a === void 0 ? void 0 : _a.style);
594
+ }
474
595
  // Do an immediate height check since the add-in may render something
475
596
  // due to the context provided. No need to wait a full second to reflect.
476
597
  this.checkForHeightChangesOfAddinContent();
@@ -776,6 +897,7 @@ __exportStar(__webpack_require__(30), exports);
776
897
  __exportStar(__webpack_require__(31), exports);
777
898
  __exportStar(__webpack_require__(32), exports);
778
899
  __exportStar(__webpack_require__(33), exports);
900
+ __exportStar(__webpack_require__(34), exports);
779
901
 
780
902
 
781
903
  /***/ }),
@@ -1088,6 +1210,14 @@ var AddinToastStyle;
1088
1210
 
1089
1211
  /***/ }),
1090
1212
  /* 34 */
1213
+ /***/ ((__unused_webpack_module, exports) => {
1214
+
1215
+
1216
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
1217
+
1218
+
1219
+ /***/ }),
1220
+ /* 35 */
1091
1221
  /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
1092
1222
 
1093
1223
 
@@ -1106,12 +1236,12 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
1106
1236
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
1107
1237
  };
1108
1238
  Object.defineProperty(exports, "__esModule", ({ value: true }));
1109
- __exportStar(__webpack_require__(35), exports);
1110
1239
  __exportStar(__webpack_require__(36), exports);
1240
+ __exportStar(__webpack_require__(37), exports);
1111
1241
 
1112
1242
 
1113
1243
  /***/ }),
1114
- /* 35 */
1244
+ /* 36 */
1115
1245
  /***/ ((__unused_webpack_module, exports) => {
1116
1246
 
1117
1247
 
@@ -1119,7 +1249,7 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));
1119
1249
 
1120
1250
 
1121
1251
  /***/ }),
1122
- /* 36 */
1252
+ /* 37 */
1123
1253
  /***/ ((__unused_webpack_module, exports) => {
1124
1254
 
1125
1255
 
@@ -1 +1 @@
1
- !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.BBSkyAddinClient=t():e.BBSkyAddinClient=t()}(self,(()=>(()=>{"use strict";var e={789:function(e,t,s){var o=this&&this.__createBinding||(Object.create?function(e,t,s,o){void 0===o&&(o=s);var i=Object.getOwnPropertyDescriptor(t,s);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[s]}}),Object.defineProperty(e,o,i)}:function(e,t,s,o){void 0===o&&(o=s),e[o]=t[s]}),i=this&&this.__exportStar||function(e,t){for(var s in e)"default"===s||Object.prototype.hasOwnProperty.call(t,s)||o(t,e,s)};Object.defineProperty(t,"__esModule",{value:!0}),i(s(983),t)},903:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.AddinClient=void 0;const s=[/^https\:\/\/[\w\-\.]+\.blackbaud\.com$/,/^https\:\/\/[\w\-\.]+\.blackbaud\-dev\.com$/,/^http\:\/\/[\w\-\.]+\.blackbaud\-dev\.com$/,/^https\:\/\/[\w\-\.]+\.blackbaud\-test\.com$/,/^https\:\/\/[\w\-\.]+\.blackbaudhosting\.com$/,/^https\:\/\/[\w\-\.]+\.bbcloudservices\.com$/,/^https\:\/\/localhost(\:[0-9]+)?$/,/^https\:\/\/secure[2|3|8]\.convio\.net$/,/^https\:\/\/testweb\.convio\.com$/,/^https\:\/\/[\w\-\.]+\.conviocloud\.com$/,/^https\:\/\/[\w\-\.]+\.blackbaudcloud\.com$/,/^https\:\/\/[\w\-\.]+\.blackbaudfaith\.com$/,/^https\:\/\/[\w\-\.]+\.blackbaudportal\.com$/,/^https\:\/\/[\w\-\.]+\.bbk12\.com$/,/^https\:\/\/[\w\-\.]+\.mycampus\-app\.com$/,/^https\:\/\/[\w\-\.]+\.myschoolapp\.com$/,/^https\:\/\/[\w\-\.]+\.myschoolautomation\.com$/,/^https\:\/\/[\w\-\.]+\.myschooldemo\.com$/,/^https\:\/\/[\w\-\.]+\.myschooltraining\.com$/,/^https\:\/\/[\w\-\.]+\.justgiving\.com$/,/^https\:\/\/sky\.blackbaudcdn\.net$/];class o{static getQueryString(){return window.location.search}constructor(e){this.args=e,this.authTokenRequests=[],this.lastAuthTokenRequestId=0,this.modalRequests=[],this.lastModalRequestId=0,this.registeredAddinEvents={},this.sentEvents={},this.pendingSentEvents={},this.eventRequestId=0,this.supportedEventTypes=[],this.allowedOrigins=s,this.initConfig(e.config),this.windowMessageHandler=e=>{this.handleMessage(e)},window.addEventListener("message",this.windowMessageHandler),this.raiseAddinReadyMessage()}destroy(){window.removeEventListener("message",this.windowMessageHandler),this.heightChangeIntervalId&&clearInterval(this.heightChangeIntervalId)}navigate(e){this.postMessageToHostPage({message:{url:e.url},messageType:"navigate"})}getAuthToken(){return this.getUserIdentityToken()}getUserIdentityToken(){return new Promise(((e,t)=>{const s=++this.lastAuthTokenRequestId;this.authTokenRequests[s]={reject:t,resolve:e},this.postMessageToHostPage({message:{authTokenRequestId:s},messageType:"get-auth-token"})}))}showModal(e){return{modalClosed:new Promise(((t,s)=>{const o=++this.lastModalRequestId;this.modalRequests[o]={reject:s,resolve:t},this.postMessageToHostPage({message:{args:e,modalRequestId:o},messageType:"show-modal"})}))}}closeModal(e){this.postMessageToHostPage({message:e,messageType:"close-modal"})}openHelp(e){this.postMessageToHostPage({message:{helpKey:e.helpKey},messageType:"open-help"})}showToast(e){this.postMessageToHostPage({message:e,messageType:"show-toast"})}showFlyout(e){return{flyoutClosed:new Promise(((t,s)=>{e.defaultWidth=e.defaultWidth,e.maxWidth=e.maxWidth,e.minWidth=e.minWidth,this.flyoutRequest={reject:s,resolve:t},this.postMessageToHostPage({message:e,messageType:"show-flyout"})}))}}closeFlyout(){this.postMessageToHostPage({messageType:"close-flyout"})}showConfirm(e){return new Promise(((t,s)=>{this.confirmRequest={reject:s,resolve:t},this.postMessageToHostPage({message:e,messageType:"show-confirm"})}))}showError(e){this.postMessageToHostPage({message:e,messageType:"show-error"})}showWait(){this.postMessageToHostPage({messageType:"show-wait"})}hideWait(){this.postMessageToHostPage({messageType:"hide-wait"})}addEventHandler(e,t){this.registeredAddinEvents[e]=t}sendEvent(e){return new Promise(((t,s)=>{const o=e.type;this.supportedEventTypes.includes(o)||s("Event type not supported");const i=this.pendingSentEvents[o];i&&(clearTimeout(i.timeoutId),i.reject("Event cancelled"));const n=setTimeout((()=>{delete this.pendingSentEvents[o],this.postMessageToHostPage({message:{event:e,eventRequestId:this.eventRequestId},messageType:"client-event"}),this.sentEvents[this.eventRequestId]=t,this.eventRequestId++}),200);this.pendingSentEvents[o]={reject:s,timeoutId:n}}))}initConfig(e){var t;(null===(t=null==e?void 0:e.allowedOrigins)||void 0===t?void 0:t.length)>0&&(this.allowedOrigins=this.allowedOrigins.concat(e.allowedOrigins),this.allowedOrigins=this.allowedOrigins.reduce(((e,t)=>(e.find((e=>e.source===t.source))||e.push(t),e)),[]))}raiseAddinReadyMessage(){this.postMessageToHostPage({messageType:"ready"},"*")}handleModalClosedMessage(e){const t=this.modalRequests,s=e.modalRequestId;t[s].resolve(e.context),t[s]=void 0}handleAuthTokenMessage(e){const t=this.authTokenRequests,s=e.message.authTokenRequestId,o=t[s];switch(e.messageType){case"auth-token":const t=e.message.authToken;o.resolve(t);break;case"auth-token-fail":o.reject(e.message.reason)}t[s]=void 0}handleMessage(e){const t=e.data;if(t&&"bb-addin-host"===t.source)if("host-ready"===t.messageType)this.setKnownAllowedHostOrigin(e.origin),this.trackHeightChangesOfAddinContent(),this.supportedEventTypes=t.message.supportedEventTypes||[],this.args.callbacks.init({context:t.message.context,envId:t.message.envId,ready:e=>{this.checkForHeightChangesOfAddinContent(),this.postMessageToHostPage({message:e,messageType:"addin-ready"})},supportedEventTypes:this.supportedEventTypes,themeSettings:t.message.themeSettings});else if(this.isFromValidOrigin(e))switch(t.messageType){case"action-click":this.args.callbacks.actionClick&&this.args.callbacks.actionClick(t.message.reason);break;case"auth-token":case"auth-token-fail":this.handleAuthTokenMessage(t);break;case"modal-closed":this.handleModalClosedMessage(t.message);break;case"button-click":this.args.callbacks.buttonClick&&this.args.callbacks.buttonClick();break;case"update-context":this.args.callbacks.updateContext&&this.args.callbacks.updateContext(t.message);break;case"confirm-closed":this.confirmRequest&&(this.confirmRequest.resolve(t.message.reason),this.confirmRequest=void 0);break;case"flyout-closed":this.flyoutRequest&&(this.flyoutRequest.resolve(),this.flyoutRequest=void 0);break;case"flyout-next-click":this.args.callbacks.flyoutNextClick&&this.args.callbacks.flyoutNextClick();break;case"flyout-previous-click":this.args.callbacks.flyoutPreviousClick&&this.args.callbacks.flyoutPreviousClick();break;case"help-click":this.args.callbacks.helpClick&&this.args.callbacks.helpClick();break;case"inline-help-click":this.args.callbacks.inlineHelpClick&&this.args.callbacks.inlineHelpClick();break;case"settings-click":this.args.callbacks.settingsClick&&this.args.callbacks.settingsClick();break;case"theme-change":this.args.callbacks.themeChange&&this.args.callbacks.themeChange(t.message.themeSettings);break;case"host-event":this.processHostEvent(t.message);break;case"event-received":this.resolveClientEvent(t.message)}else this.warnInvalidOrigin()}setKnownAllowedHostOrigin(e){for(const t of this.allowedOrigins)if(t.test(e))return void(this.trustedOrigin=e)}checkForHeightChangesOfAddinContent(){const e=document.documentElement.offsetHeight;e!==this.lastPostedIframeHeight&&(this.lastPostedIframeHeight=e,this.postMessageToHostPage({message:{height:e+"px"},messageType:"height-change"}))}trackHeightChangesOfAddinContent(){this.heightChangeIntervalId=setInterval((()=>{this.checkForHeightChangesOfAddinContent()}),1e3)}postMessageToHostPage(e,t){e.source="bb-addin-client",e.addinId=this.getQueryVariable("addinId"),(t=t||this.trustedOrigin)?window.parent.postMessage(e,t):this.warnInvalidOrigin()}processHostEvent(e){const t=e.context,s=this.registeredAddinEvents[t.type];let o;o=s?this.isBlockingEventType(t.type)?new Promise((e=>{s(t.context,(t=>{e(t)}))})):new Promise((e=>{s(t.context),e(void 0)})):Promise.resolve(),o.then((t=>this.postEventReceivedMessage(e.eventRequestId,t)))}isBlockingEventType(e){switch(e){case"form-save":case"form-cancel":case"load-data":return!0}return!1}postEventReceivedMessage(e,t){this.postMessageToHostPage({message:{eventRequestId:e,data:t},messageType:"event-received"})}resolveClientEvent(e){const t=e.eventRequestId,s=this.sentEvents[t];s&&(s(),delete this.sentEvents[t])}isFromValidOrigin(e){return e.origin===this.trustedOrigin}warnInvalidOrigin(){console.warn("The origin is not trusted because the host-ready message has not been sent or because the host origin is not a whitelisted origin.")}getQueryVariable(e){const t=o.getQueryString().substring(1).split("&");for(const s of t){const t=s.split("=");if(decodeURIComponent(t[0])===e)return decodeURIComponent(t[1])}}}t.AddinClient=o},93:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},294:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},714:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},819:(e,t)=>{var s;Object.defineProperty(t,"__esModule",{value:!0}),t.AddinButtonStyle=void 0,(s=t.AddinButtonStyle||(t.AddinButtonStyle={}))[s.None=0]="None",s[s.Add=1]="Add",s[s.Edit=2]="Edit",s[s.Delete=3]="Delete"},676:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},233:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},455:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},407:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},75:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},258:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},413:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},954:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},663:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},542:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},610:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},95:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},581:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},342:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},790:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},212:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},88:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},90:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},948:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},468:(e,t)=>{var s;Object.defineProperty(t,"__esModule",{value:!0}),t.AddinConfirmButtonStyle=void 0,(s=t.AddinConfirmButtonStyle||(t.AddinConfirmButtonStyle={}))[s.Default=0]="Default",s[s.Primary=1]="Primary",s[s.Link=2]="Link"},756:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},545:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},993:(e,t)=>{var s;Object.defineProperty(t,"__esModule",{value:!0}),t.AddinTabSummaryStyle=void 0,(s=t.AddinTabSummaryStyle||(t.AddinTabSummaryStyle={}))[s.None=0]="None",s[s.Text=1]="Text"},518:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},590:(e,t)=>{var s;Object.defineProperty(t,"__esModule",{value:!0}),t.AddinTileSummaryStyle=void 0,(s=t.AddinTileSummaryStyle||(t.AddinTileSummaryStyle={}))[s.None=0]="None",s[s.Text=1]="Text",s[s.Check=2]="Check"},480:(e,t)=>{var s;Object.defineProperty(t,"__esModule",{value:!0}),t.AddinToastStyle=void 0,(s=t.AddinToastStyle||(t.AddinToastStyle={}))[s.Danger=0]="Danger",s[s.Info=1]="Info",s[s.Success=2]="Success",s[s.Warning=3]="Warning"},142:function(e,t,s){var o=this&&this.__createBinding||(Object.create?function(e,t,s,o){void 0===o&&(o=s);var i=Object.getOwnPropertyDescriptor(t,s);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[s]}}),Object.defineProperty(e,o,i)}:function(e,t,s,o){void 0===o&&(o=s),e[o]=t[s]}),i=this&&this.__exportStar||function(e,t){for(var s in e)"default"===s||Object.prototype.hasOwnProperty.call(t,s)||o(t,e,s)};Object.defineProperty(t,"__esModule",{value:!0}),i(s(93),t),i(s(294),t),i(s(714),t),i(s(819),t),i(s(676),t),i(s(233),t),i(s(455),t),i(s(407),t),i(s(75),t),i(s(258),t),i(s(413),t),i(s(954),t),i(s(663),t),i(s(542),t),i(s(610),t),i(s(95),t),i(s(581),t),i(s(342),t),i(s(790),t),i(s(212),t),i(s(88),t),i(s(90),t),i(s(948),t),i(s(756),t),i(s(468),t),i(s(545),t),i(s(993),t),i(s(518),t),i(s(590),t),i(s(480),t)},220:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},606:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},57:function(e,t,s){var o=this&&this.__createBinding||(Object.create?function(e,t,s,o){void 0===o&&(o=s);var i=Object.getOwnPropertyDescriptor(t,s);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[s]}}),Object.defineProperty(e,o,i)}:function(e,t,s,o){void 0===o&&(o=s),e[o]=t[s]}),i=this&&this.__exportStar||function(e,t){for(var s in e)"default"===s||Object.prototype.hasOwnProperty.call(t,s)||o(t,e,s)};Object.defineProperty(t,"__esModule",{value:!0}),i(s(220),t),i(s(606),t)},983:function(e,t,s){var o=this&&this.__createBinding||(Object.create?function(e,t,s,o){void 0===o&&(o=s);var i=Object.getOwnPropertyDescriptor(t,s);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[s]}}),Object.defineProperty(e,o,i)}:function(e,t,s,o){void 0===o&&(o=s),e[o]=t[s]}),i=this&&this.__exportStar||function(e,t){for(var s in e)"default"===s||Object.prototype.hasOwnProperty.call(t,s)||o(t,e,s)};Object.defineProperty(t,"__esModule",{value:!0}),i(s(903),t),i(s(142),t),i(s(57),t)}},t={};return function s(o){var i=t[o];if(void 0!==i)return i.exports;var n=t[o]={exports:{}};return e[o].call(n.exports,n,n.exports,s),n.exports}(789)})()));
1
+ !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.BBSkyAddinClient=t():e.BBSkyAddinClient=t()}(self,(()=>(()=>{"use strict";var e={789:function(e,t,s){var o=this&&this.__createBinding||(Object.create?function(e,t,s,o){void 0===o&&(o=s);var a=Object.getOwnPropertyDescriptor(t,s);a&&!("get"in a?!t.__esModule:a.writable||a.configurable)||(a={enumerable:!0,get:function(){return t[s]}}),Object.defineProperty(e,o,a)}:function(e,t,s,o){void 0===o&&(o=s),e[o]=t[s]}),a=this&&this.__exportStar||function(e,t){for(var s in e)"default"===s||Object.prototype.hasOwnProperty.call(t,s)||o(t,e,s)};Object.defineProperty(t,"__esModule",{value:!0}),a(s(983),t)},903:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.AddinClient=void 0;const s=[/^https\:\/\/[\w\-\.]+\.blackbaud\.com$/,/^https\:\/\/[\w\-\.]+\.blackbaud\-dev\.com$/,/^http\:\/\/[\w\-\.]+\.blackbaud\-dev\.com$/,/^https\:\/\/[\w\-\.]+\.blackbaud\-test\.com$/,/^https\:\/\/[\w\-\.]+\.blackbaudhosting\.com$/,/^https\:\/\/[\w\-\.]+\.bbcloudservices\.com$/,/^https\:\/\/localhost(\:[0-9]+)?$/,/^https\:\/\/secure[2|3|8]\.convio\.net$/,/^https\:\/\/testweb\.convio\.com$/,/^https\:\/\/[\w\-\.]+\.conviocloud\.com$/,/^https\:\/\/[\w\-\.]+\.blackbaudcloud\.com$/,/^https\:\/\/[\w\-\.]+\.blackbaudfaith\.com$/,/^https\:\/\/[\w\-\.]+\.blackbaudportal\.com$/,/^https\:\/\/[\w\-\.]+\.bbk12\.com$/,/^https\:\/\/[\w\-\.]+\.mycampus\-app\.com$/,/^https\:\/\/[\w\-\.]+\.myschoolapp\.com$/,/^https\:\/\/[\w\-\.]+\.myschoolautomation\.com$/,/^https\:\/\/[\w\-\.]+\.myschooldemo\.com$/,/^https\:\/\/[\w\-\.]+\.myschooltraining\.com$/,/^https\:\/\/[\w\-\.]+\.justgiving\.com$/,/^https\:\/\/sky\.blackbaudcdn\.net$/],o={"action-button":!0,box:!0,button:!0,dataset:!0,flyout:!0,generic:!0,modal:!0,page:!0,tab:!0,tile:!0,"vertical-tab-form":!0},a=[{property:"background-color",value:"transparent"},{property:"background-image",value:"none"}];class n{static getQueryString(){return window.location.search}constructor(e){this.args=e,this.authTokenRequests=[],this.lastAuthTokenRequestId=0,this.modalRequests=[],this.lastModalRequestId=0,this.registeredAddinEvents={},this.sentEvents={},this.pendingSentEvents={},this.eventRequestId=0,this.supportedEventTypes=[],this.destroyed=!1,this.replacedBackgroundDeclarations=[],this.allowedOrigins=s,this.initConfig(e.config),this.windowMessageHandler=e=>{this.handleMessage(e)},window.addEventListener("message",this.windowMessageHandler),this.raiseAddinReadyMessage()}destroy(){window.removeEventListener("message",this.windowMessageHandler),this.heightChangeIntervalId&&clearInterval(this.heightChangeIntervalId),this.cleanupTransparentBackground(),this.destroyed=!0}navigate(e){this.postMessageToHostPage({message:{url:e.url},messageType:"navigate"})}getAuthToken(){return this.getUserIdentityToken()}getUserIdentityToken(){return new Promise(((e,t)=>{const s=++this.lastAuthTokenRequestId;this.authTokenRequests[s]={reject:t,resolve:e},this.postMessageToHostPage({message:{authTokenRequestId:s},messageType:"get-auth-token"})}))}showModal(e){return{modalClosed:new Promise(((t,s)=>{const o=++this.lastModalRequestId;this.modalRequests[o]={reject:s,resolve:t},this.postMessageToHostPage({message:{args:e,modalRequestId:o},messageType:"show-modal"})}))}}closeModal(e){this.postMessageToHostPage({message:e,messageType:"close-modal"})}openHelp(e){this.postMessageToHostPage({message:{helpKey:e.helpKey},messageType:"open-help"})}showToast(e){this.postMessageToHostPage({message:e,messageType:"show-toast"})}showFlyout(e){return{flyoutClosed:new Promise(((t,s)=>{e.defaultWidth=e.defaultWidth,e.maxWidth=e.maxWidth,e.minWidth=e.minWidth,this.flyoutRequest={reject:s,resolve:t},this.postMessageToHostPage({message:e,messageType:"show-flyout"})}))}}closeFlyout(){this.postMessageToHostPage({messageType:"close-flyout"})}showConfirm(e){return new Promise(((t,s)=>{this.confirmRequest={reject:s,resolve:t},this.postMessageToHostPage({message:e,messageType:"show-confirm"})}))}showError(e){this.postMessageToHostPage({message:e,messageType:"show-error"})}showWait(){this.postMessageToHostPage({messageType:"show-wait"})}hideWait(){this.postMessageToHostPage({messageType:"hide-wait"})}addEventHandler(e,t){this.registeredAddinEvents[e]=t}sendEvent(e){return new Promise(((t,s)=>{const o=e.type;this.supportedEventTypes.includes(o)||s("Event type not supported");const a=this.pendingSentEvents[o];a&&(clearTimeout(a.timeoutId),a.reject("Event cancelled"));const n=setTimeout((()=>{delete this.pendingSentEvents[o],this.postMessageToHostPage({message:{event:e,eventRequestId:this.eventRequestId},messageType:"client-event"}),this.sentEvents[this.eventRequestId]=t,this.eventRequestId++}),200);this.pendingSentEvents[o]={reject:s,timeoutId:n}}))}initConfig(e){var t;(null===(t=null==e?void 0:e.allowedOrigins)||void 0===t?void 0:t.length)>0&&(this.allowedOrigins=this.allowedOrigins.concat(e.allowedOrigins),this.allowedOrigins=this.allowedOrigins.reduce(((e,t)=>(e.find((e=>e.source===t.source))||e.push(t),e)),[]))}applyModalStyle(e){!0===(null==e?void 0:e.transparentBackground)?(this.makeBackgroundTransparent(document.documentElement),document.body?this.makeBackgroundTransparent(document.body):this.bodyReadyHandler||(this.bodyReadyHandler=()=>{this.bodyReadyHandler=void 0,document.body&&this.makeBackgroundTransparent(document.body)},document.addEventListener("DOMContentLoaded",this.bodyReadyHandler,{once:!0}))):this.cleanupTransparentBackground()}makeBackgroundTransparent(e){for(const t of a){const s=t.property,o=e.style.getPropertyValue(s),a=e.style.getPropertyPriority(s);o===t.value&&"important"===a||(this.replacedBackgroundDeclarations.push({element:e,priority:a,property:s,transparentValue:t.value,value:o}),e.style.setProperty(s,t.value,"important"))}}cleanupTransparentBackground(){this.bodyReadyHandler&&(document.removeEventListener("DOMContentLoaded",this.bodyReadyHandler),this.bodyReadyHandler=void 0);for(const e of this.replacedBackgroundDeclarations){const t=e.element.style;t.getPropertyValue(e.property)===e.transparentValue&&"important"===t.getPropertyPriority(e.property)&&(e.value?t.setProperty(e.property,e.value,e.priority):t.removeProperty(e.property))}this.replacedBackgroundDeclarations=[]}getKnownAddinType(e){if("string"==typeof e&&o.hasOwnProperty(e))return e}raiseAddinReadyMessage(){this.postMessageToHostPage({messageType:"ready"},"*")}handleModalClosedMessage(e){const t=this.modalRequests,s=e.modalRequestId;t[s].resolve(e.context),t[s]=void 0}handleAuthTokenMessage(e){const t=this.authTokenRequests,s=e.message.authTokenRequestId,o=t[s];switch(e.messageType){case"auth-token":const t=e.message.authToken;o.resolve(t);break;case"auth-token-fail":o.reject(e.message.reason)}t[s]=void 0}handleMessage(e){const t=e.data;if(t&&"bb-addin-host"===t.source)if("host-ready"===t.messageType)this.setKnownAllowedHostOrigin(e.origin),this.trackHeightChangesOfAddinContent(),this.supportedEventTypes=t.message.supportedEventTypes||[],this.args.callbacks.init({addinType:this.getKnownAddinType(t.message.addinType),context:t.message.context,envId:t.message.envId,ready:e=>{var t;this.destroyed||this.applyModalStyle(null===(t=null==e?void 0:e.modalConfig)||void 0===t?void 0:t.style),this.checkForHeightChangesOfAddinContent(),this.postMessageToHostPage({message:e,messageType:"addin-ready"})},supportedEventTypes:this.supportedEventTypes,themeSettings:t.message.themeSettings});else if(this.isFromValidOrigin(e))switch(t.messageType){case"action-click":this.args.callbacks.actionClick&&this.args.callbacks.actionClick(t.message.reason);break;case"auth-token":case"auth-token-fail":this.handleAuthTokenMessage(t);break;case"modal-closed":this.handleModalClosedMessage(t.message);break;case"button-click":this.args.callbacks.buttonClick&&this.args.callbacks.buttonClick();break;case"update-context":this.args.callbacks.updateContext&&this.args.callbacks.updateContext(t.message);break;case"confirm-closed":this.confirmRequest&&(this.confirmRequest.resolve(t.message.reason),this.confirmRequest=void 0);break;case"flyout-closed":this.flyoutRequest&&(this.flyoutRequest.resolve(),this.flyoutRequest=void 0);break;case"flyout-next-click":this.args.callbacks.flyoutNextClick&&this.args.callbacks.flyoutNextClick();break;case"flyout-previous-click":this.args.callbacks.flyoutPreviousClick&&this.args.callbacks.flyoutPreviousClick();break;case"help-click":this.args.callbacks.helpClick&&this.args.callbacks.helpClick();break;case"inline-help-click":this.args.callbacks.inlineHelpClick&&this.args.callbacks.inlineHelpClick();break;case"settings-click":this.args.callbacks.settingsClick&&this.args.callbacks.settingsClick();break;case"theme-change":this.args.callbacks.themeChange&&this.args.callbacks.themeChange(t.message.themeSettings);break;case"host-event":this.processHostEvent(t.message);break;case"event-received":this.resolveClientEvent(t.message)}else this.warnInvalidOrigin()}setKnownAllowedHostOrigin(e){for(const t of this.allowedOrigins)if(t.test(e))return void(this.trustedOrigin=e)}checkForHeightChangesOfAddinContent(){const e=document.documentElement.offsetHeight;e!==this.lastPostedIframeHeight&&(this.lastPostedIframeHeight=e,this.postMessageToHostPage({message:{height:e+"px"},messageType:"height-change"}))}trackHeightChangesOfAddinContent(){this.heightChangeIntervalId=setInterval((()=>{this.checkForHeightChangesOfAddinContent()}),1e3)}postMessageToHostPage(e,t){e.source="bb-addin-client",e.addinId=this.getQueryVariable("addinId"),(t=t||this.trustedOrigin)?window.parent.postMessage(e,t):this.warnInvalidOrigin()}processHostEvent(e){const t=e.context,s=this.registeredAddinEvents[t.type];let o;o=s?this.isBlockingEventType(t.type)?new Promise((e=>{s(t.context,(t=>{e(t)}))})):new Promise((e=>{s(t.context),e(void 0)})):Promise.resolve(),o.then((t=>this.postEventReceivedMessage(e.eventRequestId,t)))}isBlockingEventType(e){switch(e){case"form-save":case"form-cancel":case"load-data":return!0}return!1}postEventReceivedMessage(e,t){this.postMessageToHostPage({message:{eventRequestId:e,data:t},messageType:"event-received"})}resolveClientEvent(e){const t=e.eventRequestId,s=this.sentEvents[t];s&&(s(),delete this.sentEvents[t])}isFromValidOrigin(e){return e.origin===this.trustedOrigin}warnInvalidOrigin(){console.warn("The origin is not trusted because the host-ready message has not been sent or because the host origin is not a whitelisted origin.")}getQueryVariable(e){const t=n.getQueryString().substring(1).split("&");for(const s of t){const t=s.split("=");if(decodeURIComponent(t[0])===e)return decodeURIComponent(t[1])}}}t.AddinClient=n},93:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},294:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},714:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},819:(e,t)=>{var s;Object.defineProperty(t,"__esModule",{value:!0}),t.AddinButtonStyle=void 0,(s=t.AddinButtonStyle||(t.AddinButtonStyle={}))[s.None=0]="None",s[s.Add=1]="Add",s[s.Edit=2]="Edit",s[s.Delete=3]="Delete"},676:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},233:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},455:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},407:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},75:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},258:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},413:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},954:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},663:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},542:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},610:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},95:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},581:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},342:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},790:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},212:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},88:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},90:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},948:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},468:(e,t)=>{var s;Object.defineProperty(t,"__esModule",{value:!0}),t.AddinConfirmButtonStyle=void 0,(s=t.AddinConfirmButtonStyle||(t.AddinConfirmButtonStyle={}))[s.Default=0]="Default",s[s.Primary=1]="Primary",s[s.Link=2]="Link"},756:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},545:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},993:(e,t)=>{var s;Object.defineProperty(t,"__esModule",{value:!0}),t.AddinTabSummaryStyle=void 0,(s=t.AddinTabSummaryStyle||(t.AddinTabSummaryStyle={}))[s.None=0]="None",s[s.Text=1]="Text"},518:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},590:(e,t)=>{var s;Object.defineProperty(t,"__esModule",{value:!0}),t.AddinTileSummaryStyle=void 0,(s=t.AddinTileSummaryStyle||(t.AddinTileSummaryStyle={}))[s.None=0]="None",s[s.Text=1]="Text",s[s.Check=2]="Check"},480:(e,t)=>{var s;Object.defineProperty(t,"__esModule",{value:!0}),t.AddinToastStyle=void 0,(s=t.AddinToastStyle||(t.AddinToastStyle={}))[s.Danger=0]="Danger",s[s.Info=1]="Info",s[s.Success=2]="Success",s[s.Warning=3]="Warning"},671:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},142:function(e,t,s){var o=this&&this.__createBinding||(Object.create?function(e,t,s,o){void 0===o&&(o=s);var a=Object.getOwnPropertyDescriptor(t,s);a&&!("get"in a?!t.__esModule:a.writable||a.configurable)||(a={enumerable:!0,get:function(){return t[s]}}),Object.defineProperty(e,o,a)}:function(e,t,s,o){void 0===o&&(o=s),e[o]=t[s]}),a=this&&this.__exportStar||function(e,t){for(var s in e)"default"===s||Object.prototype.hasOwnProperty.call(t,s)||o(t,e,s)};Object.defineProperty(t,"__esModule",{value:!0}),a(s(93),t),a(s(294),t),a(s(714),t),a(s(819),t),a(s(676),t),a(s(233),t),a(s(455),t),a(s(407),t),a(s(75),t),a(s(258),t),a(s(413),t),a(s(954),t),a(s(663),t),a(s(542),t),a(s(610),t),a(s(95),t),a(s(581),t),a(s(342),t),a(s(790),t),a(s(212),t),a(s(88),t),a(s(90),t),a(s(948),t),a(s(756),t),a(s(468),t),a(s(545),t),a(s(993),t),a(s(518),t),a(s(590),t),a(s(480),t),a(s(671),t)},220:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},606:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},57:function(e,t,s){var o=this&&this.__createBinding||(Object.create?function(e,t,s,o){void 0===o&&(o=s);var a=Object.getOwnPropertyDescriptor(t,s);a&&!("get"in a?!t.__esModule:a.writable||a.configurable)||(a={enumerable:!0,get:function(){return t[s]}}),Object.defineProperty(e,o,a)}:function(e,t,s,o){void 0===o&&(o=s),e[o]=t[s]}),a=this&&this.__exportStar||function(e,t){for(var s in e)"default"===s||Object.prototype.hasOwnProperty.call(t,s)||o(t,e,s)};Object.defineProperty(t,"__esModule",{value:!0}),a(s(220),t),a(s(606),t)},983:function(e,t,s){var o=this&&this.__createBinding||(Object.create?function(e,t,s,o){void 0===o&&(o=s);var a=Object.getOwnPropertyDescriptor(t,s);a&&!("get"in a?!t.__esModule:a.writable||a.configurable)||(a={enumerable:!0,get:function(){return t[s]}}),Object.defineProperty(e,o,a)}:function(e,t,s,o){void 0===o&&(o=s),e[o]=t[s]}),a=this&&this.__exportStar||function(e,t){for(var s in e)"default"===s||Object.prototype.hasOwnProperty.call(t,s)||o(t,e,s)};Object.defineProperty(t,"__esModule",{value:!0}),a(s(903),t),a(s(142),t),a(s(57),t)}},t={};return function s(o){var a=t[o];if(void 0!==a)return a.exports;var n=t[o]={exports:{}};return e[o].call(n.exports,n,n.exports,s),n.exports}(789)})()));
@@ -55,7 +55,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
55
55
  Object.defineProperty(exports, "__esModule", ({ value: true }));
56
56
  __exportStar(__webpack_require__(2), exports);
57
57
  __exportStar(__webpack_require__(3), exports);
58
- __exportStar(__webpack_require__(34), exports);
58
+ __exportStar(__webpack_require__(35), exports);
59
59
 
60
60
 
61
61
  /***/ }),
@@ -91,6 +91,31 @@ var allowedOrigins = [
91
91
  /^https\:\/\/[\w\-\.]+\.justgiving\.com$/,
92
92
  /^https\:\/\/sky\.blackbaudcdn\.net$/
93
93
  ];
94
+ /**
95
+ * Add-in types recognized by this client. Typed as a record so that every
96
+ * AddinType must be listed here.
97
+ */
98
+ var knownAddinTypes = {
99
+ 'action-button': true,
100
+ 'box': true,
101
+ 'button': true,
102
+ 'dataset': true,
103
+ 'flyout': true,
104
+ 'generic': true,
105
+ 'modal': true,
106
+ 'page': true,
107
+ 'tab': true,
108
+ 'tile': true,
109
+ 'vertical-tab-form': true
110
+ };
111
+ /**
112
+ * Inline declarations that make an element's background transparent. Inline styles
113
+ * are used rather than a style element so they are not blocked by a Content Security Policy.
114
+ */
115
+ var transparentBackgroundDeclarations = [
116
+ { property: 'background-color', value: 'transparent' },
117
+ { property: 'background-image', value: 'none' }
118
+ ];
94
119
  /**
95
120
  * Client for interacting with the parent page hosting the add-in.
96
121
  */
@@ -143,6 +168,14 @@ var AddinClient = /** @class */ (function () {
143
168
  * The add-in client will throw an error if an event is attempted but not one the supported types.
144
169
  */
145
170
  this.supportedEventTypes = [];
171
+ /**
172
+ * Indicates whether the client has been destroyed.
173
+ */
174
+ this.destroyed = false;
175
+ /**
176
+ * Inline background declarations replaced by this client to make the document transparent.
177
+ */
178
+ this.replacedBackgroundDeclarations = [];
146
179
  /**
147
180
  * Collection of regexs for our whitelist of host origins.
148
181
  */
@@ -171,6 +204,8 @@ var AddinClient = /** @class */ (function () {
171
204
  if (this.heightChangeIntervalId) {
172
205
  clearInterval(this.heightChangeIntervalId);
173
206
  }
207
+ this.cleanupTransparentBackground();
208
+ this.destroyed = true;
174
209
  };
175
210
  /**
176
211
  * Requests the host page to navigate.
@@ -407,6 +442,90 @@ var AddinClient = /** @class */ (function () {
407
442
  }, []);
408
443
  }
409
444
  };
445
+ /**
446
+ * Applies the client-owned document transparency for a modal add-in.
447
+ * @param style The modal style from the ready args.
448
+ */
449
+ AddinClient.prototype.applyModalStyle = function (style) {
450
+ var _this = this;
451
+ if ((style === null || style === void 0 ? void 0 : style.transparentBackground) !== true) {
452
+ this.cleanupTransparentBackground();
453
+ return;
454
+ }
455
+ this.makeBackgroundTransparent(document.documentElement);
456
+ if (document.body) {
457
+ this.makeBackgroundTransparent(document.body);
458
+ }
459
+ else if (!this.bodyReadyHandler) {
460
+ // The body does not exist yet if ready is called while the document is still parsing.
461
+ this.bodyReadyHandler = function () {
462
+ _this.bodyReadyHandler = undefined;
463
+ if (document.body) {
464
+ _this.makeBackgroundTransparent(document.body);
465
+ }
466
+ };
467
+ document.addEventListener('DOMContentLoaded', this.bodyReadyHandler, { once: true });
468
+ }
469
+ };
470
+ /**
471
+ * Makes an element's background transparent with inline declarations, recording
472
+ * the declarations it replaces so they can be restored.
473
+ * @param element The element to make transparent.
474
+ */
475
+ AddinClient.prototype.makeBackgroundTransparent = function (element) {
476
+ for (var _i = 0, transparentBackgroundDeclarations_1 = transparentBackgroundDeclarations; _i < transparentBackgroundDeclarations_1.length; _i++) {
477
+ var declaration = transparentBackgroundDeclarations_1[_i];
478
+ var property = declaration.property;
479
+ var value = element.style.getPropertyValue(property);
480
+ var priority = element.style.getPropertyPriority(property);
481
+ // Leave an existing transparent declaration alone, whether it was set by this client
482
+ // on an earlier ready call or by the add-in itself.
483
+ if (value !== declaration.value || priority !== 'important') {
484
+ this.replacedBackgroundDeclarations.push({
485
+ element: element,
486
+ priority: priority,
487
+ property: property,
488
+ transparentValue: declaration.value,
489
+ value: value
490
+ });
491
+ element.style.setProperty(property, declaration.value, 'important');
492
+ }
493
+ }
494
+ };
495
+ /**
496
+ * Restores document background declarations replaced by this client.
497
+ */
498
+ AddinClient.prototype.cleanupTransparentBackground = function () {
499
+ if (this.bodyReadyHandler) {
500
+ document.removeEventListener('DOMContentLoaded', this.bodyReadyHandler);
501
+ this.bodyReadyHandler = undefined;
502
+ }
503
+ for (var _i = 0, _a = this.replacedBackgroundDeclarations; _i < _a.length; _i++) {
504
+ var replaced = _a[_i];
505
+ var style = replaced.element.style;
506
+ // Don't restore over a declaration the add-in has changed since this client set it.
507
+ if (style.getPropertyValue(replaced.property) === replaced.transparentValue &&
508
+ style.getPropertyPriority(replaced.property) === 'important') {
509
+ if (replaced.value) {
510
+ style.setProperty(replaced.property, replaced.value, replaced.priority);
511
+ }
512
+ else {
513
+ style.removeProperty(replaced.property);
514
+ }
515
+ }
516
+ }
517
+ this.replacedBackgroundDeclarations = [];
518
+ };
519
+ /**
520
+ * Returns the add-in type provided by the host if this client recognizes it.
521
+ * @param addinType The add-in type provided by the host.
522
+ * @returns The add-in type, or undefined if it is missing or unrecognized.
523
+ */
524
+ AddinClient.prototype.getKnownAddinType = function (addinType) {
525
+ if (typeof addinType === 'string' && knownAddinTypes.hasOwnProperty(addinType)) {
526
+ return addinType;
527
+ }
528
+ };
410
529
  /**
411
530
  * Post a message to the host page informing it that the add-in is
412
531
  * now started and listening for messages from the host.
@@ -475,9 +594,14 @@ var AddinClient = /** @class */ (function () {
475
594
  this.supportedEventTypes = data.message.supportedEventTypes || [];
476
595
  // Pass key data to the add-in for it to initiailze.
477
596
  this.args.callbacks.init({
597
+ addinType: this.getKnownAddinType(data.message.addinType),
478
598
  context: data.message.context,
479
599
  envId: data.message.envId,
480
600
  ready: function (args) {
601
+ var _a;
602
+ if (!_this.destroyed) {
603
+ _this.applyModalStyle((_a = args === null || args === void 0 ? void 0 : args.modalConfig) === null || _a === void 0 ? void 0 : _a.style);
604
+ }
481
605
  // Do an immediate height check since the add-in may render something
482
606
  // due to the context provided. No need to wait a full second to reflect.
483
607
  _this.checkForHeightChangesOfAddinContent();
@@ -788,6 +912,7 @@ __exportStar(__webpack_require__(30), exports);
788
912
  __exportStar(__webpack_require__(31), exports);
789
913
  __exportStar(__webpack_require__(32), exports);
790
914
  __exportStar(__webpack_require__(33), exports);
915
+ __exportStar(__webpack_require__(34), exports);
791
916
 
792
917
 
793
918
  /***/ }),
@@ -1100,6 +1225,14 @@ var AddinToastStyle;
1100
1225
 
1101
1226
  /***/ }),
1102
1227
  /* 34 */
1228
+ /***/ ((__unused_webpack_module, exports) => {
1229
+
1230
+
1231
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
1232
+
1233
+
1234
+ /***/ }),
1235
+ /* 35 */
1103
1236
  /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
1104
1237
 
1105
1238
 
@@ -1118,12 +1251,12 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
1118
1251
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
1119
1252
  };
1120
1253
  Object.defineProperty(exports, "__esModule", ({ value: true }));
1121
- __exportStar(__webpack_require__(35), exports);
1122
1254
  __exportStar(__webpack_require__(36), exports);
1255
+ __exportStar(__webpack_require__(37), exports);
1123
1256
 
1124
1257
 
1125
1258
  /***/ }),
1126
- /* 35 */
1259
+ /* 36 */
1127
1260
  /***/ ((__unused_webpack_module, exports) => {
1128
1261
 
1129
1262
 
@@ -1131,7 +1264,7 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));
1131
1264
 
1132
1265
 
1133
1266
  /***/ }),
1134
- /* 36 */
1267
+ /* 37 */
1135
1268
  /***/ ((__unused_webpack_module, exports) => {
1136
1269
 
1137
1270
 
@@ -1 +1 @@
1
- !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.BBSkyAddinClient=t():e.BBSkyAddinClient=t()}(self,(()=>(()=>{"use strict";var e={789:function(e,t,s){var o=this&&this.__createBinding||(Object.create?function(e,t,s,o){void 0===o&&(o=s);var n=Object.getOwnPropertyDescriptor(t,s);n&&!("get"in n?!t.__esModule:n.writable||n.configurable)||(n={enumerable:!0,get:function(){return t[s]}}),Object.defineProperty(e,o,n)}:function(e,t,s,o){void 0===o&&(o=s),e[o]=t[s]}),n=this&&this.__exportStar||function(e,t){for(var s in e)"default"===s||Object.prototype.hasOwnProperty.call(t,s)||o(t,e,s)};Object.defineProperty(t,"__esModule",{value:!0}),n(s(983),t)},903:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.AddinClient=void 0;var s=[/^https\:\/\/[\w\-\.]+\.blackbaud\.com$/,/^https\:\/\/[\w\-\.]+\.blackbaud\-dev\.com$/,/^http\:\/\/[\w\-\.]+\.blackbaud\-dev\.com$/,/^https\:\/\/[\w\-\.]+\.blackbaud\-test\.com$/,/^https\:\/\/[\w\-\.]+\.blackbaudhosting\.com$/,/^https\:\/\/[\w\-\.]+\.bbcloudservices\.com$/,/^https\:\/\/localhost(\:[0-9]+)?$/,/^https\:\/\/secure[2|3|8]\.convio\.net$/,/^https\:\/\/testweb\.convio\.com$/,/^https\:\/\/[\w\-\.]+\.conviocloud\.com$/,/^https\:\/\/[\w\-\.]+\.blackbaudcloud\.com$/,/^https\:\/\/[\w\-\.]+\.blackbaudfaith\.com$/,/^https\:\/\/[\w\-\.]+\.blackbaudportal\.com$/,/^https\:\/\/[\w\-\.]+\.bbk12\.com$/,/^https\:\/\/[\w\-\.]+\.mycampus\-app\.com$/,/^https\:\/\/[\w\-\.]+\.myschoolapp\.com$/,/^https\:\/\/[\w\-\.]+\.myschoolautomation\.com$/,/^https\:\/\/[\w\-\.]+\.myschooldemo\.com$/,/^https\:\/\/[\w\-\.]+\.myschooltraining\.com$/,/^https\:\/\/[\w\-\.]+\.justgiving\.com$/,/^https\:\/\/sky\.blackbaudcdn\.net$/],o=function(){function e(e){var t=this;this.args=e,this.authTokenRequests=[],this.lastAuthTokenRequestId=0,this.modalRequests=[],this.lastModalRequestId=0,this.registeredAddinEvents={},this.sentEvents={},this.pendingSentEvents={},this.eventRequestId=0,this.supportedEventTypes=[],this.allowedOrigins=s,this.initConfig(e.config),this.windowMessageHandler=function(e){t.handleMessage(e)},window.addEventListener("message",this.windowMessageHandler),this.raiseAddinReadyMessage()}return e.getQueryString=function(){return window.location.search},e.prototype.destroy=function(){window.removeEventListener("message",this.windowMessageHandler),this.heightChangeIntervalId&&clearInterval(this.heightChangeIntervalId)},e.prototype.navigate=function(e){this.postMessageToHostPage({message:{url:e.url},messageType:"navigate"})},e.prototype.getAuthToken=function(){return this.getUserIdentityToken()},e.prototype.getUserIdentityToken=function(){var e=this;return new Promise((function(t,s){var o=++e.lastAuthTokenRequestId;e.authTokenRequests[o]={reject:s,resolve:t},e.postMessageToHostPage({message:{authTokenRequestId:o},messageType:"get-auth-token"})}))},e.prototype.showModal=function(e){var t=this;return{modalClosed:new Promise((function(s,o){var n=++t.lastModalRequestId;t.modalRequests[n]={reject:o,resolve:s},t.postMessageToHostPage({message:{args:e,modalRequestId:n},messageType:"show-modal"})}))}},e.prototype.closeModal=function(e){this.postMessageToHostPage({message:e,messageType:"close-modal"})},e.prototype.openHelp=function(e){this.postMessageToHostPage({message:{helpKey:e.helpKey},messageType:"open-help"})},e.prototype.showToast=function(e){this.postMessageToHostPage({message:e,messageType:"show-toast"})},e.prototype.showFlyout=function(e){var t=this;return{flyoutClosed:new Promise((function(s,o){e.defaultWidth=e.defaultWidth,e.maxWidth=e.maxWidth,e.minWidth=e.minWidth,t.flyoutRequest={reject:o,resolve:s},t.postMessageToHostPage({message:e,messageType:"show-flyout"})}))}},e.prototype.closeFlyout=function(){this.postMessageToHostPage({messageType:"close-flyout"})},e.prototype.showConfirm=function(e){var t=this;return new Promise((function(s,o){t.confirmRequest={reject:o,resolve:s},t.postMessageToHostPage({message:e,messageType:"show-confirm"})}))},e.prototype.showError=function(e){this.postMessageToHostPage({message:e,messageType:"show-error"})},e.prototype.showWait=function(){this.postMessageToHostPage({messageType:"show-wait"})},e.prototype.hideWait=function(){this.postMessageToHostPage({messageType:"hide-wait"})},e.prototype.addEventHandler=function(e,t){this.registeredAddinEvents[e]=t},e.prototype.sendEvent=function(e){var t=this;return new Promise((function(s,o){var n=e.type;t.supportedEventTypes.includes(n)||o("Event type not supported");var i=t.pendingSentEvents[n];i&&(clearTimeout(i.timeoutId),i.reject("Event cancelled"));var a=setTimeout((function(){delete t.pendingSentEvents[n],t.postMessageToHostPage({message:{event:e,eventRequestId:t.eventRequestId},messageType:"client-event"}),t.sentEvents[t.eventRequestId]=s,t.eventRequestId++}),200);t.pendingSentEvents[n]={reject:o,timeoutId:a}}))},e.prototype.initConfig=function(e){var t;(null===(t=null==e?void 0:e.allowedOrigins)||void 0===t?void 0:t.length)>0&&(this.allowedOrigins=this.allowedOrigins.concat(e.allowedOrigins),this.allowedOrigins=this.allowedOrigins.reduce((function(e,t){return e.find((function(e){return e.source===t.source}))||e.push(t),e}),[]))},e.prototype.raiseAddinReadyMessage=function(){this.postMessageToHostPage({messageType:"ready"},"*")},e.prototype.handleModalClosedMessage=function(e){var t=this.modalRequests,s=e.modalRequestId;t[s].resolve(e.context),t[s]=void 0},e.prototype.handleAuthTokenMessage=function(e){var t=this.authTokenRequests,s=e.message.authTokenRequestId,o=t[s];switch(e.messageType){case"auth-token":var n=e.message.authToken;o.resolve(n);break;case"auth-token-fail":o.reject(e.message.reason)}t[s]=void 0},e.prototype.handleMessage=function(e){var t=this,s=e.data;if(s&&"bb-addin-host"===s.source)if("host-ready"===s.messageType)this.setKnownAllowedHostOrigin(e.origin),this.trackHeightChangesOfAddinContent(),this.supportedEventTypes=s.message.supportedEventTypes||[],this.args.callbacks.init({context:s.message.context,envId:s.message.envId,ready:function(e){t.checkForHeightChangesOfAddinContent(),t.postMessageToHostPage({message:e,messageType:"addin-ready"})},supportedEventTypes:this.supportedEventTypes,themeSettings:s.message.themeSettings});else if(this.isFromValidOrigin(e))switch(s.messageType){case"action-click":this.args.callbacks.actionClick&&this.args.callbacks.actionClick(s.message.reason);break;case"auth-token":case"auth-token-fail":this.handleAuthTokenMessage(s);break;case"modal-closed":this.handleModalClosedMessage(s.message);break;case"button-click":this.args.callbacks.buttonClick&&this.args.callbacks.buttonClick();break;case"update-context":this.args.callbacks.updateContext&&this.args.callbacks.updateContext(s.message);break;case"confirm-closed":this.confirmRequest&&(this.confirmRequest.resolve(s.message.reason),this.confirmRequest=void 0);break;case"flyout-closed":this.flyoutRequest&&(this.flyoutRequest.resolve(),this.flyoutRequest=void 0);break;case"flyout-next-click":this.args.callbacks.flyoutNextClick&&this.args.callbacks.flyoutNextClick();break;case"flyout-previous-click":this.args.callbacks.flyoutPreviousClick&&this.args.callbacks.flyoutPreviousClick();break;case"help-click":this.args.callbacks.helpClick&&this.args.callbacks.helpClick();break;case"inline-help-click":this.args.callbacks.inlineHelpClick&&this.args.callbacks.inlineHelpClick();break;case"settings-click":this.args.callbacks.settingsClick&&this.args.callbacks.settingsClick();break;case"theme-change":this.args.callbacks.themeChange&&this.args.callbacks.themeChange(s.message.themeSettings);break;case"host-event":this.processHostEvent(s.message);break;case"event-received":this.resolveClientEvent(s.message)}else this.warnInvalidOrigin()},e.prototype.setKnownAllowedHostOrigin=function(e){for(var t=0,s=this.allowedOrigins;t<s.length;t++)if(s[t].test(e))return void(this.trustedOrigin=e)},e.prototype.checkForHeightChangesOfAddinContent=function(){var e=document.documentElement.offsetHeight;e!==this.lastPostedIframeHeight&&(this.lastPostedIframeHeight=e,this.postMessageToHostPage({message:{height:e+"px"},messageType:"height-change"}))},e.prototype.trackHeightChangesOfAddinContent=function(){var e=this;this.heightChangeIntervalId=setInterval((function(){e.checkForHeightChangesOfAddinContent()}),1e3)},e.prototype.postMessageToHostPage=function(e,t){e.source="bb-addin-client",e.addinId=this.getQueryVariable("addinId"),(t=t||this.trustedOrigin)?window.parent.postMessage(e,t):this.warnInvalidOrigin()},e.prototype.processHostEvent=function(e){var t=this,s=e.context,o=this.registeredAddinEvents[s.type];(o?this.isBlockingEventType(s.type)?new Promise((function(e){o(s.context,(function(t){e(t)}))})):new Promise((function(e){o(s.context),e(void 0)})):Promise.resolve()).then((function(s){return t.postEventReceivedMessage(e.eventRequestId,s)}))},e.prototype.isBlockingEventType=function(e){switch(e){case"form-save":case"form-cancel":case"load-data":return!0}return!1},e.prototype.postEventReceivedMessage=function(e,t){this.postMessageToHostPage({message:{eventRequestId:e,data:t},messageType:"event-received"})},e.prototype.resolveClientEvent=function(e){var t=e.eventRequestId,s=this.sentEvents[t];s&&(s(),delete this.sentEvents[t])},e.prototype.isFromValidOrigin=function(e){return e.origin===this.trustedOrigin},e.prototype.warnInvalidOrigin=function(){console.warn("The origin is not trusted because the host-ready message has not been sent or because the host origin is not a whitelisted origin.")},e.prototype.getQueryVariable=function(t){for(var s=0,o=e.getQueryString().substring(1).split("&");s<o.length;s++){var n=o[s].split("=");if(decodeURIComponent(n[0])===t)return decodeURIComponent(n[1])}},e}();t.AddinClient=o},93:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},294:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},714:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},819:(e,t)=>{var s;Object.defineProperty(t,"__esModule",{value:!0}),t.AddinButtonStyle=void 0,(s=t.AddinButtonStyle||(t.AddinButtonStyle={}))[s.None=0]="None",s[s.Add=1]="Add",s[s.Edit=2]="Edit",s[s.Delete=3]="Delete"},676:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},233:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},455:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},407:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},75:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},258:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},413:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},954:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},663:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},542:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},610:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},95:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},581:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},342:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},790:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},212:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},88:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},90:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},948:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},468:(e,t)=>{var s;Object.defineProperty(t,"__esModule",{value:!0}),t.AddinConfirmButtonStyle=void 0,(s=t.AddinConfirmButtonStyle||(t.AddinConfirmButtonStyle={}))[s.Default=0]="Default",s[s.Primary=1]="Primary",s[s.Link=2]="Link"},756:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},545:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},993:(e,t)=>{var s;Object.defineProperty(t,"__esModule",{value:!0}),t.AddinTabSummaryStyle=void 0,(s=t.AddinTabSummaryStyle||(t.AddinTabSummaryStyle={}))[s.None=0]="None",s[s.Text=1]="Text"},518:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},590:(e,t)=>{var s;Object.defineProperty(t,"__esModule",{value:!0}),t.AddinTileSummaryStyle=void 0,(s=t.AddinTileSummaryStyle||(t.AddinTileSummaryStyle={}))[s.None=0]="None",s[s.Text=1]="Text",s[s.Check=2]="Check"},480:(e,t)=>{var s;Object.defineProperty(t,"__esModule",{value:!0}),t.AddinToastStyle=void 0,(s=t.AddinToastStyle||(t.AddinToastStyle={}))[s.Danger=0]="Danger",s[s.Info=1]="Info",s[s.Success=2]="Success",s[s.Warning=3]="Warning"},142:function(e,t,s){var o=this&&this.__createBinding||(Object.create?function(e,t,s,o){void 0===o&&(o=s);var n=Object.getOwnPropertyDescriptor(t,s);n&&!("get"in n?!t.__esModule:n.writable||n.configurable)||(n={enumerable:!0,get:function(){return t[s]}}),Object.defineProperty(e,o,n)}:function(e,t,s,o){void 0===o&&(o=s),e[o]=t[s]}),n=this&&this.__exportStar||function(e,t){for(var s in e)"default"===s||Object.prototype.hasOwnProperty.call(t,s)||o(t,e,s)};Object.defineProperty(t,"__esModule",{value:!0}),n(s(93),t),n(s(294),t),n(s(714),t),n(s(819),t),n(s(676),t),n(s(233),t),n(s(455),t),n(s(407),t),n(s(75),t),n(s(258),t),n(s(413),t),n(s(954),t),n(s(663),t),n(s(542),t),n(s(610),t),n(s(95),t),n(s(581),t),n(s(342),t),n(s(790),t),n(s(212),t),n(s(88),t),n(s(90),t),n(s(948),t),n(s(756),t),n(s(468),t),n(s(545),t),n(s(993),t),n(s(518),t),n(s(590),t),n(s(480),t)},220:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},606:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},57:function(e,t,s){var o=this&&this.__createBinding||(Object.create?function(e,t,s,o){void 0===o&&(o=s);var n=Object.getOwnPropertyDescriptor(t,s);n&&!("get"in n?!t.__esModule:n.writable||n.configurable)||(n={enumerable:!0,get:function(){return t[s]}}),Object.defineProperty(e,o,n)}:function(e,t,s,o){void 0===o&&(o=s),e[o]=t[s]}),n=this&&this.__exportStar||function(e,t){for(var s in e)"default"===s||Object.prototype.hasOwnProperty.call(t,s)||o(t,e,s)};Object.defineProperty(t,"__esModule",{value:!0}),n(s(220),t),n(s(606),t)},983:function(e,t,s){var o=this&&this.__createBinding||(Object.create?function(e,t,s,o){void 0===o&&(o=s);var n=Object.getOwnPropertyDescriptor(t,s);n&&!("get"in n?!t.__esModule:n.writable||n.configurable)||(n={enumerable:!0,get:function(){return t[s]}}),Object.defineProperty(e,o,n)}:function(e,t,s,o){void 0===o&&(o=s),e[o]=t[s]}),n=this&&this.__exportStar||function(e,t){for(var s in e)"default"===s||Object.prototype.hasOwnProperty.call(t,s)||o(t,e,s)};Object.defineProperty(t,"__esModule",{value:!0}),n(s(903),t),n(s(142),t),n(s(57),t)}},t={};return function s(o){var n=t[o];if(void 0!==n)return n.exports;var i=t[o]={exports:{}};return e[o].call(i.exports,i,i.exports,s),i.exports}(789)})()));
1
+ !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.BBSkyAddinClient=t():e.BBSkyAddinClient=t()}(self,(()=>(()=>{"use strict";var e={789:function(e,t,o){var s=this&&this.__createBinding||(Object.create?function(e,t,o,s){void 0===s&&(s=o);var n=Object.getOwnPropertyDescriptor(t,o);n&&!("get"in n?!t.__esModule:n.writable||n.configurable)||(n={enumerable:!0,get:function(){return t[o]}}),Object.defineProperty(e,s,n)}:function(e,t,o,s){void 0===s&&(s=o),e[s]=t[o]}),n=this&&this.__exportStar||function(e,t){for(var o in e)"default"===o||Object.prototype.hasOwnProperty.call(t,o)||s(t,e,o)};Object.defineProperty(t,"__esModule",{value:!0}),n(o(983),t)},903:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.AddinClient=void 0;var o=[/^https\:\/\/[\w\-\.]+\.blackbaud\.com$/,/^https\:\/\/[\w\-\.]+\.blackbaud\-dev\.com$/,/^http\:\/\/[\w\-\.]+\.blackbaud\-dev\.com$/,/^https\:\/\/[\w\-\.]+\.blackbaud\-test\.com$/,/^https\:\/\/[\w\-\.]+\.blackbaudhosting\.com$/,/^https\:\/\/[\w\-\.]+\.bbcloudservices\.com$/,/^https\:\/\/localhost(\:[0-9]+)?$/,/^https\:\/\/secure[2|3|8]\.convio\.net$/,/^https\:\/\/testweb\.convio\.com$/,/^https\:\/\/[\w\-\.]+\.conviocloud\.com$/,/^https\:\/\/[\w\-\.]+\.blackbaudcloud\.com$/,/^https\:\/\/[\w\-\.]+\.blackbaudfaith\.com$/,/^https\:\/\/[\w\-\.]+\.blackbaudportal\.com$/,/^https\:\/\/[\w\-\.]+\.bbk12\.com$/,/^https\:\/\/[\w\-\.]+\.mycampus\-app\.com$/,/^https\:\/\/[\w\-\.]+\.myschoolapp\.com$/,/^https\:\/\/[\w\-\.]+\.myschoolautomation\.com$/,/^https\:\/\/[\w\-\.]+\.myschooldemo\.com$/,/^https\:\/\/[\w\-\.]+\.myschooltraining\.com$/,/^https\:\/\/[\w\-\.]+\.justgiving\.com$/,/^https\:\/\/sky\.blackbaudcdn\.net$/],s={"action-button":!0,box:!0,button:!0,dataset:!0,flyout:!0,generic:!0,modal:!0,page:!0,tab:!0,tile:!0,"vertical-tab-form":!0},n=[{property:"background-color",value:"transparent"},{property:"background-image",value:"none"}],a=function(){function e(e){var t=this;this.args=e,this.authTokenRequests=[],this.lastAuthTokenRequestId=0,this.modalRequests=[],this.lastModalRequestId=0,this.registeredAddinEvents={},this.sentEvents={},this.pendingSentEvents={},this.eventRequestId=0,this.supportedEventTypes=[],this.destroyed=!1,this.replacedBackgroundDeclarations=[],this.allowedOrigins=o,this.initConfig(e.config),this.windowMessageHandler=function(e){t.handleMessage(e)},window.addEventListener("message",this.windowMessageHandler),this.raiseAddinReadyMessage()}return e.getQueryString=function(){return window.location.search},e.prototype.destroy=function(){window.removeEventListener("message",this.windowMessageHandler),this.heightChangeIntervalId&&clearInterval(this.heightChangeIntervalId),this.cleanupTransparentBackground(),this.destroyed=!0},e.prototype.navigate=function(e){this.postMessageToHostPage({message:{url:e.url},messageType:"navigate"})},e.prototype.getAuthToken=function(){return this.getUserIdentityToken()},e.prototype.getUserIdentityToken=function(){var e=this;return new Promise((function(t,o){var s=++e.lastAuthTokenRequestId;e.authTokenRequests[s]={reject:o,resolve:t},e.postMessageToHostPage({message:{authTokenRequestId:s},messageType:"get-auth-token"})}))},e.prototype.showModal=function(e){var t=this;return{modalClosed:new Promise((function(o,s){var n=++t.lastModalRequestId;t.modalRequests[n]={reject:s,resolve:o},t.postMessageToHostPage({message:{args:e,modalRequestId:n},messageType:"show-modal"})}))}},e.prototype.closeModal=function(e){this.postMessageToHostPage({message:e,messageType:"close-modal"})},e.prototype.openHelp=function(e){this.postMessageToHostPage({message:{helpKey:e.helpKey},messageType:"open-help"})},e.prototype.showToast=function(e){this.postMessageToHostPage({message:e,messageType:"show-toast"})},e.prototype.showFlyout=function(e){var t=this;return{flyoutClosed:new Promise((function(o,s){e.defaultWidth=e.defaultWidth,e.maxWidth=e.maxWidth,e.minWidth=e.minWidth,t.flyoutRequest={reject:s,resolve:o},t.postMessageToHostPage({message:e,messageType:"show-flyout"})}))}},e.prototype.closeFlyout=function(){this.postMessageToHostPage({messageType:"close-flyout"})},e.prototype.showConfirm=function(e){var t=this;return new Promise((function(o,s){t.confirmRequest={reject:s,resolve:o},t.postMessageToHostPage({message:e,messageType:"show-confirm"})}))},e.prototype.showError=function(e){this.postMessageToHostPage({message:e,messageType:"show-error"})},e.prototype.showWait=function(){this.postMessageToHostPage({messageType:"show-wait"})},e.prototype.hideWait=function(){this.postMessageToHostPage({messageType:"hide-wait"})},e.prototype.addEventHandler=function(e,t){this.registeredAddinEvents[e]=t},e.prototype.sendEvent=function(e){var t=this;return new Promise((function(o,s){var n=e.type;t.supportedEventTypes.includes(n)||s("Event type not supported");var a=t.pendingSentEvents[n];a&&(clearTimeout(a.timeoutId),a.reject("Event cancelled"));var i=setTimeout((function(){delete t.pendingSentEvents[n],t.postMessageToHostPage({message:{event:e,eventRequestId:t.eventRequestId},messageType:"client-event"}),t.sentEvents[t.eventRequestId]=o,t.eventRequestId++}),200);t.pendingSentEvents[n]={reject:s,timeoutId:i}}))},e.prototype.initConfig=function(e){var t;(null===(t=null==e?void 0:e.allowedOrigins)||void 0===t?void 0:t.length)>0&&(this.allowedOrigins=this.allowedOrigins.concat(e.allowedOrigins),this.allowedOrigins=this.allowedOrigins.reduce((function(e,t){return e.find((function(e){return e.source===t.source}))||e.push(t),e}),[]))},e.prototype.applyModalStyle=function(e){var t=this;!0===(null==e?void 0:e.transparentBackground)?(this.makeBackgroundTransparent(document.documentElement),document.body?this.makeBackgroundTransparent(document.body):this.bodyReadyHandler||(this.bodyReadyHandler=function(){t.bodyReadyHandler=void 0,document.body&&t.makeBackgroundTransparent(document.body)},document.addEventListener("DOMContentLoaded",this.bodyReadyHandler,{once:!0}))):this.cleanupTransparentBackground()},e.prototype.makeBackgroundTransparent=function(e){for(var t=0,o=n;t<o.length;t++){var s=o[t],a=s.property,i=e.style.getPropertyValue(a),r=e.style.getPropertyPriority(a);i===s.value&&"important"===r||(this.replacedBackgroundDeclarations.push({element:e,priority:r,property:a,transparentValue:s.value,value:i}),e.style.setProperty(a,s.value,"important"))}},e.prototype.cleanupTransparentBackground=function(){this.bodyReadyHandler&&(document.removeEventListener("DOMContentLoaded",this.bodyReadyHandler),this.bodyReadyHandler=void 0);for(var e=0,t=this.replacedBackgroundDeclarations;e<t.length;e++){var o=t[e],s=o.element.style;s.getPropertyValue(o.property)===o.transparentValue&&"important"===s.getPropertyPriority(o.property)&&(o.value?s.setProperty(o.property,o.value,o.priority):s.removeProperty(o.property))}this.replacedBackgroundDeclarations=[]},e.prototype.getKnownAddinType=function(e){if("string"==typeof e&&s.hasOwnProperty(e))return e},e.prototype.raiseAddinReadyMessage=function(){this.postMessageToHostPage({messageType:"ready"},"*")},e.prototype.handleModalClosedMessage=function(e){var t=this.modalRequests,o=e.modalRequestId;t[o].resolve(e.context),t[o]=void 0},e.prototype.handleAuthTokenMessage=function(e){var t=this.authTokenRequests,o=e.message.authTokenRequestId,s=t[o];switch(e.messageType){case"auth-token":var n=e.message.authToken;s.resolve(n);break;case"auth-token-fail":s.reject(e.message.reason)}t[o]=void 0},e.prototype.handleMessage=function(e){var t=this,o=e.data;if(o&&"bb-addin-host"===o.source)if("host-ready"===o.messageType)this.setKnownAllowedHostOrigin(e.origin),this.trackHeightChangesOfAddinContent(),this.supportedEventTypes=o.message.supportedEventTypes||[],this.args.callbacks.init({addinType:this.getKnownAddinType(o.message.addinType),context:o.message.context,envId:o.message.envId,ready:function(e){var o;t.destroyed||t.applyModalStyle(null===(o=null==e?void 0:e.modalConfig)||void 0===o?void 0:o.style),t.checkForHeightChangesOfAddinContent(),t.postMessageToHostPage({message:e,messageType:"addin-ready"})},supportedEventTypes:this.supportedEventTypes,themeSettings:o.message.themeSettings});else if(this.isFromValidOrigin(e))switch(o.messageType){case"action-click":this.args.callbacks.actionClick&&this.args.callbacks.actionClick(o.message.reason);break;case"auth-token":case"auth-token-fail":this.handleAuthTokenMessage(o);break;case"modal-closed":this.handleModalClosedMessage(o.message);break;case"button-click":this.args.callbacks.buttonClick&&this.args.callbacks.buttonClick();break;case"update-context":this.args.callbacks.updateContext&&this.args.callbacks.updateContext(o.message);break;case"confirm-closed":this.confirmRequest&&(this.confirmRequest.resolve(o.message.reason),this.confirmRequest=void 0);break;case"flyout-closed":this.flyoutRequest&&(this.flyoutRequest.resolve(),this.flyoutRequest=void 0);break;case"flyout-next-click":this.args.callbacks.flyoutNextClick&&this.args.callbacks.flyoutNextClick();break;case"flyout-previous-click":this.args.callbacks.flyoutPreviousClick&&this.args.callbacks.flyoutPreviousClick();break;case"help-click":this.args.callbacks.helpClick&&this.args.callbacks.helpClick();break;case"inline-help-click":this.args.callbacks.inlineHelpClick&&this.args.callbacks.inlineHelpClick();break;case"settings-click":this.args.callbacks.settingsClick&&this.args.callbacks.settingsClick();break;case"theme-change":this.args.callbacks.themeChange&&this.args.callbacks.themeChange(o.message.themeSettings);break;case"host-event":this.processHostEvent(o.message);break;case"event-received":this.resolveClientEvent(o.message)}else this.warnInvalidOrigin()},e.prototype.setKnownAllowedHostOrigin=function(e){for(var t=0,o=this.allowedOrigins;t<o.length;t++)if(o[t].test(e))return void(this.trustedOrigin=e)},e.prototype.checkForHeightChangesOfAddinContent=function(){var e=document.documentElement.offsetHeight;e!==this.lastPostedIframeHeight&&(this.lastPostedIframeHeight=e,this.postMessageToHostPage({message:{height:e+"px"},messageType:"height-change"}))},e.prototype.trackHeightChangesOfAddinContent=function(){var e=this;this.heightChangeIntervalId=setInterval((function(){e.checkForHeightChangesOfAddinContent()}),1e3)},e.prototype.postMessageToHostPage=function(e,t){e.source="bb-addin-client",e.addinId=this.getQueryVariable("addinId"),(t=t||this.trustedOrigin)?window.parent.postMessage(e,t):this.warnInvalidOrigin()},e.prototype.processHostEvent=function(e){var t=this,o=e.context,s=this.registeredAddinEvents[o.type];(s?this.isBlockingEventType(o.type)?new Promise((function(e){s(o.context,(function(t){e(t)}))})):new Promise((function(e){s(o.context),e(void 0)})):Promise.resolve()).then((function(o){return t.postEventReceivedMessage(e.eventRequestId,o)}))},e.prototype.isBlockingEventType=function(e){switch(e){case"form-save":case"form-cancel":case"load-data":return!0}return!1},e.prototype.postEventReceivedMessage=function(e,t){this.postMessageToHostPage({message:{eventRequestId:e,data:t},messageType:"event-received"})},e.prototype.resolveClientEvent=function(e){var t=e.eventRequestId,o=this.sentEvents[t];o&&(o(),delete this.sentEvents[t])},e.prototype.isFromValidOrigin=function(e){return e.origin===this.trustedOrigin},e.prototype.warnInvalidOrigin=function(){console.warn("The origin is not trusted because the host-ready message has not been sent or because the host origin is not a whitelisted origin.")},e.prototype.getQueryVariable=function(t){for(var o=0,s=e.getQueryString().substring(1).split("&");o<s.length;o++){var n=s[o].split("=");if(decodeURIComponent(n[0])===t)return decodeURIComponent(n[1])}},e}();t.AddinClient=a},93:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},294:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},714:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},819:(e,t)=>{var o;Object.defineProperty(t,"__esModule",{value:!0}),t.AddinButtonStyle=void 0,(o=t.AddinButtonStyle||(t.AddinButtonStyle={}))[o.None=0]="None",o[o.Add=1]="Add",o[o.Edit=2]="Edit",o[o.Delete=3]="Delete"},676:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},233:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},455:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},407:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},75:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},258:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},413:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},954:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},663:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},542:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},610:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},95:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},581:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},342:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},790:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},212:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},88:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},90:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},948:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},468:(e,t)=>{var o;Object.defineProperty(t,"__esModule",{value:!0}),t.AddinConfirmButtonStyle=void 0,(o=t.AddinConfirmButtonStyle||(t.AddinConfirmButtonStyle={}))[o.Default=0]="Default",o[o.Primary=1]="Primary",o[o.Link=2]="Link"},756:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},545:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},993:(e,t)=>{var o;Object.defineProperty(t,"__esModule",{value:!0}),t.AddinTabSummaryStyle=void 0,(o=t.AddinTabSummaryStyle||(t.AddinTabSummaryStyle={}))[o.None=0]="None",o[o.Text=1]="Text"},518:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},590:(e,t)=>{var o;Object.defineProperty(t,"__esModule",{value:!0}),t.AddinTileSummaryStyle=void 0,(o=t.AddinTileSummaryStyle||(t.AddinTileSummaryStyle={}))[o.None=0]="None",o[o.Text=1]="Text",o[o.Check=2]="Check"},480:(e,t)=>{var o;Object.defineProperty(t,"__esModule",{value:!0}),t.AddinToastStyle=void 0,(o=t.AddinToastStyle||(t.AddinToastStyle={}))[o.Danger=0]="Danger",o[o.Info=1]="Info",o[o.Success=2]="Success",o[o.Warning=3]="Warning"},671:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},142:function(e,t,o){var s=this&&this.__createBinding||(Object.create?function(e,t,o,s){void 0===s&&(s=o);var n=Object.getOwnPropertyDescriptor(t,o);n&&!("get"in n?!t.__esModule:n.writable||n.configurable)||(n={enumerable:!0,get:function(){return t[o]}}),Object.defineProperty(e,s,n)}:function(e,t,o,s){void 0===s&&(s=o),e[s]=t[o]}),n=this&&this.__exportStar||function(e,t){for(var o in e)"default"===o||Object.prototype.hasOwnProperty.call(t,o)||s(t,e,o)};Object.defineProperty(t,"__esModule",{value:!0}),n(o(93),t),n(o(294),t),n(o(714),t),n(o(819),t),n(o(676),t),n(o(233),t),n(o(455),t),n(o(407),t),n(o(75),t),n(o(258),t),n(o(413),t),n(o(954),t),n(o(663),t),n(o(542),t),n(o(610),t),n(o(95),t),n(o(581),t),n(o(342),t),n(o(790),t),n(o(212),t),n(o(88),t),n(o(90),t),n(o(948),t),n(o(756),t),n(o(468),t),n(o(545),t),n(o(993),t),n(o(518),t),n(o(590),t),n(o(480),t),n(o(671),t)},220:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},606:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},57:function(e,t,o){var s=this&&this.__createBinding||(Object.create?function(e,t,o,s){void 0===s&&(s=o);var n=Object.getOwnPropertyDescriptor(t,o);n&&!("get"in n?!t.__esModule:n.writable||n.configurable)||(n={enumerable:!0,get:function(){return t[o]}}),Object.defineProperty(e,s,n)}:function(e,t,o,s){void 0===s&&(s=o),e[s]=t[o]}),n=this&&this.__exportStar||function(e,t){for(var o in e)"default"===o||Object.prototype.hasOwnProperty.call(t,o)||s(t,e,o)};Object.defineProperty(t,"__esModule",{value:!0}),n(o(220),t),n(o(606),t)},983:function(e,t,o){var s=this&&this.__createBinding||(Object.create?function(e,t,o,s){void 0===s&&(s=o);var n=Object.getOwnPropertyDescriptor(t,o);n&&!("get"in n?!t.__esModule:n.writable||n.configurable)||(n={enumerable:!0,get:function(){return t[o]}}),Object.defineProperty(e,s,n)}:function(e,t,o,s){void 0===s&&(s=o),e[s]=t[o]}),n=this&&this.__exportStar||function(e,t){for(var o in e)"default"===o||Object.prototype.hasOwnProperty.call(t,o)||s(t,e,o)};Object.defineProperty(t,"__esModule",{value:!0}),n(o(903),t),n(o(142),t),n(o(57),t)}},t={};return function o(s){var n=t[s];if(void 0!==n)return n.exports;var a=t[s]={exports:{}};return e[s].call(a.exports,a,a.exports,o),a.exports}(789)})()));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@blackbaud/sky-addin-client",
3
- "version": "1.7.4",
3
+ "version": "1.8.0",
4
4
  "description": "SKY add-in client",
5
5
  "main": "dist/bundles/sky-addin-client.umd.js",
6
6
  "module": "index.js",
@@ -96,6 +96,18 @@ export declare class AddinClient {
96
96
  * The add-in client will throw an error if an event is attempted but not one the supported types.
97
97
  */
98
98
  private supportedEventTypes;
99
+ /**
100
+ * Indicates whether the client has been destroyed.
101
+ */
102
+ private destroyed;
103
+ /**
104
+ * Inline background declarations replaced by this client to make the document transparent.
105
+ */
106
+ private replacedBackgroundDeclarations;
107
+ /**
108
+ * Handler waiting for the body to be parsed before making it transparent.
109
+ */
110
+ private bodyReadyHandler;
99
111
  /**
100
112
  * Collection of regexs for our whitelist of host origins.
101
113
  */
@@ -193,6 +205,27 @@ export declare class AddinClient {
193
205
  */
194
206
  sendEvent(args: AddinClientEventArgs): Promise<void>;
195
207
  private initConfig;
208
+ /**
209
+ * Applies the client-owned document transparency for a modal add-in.
210
+ * @param style The modal style from the ready args.
211
+ */
212
+ private applyModalStyle;
213
+ /**
214
+ * Makes an element's background transparent with inline declarations, recording
215
+ * the declarations it replaces so they can be restored.
216
+ * @param element The element to make transparent.
217
+ */
218
+ private makeBackgroundTransparent;
219
+ /**
220
+ * Restores document background declarations replaced by this client.
221
+ */
222
+ private cleanupTransparentBackground;
223
+ /**
224
+ * Returns the add-in type provided by the host if this client recognizes it.
225
+ * @param addinType The add-in type provided by the host.
226
+ * @returns The add-in type, or undefined if it is missing or unrecognized.
227
+ */
228
+ private getKnownAddinType;
196
229
  /**
197
230
  * Post a message to the host page informing it that the add-in is
198
231
  * now started and listening for messages from the host.