@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.
@@ -700,7 +700,6 @@ class WidgetApi {
700
700
  const raw = params;
701
701
  const clean = validatePasswordlessConfig(raw);
702
702
  const { widgetType, engagementMedium = "POPUP", jwt, user } = clean;
703
- console.log({ params });
704
703
  const tenantAlias = encodeURIComponent(this.tenantAlias);
705
704
  const accountId = (user == null ? void 0 : user.accountId) ? encodeURIComponent(user.accountId) : null;
706
705
  const userId = (user == null ? void 0 : user.id) ? encodeURIComponent(user.id) : null;
@@ -889,9 +888,6 @@ class Widget {
889
888
  if ((options == null ? void 0 : options.maxWidth) || (options == null ? void 0 : options.minWidth)) {
890
889
  frame.style.width = "100%";
891
890
  }
892
- if (options == null ? void 0 : options.initialHeight) {
893
- frame.height = options.initialHeight;
894
- }
895
891
  return frame;
896
892
  }
897
893
  _findFrame() {
@@ -1106,416 +1102,41 @@ function delay(duration) {
1106
1102
  setTimeout(resolve, duration);
1107
1103
  });
1108
1104
  }
1109
- const getSkeleton = ({
1110
- height = "500px",
1111
- skeletonBackgroundColor = "#e0e0e0",
1112
- skeletonShimmerColor = "#f5f5f5",
1113
- borderColor = "#ccc"
1114
- }) => {
1115
- return `
1116
- <style>
1117
- * {
1118
- box-sizing: border-box;
1119
- padding: 0;
1120
- margin: 0;
1121
- }
1122
-
1123
- .widget-container {
1124
- background: white;
1125
- width: 100%;
1126
- max-width: 900px;
1127
- padding: 40px;
1128
- border-radius: 12px;
1129
- box-shadow: 0 4px 20px rgba(0, 0, 0, 0.08);
1130
- box-sizing: border-box;
1131
- }
1132
-
1133
- @keyframes shimmer {
1134
- 0% {
1135
- background-position: -100% 0;
1136
- }
1137
- 100% {
1138
- background-position: 100% 0;
1139
- }
1140
- }
1141
-
1142
- .skeleton {
1143
- background: ${skeletonBackgroundColor};
1144
- background: linear-gradient(
1145
- 90deg,
1146
- ${skeletonBackgroundColor} 25%,
1147
- ${skeletonShimmerColor} 50%,
1148
- ${skeletonBackgroundColor} 75%
1149
- );
1150
- background-size: 200% 100%;
1151
- animation: shimmer 1.5s infinite linear;
1152
- border-radius: 6px;
1153
- margin-bottom: 12px;
1154
- }
1155
-
1156
- .sk-title-lg {
1157
- height: 36px;
1158
- width: 50%;
1159
- margin-bottom: 16px;
1160
- }
1161
- .sk-title-md {
1162
- height: 28px;
1163
- width: 30%;
1164
- margin-bottom: 20px;
1165
- margin-top: 40px;
1166
- }
1167
- .sk-text {
1168
- height: 16px;
1169
- width: 80%;
1170
- margin-bottom: 8px;
1171
- }
1172
- .sk-text-short {
1173
- width: 40%;
1174
- }
1175
- .sk-label {
1176
- height: 14px;
1177
- width: 25%;
1178
- margin-bottom: 10px;
1179
- }
1180
-
1181
- .hero-section {
1182
- display: flex;
1183
- gap: 40px;
1184
- margin-bottom: 40px;
1185
- border-bottom: 1px solid ${borderColor};
1186
- padding-bottom: 40px;
1187
- flex-direction: row;
1188
- }
1189
- .hero-content {
1190
- flex: 1;
1191
- display: flex;
1192
- flex-direction: column;
1193
- justify-content: center;
1194
- }
1195
- .hero-image {
1196
- flex: 1;
1197
- height: 300px;
1198
- border-radius: 12px;
1199
- }
1200
-
1201
- .share-section {
1202
- margin-bottom: 40px;
1203
- }
1204
- .sk-input {
1205
- height: 50px;
1206
- width: 100%;
1207
- border-radius: 8px;
1208
- margin-bottom: 16px;
1209
- }
1210
- .social-buttons {
1211
- display: flex;
1212
- gap: 12px;
1213
- }
1214
- .sk-btn-social {
1215
- flex: 1;
1216
- height: 50px;
1217
- border-radius: 8px;
1218
- }
1219
-
1220
- .stats-section {
1221
- display: flex;
1222
- gap: 24px;
1223
- margin-bottom: 40px;
1224
- padding: 30px 0;
1225
- border-top: 1px solid ${borderColor};
1226
- border-bottom: 1px solid ${borderColor};
1227
- }
1228
- .stat-card {
1229
- flex: 1;
1230
- display: flex;
1231
- flex-direction: column;
1232
- align-items: center;
1233
- }
1234
- .stat-divider {
1235
- padding-left: 24px;
1236
- }
1237
-
1238
- .sk-stat-num {
1239
- height: 48px;
1240
- width: 120px;
1241
- margin-bottom: 8px;
1242
- }
1243
- .sk-stat-label {
1244
- height: 18px;
1245
- width: 80px;
1246
- }
1247
-
1248
- .table-header {
1249
- display: flex;
1250
- gap: 16px;
1251
- margin-bottom: 16px;
1252
- }
1253
- .sk-th {
1254
- height: 16px;
1255
- }
1256
- .table-row {
1257
- display: flex;
1258
- align-items: center;
1259
- gap: 16px;
1260
- padding: 16px 0;
1261
- border-bottom: 1px solid ${borderColor};
1262
- }
1263
-
1264
- .col-user {
1265
- flex: 2;
1266
- }
1267
- .col-status {
1268
- flex: 1;
1269
- }
1270
- .col-reward {
1271
- flex: 2;
1272
- }
1273
- .col-date {
1274
- flex: 1;
1275
- }
1276
-
1277
- .sk-badge {
1278
- height: 28px;
1279
- width: 90px;
1280
- border-radius: 14px;
1281
- }
1282
- .sk-reward-block {
1283
- height: 36px;
1284
- width: 100%;
1285
- border-radius: 6px;
1286
- }
1287
-
1288
- .pagination {
1289
- display: flex;
1290
- justify-content: flex-end;
1291
- gap: 8px;
1292
- margin-top: 24px;
1293
- }
1294
- .sk-btn-page {
1295
- height: 36px;
1296
- width: 64px;
1297
- border-radius: 6px;
1298
- margin-bottom: 0;
1299
- }
1300
-
1301
- @media (max-width: 768px) {
1302
- body {
1303
- padding: 20px;
1304
- }
1305
- .widget-container {
1306
- padding: 24px;
1307
- }
1308
-
1309
- .hero-section {
1310
- flex-direction: column-reverse;
1311
- gap: 24px;
1312
- }
1313
- .hero-image {
1314
- height: 220px;
1315
- width: 100%;
1316
- }
1317
- .sk-title-lg {
1318
- width: 80%;
1319
- }
1320
-
1321
- .col-date {
1322
- display: none;
1323
- }
1324
- }
1325
-
1326
- @media (max-width: 480px) {
1327
- body {
1328
- padding: 10px;
1329
- }
1330
- .widget-container {
1331
- padding: 16px;
1332
- }
1333
-
1334
- .sk-stat-num {
1335
- width: 80px;
1336
- height: 40px;
1337
- }
1338
-
1339
- .col-reward {
1340
- display: none;
1341
- }
1342
-
1343
- .col-user {
1344
- flex: 3;
1345
- }
1346
- .col-status {
1347
- flex: 2;
1348
- display: flex;
1349
- justify-content: flex-end;
1350
- }
1351
- }
1352
- </style>
1353
-
1354
- <div class="widget-container">
1355
- <div class="hero-section">
1356
- <div class="hero-content">
1357
- <div class="skeleton sk-title-lg"></div>
1358
- <div class="skeleton sk-text"></div>
1359
- <div class="skeleton sk-text sk-text-short"></div>
1360
- </div>
1361
- <div class="skeleton hero-image"></div>
1362
- </div>
1363
-
1364
- <div class="share-section">
1365
- <div class="skeleton sk-label"></div>
1366
- <div class="skeleton sk-input"></div>
1367
- <div class="social-buttons">
1368
- <div class="skeleton sk-btn-social"></div>
1369
- <div class="skeleton sk-btn-social"></div>
1370
- <div class="skeleton sk-btn-social"></div>
1371
- <div class="skeleton sk-btn-social"></div>
1372
- </div>
1373
- </div>
1374
-
1375
- <div
1376
- class="skeleton sk-title-md"
1377
- style="margin-top: 0; width: 30%; margin-left: auto; margin-right: auto"
1378
- ></div>
1379
- <div
1380
- class="skeleton sk-text"
1381
- style="width: 60%; margin-left: auto; margin-right: auto"
1382
- ></div>
1383
-
1384
- <div class="stats-section">
1385
- <div class="stat-card">
1386
- <div class="skeleton sk-stat-num"></div>
1387
- <div class="skeleton sk-stat-label"></div>
1388
- </div>
1389
- <div class="stat-card stat-divider">
1390
- <div class="skeleton sk-stat-num"></div>
1391
- <div class="skeleton sk-stat-label"></div>
1392
- </div>
1393
- </div>
1394
-
1395
- <div class="skeleton sk-title-md"></div>
1396
-
1397
- <div class="table-header">
1398
- <div class="skeleton sk-th col-user"></div>
1399
- <div class="skeleton sk-th col-status"></div>
1400
- <div class="skeleton sk-th col-reward"></div>
1401
- <div class="skeleton sk-th col-date"></div>
1402
- </div>
1403
-
1404
- <div class="table-row">
1405
- <div class="col-user">
1406
- <div class="skeleton sk-text" style="width: 70%; margin: 0"></div>
1407
- </div>
1408
- <div class="col-status">
1409
- <div class="skeleton sk-badge" style="margin: 0"></div>
1410
- </div>
1411
- <div class="col-reward">
1412
- <div class="skeleton sk-reward-block" style="margin: 0"></div>
1413
- </div>
1414
- <div class="col-date">
1415
- <div class="skeleton sk-text" style="width: 80%; margin: 0"></div>
1416
- </div>
1417
- </div>
1418
- <div class="table-row">
1419
- <div class="col-user">
1420
- <div class="skeleton sk-text" style="width: 60%; margin: 0"></div>
1421
- </div>
1422
- <div class="col-status">
1423
- <div class="skeleton sk-badge" style="margin: 0"></div>
1424
- </div>
1425
- <div class="col-reward">
1426
- <div class="skeleton sk-reward-block" style="margin: 0"></div>
1427
- </div>
1428
- <div class="col-date">
1429
- <div class="skeleton sk-text" style="width: 80%; margin: 0"></div>
1430
- </div>
1431
- </div>
1432
- <div class="table-row">
1433
- <div class="col-user">
1434
- <div class="skeleton sk-text" style="width: 75%; margin: 0"></div>
1435
- </div>
1436
- <div class="col-status">
1437
- <div class="skeleton sk-badge" style="margin: 0"></div>
1438
- </div>
1439
- <div class="col-reward">
1440
- <div class="skeleton sk-reward-block" style="margin: 0"></div>
1441
- </div>
1442
- <div class="col-date">
1443
- <div class="skeleton sk-text" style="width: 80%; margin: 0"></div>
1444
- </div>
1445
- </div>
1446
-
1447
- <div class="pagination">
1448
- <div class="skeleton sk-btn-page"></div>
1449
- <div class="skeleton sk-btn-page"></div>
1450
- </div>
1451
- </div>
1452
- `;
1453
- };
1454
1105
  const _log$7 = browserExports.debug("squatch-js:EMBEDwidget");
