@saasquatch/squatch-js 2.8.2-9 → 2.8.2

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
@@ -704,7 +704,6 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
704
704
  const raw = params;
705
705
  const clean = validatePasswordlessConfig(raw);
706
706
  const { widgetType, engagementMedium = "POPUP", jwt, user } = clean;
707
- console.log({ params });
708
707
  const tenantAlias = encodeURIComponent(this.tenantAlias);
709
708
  const accountId = (user == null ? void 0 : user.accountId) ? encodeURIComponent(user.accountId) : null;
710
709
  const userId = (user == null ? void 0 : user.id) ? encodeURIComponent(user.id) : null;
@@ -893,9 +892,6 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
893
892
  if ((options == null ? void 0 : options.maxWidth) || (options == null ? void 0 : options.minWidth)) {
894
893
  frame.style.width = "100%";
895
894
  }
896
- if (options == null ? void 0 : options.initialHeight) {
897
- frame.height = options.initialHeight;
898
- }
899
895
  return frame;
900
896
  }
901
897
  _findFrame() {
@@ -1110,416 +1106,41 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
1110
1106
  setTimeout(resolve, duration);
1111
1107
  });
1112
1108
  }
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
1109
  const _log$7 = browserExports.debug("squatch-js:EMBEDwidget");
1459
1110
  class EmbedWidget extends Widget {
1460
1111
  constructor(params, container) {
1461
1112
  super(params);
1462
1113
  __publicField(this, "show", this.open);
1463
1114
  __publicField(this, "hide", this.close);
1464
- if (container) {
1465
- this.container = container;
1466
- }
1115
+ if (container) this.container = container;
1467
1116
  }
1468
1117
  async load() {
1469
- var _a2, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l;
1118
+ var _a2, _b, _c, _d, _e;
1470
1119
  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;
1120
+ const sizes = (_c = brandingConfig == null ? void 0 : brandingConfig.widgetSize) == null ? void 0 : _c.embeddedWidgets;
1476
1121
  const maxWidth = (sizes == null ? void 0 : sizes.maxWidth) ? formatWidth(sizes.maxWidth) : "";
1477
1122
  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
- });
1123
+ const frame = this._createFrame({ minWidth, maxWidth });
1496
1124
  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) {
1125
+ if ((_d = this.context) == null ? void 0 : _d.container) {
1504
1126
  element.style.visibility = "hidden";
1505
1127
  element.style.height = "0";
1506
1128
  element.style["overflow-y"] = "hidden";
1507
1129
  }
1508
1130
  if (this.container) {
1509
1131
  if (element.shadowRoot) {
1510
- if (((_j = element.shadowRoot.lastChild) == null ? void 0 : _j.nodeName) === "IFRAME") {
1132
+ if (((_e = element.shadowRoot.lastChild) == null ? void 0 : _e.nodeName) === "IFRAME") {
1511
1133
  element.shadowRoot.replaceChild(frame, element.shadowRoot.lastChild);
1512
1134
  } else {
1513
- injectContents(element.shadowRoot);
1135
+ element.shadowRoot.appendChild(frame);
1514
1136
  }
1515
1137
  } else if (element.firstChild) {
1516
- element.innerHTML = "";
1517
- injectContents(element);
1138
+ element.replaceChild(frame, element.firstChild);
1518
1139
  } else {
1519
- injectContents(element);
1140
+ element.appendChild(frame);
1520
1141
  }
1521
1142
  } else if (!element.firstChild || element.firstChild.nodeName === "#text") {
1522
- injectContents(element);
1143
+ element.appendChild(frame);
1523
1144
  }
1524
1145
  const { contentWindow } = frame;
1525
1146
  if (!contentWindow) {
@@ -1527,32 +1148,14 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
1527
1148
  }
1528
1149
  const frameDoc = contentWindow.document;
1529
1150
  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
- `);
1151
+ frameDoc.write(this.content);
1152
+ frameDoc.write(
1153
+ `<script src="${this.npmCdn}/resize-observer-polyfill@1.5.x"><\/script>`
1154
+ );
1547
1155
  frameDoc.close();
1548
1156
  domready(frameDoc, async () => {
1549
- if (skeletonContainer && skeletonContainer.parentNode) {
1550
- skeletonContainer.parentNode.removeChild(skeletonContainer);
1551
- }
1552
- frame.style.display = "block";
1553
1157
  const _sqh = contentWindow.squatch || contentWindow.widgetIdent;
1554
- frame.height = initialHeight || frameDoc.body.scrollHeight;
1555
- console.log({ height: frameDoc.body.scrollHeight });
1158
+ frame.height = frameDoc.body.scrollHeight;
1556
1159
  const ro = new contentWindow["ResizeObserver"]((entries) => {
1557
1160
  for (const entry of entries) {
1558
1161
  const { height } = entry.contentRect;
@@ -1868,11 +1471,7 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
1868
1471
  engagementMedium: clean.engagementMedium,
1869
1472
  container: clean.container,
1870
1473
  trigger: clean.trigger,
1871
- widgetConfig: {
1872
- values: {
1873
- brandingConfig: response == null ? void 0 : response.brandingConfig
1874
- }
1875
- }
1474
+ widgetConfig: response == null ? void 0 : response.widgetConfig
1876
1475
  }),
1877
1476
  user: response.user
1878
1477
  };
@@ -2467,30 +2066,12 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
2467
2066
  }
2468
2067
  }
2469
2068
  async connectedCallback() {
2470
- var _a2;
2069
+ var _a2, _b;
2471
2070
  this.loaded = true;
2472
2071
  this.container = this.getAttribute("container");
2473
- const skeletonHTML = `
2474
- <div>
2475
- <h1>Dynamic Content</h1>
2476
- <p>This content was dynamically added to the widget before it loaded.</p>
2477
- <p>This content comes from the embeded widget class</p>
2478
- </div>
2479
- `;
2480
- const skeletonContainer = document.createElement("div");
2481
- skeletonContainer.id = "loading-skeleton";
2482
- skeletonContainer.innerHTML = skeletonHTML;
2483
- if (!this.shadowRoot) {
2484
- this.attachShadow({ mode: "open" });
2485
- }
2486
- if (this.shadowRoot) {
2487
- this.shadowRoot.innerHTML = skeletonHTML;
2488
- }
2489
2072
  await this.renderWidget();
2490
- const loadingElement = (_a2 = this.shadowRoot) == null ? void 0 : _a2.getElementById("loading-skeleton");
2491
- if (loadingElement) {
2492
- loadingElement.remove();
2493
- }
2073
+ const slot = (_a2 = this.shadowRoot && Array.from(this.shadowRoot.children)) == null ? void 0 : _a2.find((c) => c.tagName === "SLOT");
2074
+ if (slot) (_b = this.shadowRoot) == null ? void 0 : _b.removeChild(slot);
2494
2075
  if (this.getAttribute("open") !== null) this.open();
2495
2076
  }
2496
2077
  }
@@ -2519,27 +2100,7 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
2519
2100
  async connectedCallback() {
2520
2101
  this.loaded = true;
2521
2102
  this.container = this.getAttribute("container");
2522
- const skeletonHTML = `
2523
- <div>
2524
- <h1>Dynamic Content</h1>
2525
- <p>This content was dynamically added to the widget before it loaded.</p>
2526
- <p>This content comes from the embedded widget class</p>
2527
- </div>
2528
- `;
2529
- const skeletonContainer = document.createElement("div");
2530
- skeletonContainer.id = "loading-skeleton";
2531
- skeletonContainer.innerHTML = skeletonHTML;
2532
- const root = this.shadowRoot || this.attachShadow({ mode: "open" });
2533
- root.innerHTML = "";
2534
- root.appendChild(skeletonContainer);
2535
2103
  await this.renderWidget();
2536
- const loadingElement = root.getElementById("loading-skeleton");
2537
- if (loadingElement) {
2538
- loadingElement.remove();
2539
- console.log("Skeleton removed successfully");
2540
- } else {
2541
- console.warn("Could not find skeleton to remove");
2542
- }
2543
2104
  if (this.getAttribute("open") !== null) this.open();
2544
2105
  }
2545
2106
  }