@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.
package/dist/squatch.js CHANGED
@@ -1110,351 +1110,6 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
1110
1110
  setTimeout(resolve, duration);
1111
1111
  });
1112
1112
  }
1113
- const getSkeleton = ({
1114
- height = "500px",
1115
- skeletonBackgroundColor = "#e0e0e0",
1116
- skeletonShimmerColor = "#f5f5f5",
1117
- borderColor = "#ccc"
1118
- }) => {
1119
- return `
1120
- <style>
1121
- * {
1122
- box-sizing: border-box;
1123
- padding: 0;
1124
- margin: 0;
1125
- }
1126
-
1127
- .widget-container {
1128
- background: white;
1129
- width: 100%;
1130
- max-width: 900px;
1131
- padding: 40px;
1132
- border-radius: 12px;
1133
- box-shadow: 0 4px 20px rgba(0, 0, 0, 0.08);
1134
- box-sizing: border-box;
1135
- }
1136
-
1137
- @keyframes shimmer {
1138
- 0% {
1139
- background-position: -100% 0;
1140
- }
1141
- 100% {
1142
- background-position: 100% 0;
1143
- }
1144
- }
1145
-
1146
- .skeleton {
1147
- background: ${skeletonBackgroundColor};
1148
- background: linear-gradient(
1149
- 90deg,
1150
- ${skeletonBackgroundColor} 25%,
1151
- ${skeletonShimmerColor} 50%,
1152
- ${skeletonBackgroundColor} 75%
1153
- );
1154
- background-size: 200% 100%;
1155
- animation: shimmer 1.5s infinite linear;
1156
- border-radius: 6px;
1157
- margin-bottom: 12px;
1158
- }
1159
-
1160
- .sk-title-lg {
1161
- height: 36px;
1162
- width: 50%;
1163
- margin-bottom: 16px;
1164
- }
1165
- .sk-title-md {
1166
- height: 28px;
1167
- width: 30%;
1168
- margin-bottom: 20px;
1169
- margin-top: 40px;
1170
- }
1171
- .sk-text {
1172
- height: 16px;
1173
- width: 80%;
1174
- margin-bottom: 8px;
1175
- }
1176
- .sk-text-short {
1177
- width: 40%;
1178
- }
1179
- .sk-label {
1180
- height: 14px;
1181
- width: 25%;
1182
- margin-bottom: 10px;
1183
- }
1184
-
1185
- .hero-section {
1186
- display: flex;
1187
- gap: 40px;
1188
- margin-bottom: 40px;
1189
- border-bottom: 1px solid ${borderColor};
1190
- padding-bottom: 40px;
1191
- flex-direction: row;
1192
- }
1193
- .hero-content {
1194
- flex: 1;
1195
- display: flex;
1196
- flex-direction: column;
1197
- justify-content: center;
1198
- }
1199
- .hero-image {
1200
- flex: 1;
1201
- height: 300px;
1202
- border-radius: 12px;
1203
- }
1204
-
1205
- .share-section {
1206
- margin-bottom: 40px;
1207
- }
1208
- .sk-input {
1209
- height: 50px;
1210
- width: 100%;
1211
- border-radius: 8px;
1212
- margin-bottom: 16px;
1213
- }
1214
- .social-buttons {
1215
- display: flex;
1216
- gap: 12px;
1217
- }
1218
- .sk-btn-social {
1219
- flex: 1;
1220
- height: 50px;
1221
- border-radius: 8px;
1222
- }
1223
-
1224
- .stats-section {
1225
- display: flex;
1226
- gap: 24px;
1227
- margin-bottom: 40px;
1228
- padding: 30px 0;
1229
- border-top: 1px solid ${borderColor};
1230
- border-bottom: 1px solid ${borderColor};
1231
- }
1232
- .stat-card {
1233
- flex: 1;
1234
- display: flex;
1235
- flex-direction: column;
1236
- align-items: center;
1237
- }
1238
- .stat-divider {
1239
- padding-left: 24px;
1240
- }
1241
-
1242
- .sk-stat-num {
1243
- height: 48px;
1244
- width: 120px;
1245
- margin-bottom: 8px;
1246
- }
1247
- .sk-stat-label {
1248
- height: 18px;
1249
- width: 80px;
1250
- }
1251
-
1252
- .table-header {
1253
- display: flex;
1254
- gap: 16px;
1255
- margin-bottom: 16px;
1256
- }
1257
- .sk-th {
1258
- height: 16px;
1259
- }
1260
- .table-row {
1261
- display: flex;
1262
- align-items: center;
1263
- gap: 16px;
1264
- padding: 16px 0;
1265
- border-bottom: 1px solid ${borderColor};
1266
- }
1267
-
1268
- .col-user {
1269
- flex: 2;
1270
- }
1271
- .col-status {
1272
- flex: 1;
1273
- }
1274
- .col-reward {
1275
- flex: 2;
1276
- }
1277
- .col-date {
1278
- flex: 1;
1279
- }
1280
-
1281
- .sk-badge {
1282
- height: 28px;
1283
- width: 90px;
1284
- border-radius: 14px;
1285
- }
1286
- .sk-reward-block {
1287
- height: 36px;
1288
- width: 100%;
1289
- border-radius: 6px;
1290
- }
1291
-
1292
- .pagination {
1293
- display: flex;
1294
- justify-content: flex-end;
1295
- gap: 8px;
1296
- margin-top: 24px;
1297
- }
1298
- .sk-btn-page {
1299
- height: 36px;
1300
- width: 64px;
1301
- border-radius: 6px;
1302
- margin-bottom: 0;
1303
- }
1304
-
1305
- @media (max-width: 768px) {
1306
- body {
1307
- padding: 20px;
1308
- }
1309
- .widget-container {
1310
- padding: 24px;
1311
- }
1312
-
1313
- .hero-section {
1314
- flex-direction: column-reverse;
1315
- gap: 24px;
1316
- }
1317
- .hero-image {
1318
- height: 220px;
1319
- width: 100%;
1320
- }
1321
- .sk-title-lg {
1322
- width: 80%;
1323
- }
1324
-
1325
- .col-date {
1326
- display: none;
1327
- }
1328
- }
1329
-
1330
- @media (max-width: 480px) {
1331
- body {
1332
- padding: 10px;
1333
- }
1334
- .widget-container {
1335
- padding: 16px;
1336
- }
1337
-
1338
- .sk-stat-num {
1339
- width: 80px;
1340
- height: 40px;
1341
- }
1342
-
1343
- .col-reward {
1344
- display: none;
1345
- }
1346
-
1347
- .col-user {
1348
- flex: 3;
1349
- }
1350
- .col-status {
1351
- flex: 2;
1352
- display: flex;
1353
- justify-content: flex-end;
1354
- }
1355
- }
1356
- </style>
1357
-
1358
- <div class="widget-container">
1359
- <div class="hero-section">
1360
- <div class="hero-content">
1361
- <div class="skeleton sk-title-lg"></div>
1362
- <div class="skeleton sk-text"></div>
1363
- <div class="skeleton sk-text sk-text-short"></div>
1364
- </div>
1365
- <div class="skeleton hero-image"></div>
1366
- </div>
1367
-
1368
- <div class="share-section">
1369
- <div class="skeleton sk-label"></div>
1370
- <div class="skeleton sk-input"></div>
1371
- <div class="social-buttons">
1372
- <div class="skeleton sk-btn-social"></div>
1373
- <div class="skeleton sk-btn-social"></div>
1374
- <div class="skeleton sk-btn-social"></div>
1375
- <div class="skeleton sk-btn-social"></div>
1376
- </div>
1377
- </div>
1378
-
1379
- <div
1380
- class="skeleton sk-title-md"
1381
- style="margin-top: 0; width: 30%; margin-left: auto; margin-right: auto"
1382
- ></div>
1383
- <div
1384
- class="skeleton sk-text"
1385
- style="width: 60%; margin-left: auto; margin-right: auto"
1386
- ></div>
1387
-
1388
- <div class="stats-section">
1389
- <div class="stat-card">
1390
- <div class="skeleton sk-stat-num"></div>
1391
- <div class="skeleton sk-stat-label"></div>
1392
- </div>
1393
- <div class="stat-card stat-divider">
1394
- <div class="skeleton sk-stat-num"></div>
1395
- <div class="skeleton sk-stat-label"></div>
1396
- </div>
1397
- </div>
1398
-
1399
- <div class="skeleton sk-title-md"></div>
1400
-
1401
- <div class="table-header">
1402
- <div class="skeleton sk-th col-user"></div>
1403
- <div class="skeleton sk-th col-status"></div>
1404
- <div class="skeleton sk-th col-reward"></div>
1405
- <div class="skeleton sk-th col-date"></div>
1406
- </div>
1407
-
1408
- <div class="table-row">
1409
- <div class="col-user">
1410
- <div class="skeleton sk-text" style="width: 70%; margin: 0"></div>
1411
- </div>
1412
- <div class="col-status">
1413
- <div class="skeleton sk-badge" style="margin: 0"></div>
1414
- </div>
1415
- <div class="col-reward">
1416
- <div class="skeleton sk-reward-block" style="margin: 0"></div>
1417
- </div>
1418
- <div class="col-date">
1419
- <div class="skeleton sk-text" style="width: 80%; margin: 0"></div>
1420
- </div>
1421
- </div>
1422
- <div class="table-row">
1423
- <div class="col-user">
1424
- <div class="skeleton sk-text" style="width: 60%; margin: 0"></div>
1425
- </div>
1426
- <div class="col-status">
1427
- <div class="skeleton sk-badge" style="margin: 0"></div>
1428
- </div>
1429
- <div class="col-reward">
1430
- <div class="skeleton sk-reward-block" style="margin: 0"></div>
1431
- </div>
1432
- <div class="col-date">
1433
- <div class="skeleton sk-text" style="width: 80%; margin: 0"></div>
1434
- </div>
1435
- </div>
1436
- <div class="table-row">
1437
- <div class="col-user">
1438
- <div class="skeleton sk-text" style="width: 75%; margin: 0"></div>
1439
- </div>
1440
- <div class="col-status">
1441
- <div class="skeleton sk-badge" style="margin: 0"></div>
1442
- </div>
1443
- <div class="col-reward">
1444
- <div class="skeleton sk-reward-block" style="margin: 0"></div>
1445
- </div>
1446
- <div class="col-date">
1447
- <div class="skeleton sk-text" style="width: 80%; margin: 0"></div>
1448
- </div>
1449
- </div>
1450
-
1451
- <div class="pagination">
1452
- <div class="skeleton sk-btn-page"></div>
1453
- <div class="skeleton sk-btn-page"></div>
1454
- </div>
1455
- </div>
1456
- `;
1457
- };
1458
1113
  const _log$7 = browserExports.debug("squatch-js:EMBEDwidget");
