@saasquatch/squatch-js 2.6.0-4 → 2.6.0-5

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.
Files changed (36) hide show
  1. package/coverage/clover.xml +843 -64
  2. package/coverage/coverage-final.json +19 -1
  3. package/coverage/lcov-report/DeclarativeWidget.ts.html +298 -118
  4. package/coverage/lcov-report/Widgets.ts.html +70 -22
  5. package/coverage/lcov-report/api/AnalyticsApi.ts.html +38 -38
  6. package/coverage/lcov-report/api/EventsApi.ts.html +352 -0
  7. package/coverage/lcov-report/api/WidgetApi.ts.html +88 -61
  8. package/coverage/lcov-report/api/graphql.ts.html +1 -1
  9. package/coverage/lcov-report/squatch.ts.html +721 -0
  10. package/coverage/lcov-report/utils/cookieUtils.ts.html +1 -1
  11. package/coverage/lcov-report/utils/decodeUserJwt.ts.html +1 -1
  12. package/coverage/lcov-report/utils/domready.ts.html +1 -1
  13. package/coverage/lcov-report/utils/io.ts.html +7 -7
  14. package/coverage/lcov-report/utils/utmUtils.ts.html +22 -22
  15. package/coverage/lcov-report/utils/validate.ts.html +41 -41
  16. package/coverage/lcov-report/validate.ts.html +1 -1
  17. package/coverage/lcov-report/widgets/EmbedWidget.ts.html +24 -3
  18. package/coverage/lcov-report/widgets/PopupWidget.ts.html +17 -2
  19. package/coverage/lcov-report/widgets/Widget.ts.html +1 -1
  20. package/coverage/lcov-report/widgets/Widgets.ts.html +61 -16
  21. package/coverage/lcov-report/widgets/declarative/DeclarativeWidget.ts.html +368 -74
  22. package/coverage/lcov-report/widgets/declarative/DeclarativeWidgets.ts.html +388 -0
  23. package/coverage/lcov.info +1553 -125
  24. package/dist/api/WidgetApi.d.ts +2 -2
  25. package/dist/squatch.d.ts +28 -1
  26. package/dist/squatch.esm.js +176 -29
  27. package/dist/squatch.esm.js.map +1 -1
  28. package/dist/squatch.js +176 -29
  29. package/dist/squatch.js.map +1 -1
  30. package/dist/squatch.min.js +1 -1
  31. package/dist/widgets/EmbedWidget.d.ts +5 -0
  32. package/dist/widgets/PopupWidget.d.ts +6 -1
  33. package/dist/widgets/Widgets.d.ts +15 -2
  34. package/dist/widgets/declarative/DeclarativeWidget.d.ts +57 -1
  35. package/dist/widgets/declarative/DeclarativeWidgets.d.ts +22 -0
  36. package/package.json +1 -1
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">34.61% </span>
26
+ <span class="strong">60.93% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>18/52</span>
28
+ <span class='fraction'>39/64</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">0% </span>
33
+ <span class="strong">54.76% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>0/33</span>
35
+ <span class='fraction'>23/42</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">9.09% </span>
40
+ <span class="strong">41.66% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>1/11</span>
42
+ <span class='fraction'>5/12</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">38.29% </span>
47
+ <span class="strong">67.24% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>18/47</span>
49
+ <span class='fraction'>39/58</span>
50
50
  </div>
51
51
 
52
52
 
@@ -61,7 +61,7 @@
61
61
  </div>
62
62
  </template>
63
63
  </div>
64
- <div class='status-line low'></div>
64
+ <div class='status-line medium'></div>
65
65
  <pre><table class="coverage">
66
66
  <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
67
67
  <a name='L2'></a><a href='#L2'>2</a>
@@ -201,12 +201,115 @@
201
201
  <a name='L136'></a><a href='#L136'>136</a>
202
202
  <a name='L137'></a><a href='#L137'>137</a>
203
203
  <a name='L138'></a><a href='#L138'>138</a>
