@saasquatch/squatch-js 2.8.2-14 → 2.8.2-16

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.
@@ -1108,351 +1108,6 @@ function delay(duration) {
1108
1108
  setTimeout(resolve, duration);
1109
1109
  });
1110
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
- };
1456
1111
  const _log$7 = browserExports.debug("squatch-js:EMBEDwidget");
1457
1112
  class EmbedWidget extends Widget {
1458
1113
  constructor(params, container) {
@@ -1463,61 +1118,34 @@ class EmbedWidget extends Widget {
1463
1118
  this.container = container;
1464
1119
  }
1465
1120
  }
1121
+ //Old code for testing
1466
1122
  async load() {
1467
- var _a2, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l;
1123
+ var _a2, _b, _c, _d, _e;
1468
1124
  const brandingConfig = (_b = (_a2 = this.context.widgetConfig) == null ? void 0 : _a2.values) == null ? void 0 : _b.brandingConfig;
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;
1125
+ const sizes = (_c = brandingConfig == null ? void 0 : brandingConfig.widgetSize) == null ? void 0 : _c.embeddedWidgets;
1474
1126
  const maxWidth = (sizes == null ? void 0 : sizes.maxWidth) ? formatWidth(sizes.maxWidth) : "";
1475
1127
  const minWidth = (sizes == null ? void 0 : sizes.minWidth) ? formatWidth(sizes.minWidth) : "";
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
- });
1128
+ const frame = this._createFrame({ minWidth, maxWidth });
1494
1129
  const element = this._findElement();
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) {
1130
+ if ((_d = this.context) == null ? void 0 : _d.container) {
1502
1131
  element.style.visibility = "hidden";
1503
1132
  element.style.height = "0";
1504
1133
  element.style["overflow-y"] = "hidden";
1505
1134
  }
1506
1135
  if (this.container) {
1507
1136
  if (element.shadowRoot) {
1508
- if (((_j = element.shadowRoot.lastChild) == null ? void 0 : _j.nodeName) === "IFRAME") {
1137
+ if (((_e = element.shadowRoot.lastChild) == null ? void 0 : _e.nodeName) === "IFRAME") {
1509
1138
  element.shadowRoot.replaceChild(frame, element.shadowRoot.lastChild);
1510
1139
  } else {
1511
- injectContents(element.shadowRoot);
1140
+ element.shadowRoot.appendChild(frame);
1512
1141
  }
1513
1142
  } else if (element.firstChild) {
1514
- element.innerHTML = "";
1515
- injectContents(element);
1143
+ element.replaceChild(frame, element.firstChild);
1516
1144
  } else {
1517
- injectContents(element);
1145
+ element.appendChild(frame);
1518
1146
  }
1519
1147
  } else if (!element.firstChild || element.firstChild.nodeName === "#text") {
1520
- injectContents(element);
1148
+ element.appendChild(frame);
1521
1149
  }
1522
1150
  const { contentWindow } = frame;
1523
1151
  if (!contentWindow) {
@@ -1525,32 +1153,14 @@ class EmbedWidget extends Widget {
1525
1153
  }
1526
1154
  const frameDoc = contentWindow.document;
1527
1155
  frameDoc.open();
1528
- console.log({ content: this.content, context: this.context, this: this });
1529
- const domain = this.widgetApi.domain;
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">`}
1538
- <script src="${this.npmCdn}/resize-observer-polyfill@1.5.x"><\/script>
1539
- <style data-styles>
1540
- html { visibility:hidden;}
1541
- </style>
1542
- ${this.content}
1543
-
1544
- `);
1156
+ frameDoc.write(this.content);
1157
+ frameDoc.write(
1158
+ `<script src="${this.npmCdn}/resize-observer-polyfill@1.5.x"><\/script>`
1159
+ );
1545
1160
  frameDoc.close();
1546
1161
  domready(frameDoc, async () => {
1547
- if (skeletonContainer && skeletonContainer.parentNode) {
1548
- skeletonContainer.parentNode.removeChild(skeletonContainer);
1549
- }
1550
- frame.style.display = "block";
1551
1162
  const _sqh = contentWindow.squatch || contentWindow.widgetIdent;
1552
- frame.height = initialHeight || frameDoc.body.scrollHeight;
1553
- console.log({ height: frameDoc.body.scrollHeight });
1163
+ frame.height = frameDoc.body.scrollHeight;
1554
1164
  const ro = new contentWindow["ResizeObserver"]((entries) => {
1555
1165
  for (const entry of entries) {
1556
1166
  const { height } = entry.contentRect;
@@ -1567,6 +1177,126 @@ class EmbedWidget extends Widget {
1567
1177
  }
1568
1178
  });
1569
1179
  }
1180
+ // async load() {
1181
+ // const brandingConfig = this.context.widgetConfig?.values?.brandingConfig;
1182
+ // // @ts-ignore
1183
+ // const initialHeight = brandingConfig?.loadingHeight;
1184
+ // const skeletonBackgroundColor =
1185
+ // brandingConfig?.color?.loadingSkeleton?.background;
1186
+ // const skeletonShimmerColor =
1187
+ // brandingConfig?.color?.loadingSkeleton?.animationBackground;
1188
+ // const borderColor = brandingConfig?.border?.borderColor;
1189
+ // const sizes = brandingConfig?.widgetSize?.embeddedWidgets;
1190
+ // const maxWidth = sizes?.maxWidth ? formatWidth(sizes.maxWidth) : "";
1191
+ // const minWidth = sizes?.minWidth ? formatWidth(sizes.minWidth) : "";
1192
+ // console.log({
1193
+ // brandingConfig,
1194
+ // initialHeight,
1195
+ // widgetConfig: this.context.widgetConfig,
1196
+ // });
1197
+ // // const skeletonHTML = getSkeleton({
1198
+ // // height: initialHeight,
1199
+ // // skeletonBackgroundColor,
1200
+ // // skeletonShimmerColor,
1201
+ // // borderColor,
1202
+ // // });
1203
+ // // const skeletonContainer = document.createElement("div");
1204
+ // // skeletonContainer.innerHTML = skeletonHTML;
1205
+ // const frame = this._createFrame({
1206
+ // minWidth,
1207
+ // maxWidth,
1208
+ // initialHeight,
1209
+ // });
1210
+ // const element = this._findElement();
1211
+ // // element.innerHTML = skeletonHTML;
1212
+ // // Hide frame initially
1213
+ // frame.style.display = "none";
1214
+ // const injectContents = (target: HTMLElement | ShadowRoot) => {
1215
+ // // Optional: Clear target to prevent duplicates if load() is called twice
1216
+ // // target.innerHTML = "";
1217
+ // // target.appendChild(skeletonContainer);
1218
+ // target.appendChild(frame);
1219
+ // };
1220
+ // if (this.context?.container) {
1221
+ // // Custom container is used
1222
+ // element.style.visibility = "hidden";
1223
+ // element.style.height = "0";
1224
+ // element.style["overflow-y"] = "hidden";
1225
+ // }
1226
+ // if (this.container) {
1227
+ // if (element.shadowRoot) {
1228
+ // if (element.shadowRoot.lastChild?.nodeName === "IFRAME") {
1229
+ // element.shadowRoot.replaceChild(frame, element.shadowRoot.lastChild);
1230
+ // } else {
1231
+ // injectContents(element.shadowRoot);
1232
+ // }
1233
+ // } else if (element.firstChild) {
1234
+ // // If replacing, wipe and reload
1235
+ // element.innerHTML = "";
1236
+ // injectContents(element);
1237
+ // } else {
1238
+ // injectContents(element);
1239
+ // }
1240
+ // }
1241
+ // // else if (!element.firstChild || element.firstChild.nodeName === "#text") {
1242
+ // // injectContents(element);
1243
+ // // }
1244
+ // const { contentWindow } = frame;
1245
+ // if (!contentWindow) {
1246
+ // throw new Error("Frame needs a content window");
1247
+ // }
1248
+ // const frameDoc = contentWindow.document;
1249
+ // frameDoc.open();
1250
+ // console.log({ content: this.content, context: this.context, this: this });
1251
+ // const domain = this.widgetApi.domain;
1252
+ // frameDoc.write(`
1253
+ // ${
1254
+ // brandingConfig?.main?.brandFont &&
1255
+ // `
1256
+ // <link rel="preconnect" href="https://fast${
1257
+ // domain === "https://staging.referralsaasquatch.com" && "-staging"
1258
+ // }.ssqt.io">
1259
+ // <link rel="preconnect" href="https://fonts.gstatic.com">
1260
+ // <link rel="preconnect" href="https://fonts.googleapis.com">
1261
+ // <link rel="preload" href="https://fonts.googleapis.com/css2?family=${encodeURIComponent(
1262
+ // brandingConfig?.main?.brandFont
1263
+ // )}" as="style">`
1264
+ // }
1265
+ // <script src="${this.npmCdn}/resize-observer-polyfill@1.5.x"><\/script>
1266
+ // <style data-styles>
1267
+ // html { visibility:hidden;}
1268
+ // </style>
1269
+ // ${this.content}
1270
+ // `);
1271
+ // frameDoc.close();
1272
+ // domready(frameDoc, async () => {
1273
+ // // if (skeletonContainer && skeletonContainer.parentNode) {
1274
+ // // skeletonContainer.parentNode.removeChild(skeletonContainer);
1275
+ // // }
1276
+ // frame.style.display = "block";
1277
+ // const _sqh = contentWindow.squatch || contentWindow.widgetIdent;
1278
+ // // @ts-ignore -- number will be cast to string by browsers
1279
+ // frame.height = initialHeight || frameDoc.body.scrollHeight;
1280
+ // console.log({ height: frameDoc.body.scrollHeight });
1281
+ // // Adjust frame height when size of body changes
1282
+ // /* istanbul ignore next: hard to test */
1283
+ // const ro = new contentWindow["ResizeObserver"]((entries) => {
1284
+ // for (const entry of entries) {
1285
+ // const { height } = entry.contentRect;
1286
+ // // @ts-ignore -- number will be cast to string by browsers
1287
+ // frame.height = height;
1288
+ // }
1289
+ // });
1290
+ // const container = await this._findInnerContainer(frame);
1291
+ // ro.observe(container);
1292
+ // if (this._shouldFireLoadEvent()) {
1293
+ // this._loadEvent(_sqh);
1294
+ // _log("loaded");
1295
+ // } else if (frameDoc) {
1296
+ // this._attachLoadEventListener(frameDoc, _sqh);
1297
+ // }
1298
+ // });
1299
+ // }
1570
1300
  /**
1571
1301
  * Un-hide if element is available and refresh data
1572
1302
  */