@saasquatch/squatch-js 2.8.2-8 → 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.
@@ -702,7 +702,6 @@ 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 });
706
705
  const tenantAlias = encodeURIComponent(this.tenantAlias);
707
706
  const accountId = (user == null ? void 0 : user.accountId) ? encodeURIComponent(user.accountId) : null;
708
707
  const userId = (user == null ? void 0 : user.id) ? encodeURIComponent(user.id) : null;
@@ -891,9 +890,6 @@ class Widget {
891
890
  if ((options == null ? void 0 : options.maxWidth) || (options == null ? void 0 : options.minWidth)) {
892
891
  frame.style.width = "100%";
893
892
  }
894
- if (options == null ? void 0 : options.initialHeight) {
895
- frame.height = options.initialHeight;
896
- }
897
893
  return frame;
898
894
  }
899
895
  _findFrame() {
@@ -1108,416 +1104,41 @@ function delay(duration) {
1108
1104
  setTimeout(resolve, duration);
1109
1105
  });
1110
1106
  }
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
1107
  const _log$7 = browserExports.debug("squatch-js:EMBEDwidget");
1457
1108
  class EmbedWidget extends Widget {
1458
1109
  constructor(params, container) {
1459
1110
  super(params);
1460
1111
  __publicField(this, "show", this.open);
1461
1112
  __publicField(this, "hide", this.close);
1462
- if (container) {
1463
- this.container = container;
1464
- }
1113
+ if (container) this.container = container;
1465
1114
  }
1466
1115
  async load() {
1467
- var _a2, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l;
1116
+ var _a2, _b, _c, _d, _e;
1468
1117
  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;
1118
+ const sizes = (_c = brandingConfig == null ? void 0 : brandingConfig.widgetSize) == null ? void 0 : _c.embeddedWidgets;
1474
1119
  const maxWidth = (sizes == null ? void 0 : sizes.maxWidth) ? formatWidth(sizes.maxWidth) : "";
1475
1120
  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
- });
1121
+ const frame = this._createFrame({ minWidth, maxWidth });
1494
1122
  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) {
1123
+ if ((_d = this.context) == null ? void 0 : _d.container) {
1502
1124
  element.style.visibility = "hidden";
1503
1125
  element.style.height = "0";
1504
1126
  element.style["overflow-y"] = "hidden";
1505
1127
  }
1506
1128
  if (this.container) {
1507
1129
  if (element.shadowRoot) {
1508
- if (((_j = element.shadowRoot.lastChild) == null ? void 0 : _j.nodeName) === "IFRAME") {
1130
+ if (((_e = element.shadowRoot.lastChild) == null ? void 0 : _e.nodeName) === "IFRAME") {
1509
1131
  element.shadowRoot.replaceChild(frame, element.shadowRoot.lastChild);
1510
1132
  } else {
1511
- injectContents(element.shadowRoot);
1133
+ element.shadowRoot.appendChild(frame);
1512
1134
  }
1513
1135
  } else if (element.firstChild) {
1514
- element.innerHTML = "";
1515
- injectContents(element);
1136
+ element.replaceChild(frame, element.firstChild);
1516
1137
  } else {
1517
- injectContents(element);
1138
+ element.appendChild(frame);
1518
1139
  }
1519
1140
  } else if (!element.firstChild || element.firstChild.nodeName === "#text") {
1520
- injectContents(element);
1141
+ element.appendChild(frame);
1521
1142
  }
1522
1143
  const { contentWindow } = frame;
1523
1144
  if (!contentWindow) {
@@ -1525,32 +1146,14 @@ class EmbedWidget extends Widget {
1525
1146
  }
1526
1147
  const frameDoc = contentWindow.document;
1527
1148
  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
- `);
1149
+ frameDoc.write(this.content);
1150
+ frameDoc.write(
1151
+ `<script src="${this.npmCdn}/resize-observer-polyfill@1.5.x"><\/script>`
1152
+ );
1545
1153
  frameDoc.close();
1546
1154
  domready(frameDoc, async () => {
1547
- if (skeletonContainer && skeletonContainer.parentNode) {
1548
- skeletonContainer.parentNode.removeChild(skeletonContainer);
1549
- }
1550
- frame.style.display = "block";
1551
1155
  const _sqh = contentWindow.squatch || contentWindow.widgetIdent;
1552
- frame.height = initialHeight || frameDoc.body.scrollHeight;
1553
- console.log({ height: frameDoc.body.scrollHeight });
1156
+ frame.height = frameDoc.body.scrollHeight;
1554
1157
  const ro = new contentWindow["ResizeObserver"]((entries) => {
1555
1158
  for (const entry of entries) {
1556
1159
  const { height } = entry.contentRect;
@@ -1866,11 +1469,7 @@ class Widgets {
1866
1469
  engagementMedium: clean.engagementMedium,
1867
1470
  container: clean.container,
1868
1471
  trigger: clean.trigger,
1869
- widgetConfig: {
1870
- values: {
1871
- brandingConfig: response == null ? void 0 : response.brandingConfig
1872
- }
1873
- }
1472
+ widgetConfig: response == null ? void 0 : response.widgetConfig
1874
1473
  }),
1875
1474
  user: response.user
1876
1475
  };
@@ -2465,29 +2064,12 @@ class DeclarativeEmbedWidget extends DeclarativeWidget {
2465
2064
  }
2466
2065
  }
2467
2066
  async connectedCallback() {
2468
- var _a2;
2067
+ var _a2, _b;
2469
2068
  this.loaded = true;
2470
2069
  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
- </div>
2476
- `;
2477
- const skeletonContainer = document.createElement("div");
2478
- skeletonContainer.id = "loading-skeleton";
2479
- skeletonContainer.innerHTML = skeletonHTML;
2480
- if (!this.shadowRoot) {
2481
- this.attachShadow({ mode: "open" });
2482
- }
2483
- if (this.shadowRoot) {
2484
- this.shadowRoot.innerHTML = skeletonHTML;
2485
- }
2486
2070
  await this.renderWidget();
2487
- const loadingElement = (_a2 = this.shadowRoot) == null ? void 0 : _a2.getElementById("loading-skeleton");
2488
- if (loadingElement) {
2489
- loadingElement.remove();
2490
- }
2071
+ const slot = (_a2 = this.shadowRoot && Array.from(this.shadowRoot.children)) == null ? void 0 : _a2.find((c) => c.tagName === "SLOT");
2072
+ if (slot) (_b = this.shadowRoot) == null ? void 0 : _b.removeChild(slot);
2491
2073
  if (this.getAttribute("open") !== null) this.open();
2492
2074
  }
2493
2075
  }
@@ -2514,29 +2096,9 @@ class DeclarativePopupWidget extends DeclarativeWidget {
2514
2096
  }
2515
2097
  }
2516
2098
  async connectedCallback() {
2517
- var _a2;
2518
2099
  this.loaded = true;
2519
2100
  this.container = this.getAttribute("container");
2520
- const skeletonHTML = `
2521
- <div>
2522
- <h1>Dynamic Content</h1>
2523
- <p>This content was dynamically added to the widget before it loaded.</p>
2524
- </div>
2525
- `;
2526
- const skeletonContainer = document.createElement("div");
2527
- skeletonContainer.id = "loading-skeleton";
2528
- skeletonContainer.innerHTML = skeletonHTML;
2529
- if (!this.shadowRoot) {
2530
- this.attachShadow({ mode: "open" });
2531
- }
2532
- if (this.shadowRoot) {
2533
- this.shadowRoot.innerHTML = skeletonHTML;
2534
- }
2535
2101
  await this.renderWidget();
2536
- const loadingElement = (_a2 = this.shadowRoot) == null ? void 0 : _a2.getElementById("loading-skeleton");
2537
- if (loadingElement) {
2538
- loadingElement.remove();
2539
- }
2540
2102
  if (this.getAttribute("open") !== null) this.open();
2541
2103
  }
2542
2104
  }