204
- <a name='L139'></a><a href='#L139'>139</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
204
+ <a name='L139'></a><a href='#L139'>139</a>
205
+ <a name='L140'></a><a href='#L140'>140</a>
206
+ <a name='L141'></a><a href='#L141'>141</a>
207
+ <a name='L142'></a><a href='#L142'>142</a>
208
+ <a name='L143'></a><a href='#L143'>143</a>
209
+ <a name='L144'></a><a href='#L144'>144</a>
210
+ <a name='L145'></a><a href='#L145'>145</a>
211
+ <a name='L146'></a><a href='#L146'>146</a>
212
+ <a name='L147'></a><a href='#L147'>147</a>
213
+ <a name='L148'></a><a href='#L148'>148</a>
214
+ <a name='L149'></a><a href='#L149'>149</a>
215
+ <a name='L150'></a><a href='#L150'>150</a>
216
+ <a name='L151'></a><a href='#L151'>151</a>
217
+ <a name='L152'></a><a href='#L152'>152</a>
218
+ <a name='L153'></a><a href='#L153'>153</a>
219
+ <a name='L154'></a><a href='#L154'>154</a>
220
+ <a name='L155'></a><a href='#L155'>155</a>
221
+ <a name='L156'></a><a href='#L156'>156</a>
222
+ <a name='L157'></a><a href='#L157'>157</a>
223
+ <a name='L158'></a><a href='#L158'>158</a>
224
+ <a name='L159'></a><a href='#L159'>159</a>
225
+ <a name='L160'></a><a href='#L160'>160</a>
226
+ <a name='L161'></a><a href='#L161'>161</a>
227
+ <a name='L162'></a><a href='#L162'>162</a>
228
+ <a name='L163'></a><a href='#L163'>163</a>
229
+ <a name='L164'></a><a href='#L164'>164</a>
230
+ <a name='L165'></a><a href='#L165'>165</a>
231
+ <a name='L166'></a><a href='#L166'>166</a>
232
+ <a name='L167'></a><a href='#L167'>167</a>
233
+ <a name='L168'></a><a href='#L168'>168</a>
234
+ <a name='L169'></a><a href='#L169'>169</a>
235
+ <a name='L170'></a><a href='#L170'>170</a>
236
+ <a name='L171'></a><a href='#L171'>171</a>
237
+ <a name='L172'></a><a href='#L172'>172</a>
238
+ <a name='L173'></a><a href='#L173'>173</a>
239
+ <a name='L174'></a><a href='#L174'>174</a>
240
+ <a name='L175'></a><a href='#L175'>175</a>
241
+ <a name='L176'></a><a href='#L176'>176</a>
242
+ <a name='L177'></a><a href='#L177'>177</a>
243
+ <a name='L178'></a><a href='#L178'>178</a>
244
+ <a name='L179'></a><a href='#L179'>179</a>
245
+ <a name='L180'></a><a href='#L180'>180</a>
246
+ <a name='L181'></a><a href='#L181'>181</a>
247
+ <a name='L182'></a><a href='#L182'>182</a>
248
+ <a name='L183'></a><a href='#L183'>183</a>
249
+ <a name='L184'></a><a href='#L184'>184</a>
250
+ <a name='L185'></a><a href='#L185'>185</a>
251
+ <a name='L186'></a><a href='#L186'>186</a>
252
+ <a name='L187'></a><a href='#L187'>187</a>
253
+ <a name='L188'></a><a href='#L188'>188</a>
254
+ <a name='L189'></a><a href='#L189'>189</a>
255
+ <a name='L190'></a><a href='#L190'>190</a>
256
+ <a name='L191'></a><a href='#L191'>191</a>
257
+ <a name='L192'></a><a href='#L192'>192</a>
258
+ <a name='L193'></a><a href='#L193'>193</a>
259
+ <a name='L194'></a><a href='#L194'>194</a>
260
+ <a name='L195'></a><a href='#L195'>195</a>
261
+ <a name='L196'></a><a href='#L196'>196</a>
262
+ <a name='L197'></a><a href='#L197'>197</a>
263
+ <a name='L198'></a><a href='#L198'>198</a>
264
+ <a name='L199'></a><a href='#L199'>199</a>
265
+ <a name='L200'></a><a href='#L200'>200</a>
266
+ <a name='L201'></a><a href='#L201'>201</a>
267
+ <a name='L202'></a><a href='#L202'>202</a>
268
+ <a name='L203'></a><a href='#L203'>203</a>
269
+ <a name='L204'></a><a href='#L204'>204</a>
270
+ <a name='L205'></a><a href='#L205'>205</a>
271
+ <a name='L206'></a><a href='#L206'>206</a>
272
+ <a name='L207'></a><a href='#L207'>207</a>
273
+ <a name='L208'></a><a href='#L208'>208</a>
274
+ <a name='L209'></a><a href='#L209'>209</a>
275
+ <a name='L210'></a><a href='#L210'>210</a>
276
+ <a name='L211'></a><a href='#L211'>211</a>
277
+ <a name='L212'></a><a href='#L212'>212</a>
278
+ <a name='L213'></a><a href='#L213'>213</a>
279
+ <a name='L214'></a><a href='#L214'>214</a>
280
+ <a name='L215'></a><a href='#L215'>215</a>
281
+ <a name='L216'></a><a href='#L216'>216</a>
282
+ <a name='L217'></a><a href='#L217'>217</a>
283
+ <a name='L218'></a><a href='#L218'>218</a>
284
+ <a name='L219'></a><a href='#L219'>219</a>
285
+ <a name='L220'></a><a href='#L220'>220</a>
286
+ <a name='L221'></a><a href='#L221'>221</a>
287
+ <a name='L222'></a><a href='#L222'>222</a>
288
+ <a name='L223'></a><a href='#L223'>223</a>
289
+ <a name='L224'></a><a href='#L224'>224</a>
290
+ <a name='L225'></a><a href='#L225'>225</a>
291
+ <a name='L226'></a><a href='#L226'>226</a>
292
+ <a name='L227'></a><a href='#L227'>227</a>
293
+ <a name='L228'></a><a href='#L228'>228</a>
294
+ <a name='L229'></a><a href='#L229'>229</a>
295
+ <a name='L230'></a><a href='#L230'>230</a>
296
+ <a name='L231'></a><a href='#L231'>231</a>
297
+ <a name='L232'></a><a href='#L232'>232</a>
298
+ <a name='L233'></a><a href='#L233'>233</a>
299
+ <a name='L234'></a><a href='#L234'>234</a>
300
+ <a name='L235'></a><a href='#L235'>235</a>
301
+ <a name='L236'></a><a href='#L236'>236</a>
302
+ <a name='L237'></a><a href='#L237'>237</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
303
+ <span class="cline-any cline-yes">1x</span>
205
304
  <span class="cline-any cline-yes">1x</span>