1459
1114
  class EmbedWidget extends Widget {
1460
1115
  constructor(params, container) {
@@ -1465,61 +1120,34 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
1465
1120
  this.container = container;
1466
1121
  }
1467
1122
  }
1123
+ //Old code for testing
1468
1124
  async load() {
1469
- var _a2, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l;
1125
+ var _a2, _b, _c, _d, _e;
1470
1126
  const brandingConfig = (_b = (_a2 = this.context.widgetConfig) == null ? void 0 : _a2.values) == null ? void 0 : _b.brandingConfig;
1471
- const initialHeight = brandingConfig == null ? void 0 : brandingConfig.loadingHeight;
1472
- const skeletonBackgroundColor = (_d = (_c = brandingConfig == null ? void 0 : brandingConfig.color) == null ? void 0 : _c.loadingSkeleton) == null ? void 0 : _d.background;
1473
- const skeletonShimmerColor = (_f = (_e = brandingConfig == null ? void 0 : brandingConfig.color) == null ? void 0 : _e.loadingSkeleton) == null ? void 0 : _f.animationBackground;
1474
- const borderColor = (_g = brandingConfig == null ? void 0 : brandingConfig.border) == null ? void 0 : _g.borderColor;
1475
- const sizes = (_h = brandingConfig == null ? void 0 : brandingConfig.widgetSize) == null ? void 0 : _h.embeddedWidgets;
1127
+ const sizes = (_c = brandingConfig == null ? void 0 : brandingConfig.widgetSize) == null ? void 0 : _c.embeddedWidgets;
1476
1128
  const maxWidth = (sizes == null ? void 0 : sizes.maxWidth) ? formatWidth(sizes.maxWidth) : "";
1477
1129
  const minWidth = (sizes == null ? void 0 : sizes.minWidth) ? formatWidth(sizes.minWidth) : "";
1478
- console.log({
1479
- brandingConfig,
1480
- initialHeight,
1481
- widgetConfig: this.context.widgetConfig
1482
- });
1483
- const skeletonHTML = getSkeleton({
1484
- height: initialHeight,
1485
- skeletonBackgroundColor,
1486
- skeletonShimmerColor,
1487
- borderColor
1488
- });
1489
- const skeletonContainer = document.createElement("div");
1490
- skeletonContainer.innerHTML = skeletonHTML;
1491
- const frame = this._createFrame({
1492
- minWidth,
1493
- maxWidth,
1494
- initialHeight
1495
- });
1130
+ const frame = this._createFrame({ minWidth, maxWidth });
1496
1131
  const element = this._findElement();
1497
- element.innerHTML = skeletonHTML;
1498
- frame.style.display = "none";
1499
- const injectContents = (target) => {
1500
- target.appendChild(skeletonContainer);
1501
- target.appendChild(frame);
1502
- };
1503
- if ((_i = this.context) == null ? void 0 : _i.container) {
1132
+ if ((_d = this.context) == null ? void 0 : _d.container) {
1504
1133
  element.style.visibility = "hidden";
1505
1134
  element.style.height = "0";
1506
1135
  element.style["overflow-y"] = "hidden";
1507
1136
  }
1508
1137
  if (this.container) {
1509
1138
  if (element.shadowRoot) {
1510
- if (((_j = element.shadowRoot.lastChild) == null ? void 0 : _j.nodeName) === "IFRAME") {
1139
+ if (((_e = element.shadowRoot.lastChild) == null ? void 0 : _e.nodeName) === "IFRAME") {
1511
1140
  element.shadowRoot.replaceChild(frame, element.shadowRoot.lastChild);
1512
1141
  } else {
1513
- injectContents(element.shadowRoot);
1142
+ element.shadowRoot.appendChild(frame);
1514
1143
  }
1515
1144
  } else if (element.firstChild) {
1516
- element.innerHTML = "";
1517
- injectContents(element);
1145
+ element.replaceChild(frame, element.firstChild);
1518
1146
  } else {
1519
- injectContents(element);
1147
+ element.appendChild(frame);
1520
1148
  }
1521
1149
  } else if (!element.firstChild || element.firstChild.nodeName === "#text") {
1522
- injectContents(element);
1150
+ element.appendChild(frame);
1523
1151
  }
1524
1152
  const { contentWindow } = frame;
1525
1153
  if (!contentWindow) {
@@ -1527,32 +1155,14 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
1527
1155
  }
1528
1156
  const frameDoc = contentWindow.document;
1529
1157
  frameDoc.open();
1530
- console.log({ content: this.content, context: this.context, this: this });
1531
- const domain = this.widgetApi.domain;
1532
- frameDoc.write(`
1533
- ${((_k = brandingConfig == null ? void 0 : brandingConfig.main) == null ? void 0 : _k.brandFont) && `
1534
- <link rel="preconnect" href="https://fast${domain === "https://staging.referralsaasquatch.com" && "-staging"}.ssqt.io">
1535
- <link rel="preconnect" href="https://fonts.gstatic.com">
1536
- <link rel="preconnect" href="https://fonts.googleapis.com">
1537
- <link rel="preload" href="https://fonts.googleapis.com/css2?family=${encodeURIComponent(
1538
- (_l = brandingConfig == null ? void 0 : brandingConfig.main) == null ? void 0 : _l.brandFont
1539
- )}" as="style">`}
1540
- <script src="${this.npmCdn}/resize-observer-polyfill@1.5.x"><\/script>
1541
- <style data-styles>
1542
- html { visibility:hidden;}
1543
- </style>
1544
- ${this.content}
1545
-
1546
- `);
1158
+ frameDoc.write(this.content);
1159
+ frameDoc.write(
1160
+ `<script src="${this.npmCdn}/resize-observer-polyfill@1.5.x"><\/script>`
1161
+ );
1547
1162
  frameDoc.close();
1548
1163
  domready(frameDoc, async () => {
1549
- if (skeletonContainer && skeletonContainer.parentNode) {
1550
- skeletonContainer.parentNode.removeChild(skeletonContainer);
1551
- }
1552
- frame.style.display = "block";
1553
1164
  const _sqh = contentWindow.squatch || contentWindow.widgetIdent;
1554
- frame.height = initialHeight || frameDoc.body.scrollHeight;
1555
- console.log({ height: frameDoc.body.scrollHeight });
1165
+ frame.height = frameDoc.body.scrollHeight;
1556
1166
  const ro = new contentWindow["ResizeObserver"]((entries) => {
1557
1167
  for (const entry of entries) {
1558
1168
  const { height } = entry.contentRect;
@@ -1569,6 +1179,126 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
1569
1179
  }
1570
1180
  });
1571
1181
  }
1182
+ // async load() {
1183
+ // const brandingConfig = this.context.widgetConfig?.values?.brandingConfig;
1184
+ // // @ts-ignore
1185
+ // const initialHeight = brandingConfig?.loadingHeight;
1186
+ // const skeletonBackgroundColor =
1187
+ // brandingConfig?.color?.loadingSkeleton?.background;
1188
+ // const skeletonShimmerColor =
1189
+ // brandingConfig?.color?.loadingSkeleton?.animationBackground;
1190
+ // const borderColor = brandingConfig?.border?.borderColor;
1191
+ // const sizes = brandingConfig?.widgetSize?.embeddedWidgets;
1192
+ // const maxWidth = sizes?.maxWidth ? formatWidth(sizes.maxWidth) : "";
1193
+ // const minWidth = sizes?.minWidth ? formatWidth(sizes.minWidth) : "";
1194
+ // console.log({
1195
+ // brandingConfig,
1196
+ // initialHeight,
1197
+ // widgetConfig: this.context.widgetConfig,
1198
+ // });
1199
+ // // const skeletonHTML = getSkeleton({
1200
+ // // height: initialHeight,
1201
+ // // skeletonBackgroundColor,
1202
+ // // skeletonShimmerColor,
1203
+ // // borderColor,
1204
+ // // });
1205
+ // // const skeletonContainer = document.createElement("div");
1206
+ // // skeletonContainer.innerHTML = skeletonHTML;
1207
+ // const frame = this._createFrame({
1208
+ // minWidth,
1209
+ // maxWidth,
1210
+ // initialHeight,
1211
+ // });
1212
+ // const element = this._findElement();
1213
+ // // element.innerHTML = skeletonHTML;
1214
+ // // Hide frame initially
1215
+ // frame.style.display = "none";
1216
+ // const injectContents = (target: HTMLElement | ShadowRoot) => {
1217
+ // // Optional: Clear target to prevent duplicates if load() is called twice
1218
+ // // target.innerHTML = "";
1219
+ // // target.appendChild(skeletonContainer);
1220
+ // target.appendChild(frame);
1221
+ // };
1222
+ // if (this.context?.container) {
1223
+ // // Custom container is used
1224
+ // element.style.visibility = "hidden";
1225
+ // element.style.height = "0";
1226
+ // element.style["overflow-y"] = "hidden";
1227
+ // }
1228
+ // if (this.container) {
1229
+ // if (element.shadowRoot) {
1230
+ // if (element.shadowRoot.lastChild?.nodeName === "IFRAME") {
1231
+ // element.shadowRoot.replaceChild(frame, element.shadowRoot.lastChild);
1232
+ // } else {
1233
+ // injectContents(element.shadowRoot);
1234
+ // }
1235
+ // } else if (element.firstChild) {
1236
+ // // If replacing, wipe and reload
1237
+ // element.innerHTML = "";
1238
+ // injectContents(element);
1239
+ // } else {
1240
+ // injectContents(element);
1241
+ // }
1242
+ // }
1243
+ // // else if (!element.firstChild || element.firstChild.nodeName === "#text") {
1244
+ // // injectContents(element);
1245
+ // // }
1246
+ // const { contentWindow } = frame;
1247
+ // if (!contentWindow) {
1248
+ // throw new Error("Frame needs a content window");
1249
+ // }
1250
+ // const frameDoc = contentWindow.document;
1251
+ // frameDoc.open();
1252
+ // console.log({ content: this.content, context: this.context, this: this });
1253
+ // const domain = this.widgetApi.domain;
1254
+ // frameDoc.write(`
1255
+ // ${
1256
+ // brandingConfig?.main?.brandFont &&
1257
+ // `
1258
+ // <link rel="preconnect" href="https://fast${
1259
+ // domain === "https://staging.referralsaasquatch.com" && "-staging"
1260
+ // }.ssqt.io">
1261
+ // <link rel="preconnect" href="https://fonts.gstatic.com">
1262
+ // <link rel="preconnect" href="https://fonts.googleapis.com">
1263
+ // <link rel="preload" href="https://fonts.googleapis.com/css2?family=${encodeURIComponent(
1264
+ // brandingConfig?.main?.brandFont
1265
+ // )}" as="style">`
1266
+ // }
1267
+ // <script src="${this.npmCdn}/resize-observer-polyfill@1.5.x"><\/script>
1268
+ // <style data-styles>
1269
+ // html { visibility:hidden;}
1270
+ // </style>
1271
+ // ${this.content}
1272
+ // `);
1273
+ // frameDoc.close();
1274
+ // domready(frameDoc, async () => {
1275
+ // // if (skeletonContainer && skeletonContainer.parentNode) {
1276
+ // // skeletonContainer.parentNode.removeChild(skeletonContainer);
1277
+ // // }
1278
+ // frame.style.display = "block";
1279
+ // const _sqh = contentWindow.squatch || contentWindow.widgetIdent;
1280
+ // // @ts-ignore -- number will be cast to string by browsers
1281
+ // frame.height = initialHeight || frameDoc.body.scrollHeight;
1282
+ // console.log({ height: frameDoc.body.scrollHeight });
1283
+ // // Adjust frame height when size of body changes
1284
+ // /* istanbul ignore next: hard to test */
1285
+ // const ro = new contentWindow["ResizeObserver"]((entries) => {
1286
+ // for (const entry of entries) {
1287
+ // const { height } = entry.contentRect;
1288
+ // // @ts-ignore -- number will be cast to string by browsers
1289
+ // frame.height = height;
1290
+ // }
1291
+ // });
1292
+ // const container = await this._findInnerContainer(frame);
1293
+ // ro.observe(container);
1294
+ // if (this._shouldFireLoadEvent()) {
1295
+ // this._loadEvent(_sqh);
1296
+ // _log("loaded");
1297
+ // } else if (frameDoc) {
1298
+ // this._attachLoadEventListener(frameDoc, _sqh);
1299
+ // }
1300
+ // });
1301
+ // }
1572
1302
  /**
1573
1303
  * Un-hide if element is available and refresh data
1574
1304
  */