@saasquatch/squatch-js 2.8.2-0 → 2.8.2-10
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.
- package/CHANGELOG.md +8 -1
- package/README.md +3 -11
- package/dist/squatch.cjs.js +485 -34
- package/dist/squatch.cjs.js.map +1 -1
- package/dist/squatch.d.ts +1 -1
- package/dist/squatch.esm.js +485 -34
- package/dist/squatch.esm.js.map +1 -1
- package/dist/squatch.js +485 -34
- package/dist/squatch.js.map +1 -1
- package/dist/squatch.min.js +2 -2
- package/dist/utils/utmUtils.d.ts +1 -10
- package/dist/widgets/SkeletonTemplate.d.ts +12 -0
- package/dist/widgets/Widget.d.ts +1 -0
- package/package.json +1 -1
- package/coverage/clover.xml +0 -708
- package/coverage/coverage-final.json +0 -16
- package/coverage/lcov-report/base.css +0 -224
- package/coverage/lcov-report/block-navigation.js +0 -87
- package/coverage/lcov-report/favicon.png +0 -0
- package/coverage/lcov-report/prettify.css +0 -1
- package/coverage/lcov-report/prettify.js +0 -2
- package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
- package/coverage/lcov-report/sorter.js +0 -196
- package/coverage/lcov.info +0 -1276
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [2.8.1] - 2025-11-17
|
|
11
|
+
|
|
12
|
+
### Fixed
|
|
13
|
+
|
|
14
|
+
- Prevent overriding of API domain with auto popups
|
|
15
|
+
|
|
10
16
|
## [2.8.0] - 2025-10-22
|
|
11
17
|
|
|
12
18
|
### Added
|
|
@@ -387,7 +393,8 @@ No release notes.
|
|
|
387
393
|
|
|
388
394
|
No release notes.
|
|
389
395
|
|
|
390
|
-
[unreleased]: https://github.com/saasquatch/squatch-js/compare/@saasquatch%2Fsquatch-js@2.8.
|
|
396
|
+
[unreleased]: https://github.com/saasquatch/squatch-js/compare/@saasquatch%2Fsquatch-js@2.8.1...HEAD
|
|
397
|
+
[2.8.1]: https://github.com/saasquatch/squatch-js/compare/@saasquatch%2Fsquatch-js@2.7.0...@saasquatch%2Fsquatch-js@2.8.1
|
|
391
398
|
[2.8.0]: https://github.com/saasquatch/squatch-js/compare/@saasquatch%2Fsquatch-js@2.7.0...@saasquatch%2Fsquatch-js@2.8.0
|
|
392
399
|
[2.7.0]: https://github.com/saasquatch/squatch-js/compare/@saasquatch%2Fsquatch-js@2.6.3...@saasquatch%2Fsquatch-js@2.7.0
|
|
393
400
|
[2.6.3]: https://github.com/saasquatch/squatch-js/compare/@saasquatch%2Fsquatch-js@2.6.2...@saasquatch%2Fsquatch-js@2.6.3
|
package/README.md
CHANGED
|
@@ -197,19 +197,11 @@ squatch.api().upsertUser({...});
|
|
|
197
197
|
### `squatch-popup`
|
|
198
198
|
|
|
199
199
|
```html
|
|
200
|
-
<squatch-
|
|
201
|
-
widget="WIDGET_TYPE"
|
|
202
|
-
[
|
|
203
|
-
open
|
|
204
|
-
|
|
|
205
|
-
container="#selector"
|
|
206
|
-
|
|
|
207
|
-
locale="en_US"
|
|
208
|
-
]
|
|
209
|
-
>
|
|
200
|
+
<squatch-popup
|
|
201
|
+
widget="WIDGET_TYPE" [ open | container="#selector" | locale="en_US" ]>
|
|
210
202
|
<!-- Clicking a child of squatch-popup opens the popup -->
|
|
211
203
|
<button>Click me to open</button>
|
|
212
|
-
</squatch-
|
|
204
|
+
</squatch-popup>
|
|
213
205
|
```
|
|
214
206
|
|
|
215
207
|
- `widget: string`: Specifies the SaaSquatch `widgetType` identifier of the desired widget
|
package/dist/squatch.cjs.js
CHANGED
|
@@ -702,6 +702,7 @@ class WidgetApi {
|
|
|
702
702
|
const raw = params;
|
|
703
703
|
const clean = validatePasswordlessConfig(raw);
|
|
704
704
|
const { widgetType, engagementMedium = "POPUP", jwt, user } = clean;
|
|
705
|
+
console.log({ params });
|
|
705
706
|
const tenantAlias = encodeURIComponent(this.tenantAlias);
|
|
706
707
|
const accountId = (user == null ? void 0 : user.accountId) ? encodeURIComponent(user.accountId) : null;
|
|
707
708
|
const userId = (user == null ? void 0 : user.id) ? encodeURIComponent(user.id) : null;
|
|
@@ -890,6 +891,9 @@ class Widget {
|
|
|
890
891
|
if ((options == null ? void 0 : options.maxWidth) || (options == null ? void 0 : options.minWidth)) {
|
|
891
892
|
frame.style.width = "100%";
|
|
892
893
|
}
|
|
894
|
+
if (options == null ? void 0 : options.initialHeight) {
|
|
895
|
+
frame.height = options.initialHeight;
|
|
896
|
+
}
|
|
893
897
|
return frame;
|
|
894
898
|
}
|
|
895
899
|
_findFrame() {
|
|
@@ -1104,41 +1108,416 @@ function delay(duration) {
|
|
|
1104
1108
|
setTimeout(resolve, duration);
|
|
1105
1109
|
});
|
|
1106
1110
|
}
|
|
1111
|
+
const getSkeleton = ({
|
|
1112
|
+
height = "500px",
|
|
1113
|
+
skeletonBackgroundColor = "#e0e0e0",
|
|
1114
|
+
skeletonShimmerColor = "#f5f5f5",
|
|
1115
|
+
borderColor = "#ccc"
|
|
1116
|
+
}) => {
|
|
1117
|
+
return `
|
|
1118
|
+
<style>
|
|
1119
|
+
* {
|
|
1120
|
+
box-sizing: border-box;
|
|
1121
|
+
padding: 0;
|
|
1122
|
+
margin: 0;
|
|
1123
|
+
}
|
|
1124
|
+
|
|
1125
|
+
.widget-container {
|
|
1126
|
+
background: white;
|
|
1127
|
+
width: 100%;
|
|
1128
|
+
max-width: 900px;
|
|
1129
|
+
padding: 40px;
|
|
1130
|
+
border-radius: 12px;
|
|
1131
|
+
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.08);
|
|
1132
|
+
box-sizing: border-box;
|
|
1133
|
+
}
|
|
1134
|
+
|
|
1135
|
+
@keyframes shimmer {
|
|
1136
|
+
0% {
|
|
1137
|
+
background-position: -100% 0;
|
|
1138
|
+
}
|
|
1139
|
+
100% {
|
|
1140
|
+
background-position: 100% 0;
|
|
1141
|
+
}
|
|
1142
|
+
}
|
|
1143
|
+
|
|
1144
|
+
.skeleton {
|
|
1145
|
+
background: ${skeletonBackgroundColor};
|
|
1146
|
+
background: linear-gradient(
|
|
1147
|
+
90deg,
|
|
1148
|
+
${skeletonBackgroundColor} 25%,
|
|
1149
|
+
${skeletonShimmerColor} 50%,
|
|
1150
|
+
${skeletonBackgroundColor} 75%
|
|
1151
|
+
);
|
|
1152
|
+
background-size: 200% 100%;
|
|
1153
|
+
animation: shimmer 1.5s infinite linear;
|
|
1154
|
+
border-radius: 6px;
|
|
1155
|
+
margin-bottom: 12px;
|
|
1156
|
+
}
|
|
1157
|
+
|
|
1158
|
+
.sk-title-lg {
|
|
1159
|
+
height: 36px;
|
|
1160
|
+
width: 50%;
|
|
1161
|
+
margin-bottom: 16px;
|
|
1162
|
+
}
|
|
1163
|
+
.sk-title-md {
|
|
1164
|
+
height: 28px;
|
|
1165
|
+
width: 30%;
|
|
1166
|
+
margin-bottom: 20px;
|
|
1167
|
+
margin-top: 40px;
|
|
1168
|
+
}
|
|
1169
|
+
.sk-text {
|
|
1170
|
+
height: 16px;
|
|
1171
|
+
width: 80%;
|
|
1172
|
+
margin-bottom: 8px;
|
|
1173
|
+
}
|
|
1174
|
+
.sk-text-short {
|
|
1175
|
+
width: 40%;
|
|
1176
|
+
}
|
|
1177
|
+
.sk-label {
|
|
1178
|
+
height: 14px;
|
|
1179
|
+
width: 25%;
|
|
1180
|
+
margin-bottom: 10px;
|
|
1181
|
+
}
|
|
1182
|
+
|
|
1183
|
+
.hero-section {
|
|
1184
|
+
display: flex;
|
|
1185
|
+
gap: 40px;
|
|
1186
|
+
margin-bottom: 40px;
|
|
1187
|
+
border-bottom: 1px solid ${borderColor};
|
|
1188
|
+
padding-bottom: 40px;
|
|
1189
|
+
flex-direction: row;
|
|
1190
|
+
}
|
|
1191
|
+
.hero-content {
|
|
1192
|
+
flex: 1;
|
|
1193
|
+
display: flex;
|
|
1194
|
+
flex-direction: column;
|
|
1195
|
+
justify-content: center;
|
|
1196
|
+
}
|
|
1197
|
+
.hero-image {
|
|
1198
|
+
flex: 1;
|
|
1199
|
+
height: 300px;
|
|
1200
|
+
border-radius: 12px;
|
|
1201
|
+
}
|
|
1202
|
+
|
|
1203
|
+
.share-section {
|
|
1204
|
+
margin-bottom: 40px;
|
|
1205
|
+
}
|
|
1206
|
+
.sk-input {
|
|
1207
|
+
height: 50px;
|
|
1208
|
+
width: 100%;
|
|
1209
|
+
border-radius: 8px;
|
|
1210
|
+
margin-bottom: 16px;
|
|
1211
|
+
}
|
|
1212
|
+
.social-buttons {
|
|
1213
|
+
display: flex;
|
|
1214
|
+
gap: 12px;
|
|
1215
|
+
}
|
|
1216
|
+
.sk-btn-social {
|
|
1217
|
+
flex: 1;
|
|
1218
|
+
height: 50px;
|
|
1219
|
+
border-radius: 8px;
|
|
1220
|
+
}
|
|
1221
|
+
|
|
1222
|
+
.stats-section {
|
|
1223
|
+
display: flex;
|
|
1224
|
+
gap: 24px;
|
|
1225
|
+
margin-bottom: 40px;
|
|
1226
|
+
padding: 30px 0;
|
|
1227
|
+
border-top: 1px solid ${borderColor};
|
|
1228
|
+
border-bottom: 1px solid ${borderColor};
|
|
1229
|
+
}
|
|
1230
|
+
.stat-card {
|
|
1231
|
+
flex: 1;
|
|
1232
|
+
display: flex;
|
|
1233
|
+
flex-direction: column;
|
|
1234
|
+
align-items: center;
|
|
1235
|
+
}
|
|
1236
|
+
.stat-divider {
|
|
1237
|
+
padding-left: 24px;
|
|
1238
|
+
}
|
|
1239
|
+
|
|
1240
|
+
.sk-stat-num {
|
|
1241
|
+
height: 48px;
|
|
1242
|
+
width: 120px;
|
|
1243
|
+
margin-bottom: 8px;
|
|
1244
|
+
}
|
|
1245
|
+
.sk-stat-label {
|
|
1246
|
+
height: 18px;
|
|
1247
|
+
width: 80px;
|
|
1248
|
+
}
|
|
1249
|
+
|
|
1250
|
+
.table-header {
|
|
1251
|
+
display: flex;
|
|
1252
|
+
gap: 16px;
|
|
1253
|
+
margin-bottom: 16px;
|
|
1254
|
+
}
|
|
1255
|
+
.sk-th {
|
|
1256
|
+
height: 16px;
|
|
1257
|
+
}
|
|
1258
|
+
.table-row {
|
|
1259
|
+
display: flex;
|
|
1260
|
+
align-items: center;
|
|
1261
|
+
gap: 16px;
|
|
1262
|
+
padding: 16px 0;
|
|
1263
|
+
border-bottom: 1px solid ${borderColor};
|
|
1264
|
+
}
|
|
1265
|
+
|
|
1266
|
+
.col-user {
|
|
1267
|
+
flex: 2;
|
|
1268
|
+
}
|
|
1269
|
+
.col-status {
|
|
1270
|
+
flex: 1;
|
|
1271
|
+
}
|
|
1272
|
+
.col-reward {
|
|
1273
|
+
flex: 2;
|
|
1274
|
+
}
|
|
1275
|
+
.col-date {
|
|
1276
|
+
flex: 1;
|
|
1277
|
+
}
|
|
1278
|
+
|
|
1279
|
+
.sk-badge {
|
|
1280
|
+
height: 28px;
|
|
1281
|
+
width: 90px;
|
|
1282
|
+
border-radius: 14px;
|
|
1283
|
+
}
|
|
1284
|
+
.sk-reward-block {
|
|
1285
|
+
height: 36px;
|
|
1286
|
+
width: 100%;
|
|
1287
|
+
border-radius: 6px;
|
|
1288
|
+
}
|
|
1289
|
+
|
|
1290
|
+
.pagination {
|
|
1291
|
+
display: flex;
|
|
1292
|
+
justify-content: flex-end;
|
|
1293
|
+
gap: 8px;
|
|
1294
|
+
margin-top: 24px;
|
|
1295
|
+
}
|
|
1296
|
+
.sk-btn-page {
|
|
1297
|
+
height: 36px;
|
|
1298
|
+
width: 64px;
|
|
1299
|
+
border-radius: 6px;
|
|
1300
|
+
margin-bottom: 0;
|
|
1301
|
+
}
|
|
1302
|
+
|
|
1303
|
+
@media (max-width: 768px) {
|
|
1304
|
+
body {
|
|
1305
|
+
padding: 20px;
|
|
1306
|
+
}
|
|
1307
|
+
.widget-container {
|
|
1308
|
+
padding: 24px;
|
|
1309
|
+
}
|
|
1310
|
+
|
|
1311
|
+
.hero-section {
|
|
1312
|
+
flex-direction: column-reverse;
|
|
1313
|
+
gap: 24px;
|
|
1314
|
+
}
|
|
1315
|
+
.hero-image {
|
|
1316
|
+
height: 220px;
|
|
1317
|
+
width: 100%;
|
|
1318
|
+
}
|
|
1319
|
+
.sk-title-lg {
|
|
1320
|
+
width: 80%;
|
|
1321
|
+
}
|
|
1322
|
+
|
|
1323
|
+
.col-date {
|
|
1324
|
+
display: none;
|
|
1325
|
+
}
|
|
1326
|
+
}
|
|
1327
|
+
|
|
1328
|
+
@media (max-width: 480px) {
|
|
1329
|
+
body {
|
|
1330
|
+
padding: 10px;
|
|
1331
|
+
}
|
|
1332
|
+
.widget-container {
|
|
1333
|
+
padding: 16px;
|
|
1334
|
+
}
|
|
1335
|
+
|
|
1336
|
+
.sk-stat-num {
|
|
1337
|
+
width: 80px;
|
|
1338
|
+
height: 40px;
|
|
1339
|
+
}
|
|
1340
|
+
|
|
1341
|
+
.col-reward {
|
|
1342
|
+
display: none;
|
|
1343
|
+
}
|
|
1344
|
+
|
|
1345
|
+
.col-user {
|
|
1346
|
+
flex: 3;
|
|
1347
|
+
}
|
|
1348
|
+
.col-status {
|
|
1349
|
+
flex: 2;
|
|
1350
|
+
display: flex;
|
|
1351
|
+
justify-content: flex-end;
|
|
1352
|
+
}
|
|
1353
|
+
}
|
|
1354
|
+
</style>
|
|
1355
|
+
|
|
1356
|
+
<div class="widget-container">
|
|
1357
|
+
<div class="hero-section">
|
|
1358
|
+
<div class="hero-content">
|
|
1359
|
+
<div class="skeleton sk-title-lg"></div>
|
|
1360
|
+
<div class="skeleton sk-text"></div>
|
|
1361
|
+
<div class="skeleton sk-text sk-text-short"></div>
|
|
1362
|
+
</div>
|
|
1363
|
+
<div class="skeleton hero-image"></div>
|
|
1364
|
+
</div>
|
|
1365
|
+
|
|
1366
|
+
<div class="share-section">
|
|
1367
|
+
<div class="skeleton sk-label"></div>
|
|
1368
|
+
<div class="skeleton sk-input"></div>
|
|
1369
|
+
<div class="social-buttons">
|
|
1370
|
+
<div class="skeleton sk-btn-social"></div>
|
|
1371
|
+
<div class="skeleton sk-btn-social"></div>
|
|
1372
|
+
<div class="skeleton sk-btn-social"></div>
|
|
1373
|
+
<div class="skeleton sk-btn-social"></div>
|
|
1374
|
+
</div>
|
|
1375
|
+
</div>
|
|
1376
|
+
|
|
1377
|
+
<div
|
|
1378
|
+
class="skeleton sk-title-md"
|
|
1379
|
+
style="margin-top: 0; width: 30%; margin-left: auto; margin-right: auto"
|
|
1380
|
+
></div>
|
|
1381
|
+
<div
|
|
1382
|
+
class="skeleton sk-text"
|
|
1383
|
+
style="width: 60%; margin-left: auto; margin-right: auto"
|
|
1384
|
+
></div>
|
|
1385
|
+
|
|
1386
|
+
<div class="stats-section">
|
|
1387
|
+
<div class="stat-card">
|
|
1388
|
+
<div class="skeleton sk-stat-num"></div>
|
|
1389
|
+
<div class="skeleton sk-stat-label"></div>
|
|
1390
|
+
</div>
|
|
1391
|
+
<div class="stat-card stat-divider">
|
|
1392
|
+
<div class="skeleton sk-stat-num"></div>
|
|
1393
|
+
<div class="skeleton sk-stat-label"></div>
|
|
1394
|
+
</div>
|
|
1395
|
+
</div>
|
|
1396
|
+
|
|
1397
|
+
<div class="skeleton sk-title-md"></div>
|
|
1398
|
+
|
|
1399
|
+
<div class="table-header">
|
|
1400
|
+
<div class="skeleton sk-th col-user"></div>
|
|
1401
|
+
<div class="skeleton sk-th col-status"></div>
|
|
1402
|
+
<div class="skeleton sk-th col-reward"></div>
|
|
1403
|
+
<div class="skeleton sk-th col-date"></div>
|
|
1404
|
+
</div>
|
|
1405
|
+
|
|
1406
|
+
<div class="table-row">
|
|
1407
|
+
<div class="col-user">
|
|
1408
|
+
<div class="skeleton sk-text" style="width: 70%; margin: 0"></div>
|
|
1409
|
+
</div>
|
|
1410
|
+
<div class="col-status">
|
|
1411
|
+
<div class="skeleton sk-badge" style="margin: 0"></div>
|
|
1412
|
+
</div>
|
|
1413
|
+
<div class="col-reward">
|
|
1414
|
+
<div class="skeleton sk-reward-block" style="margin: 0"></div>
|
|
1415
|
+
</div>
|
|
1416
|
+
<div class="col-date">
|
|
1417
|
+
<div class="skeleton sk-text" style="width: 80%; margin: 0"></div>
|
|
1418
|
+
</div>
|
|
1419
|
+
</div>
|
|
1420
|
+
<div class="table-row">
|
|
1421
|
+
<div class="col-user">
|
|
1422
|
+
<div class="skeleton sk-text" style="width: 60%; margin: 0"></div>
|
|
1423
|
+
</div>
|
|
1424
|
+
<div class="col-status">
|
|
1425
|
+
<div class="skeleton sk-badge" style="margin: 0"></div>
|
|
1426
|
+
</div>
|
|
1427
|
+
<div class="col-reward">
|
|
1428
|
+
<div class="skeleton sk-reward-block" style="margin: 0"></div>
|
|
1429
|
+
</div>
|
|
1430
|
+
<div class="col-date">
|
|
1431
|
+
<div class="skeleton sk-text" style="width: 80%; margin: 0"></div>
|
|
1432
|
+
</div>
|
|
1433
|
+
</div>
|
|
1434
|
+
<div class="table-row">
|
|
1435
|
+
<div class="col-user">
|
|
1436
|
+
<div class="skeleton sk-text" style="width: 75%; margin: 0"></div>
|
|
1437
|
+
</div>
|
|
1438
|
+
<div class="col-status">
|
|
1439
|
+
<div class="skeleton sk-badge" style="margin: 0"></div>
|
|
1440
|
+
</div>
|
|
1441
|
+
<div class="col-reward">
|
|
1442
|
+
<div class="skeleton sk-reward-block" style="margin: 0"></div>
|
|
1443
|
+
</div>
|
|
1444
|
+
<div class="col-date">
|
|
1445
|
+
<div class="skeleton sk-text" style="width: 80%; margin: 0"></div>
|
|
1446
|
+
</div>
|
|
1447
|
+
</div>
|
|
1448
|
+
|
|
1449
|
+
<div class="pagination">
|
|
1450
|
+
<div class="skeleton sk-btn-page"></div>
|
|
1451
|
+
<div class="skeleton sk-btn-page"></div>
|
|
1452
|
+
</div>
|
|
1453
|
+
</div>
|
|
1454
|
+
`;
|
|
1455
|
+
};
|
|
1107
1456
|
const _log$7 = browserExports.debug("squatch-js:EMBEDwidget");
|
|
1108
1457
|
class EmbedWidget extends Widget {
|
|
1109
1458
|
constructor(params, container) {
|
|
1110
1459
|
super(params);
|
|
1111
1460
|
__publicField(this, "show", this.open);
|
|
1112
1461
|
__publicField(this, "hide", this.close);
|
|
1113
|
-
if (container)
|
|
1462
|
+
if (container) {
|
|
1463
|
+
this.container = container;
|
|
1464
|
+
}
|
|
1114
1465
|
}
|
|
1115
1466
|
async load() {
|
|
1116
|
-
var _a2, _b, _c, _d, _e;
|
|
1467
|
+
var _a2, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l;
|
|
1117
1468
|
const brandingConfig = (_b = (_a2 = this.context.widgetConfig) == null ? void 0 : _a2.values) == null ? void 0 : _b.brandingConfig;
|
|
1118
|
-
const
|
|
1469
|
+
const initialHeight = brandingConfig == null ? void 0 : brandingConfig.loadingHeight;
|
|
1470
|
+
const skeletonBackgroundColor = (_d = (_c = brandingConfig == null ? void 0 : brandingConfig.color) == null ? void 0 : _c.loadingSkeleton) == null ? void 0 : _d.background;
|
|
1471
|
+
const skeletonShimmerColor = (_f = (_e = brandingConfig == null ? void 0 : brandingConfig.color) == null ? void 0 : _e.loadingSkeleton) == null ? void 0 : _f.animationBackground;
|
|
1472
|
+
const borderColor = (_g = brandingConfig == null ? void 0 : brandingConfig.border) == null ? void 0 : _g.borderColor;
|
|
1473
|
+
const sizes = (_h = brandingConfig == null ? void 0 : brandingConfig.widgetSize) == null ? void 0 : _h.embeddedWidgets;
|
|
1119
1474
|
const maxWidth = (sizes == null ? void 0 : sizes.maxWidth) ? formatWidth(sizes.maxWidth) : "";
|
|
1120
1475
|
const minWidth = (sizes == null ? void 0 : sizes.minWidth) ? formatWidth(sizes.minWidth) : "";
|
|
1121
|
-
|
|
1476
|
+
console.log({
|
|
1477
|
+
brandingConfig,
|
|
1478
|
+
initialHeight,
|
|
1479
|
+
widgetConfig: this.context.widgetConfig
|
|
1480
|
+
});
|
|
1481
|
+
const skeletonHTML = getSkeleton({
|
|
1482
|
+
height: initialHeight,
|
|
1483
|
+
skeletonBackgroundColor,
|
|
1484
|
+
skeletonShimmerColor,
|
|
1485
|
+
borderColor
|
|
1486
|
+
});
|
|
1487
|
+
const skeletonContainer = document.createElement("div");
|
|
1488
|
+
skeletonContainer.innerHTML = skeletonHTML;
|
|
1489
|
+
const frame = this._createFrame({
|
|
1490
|
+
minWidth,
|
|
1491
|
+
maxWidth,
|
|
1492
|
+
initialHeight
|
|
1493
|
+
});
|
|
1122
1494
|
const element = this._findElement();
|
|
1123
|
-
|
|
1495
|
+
element.innerHTML = skeletonHTML;
|
|
1496
|
+
frame.style.display = "none";
|
|
1497
|
+
const injectContents = (target) => {
|
|
1498
|
+
target.appendChild(skeletonContainer);
|
|
1499
|
+
target.appendChild(frame);
|
|
1500
|
+
};
|
|
1501
|
+
if ((_i = this.context) == null ? void 0 : _i.container) {
|
|
1124
1502
|
element.style.visibility = "hidden";
|
|
1125
1503
|
element.style.height = "0";
|
|
1126
1504
|
element.style["overflow-y"] = "hidden";
|
|
1127
1505
|
}
|
|
1128
1506
|
if (this.container) {
|
|
1129
1507
|
if (element.shadowRoot) {
|
|
1130
|
-
if (((
|
|
1508
|
+
if (((_j = element.shadowRoot.lastChild) == null ? void 0 : _j.nodeName) === "IFRAME") {
|
|
1131
1509
|
element.shadowRoot.replaceChild(frame, element.shadowRoot.lastChild);
|
|
1132
1510
|
} else {
|
|
1133
|
-
element.shadowRoot
|
|
1511
|
+
injectContents(element.shadowRoot);
|
|
1134
1512
|
}
|
|
1135
1513
|
} else if (element.firstChild) {
|
|
1136
|
-
element.
|
|
1514
|
+
element.innerHTML = "";
|
|
1515
|
+
injectContents(element);
|
|
1137
1516
|
} else {
|
|
1138
|
-
element
|
|
1517
|
+
injectContents(element);
|
|
1139
1518
|
}
|
|
1140
1519
|
} else if (!element.firstChild || element.firstChild.nodeName === "#text") {
|
|
1141
|
-
element
|
|
1520
|
+
injectContents(element);
|
|
1142
1521
|
}
|
|
1143
1522
|
const { contentWindow } = frame;
|
|
1144
1523
|
if (!contentWindow) {
|
|
@@ -1146,19 +1525,31 @@ class EmbedWidget extends Widget {
|
|
|
1146
1525
|
}
|
|
1147
1526
|
const frameDoc = contentWindow.document;
|
|
1148
1527
|
frameDoc.open();
|
|
1528
|
+
console.log({ content: this.content, context: this.context, this: this });
|
|
1529
|
+
const domain = this.widgetApi.domain;
|
|
1149
1530
|
frameDoc.write(`
|
|
1531
|
+
${((_k = brandingConfig == null ? void 0 : brandingConfig.main) == null ? void 0 : _k.brandFont) && `
|
|
1532
|
+
<link rel="preconnect" href="https://fast${domain === "https://staging.referralsaasquatch.com" && "-staging"}.ssqt.io">
|
|
1533
|
+
<link rel="preconnect" href="https://fonts.gstatic.com">
|
|
1534
|
+
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
1535
|
+
<link rel="preload" href="https://fonts.googleapis.com/css2?family=${encodeURIComponent(
|
|
1536
|
+
(_l = brandingConfig == null ? void 0 : brandingConfig.main) == null ? void 0 : _l.brandFont
|
|
1537
|
+
)}" as="style">`}
|
|
1150
1538
|
<script src="${this.npmCdn}/resize-observer-polyfill@1.5.x"><\/script>
|
|
1151
|
-
<style>
|
|
1152
|
-
|
|
1153
|
-
visibility: hidden;
|
|
1154
|
-
}
|
|
1539
|
+
<style data-styles>
|
|
1540
|
+
html { visibility:hidden;}
|
|
1155
1541
|
</style>
|
|
1156
1542
|
${this.content}
|
|
1543
|
+
|
|
1157
1544
|
`);
|
|
1158
1545
|
frameDoc.close();
|
|
1159
1546
|
domready(frameDoc, async () => {
|
|
1547
|
+
if (skeletonContainer && skeletonContainer.parentNode) {
|
|
1548
|
+
skeletonContainer.parentNode.removeChild(skeletonContainer);
|
|
1549
|
+
}
|
|
1550
|
+
frame.style.display = "block";
|
|
1160
1551
|
const _sqh = contentWindow.squatch || contentWindow.widgetIdent;
|
|
1161
|
-
frame.height = frameDoc.body.scrollHeight;
|
|
1552
|
+
frame.height = initialHeight || frameDoc.body.scrollHeight;
|
|
1162
1553
|
console.log({ height: frameDoc.body.scrollHeight });
|
|
1163
1554
|
const ro = new contentWindow["ResizeObserver"]((entries) => {
|
|
1164
1555
|
for (const entry of entries) {
|
|
@@ -1795,7 +2186,8 @@ function _pushCookie() {
|
|
|
1795
2186
|
}
|
|
1796
2187
|
}
|
|
1797
2188
|
const _log$3 = browserExports.debug("squatch-js");
|
|
1798
|
-
function _getAutoConfig(
|
|
2189
|
+
function _getAutoConfig() {
|
|
2190
|
+
var _a2;
|
|
1799
2191
|
const queryString = window.location.search;
|
|
1800
2192
|
const urlParams = new URLSearchParams(queryString);
|
|
1801
2193
|
const refParam = urlParams.get("_saasquatchExtra") || "";
|
|
@@ -1803,6 +2195,13 @@ function _getAutoConfig(configIn) {
|
|
|
1803
2195
|
_log$3("No _saasquatchExtra param");
|
|
1804
2196
|
return;
|
|
1805
2197
|
}
|
|
2198
|
+
const config = validateConfig({
|
|
2199
|
+
tenantAlias: "UNKNOWN"
|
|
2200
|
+
});
|
|
2201
|
+
if (!config.domain) {
|
|
2202
|
+
_log$3("domain must be provided in config to use _saasquatchExtra");
|
|
2203
|
+
return;
|
|
2204
|
+
}
|
|
1806
2205
|
let raw;
|
|
1807
2206
|
try {
|
|
1808
2207
|
raw = JSON.parse(b64decode(refParam));
|
|
@@ -1810,8 +2209,13 @@ function _getAutoConfig(configIn) {
|
|
|
1810
2209
|
_log$3("Unable to decode _saasquatchExtra config");
|
|
1811
2210
|
return;
|
|
1812
2211
|
}
|
|
1813
|
-
|
|
1814
|
-
|
|
2212
|
+
function normalizeDomain(domain) {
|
|
2213
|
+
return domain.replace(/^https?:\/\//, "");
|
|
2214
|
+
}
|
|
2215
|
+
const normalizedDomain = normalizeDomain(config.domain);
|
|
2216
|
+
const tenantAlias = Object.keys((raw == null ? void 0 : raw[normalizedDomain]) || {})[0];
|
|
2217
|
+
const widgetConfig = (_a2 = raw == null ? void 0 : raw[normalizedDomain]) == null ? void 0 : _a2[tenantAlias];
|
|
2218
|
+
if (!widgetConfig) {
|
|
1815
2219
|
_log$3("_saasquatchExtra did not have an expected structure");
|
|
1816
2220
|
return void 0;
|
|
1817
2221
|
}
|
|
@@ -1823,20 +2227,11 @@ function _getAutoConfig(configIn) {
|
|
|
1823
2227
|
...rest
|
|
1824
2228
|
},
|
|
1825
2229
|
squatchConfig: {
|
|
1826
|
-
...
|
|
1827
|
-
domain,
|
|
2230
|
+
...config,
|
|
1828
2231
|
tenantAlias
|
|
1829
2232
|
}
|
|
1830
2233
|
};
|
|
1831
2234
|
}
|
|
1832
|
-
function convertExtraToConfig(obj) {
|
|
1833
|
-
var _a2;
|
|
1834
|
-
const _domain = Object.keys(obj || {})[0];
|
|
1835
|
-
const tenantAlias = Object.keys((obj == null ? void 0 : obj[_domain]) || {})[0];
|
|
1836
|
-
const widgetConfig = (_a2 = obj == null ? void 0 : obj[_domain]) == null ? void 0 : _a2[tenantAlias];
|
|
1837
|
-
const domain = _domain ? `https://${_domain}` : void 0;
|
|
1838
|
-
return { domain, tenantAlias, widgetConfig };
|
|
1839
|
-
}
|
|
1840
2235
|
const _log$2 = browserExports.debug("squatch-js:decodeUserJwt");
|
|
1841
2236
|
function decodeUserJwt(tokenStr) {
|
|
1842
2237
|
var _a2;
|
|
@@ -2070,12 +2465,30 @@ class DeclarativeEmbedWidget extends DeclarativeWidget {
|
|
|
2070
2465
|
}
|
|
2071
2466
|
}
|
|
2072
2467
|
async connectedCallback() {
|
|
2073
|
-
var _a2
|
|
2468
|
+
var _a2;
|
|
2074
2469
|
this.loaded = true;
|
|
2075
2470
|
this.container = this.getAttribute("container");
|
|
2471
|
+
const skeletonHTML = `
|
|
2472
|
+
<div>
|
|
2473
|
+
<h1>Dynamic Content</h1>
|
|
2474
|
+
<p>This content was dynamically added to the widget before it loaded.</p>
|
|
2475
|
+
<p>This content comes from the embeded widget class</p>
|
|
2476
|
+
</div>
|
|
2477
|
+
`;
|
|
2478
|
+
const skeletonContainer = document.createElement("div");
|
|
2479
|
+
skeletonContainer.id = "loading-skeleton";
|
|
2480
|
+
skeletonContainer.innerHTML = skeletonHTML;
|
|
2481
|
+
if (!this.shadowRoot) {
|
|
2482
|
+
this.attachShadow({ mode: "open" });
|
|
2483
|
+
}
|
|
2484
|
+
if (this.shadowRoot) {
|
|
2485
|
+
this.shadowRoot.innerHTML = skeletonHTML;
|
|
2486
|
+
}
|
|
2076
2487
|
await this.renderWidget();
|
|
2077
|
-
const
|
|
2078
|
-
if (
|
|
2488
|
+
const loadingElement = (_a2 = this.shadowRoot) == null ? void 0 : _a2.getElementById("loading-skeleton");
|
|
2489
|
+
if (loadingElement) {
|
|
2490
|
+
loadingElement.remove();
|
|
2491
|
+
}
|
|
2079
2492
|
if (this.getAttribute("open") !== null) this.open();
|
|
2080
2493
|
}
|
|
2081
2494
|
}
|
|
@@ -2104,7 +2517,45 @@ class DeclarativePopupWidget extends DeclarativeWidget {
|
|
|
2104
2517
|
async connectedCallback() {
|
|
2105
2518
|
this.loaded = true;
|
|
2106
2519
|
this.container = this.getAttribute("container");
|
|
2107
|
-
|
|
2520
|
+
const skeletonHTML = `
|
|
2521
|
+
<div id="loading-skeleton-content">
|
|
2522
|
+
<h1>Dynamic Content</h1>
|
|
2523
|
+
<p>This content was dynamically added to the widget before it loaded.</p>
|
|
2524
|
+
<p>This content comes from the embedded widget class</p>
|
|
2525
|
+
</div>
|
|
2526
|
+
`;
|
|
2527
|
+
const skeletonContainer = document.createElement("div");
|
|
2528
|
+
skeletonContainer.id = "loading-skeleton";
|
|
2529
|
+
skeletonContainer.innerHTML = skeletonHTML;
|
|
2530
|
+
skeletonContainer.style.width = "100%";
|
|
2531
|
+
const root = this.shadowRoot || this.attachShadow({ mode: "open" });
|
|
2532
|
+
if (root.firstChild) {
|
|
2533
|
+
root.insertBefore(skeletonContainer, root.firstChild);
|
|
2534
|
+
} else {
|
|
2535
|
+
root.appendChild(skeletonContainer);
|
|
2536
|
+
}
|
|
2537
|
+
const removeSkeleton = () => {
|
|
2538
|
+
const el = root.getElementById("loading-skeleton");
|
|
2539
|
+
if (el) {
|
|
2540
|
+
el.remove();
|
|
2541
|
+
console.log("Skeleton removed successfully via event");
|
|
2542
|
+
}
|
|
2543
|
+
};
|
|
2544
|
+
this.addEventListener("sq:load", removeSkeleton);
|
|
2545
|
+
try {
|
|
2546
|
+
await this.renderWidget();
|
|
2547
|
+
console.log("Widget rendered (initialization complete)");
|
|
2548
|
+
setTimeout(() => {
|
|
2549
|
+
const el = root.getElementById("loading-skeleton");
|
|
2550
|
+
if (el) {
|
|
2551
|
+
console.warn("Removing skeleton via timeout (load event missing)");
|
|
2552
|
+
el.remove();
|
|
2553
|
+
}
|
|
2554
|
+
}, 5e3);
|
|
2555
|
+
} catch (err) {
|
|
2556
|
+
console.error("Critical Error in renderWidget:", err);
|
|
2557
|
+
removeSkeleton();
|
|
2558
|
+
}
|
|
2108
2559
|
if (this.getAttribute("open") !== null) this.open();
|
|
2109
2560
|
}
|
|
2110
2561
|
}
|
|
@@ -2149,9 +2600,9 @@ function widget(widgetConfig) {
|
|
|
2149
2600
|
var _a2;
|
|
2150
2601
|
return (_a2 = widgets()) == null ? void 0 : _a2.render(widgetConfig);
|
|
2151
2602
|
}
|
|
2152
|
-
function _auto(
|
|
2603
|
+
function _auto() {
|
|
2153
2604
|
var _a2;
|
|
2154
|
-
const configs = _getAutoConfig(
|
|
2605
|
+
const configs = _getAutoConfig();
|
|
2155
2606
|
if (configs) {
|
|
2156
2607
|
const { squatchConfig, widgetConfig } = configs;
|
|
2157
2608
|
init(squatchConfig);
|