206
305
  <span class="cline-any cline-neutral">&nbsp;</span>
207
306
  <span class="cline-any cline-yes">1x</span>
208
307
  <span class="cline-any cline-yes">1x</span>
209
308
  <span class="cline-any cline-yes">1x</span>
309
+ <span class="cline-any cline-neutral">&nbsp;</span>
310
+ <span class="cline-any cline-neutral">&nbsp;</span>
311
+ <span class="cline-any cline-neutral">&nbsp;</span>
312
+ <span class="cline-any cline-neutral">&nbsp;</span>
210
313
  <span class="cline-any cline-yes">1x</span>
211
314
  <span class="cline-any cline-yes">1x</span>
212
315
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -222,6 +325,58 @@
222
325
  <span class="cline-any cline-neutral">&nbsp;</span>
223
326
  <span class="cline-any cline-neutral">&nbsp;</span>
224
327
  <span class="cline-any cline-neutral">&nbsp;</span>
328
+ <span class="cline-any cline-yes">1x</span>
329
+ <span class="cline-any cline-neutral">&nbsp;</span>
330
+ <span class="cline-any cline-neutral">&nbsp;</span>
331
+ <span class="cline-any cline-neutral">&nbsp;</span>
332
+ <span class="cline-any cline-neutral">&nbsp;</span>
333
+ <span class="cline-any cline-neutral">&nbsp;</span>
334
+ <span class="cline-any cline-neutral">&nbsp;</span>
335
+ <span class="cline-any cline-neutral">&nbsp;</span>
336
+ <span class="cline-any cline-neutral">&nbsp;</span>
337
+ <span class="cline-any cline-neutral">&nbsp;</span>
338
+ <span class="cline-any cline-neutral">&nbsp;</span>
339
+ <span class="cline-any cline-neutral">&nbsp;</span>
340
+ <span class="cline-any cline-neutral">&nbsp;</span>
341
+ <span class="cline-any cline-neutral">&nbsp;</span>
342
+ <span class="cline-any cline-neutral">&nbsp;</span>
343
+ <span class="cline-any cline-neutral">&nbsp;</span>
344
+ <span class="cline-any cline-neutral">&nbsp;</span>
345
+ <span class="cline-any cline-neutral">&nbsp;</span>
346
+ <span class="cline-any cline-neutral">&nbsp;</span>
347
+ <span class="cline-any cline-neutral">&nbsp;</span>
348
+ <span class="cline-any cline-neutral">&nbsp;</span>
349
+ <span class="cline-any cline-neutral">&nbsp;</span>
350
+ <span class="cline-any cline-neutral">&nbsp;</span>
351
+ <span class="cline-any cline-neutral">&nbsp;</span>
352
+ <span class="cline-any cline-neutral">&nbsp;</span>
353
+ <span class="cline-any cline-neutral">&nbsp;</span>
354
+ <span class="cline-any cline-neutral">&nbsp;</span>
355
+ <span class="cline-any cline-neutral">&nbsp;</span>
356
+ <span class="cline-any cline-neutral">&nbsp;</span>
357
+ <span class="cline-any cline-neutral">&nbsp;</span>
358
+ <span class="cline-any cline-neutral">&nbsp;</span>
359
+ <span class="cline-any cline-neutral">&nbsp;</span>
360
+ <span class="cline-any cline-neutral">&nbsp;</span>
361
+ <span class="cline-any cline-neutral">&nbsp;</span>
362
+ <span class="cline-any cline-neutral">&nbsp;</span>
363
+ <span class="cline-any cline-neutral">&nbsp;</span>
364
+ <span class="cline-any cline-neutral">&nbsp;</span>
365
+ <span class="cline-any cline-neutral">&nbsp;</span>
366
+ <span class="cline-any cline-neutral">&nbsp;</span>
367
+ <span class="cline-any cline-neutral">&nbsp;</span>
368
+ <span class="cline-any cline-neutral">&nbsp;</span>
369
+ <span class="cline-any cline-neutral">&nbsp;</span>
370
+ <span class="cline-any cline-neutral">&nbsp;</span>
371
+ <span class="cline-any cline-neutral">&nbsp;</span>
372
+ <span class="cline-any cline-neutral">&nbsp;</span>
373
+ <span class="cline-any cline-neutral">&nbsp;</span>
374
+ <span class="cline-any cline-neutral">&nbsp;</span>
375
+ <span class="cline-any cline-neutral">&nbsp;</span>
376
+ <span class="cline-any cline-neutral">&nbsp;</span>
377
+ <span class="cline-any cline-neutral">&nbsp;</span>
378
+ <span class="cline-any cline-neutral">&nbsp;</span>
379
+ <span class="cline-any cline-neutral">&nbsp;</span>
225
380
  <span class="cline-any cline-neutral">&nbsp;</span>