1455
1106
  class EmbedWidget extends Widget {
1456
1107
  constructor(params, container) {
1457
1108
  super(params);
1458
1109
  __publicField(this, "show", this.open);
1459
1110
  __publicField(this, "hide", this.close);
1460
- if (container) {
1461
- this.container = container;
1462
- }
1111
+ if (container) this.container = container;
1463
1112
  }
1464
1113
  async load() {
1465
- var _a2, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l;
1114
+ var _a2, _b, _c, _d, _e;
1466
1115
  const brandingConfig = (_b = (_a2 = this.context.widgetConfig) == null ? void 0 : _a2.values) == null ? void 0 : _b.brandingConfig;
1467
- const initialHeight = brandingConfig == null ? void 0 : brandingConfig.loadingHeight;
1468
- const skeletonBackgroundColor = (_d = (_c = brandingConfig == null ? void 0 : brandingConfig.color) == null ? void 0 : _c.loadingSkeleton) == null ? void 0 : _d.background;
1469
- const skeletonShimmerColor = (_f = (_e = brandingConfig == null ? void 0 : brandingConfig.color) == null ? void 0 : _e.loadingSkeleton) == null ? void 0 : _f.animationBackground;
1470
- const borderColor = (_g = brandingConfig == null ? void 0 : brandingConfig.border) == null ? void 0 : _g.borderColor;
1471
- const sizes = (_h = brandingConfig == null ? void 0 : brandingConfig.widgetSize) == null ? void 0 : _h.embeddedWidgets;
1116
+ const sizes = (_c = brandingConfig == null ? void 0 : brandingConfig.widgetSize) == null ? void 0 : _c.embeddedWidgets;
1472
1117
  const maxWidth = (sizes == null ? void 0 : sizes.maxWidth) ? formatWidth(sizes.maxWidth) : "";
1473
1118
  const minWidth = (sizes == null ? void 0 : sizes.minWidth) ? formatWidth(sizes.minWidth) : "";
1474
- console.log({
1475
- brandingConfig,
1476
- initialHeight,
1477
- widgetConfig: this.context.widgetConfig
1478
- });
1479
- const skeletonHTML = getSkeleton({
1480
- height: initialHeight,
1481
- skeletonBackgroundColor,
1482
- skeletonShimmerColor,
1483
- borderColor
1484
- });
1485
- const skeletonContainer = document.createElement("div");
1486
- skeletonContainer.innerHTML = skeletonHTML;
1487
- const frame = this._createFrame({
1488
- minWidth,
1489
- maxWidth,
1490
- initialHeight
1491
- });
1119
+ const frame = this._createFrame({ minWidth, maxWidth });
1492
1120
  const element = this._findElement();
1493
- element.innerHTML = skeletonHTML;
1494
- frame.style.display = "none";
1495
- const injectContents = (target) => {
1496
- target.appendChild(skeletonContainer);
1497
- target.appendChild(frame);
1498
- };
1499
- if ((_i = this.context) == null ? void 0 : _i.container) {
1121
+ if ((_d = this.context) == null ? void 0 : _d.container) {
1500
1122
  element.style.visibility = "hidden";
1501
1123
  element.style.height = "0";
1502
1124
  element.style["overflow-y"] = "hidden";
1503
1125
  }
1504
1126
  if (this.container) {
1505
1127
  if (element.shadowRoot) {
1506
- if (((_j = element.shadowRoot.lastChild) == null ? void 0 : _j.nodeName) === "IFRAME") {
1128
+ if (((_e = element.shadowRoot.lastChild) == null ? void 0 : _e.nodeName) === "IFRAME") {
1507
1129
  element.shadowRoot.replaceChild(frame, element.shadowRoot.lastChild);
1508
1130
  } else {
1509
- injectContents(element.shadowRoot);
1131
+ element.shadowRoot.appendChild(frame);
1510
1132
  }
1511
1133
  } else if (element.firstChild) {
1512
- element.innerHTML = "";
1513
- injectContents(element);
1134
+ element.replaceChild(frame, element.firstChild);
1514
1135
  } else {
1515
- injectContents(element);
1136
+ element.appendChild(frame);
1516
1137
  }
1517
1138
  } else if (!element.firstChild || element.firstChild.nodeName === "#text") {
1518
- injectContents(element);
1139
+ element.appendChild(frame);
1519
1140
  }
1520
1141
  const { contentWindow } = frame;
1521
1142
  if (!contentWindow) {
@@ -1523,32 +1144,14 @@ class EmbedWidget extends Widget {
1523
1144
  }
1524
1145
  const frameDoc = contentWindow.document;
1525
1146
  frameDoc.open();
1526
- console.log({ content: this.content, context: this.context, this: this });
1527
- const domain = this.widgetApi.domain;
1528
- frameDoc.write(`
1529
- ${((_k = brandingConfig == null ? void 0 : brandingConfig.main) == null ? void 0 : _k.brandFont) && `
1530
- <link rel="preconnect" href="https://fast${domain === "https://staging.referralsaasquatch.com" && "-staging"}.ssqt.io">
1531
- <link rel="preconnect" href="https://fonts.gstatic.com">
1532
- <link rel="preconnect" href="https://fonts.googleapis.com">
1533
- <link rel="preload" href="https://fonts.googleapis.com/css2?family=${encodeURIComponent(
1534
- (_l = brandingConfig == null ? void 0 : brandingConfig.main) == null ? void 0 : _l.brandFont
1535
- )}" as="style">`}
1536
- <script src="${this.npmCdn}/resize-observer-polyfill@1.5.x"><\/script>
1537
- <style data-styles>
1538
- html { visibility:hidden;}
1539
- </style>
1540
- ${this.content}
1541
-
1542
- `);
1147
+ frameDoc.write(this.content);
1148
+ frameDoc.write(
1149
+ `<script src="${this.npmCdn}/resize-observer-polyfill@1.5.x"><\/script>`
1150
+ );
1543
1151
  frameDoc.close();
1544
1152
  domready(frameDoc, async () => {
1545
- if (skeletonContainer && skeletonContainer.parentNode) {
1546
- skeletonContainer.parentNode.removeChild(skeletonContainer);
1547
- }
1548
- frame.style.display = "block";
1549
1153
  const _sqh = contentWindow.squatch || contentWindow.widgetIdent;
1550
- frame.height = initialHeight || frameDoc.body.scrollHeight;
1551
- console.log({ height: frameDoc.body.scrollHeight });
1154
+ frame.height = frameDoc.body.scrollHeight;
1552
1155
  const ro = new contentWindow["ResizeObserver"]((entries) => {
1553
1156
  for (const entry of entries) {
1554
1157
  const { height } = entry.contentRect;
@@ -1864,11 +1467,7 @@ class Widgets {
1864
1467
  engagementMedium: clean.engagementMedium,
1865
1468
  container: clean.container,
1866
1469
  trigger: clean.trigger,
1867
- widgetConfig: {
1868
- values: {
1869
- brandingConfig: response == null ? void 0 : response.brandingConfig
1870
- }
1871
- }
1470
+ widgetConfig: response == null ? void 0 : response.widgetConfig
1872
1471
  }),
1873
1472
  user: response.user
1874
1473
  };
@@ -2463,29 +2062,12 @@ class DeclarativeEmbedWidget extends DeclarativeWidget {
2463
2062
  }
2464
2063
  }
2465
2064
  async connectedCallback() {
2466
- var _a2;
2065
+ var _a2, _b;
2467
2066
  this.loaded = true;
2468
2067
  this.container = this.getAttribute("container");
2469
- const skeletonHTML = `
2470
- <div>
2471
- <h1>Dynamic Content</h1>
2472
- <p>This content was dynamically added to the widget before it loaded.</p>
2473
- </div>
2474
- `;
2475
- const skeletonContainer = document.createElement("div");
2476
- skeletonContainer.id = "loading-skeleton";
2477
- skeletonContainer.innerHTML = skeletonHTML;
2478
- if (!this.shadowRoot) {
2479
- this.attachShadow({ mode: "open" });
2480
- }
2481
- if (this.shadowRoot) {
2482
- this.shadowRoot.innerHTML = skeletonHTML;
2483
- }
2484
2068
  await this.renderWidget();
2485
- const loadingElement = (_a2 = this.shadowRoot) == null ? void 0 : _a2.getElementById("loading-skeleton");
2486
- if (loadingElement) {
2487
- loadingElement.remove();
2488
- }
2069
+ const slot = (_a2 = this.shadowRoot && Array.from(this.shadowRoot.children)) == null ? void 0 : _a2.find((c) => c.tagName === "SLOT");
2070
+ if (slot) (_b = this.shadowRoot) == null ? void 0 : _b.removeChild(slot);
2489
2071
  if (this.getAttribute("open") !== null) this.open();
2490
2072
  }
2491
2073
  }
@@ -2512,29 +2094,9 @@ class DeclarativePopupWidget extends DeclarativeWidget {
2512
2094
  }
2513
2095
  }
2514
2096
  async connectedCallback() {
2515
- var _a2;
2516
2097
  this.loaded = true;
2517
2098
  this.container = this.getAttribute("container");
2518
- const skeletonHTML = `
2519
- <div>
2520
- <h1>Dynamic Content</h1>
2521
- <p>This content was dynamically added to the widget before it loaded.</p>
2522
- </div>
2523
- `;
2524
- const skeletonContainer = document.createElement("div");
2525
- skeletonContainer.id = "loading-skeleton";
2526
- skeletonContainer.innerHTML = skeletonHTML;
2527
- if (!this.shadowRoot) {
2528
- this.attachShadow({ mode: "open" });
2529
- }
2530
- if (this.shadowRoot) {
2531
- this.shadowRoot.innerHTML = skeletonHTML;
2532
- }
2533
2099
  await this.renderWidget();
2534
- const loadingElement = (_a2 = this.shadowRoot) == null ? void 0 : _a2.getElementById("loading-skeleton");
2535
- if (loadingElement) {
2536
- loadingElement.remove();
2537
- }
2538
2100
  if (this.getAttribute("open") !== null) this.open();
2539
2101
  }
2540
2102
  }