226
381
  <span class="cline-any cline-neutral">&nbsp;</span>
227
382
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -239,20 +394,23 @@
239
394
  <span class="cline-any cline-neutral">&nbsp;</span>
240
395
  <span class="cline-any cline-neutral">&nbsp;</span>
241
396
  <span class="cline-any cline-neutral">&nbsp;</span>
242
- <span class="cline-any cline-no">&nbsp;</span>
397
+ <span class="cline-any cline-yes">1x</span>
243
398
  <span class="cline-any cline-neutral">&nbsp;</span>
399
+ <span class="cline-any cline-yes">1x</span>
244
400
  <span class="cline-any cline-neutral">&nbsp;</span>
245
401
  <span class="cline-any cline-neutral">&nbsp;</span>
246
- <span class="cline-any cline-no">&nbsp;</span>
247
402
  <span class="cline-any cline-neutral">&nbsp;</span>
403
+ <span class="cline-any cline-yes">1x</span>
248
404
  <span class="cline-any cline-neutral">&nbsp;</span>
249
405
  <span class="cline-any cline-neutral">&nbsp;</span>
250
406
  <span class="cline-any cline-neutral">&nbsp;</span>
251
407
  <span class="cline-any cline-neutral">&nbsp;</span>
252
- <span class="cline-any cline-no">&nbsp;</span>
253
- <span class="cline-any cline-no">&nbsp;</span>
254
408
  <span class="cline-any cline-neutral">&nbsp;</span>
255
- <span class="cline-any cline-no">&nbsp;</span>
409
+ <span class="cline-any cline-yes">1x</span>
410
+ <span class="cline-any cline-yes">1x</span>
411
+ <span class="cline-any cline-neutral">&nbsp;</span>
412
+ <span class="cline-any cline-yes">1x</span>
413
+ <span class="cline-any cline-neutral">&nbsp;</span>
256
414
  <span class="cline-any cline-neutral">&nbsp;</span>
257
415
  <span class="cline-any cline-neutral">&nbsp;</span>
258
416
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -263,7 +421,6 @@
263
421
  <span class="cline-any cline-neutral">&nbsp;</span>
264
422
  <span class="cline-any cline-neutral">&nbsp;</span>
265
423
  <span class="cline-any cline-no">&nbsp;</span>
266
- <span class="cline-any cline-no">&nbsp;</span>
267
424
  <span class="cline-any cline-neutral">&nbsp;</span>
268
425
  <span class="cline-any cline-no">&nbsp;</span>
269
426
  <span class="cline-any cline-no">&nbsp;</span>
@@ -275,6 +432,7 @@
275
432
  <span class="cline-any cline-neutral">&nbsp;</span>
276
433
  <span class="cline-any cline-neutral">&nbsp;</span>
277
434
  <span class="cline-any cline-neutral">&nbsp;</span>
435
+ <span class="cline-any cline-neutral">&nbsp;</span>
278
436
  <span class="cline-any cline-no">&nbsp;</span>
279
437
  <span class="cline-any cline-neutral">&nbsp;</span>
280
438
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -282,6 +440,18 @@
282
440
  <span class="cline-any cline-neutral">&nbsp;</span>
283
441
  <span class="cline-any cline-neutral">&nbsp;</span>
284
442
  <span class="cline-any cline-yes">1x</span>
443
+ <span class="cline-any cline-neutral">&nbsp;</span>
444
+ <span class="cline-any cline-neutral">&nbsp;</span>
445
+ <span class="cline-any cline-neutral">&nbsp;</span>
446
+ <span class="cline-any cline-no">&nbsp;</span>
447
+ <span class="cline-any cline-neutral">&nbsp;</span>
448
+ <span class="cline-any cline-neutral">&nbsp;</span>
449
+ <span class="cline-any cline-neutral">&nbsp;</span>
450
+ <span class="cline-any cline-neutral">&nbsp;</span>
451
+ <span class="cline-any cline-neutral">&nbsp;</span>
452
+ <span class="cline-any cline-neutral">&nbsp;</span>
453
+ <span class="cline-any cline-neutral">&nbsp;</span>
454
+ <span class="cline-any cline-neutral">&nbsp;</span>
285
455
  <span class="cline-any cline-no">&nbsp;</span>
286
456
  <span class="cline-any cline-no">&nbsp;</span>
287
457
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -296,28 +466,39 @@
296
466
  <span class="cline-any cline-neutral">&nbsp;</span>
297
467
  <span class="cline-any cline-neutral">&nbsp;</span>
298
468
  <span class="cline-any cline-neutral">&nbsp;</span>
469
+ <span class="cline-any cline-yes">1x</span>
470
+ <span class="cline-any cline-yes">1x</span>
299
471
  <span class="cline-any cline-neutral">&nbsp;</span>
300
- <span class="cline-any cline-no">&nbsp;</span>
472
+ <span class="cline-any cline-yes">1x</span>
301
473
  <span class="cline-any cline-neutral">&nbsp;</span>
302
- <span class="cline-any cline-no">&nbsp;</span>
474
+ <span class="cline-any cline-yes">1x</span>
475
+ <span class="cline-any cline-yes">1x</span>
303
476
  <span class="cline-any cline-neutral">&nbsp;</span>
304
477
  <span class="cline-any cline-no">&nbsp;</span>
305
- <span class="cline-any cline-no">&nbsp;</span>
306
478
  <span class="cline-any cline-neutral">&nbsp;</span>
307
- <span class="cline-any cline-no">&nbsp;</span>
479
+ <span class="cline-any cline-neutral">&nbsp;</span>
480
+ <span class="cline-any cline-yes">1x</span>
481
+ <span class="cline-any cline-yes">1x</span>
482
+ <span class="cline-any cline-neutral">&nbsp;</span>
483
+ <span class="cline-any cline-yes">1x</span>
484
+ <span class="cline-any cline-yes">1x</span>
485
+ <span class="cline-any cline-neutral">&nbsp;</span>
486
+ <span class="cline-any cline-neutral">&nbsp;</span>
487
+ <span class="cline-any cline-neutral">&nbsp;</span>
308
488
  <span class="cline-any cline-neutral">&nbsp;</span>
309
489
  <span class="cline-any cline-neutral">&nbsp;</span>
310
- <span class="cline-any cline-no">&nbsp;</span>
311
490
  <span class="cline-any cline-neutral">&nbsp;</span>
312
491
  <span class="cline-any cline-no">&nbsp;</span>
313
492
  <span class="cline-any cline-no">&nbsp;</span>
314
- <span class="cline-any cline-no">&nbsp;</span>
493
+ <span class="cline-any cline-neutral">&nbsp;</span>
494
+ <span class="cline-any cline-neutral">&nbsp;</span>
495
+ <span class="cline-any cline-neutral">&nbsp;</span>
496
+ <span class="cline-any cline-neutral">&nbsp;</span>
315
497
  <span class="cline-any cline-neutral">&nbsp;</span>
316
498
  <span class="cline-any cline-neutral">&nbsp;</span>
317
499
  <span class="cline-any cline-yes">1x</span>
318
- <span class="cline-any cline-no">&nbsp;</span>
500
+ <span class="cline-any cline-yes">1x</span>
319
501
  <span class="cline-any cline-neutral">&nbsp;</span>
320
- <span class="cline-any cline-no">&nbsp;</span>
321
502
  <span class="cline-any cline-neutral">&nbsp;</span>
322
503
  <span class="cline-any cline-neutral">&nbsp;</span>
323
504
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -325,42 +506,114 @@
325
506
  <span class="cline-any cline-neutral">&nbsp;</span>
326
507
  <span class="cline-any cline-neutral">&nbsp;</span>
327
508
  <span class="cline-any cline-neutral">&nbsp;</span>
509
+ <span class="cline-any cline-yes">1x</span>
510
+ <span class="cline-any cline-no">&nbsp;</span>
511
+ <span class="cline-any cline-neutral">&nbsp;</span>
512
+ <span class="cline-any cline-yes">1x</span>
513
+ <span class="cline-any cline-neutral">&nbsp;</span>
514
+ <span class="cline-any cline-neutral">&nbsp;</span>
515
+ <span class="cline-any cline-neutral">&nbsp;</span>
516
+ <span class="cline-any cline-neutral">&nbsp;</span>
328
517
  <span class="cline-any cline-neutral">&nbsp;</span>
329
518
  <span class="cline-any cline-neutral">&nbsp;</span>
330
519
  <span class="cline-any cline-neutral">&nbsp;</span>
331
520
  <span class="cline-any cline-neutral">&nbsp;</span>
332
521
  <span class="cline-any cline-no">&nbsp;</span>
522
+ <span class="cline-any cline-no">&nbsp;</span>
523
+ <span class="cline-any cline-neutral">&nbsp;</span>
524
+ <span class="cline-any cline-neutral">&nbsp;</span>
525
+ <span class="cline-any cline-neutral">&nbsp;</span>
526
+ <span class="cline-any cline-neutral">&nbsp;</span>
333
527
  <span class="cline-any cline-neutral">&nbsp;</span>
334
528
  <span class="cline-any cline-neutral">&nbsp;</span>
335
529
  <span class="cline-any cline-neutral">&nbsp;</span>
336
530
  <span class="cline-any cline-no">&nbsp;</span>
531
+ <span class="cline-any cline-no">&nbsp;</span>
337
532
  <span class="cline-any cline-neutral">&nbsp;</span>
338
533
  <span class="cline-any cline-neutral">&nbsp;</span>
339
534
  <span class="cline-any cline-yes">1x</span>
340
535
  <span class="cline-any cline-yes">1x</span>
536
+ <span class="cline-any cline-yes">1x</span>
341
537
  <span class="cline-any cline-neutral">&nbsp;</span>
342
- <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import AnalyticsApi from "../../api/AnalyticsApi";
538
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import debug from "debug";
539
+ import AnalyticsApi from "../../api/AnalyticsApi";
343
540
  import WidgetApi from "../../api/WidgetApi";
344
541
  import { ConfigOptions, DeclarativeConfigOptions } from "../../types";
345
542
  import { decodeUserJwt } from "../../utils/decodeUserJwt";
346
543
  import { _getAutoConfig } from "../../utils/utmUtils";
347
- import { DEFAULT_DOMAIN, DEFAULT_NPM_CDN } from "../../utils/validate";
544
+ import {
545
+ DEFAULT_DOMAIN,
546
+ DEFAULT_NPM_CDN,
547
+ validateLocale,
548
+ } from "../../utils/validate";
348
549
  import EmbedWidget from "../EmbedWidget";
349
550
  import PopupWidget from "../PopupWidget";
350
551
  &nbsp;
552
+ const _log = debug("sqh:DeclarativeWidget");
553
+ &nbsp;
554
+ /**
555
+ * Abstract class for building web-components that render SaaSquatch widgets to the DOM.
556
+ * @abstract
557
+ * @example
558
+ * class TestWidgetElement extends DeclarativeWidget {}
559
+ * const testWidget = new TestWidgetElement()
560
+ * testWidget.widgetType = 'w/widget-type'
561
+ * testWidget.type = 'EMBED'
562
+ * testWidget.renderWidget()
563
+ */
351
564
  export default abstract class DeclarativeWidget extends HTMLElement {
352
- config: DeclarativeConfigOptions;
353
- token: string;
354
- tenant: string;
565
+ /**
566
+ * Configuration overrides
567
+ * @default window.squatchConfig
568
+ */
569
+ config: DeclarativeConfigOptions | undefined;
570
+ &nbsp;
571
+ /**
572
+ * Signed JWT containing user information
573
+ * @default window.squatchToken
574
+ */
575
+ token: string | undefined;
576
+ &nbsp;
577
+ /**
578
+ * Tenant alias of SaaSquatch tenant
579
+ * @default window.squatchTenant
580
+ */
581
+ tenant: string | undefined;
582
+ &nbsp;
583
+ /**
584
+ * widgetType of widget to load
585
+ */
355
586
  widgetType: string | undefined;
356
587
  &nbsp;
588
+ /**
589
+ * Locale to render the widget in
590
+ */
591
+ locale: string | undefined;
592
+ &nbsp;
593
+ /**
594
+ * Instance of {@link WidgetApi}
595
+ */
357
596
  widgetApi: WidgetApi;
597
+ &nbsp;
598
+ /**
599
+ * Instance of {@link AnalyticsApi}
600
+ */
358
601
  analyticsApi: AnalyticsApi;
359
602
  &nbsp;
360
- type: "EMBED" | "POPUP";
603
+ /**
604
+ * Instance of {@link EmbedWidget} or {@link PopupWidget}
605
+ */
361
606
  widgetInstance: EmbedWidget | PopupWidget;
362
- frame: HTMLIFrameElement;
363
607
  &nbsp;
608
+ /**
609
+ * Determines whether to render the widget as an embedding widget or popup widget.
610
+ */
611
+ type: "EMBED" | "POPUP";
612
+ &nbsp;
613
+ /**
614
+ * Container element to contain the widget iframe
615
+ * @default this
616
+ */
364
617
  container: string | HTMLElement | undefined | null;
365
618
  element: HTMLElement | undefined;
366
619
  &nbsp;
@@ -376,104 +629,145 @@ export default abstract class DeclarativeWidget extends HTMLElement {
376
629
  this.container = this;
377
630
  }
378
631
  &nbsp;
379
- private <span class="fstat-no" title="function not covered" >_setupApis(</span>config?: ConfigOptions) {
380
- <span class="cstat-no" title="statement not covered" > this.widgetApi = new WidgetApi({</span>
632
+ private _setupApis(config?: ConfigOptions) {
633
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (!this.tenant) <span class="cstat-no" title="statement not covered" >throw new Error("Requires tenantAlias");</span>
634
+ &nbsp;
635
+ this.widgetApi = new WidgetApi({
381
636
  tenantAlias: config?.tenantAlias || this.tenant,
382
- domain: config?.domain || this.config.domain || DEFAULT_DOMAIN,
637
+ domain: config?.domain || this.config?.domain || DEFAULT_DOMAIN,
383
638
  });
384
- <span class="cstat-no" title="statement not covered" > this.analyticsApi = new AnalyticsApi({</span>
385
- domain: config?.domain || this.config.domain || DEFAULT_DOMAIN,
639
+ this.analyticsApi = new AnalyticsApi({
640
+ domain: config?.domain || this.config?.domain || DEFAULT_DOMAIN,
386
641
  });
387
642
  }
388
643
  &nbsp;
389
- <span class="fstat-no" title="function not covered" > renderPasswordlessVariant(</span>) {
390
- const configs = <span class="cstat-no" title="statement not covered" >_getAutoConfig();</span>
391
- <span class="cstat-no" title="statement not covered" > this._setupApis(configs?.squatchConfig);</span>
644
+ private async renderPasswordlessVariant() {
645
+ const configs = _getAutoConfig();
646
+ this._setupApis(configs?.squatchConfig);
392
647
  &nbsp;
393
- <span class="cstat-no" title="statement not covered" > return this.widgetApi</span>
648
+ return await this.widgetApi
394
649
  .render({
395
650
  engagementMedium: configs?.widgetConfig?.engagementMedium || this.type,
396
651
  widgetType: configs?.widgetConfig?.widgetType || this.widgetType,
652
+ locale: configs?.widgetConfig?.locale || this.locale,
397
653
  })
398
654
  .then(<span class="fstat-no" title="function not covered" >(r</span>es) =&gt; <span class="cstat-no" title="statement not covered" >this._setWidget(res.template, { type: "passwordless" }))</span>
399
- .catch(this._setErrorWidget);
655
+ .catch(this.setErrorWidget);
400
656
  }
401
657
  &nbsp;
402
- <span class="fstat-no" title="function not covered" > async </span>renderUserUpsertVariant() {
403
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!this.widgetType) <span class="cstat-no" title="statement not covered" >throw new Error("Widget must be specified");</span></span>
658
+ private <span class="fstat-no" title="function not covered" >async </span>renderUserUpsertVariant() {
404
659
  <span class="cstat-no" title="statement not covered" > this._setupApis();</span>
405
660
  &nbsp;
406
- const userObj = <span class="cstat-no" title="statement not covered" >decodeUserJwt(this.token);</span>
661
+ const userObj = <span class="cstat-no" title="statement not covered" >decodeUserJwt(this.token!);</span>
407
662
  <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!userObj) <span class="cstat-no" title="statement not covered" >throw new Error("Could not load user information from jwt");</span></span>
408
663
  &nbsp;
409
664
  const widgetInstance = <span class="cstat-no" title="statement not covered" >await this.widgetApi</span>
410
665
  .upsertUser({
411
666
  user: userObj,
667
+ locale: this.locale,
412
668
  engagementMedium: this.type,
413
669
  widgetType: this.widgetType,
414
670
  jwt: this.token,
415
671
  })
416
672
  .then(<span class="fstat-no" title="function not covered" >(r</span>es) =&gt; <span class="cstat-no" title="statement not covered" >this._setWidget(res.template, { type: "upsert" }))</span>
417
- .catch(this._setErrorWidget);
673
+ .catch(this.setErrorWidget);
418
674
  &nbsp;
419
675
  <span class="cstat-no" title="statement not covered" > return widgetInstance;</span>
420
676
  }
421
677
  &nbsp;
422
- _setWidget = <span class="fstat-no" title="function not covered" >(t</span>emplate: any, config: { type: "upsert" | "passwordless" }) =&gt; {
423
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!this.widgetType) <span class="cstat-no" title="statement not covered" >throw new Error("Widget was no specified");</span></span>
424
- const Widget = <span class="cstat-no" title="statement not covered" >this.type === "EMBED" ? EmbedWidget : PopupWidget;</span>
425
- &nbsp;
426
- <span class="cstat-no" title="statement not covered" > return new Widget({</span>
678
+ private _setWidget = <span class="fstat-no" title="function not covered" >(</span>
679
+ template: any,
680
+ config: { type: "upsert" | "passwordless" }
681
+ ) =&gt; {
682
+ const params = <span class="cstat-no" title="statement not covered" >{</span>
427
683
  api: this.widgetApi,
428
684
  content: template,
429
685
  context: { type: config.type, engagementMedium: this.type },
430
- type: this.widgetType,
431
- domain: this.config.domain || DEFAULT_DOMAIN,
686
+ type: this.widgetType!,
687
+ domain: this.config?.domain || DEFAULT_DOMAIN,
432
688
  npmCdn: DEFAULT_NPM_CDN,
433
689
  container: this.container || this,
434
- });
690
+ };
691
+ <span class="cstat-no" title="statement not covered" > if (this.type === "EMBED") {</span>
692
+ <span class="cstat-no" title="statement not covered" > return new EmbedWidget(params);</span>
693
+ } else {
694
+ <span class="cstat-no" title="statement not covered" > return new PopupWidget(params, this.firstChild ? null : undefined);</span>
695
+ }
435
696
  };
436
697
  &nbsp;
437
- <span class="fstat-no" title="function not covered" > async </span>renderWidget() {
438
- <span class="cstat-no" title="statement not covered" > this.widgetType = this.getAttribute("widget") || undefined;</span>
698
+ /**
699
+ * Fetches widget content from SaaSquatch and builds a Widget instance to support rendering the widget in the DOM.
700
+ * @returns Instance of either {@link EmbedWidget} or {@link PopupWidget} depending on `this.type`
701
+ * @throws Throws an Error if `widgetType` is undefined
702
+ */
703
+ async getWidgetInstance() {
704
+ let widgetInstance: EmbedWidget | PopupWidget;
705
+ this.widgetType = this.getAttribute("widget") || <span class="branch-1 cbranch-no" title="branch not covered" >undefined;</span>
706
+ this.locale = this.getAttribute("locale") || this.locale;
439
707
  &nbsp;
440
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!this.widgetType) <span class="cstat-no" title="statement not covered" >throw new Error("No widget has been specified");</span></span>
708
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (!this.widgetType) <span class="cstat-no" title="statement not covered" >throw new Error("No widget has been specified");</span>
441
709
  &nbsp;
442
- <span class="cstat-no" title="statement not covered" > if (!this.token) {</span>
443
- <span class="cstat-no" title="statement not covered" > this.widgetInstance = await this.renderPasswordlessVariant();</span>
444
- } else {
445
- <span class="cstat-no" title="statement not covered" > this.widgetInstance = await this.renderUserUpsertVariant();</span>
710
+ if (!this.token) {
711
+ widgetInstance = await this.renderPasswordlessVariant();
712
+ } else <span class="missing-if-branch" title="else path not taken" >E</span>{
713
+ <span class="cstat-no" title="statement not covered" > widgetInstance = await this.renderUserUpsertVariant();</span>
446
714
  }
447
715
  &nbsp;
448
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!this.widgetInstance) <span class="cstat-no" title="statement not covered" >throw new Error("Could not create widget.");</span></span>
716
+ console.log(widgetInstance);
717
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (!widgetInstance) <span class="cstat-no" title="statement not covered" >throw new Error("Could not create widget.");</span>
449
718
  &nbsp;
450
- <span class="cstat-no" title="statement not covered" > this.element = this.widgetInstance._findElement();</span>
451
- <span class="cstat-no" title="statement not covered" > this.frame = this.widgetInstance._createFrame();</span>
452
- <span class="cstat-no" title="statement not covered" > this.widgetInstance.load(this.frame);</span>
719
+ this.widgetInstance = widgetInstance;
720
+ return widgetInstance;
453
721
  }
454
722
  &nbsp;
455
- _setErrorWidget = <span class="fstat-no" title="function not covered" >(e</span>: Error) =&gt; {
456
- const Widget = <span class="cstat-no" title="statement not covered" >this.type === "EMBED" ? EmbedWidget : PopupWidget;</span>
723
+ /**
724
+ * Calls {@link getWidgetInstance} to build the Widget instance and loads the widget iframe into the DOM.
725
+ */
726
+ <span class="fstat-no" title="function not covered" > async </span>renderWidget() {
727
+ <span class="cstat-no" title="statement not covered" > await this.getWidgetInstance();</span>
728
+ <span class="cstat-no" title="statement not covered" > await this.widgetInstance.load();</span>
729
+ }
457
730
  &nbsp;
458
- <span class="cstat-no" title="statement not covered" > return new Widget({</span>
731
+ /**
732
+ * Builds a Widget instance for the default error widget.
733
+ * @returns Instance of either {@link EmbedWidget} or {@link PopupWidget} depending on `this.type`
734
+ */
735
+ setErrorWidget = (e: Error) =&gt; {
736
+ const params = {
459
737
  api: this.widgetApi,
460
738
  content: "error",
461
- context: { type: "error" },
739
+ context: { type: "error" as const },
462
740
  type: "ERROR_WIDGET",
463
- domain: this.config.domain || DEFAULT_DOMAIN,
741
+ domain: this.config?.domain || DEFAULT_DOMAIN,
464
742
  npmCdn: DEFAULT_NPM_CDN,
465
- container: this.container || this,
466
- });
743
+ container: this.container || <span class="branch-1 cbranch-no" title="branch not covered" >this,</span>
744
+ };
745
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (this.type === "EMBED") {
746
+ <span class="cstat-no" title="statement not covered" > return new EmbedWidget(params);</span>
747
+ } else {
748
+ return new PopupWidget(params, this.firstChild ? <span class="branch-0 cbranch-no" title="branch not covered" >null </span>: undefined);
749
+ }
467
750
  };
468
751
  &nbsp;
752
+ /**
753
+ * Calls `open` method of `widgetInstance`
754
+ * @throws Throws an Error if called before the widget has loaded
755
+ */
469
756
  <span class="fstat-no" title="function not covered" > open(</span>) {
470
- <span class="cstat-no" title="statement not covered" > this.widgetInstance.open(this.frame);</span>
757
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!this.widgetInstance) <span class="cstat-no" title="statement not covered" >throw new Error("Widget has not loaded yet");</span></span>
758
+ <span class="cstat-no" title="statement not covered" > this.widgetInstance.open();</span>
471
759
  }
472
760
  &nbsp;
761
+ /**
762
+ * Calls `close` method of `widgetInstance`
763
+ * @throws Throws an Error if called before the widget has loaded
764
+ */
473
765
  <span class="fstat-no" title="function not covered" > close(</span>) {
474
- <span class="cstat-no" title="statement not covered" > this.widgetInstance.close(this.frame);</span>
766
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!this.widgetInstance) <span class="cstat-no" title="statement not covered" >throw new Error("Widget has not loaded yet");</span></span>
767
+ <span class="cstat-no" title="statement not covered" > this.widgetInstance.close();</span>
475
768
  }
476
769
  &nbsp;
770
+ reload = this.renderWidget;
477
771
  show = this.open;
478
772
  hide = this.close;
479
773
  }
@@ -484,7 +778,7 @@ export default abstract class DeclarativeWidget extends HTMLElement {
484
778
  <div class='footer quiet pad2 space-top1 center small'>
485
779
  Code coverage generated by
486
780
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
487
- at 2023-07-03T20:35:44.061Z
781
+ at 2023-07-21T18:05:37.786Z
488
782
  </div>
489
783
  <script src="../../prettify.js"></script>
490
784
  <script>