@searchcraft/javascript-sdk 0.10.3 → 0.10.5

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.
Files changed (65) hide show
  1. package/dist/components/index.d.ts +50 -20
  2. package/dist/components/index.js +4 -4
  3. package/dist/components/p-4dd1995c.js +193 -0
  4. package/dist/components/p-4dd1995c.js.map +1 -0
  5. package/dist/components/{p-6717ab82.js → p-6c471ee0.js} +3 -3
  6. package/dist/components/{p-6717ab82.js.map → p-6c471ee0.js.map} +1 -1
  7. package/dist/components/{p-d4558d44.js → p-7c10ca44.js} +273 -260
  8. package/dist/components/p-7c10ca44.js.map +1 -0
  9. package/dist/components/{p-da1fb5c0.js → p-8a4cfe99.js} +2 -2
  10. package/dist/components/{p-da1fb5c0.js.map → p-8a4cfe99.js.map} +1 -1
  11. package/dist/components/{p-508ee769.js → p-b72015a6.js} +2 -2
  12. package/dist/components/{p-508ee769.js.map → p-b72015a6.js.map} +1 -1
  13. package/dist/components/p-bb700499.js +338 -0
  14. package/dist/components/p-bb700499.js.map +1 -0
  15. package/dist/components/{p-5a4be632.js → p-bfad84c6.js} +13 -4
  16. package/dist/components/p-bfad84c6.js.map +1 -0
  17. package/dist/components/p-d54771ef.js +182 -0
  18. package/dist/components/p-d54771ef.js.map +1 -0
  19. package/dist/components/{p-fd564261.js → p-d9222264.js} +4 -4
  20. package/dist/components/{p-fd564261.js.map → p-d9222264.js.map} +1 -1
  21. package/dist/components/{p-ad569b01.js → p-f1afb299.js} +2 -2
  22. package/dist/components/{p-ad569b01.js.map → p-f1afb299.js.map} +1 -1
  23. package/dist/components/{p-06bac1fc.js → p-f4b0ff45.js} +3 -3
  24. package/dist/components/{p-06bac1fc.js.map → p-f4b0ff45.js.map} +1 -1
  25. package/dist/components/searchcraft-ad.js +1 -1
  26. package/dist/components/searchcraft-facet-list.js +1 -1
  27. package/dist/components/searchcraft-filter-panel.js +13 -18
  28. package/dist/components/searchcraft-filter-panel.js.map +1 -1
  29. package/dist/components/searchcraft-input-form.js +1 -1
  30. package/dist/components/searchcraft-pagination.js +1 -1
  31. package/dist/components/searchcraft-popover-button.js +1 -1
  32. package/dist/components/searchcraft-popover-footer.js +1 -1
  33. package/dist/components/searchcraft-popover-form.js +6 -6
  34. package/dist/components/searchcraft-popover-list-item.js +1 -1
  35. package/dist/components/searchcraft-popover-list-view.js +1 -1
  36. package/dist/components/searchcraft-results-info.js +2 -2
  37. package/dist/components/searchcraft-search-result.js +1 -1
  38. package/dist/components/searchcraft-search-results-per-page.js +1 -1
  39. package/dist/components/searchcraft-search-results.js +3 -3
  40. package/dist/components/searchcraft-slider.js +1 -1
  41. package/dist/components/searchcraft-theme.js +1 -1
  42. package/dist/components/searchcraft-theme.js.map +1 -1
  43. package/dist/components/searchcraft-toggle-button.js +1 -1
  44. package/dist/hydrate/index.js +613 -386
  45. package/dist/hydrate/index.mjs +613 -386
  46. package/dist/themes/hologram.css +1 -1
  47. package/dist/themes/hologram.css.map +1 -1
  48. package/dist/types/components/searchcraft-facet-list/searchcraft-facet-list.d.ts +21 -13
  49. package/dist/types/components/searchcraft-filter-panel/searchcraft-filter-panel.d.ts +2 -2
  50. package/dist/types/components/searchcraft-input-form/searchcraft-input-form.d.ts +6 -0
  51. package/dist/types/components/searchcraft-slider/searchcraft-slider.d.ts +10 -4
  52. package/dist/types/components.d.ts +23 -7
  53. package/dist/types/store/SearchcraftStore.types.d.ts +3 -2
  54. package/dist/types/utils/facets.d.ts +20 -3
  55. package/dist/types/utils/throttle.d.ts +14 -0
  56. package/dist/types/utils/units.d.ts +33 -0
  57. package/package.json +3 -3
  58. package/dist/components/p-4d37616e.js +0 -105
  59. package/dist/components/p-4d37616e.js.map +0 -1
  60. package/dist/components/p-53c795bd.js +0 -279
  61. package/dist/components/p-53c795bd.js.map +0 -1
  62. package/dist/components/p-5a4be632.js.map +0 -1
  63. package/dist/components/p-7c650118.js +0 -110
  64. package/dist/components/p-7c650118.js.map +0 -1
  65. package/dist/components/p-d4558d44.js.map +0 -1
@@ -339,7 +339,7 @@ var uniqueTime = (key, measureText) => {
339
339
  };
340
340
  }
341
341
  };
342
- var h = (nodeName, vnodeData, ...children) => {
342
+ var h$1 = (nodeName, vnodeData, ...children) => {
343
343
  let child = null;
344
344
  let key = null;
345
345
  let slotName = null;
@@ -441,7 +441,7 @@ var convertToPrivate = (node) => {
441
441
  if (node.vname) {
442
442
  vnodeData.name = node.vname;
443
443
  }
444
- return h(node.vtag, vnodeData, ...node.vchildren || []);
444
+ return h$1(node.vtag, vnodeData, ...node.vchildren || []);
445
445
  }
446
446
  const vnode = newVNode(node.vtag, node.vtext);
447
447
  vnode.$attrs$ = node.vattrs;
@@ -1279,7 +1279,7 @@ var renderVdom = (hostRef, renderFnResults, isInitialLoad = false) => {
1279
1279
  var _c, _d;
1280
1280
  const hostElm = hostRef.$hostElement$;
1281
1281
  const oldVNode = hostRef.$vnode$ || newVNode(null, null);
1282
- const rootVnode = isHost(renderFnResults) ? renderFnResults : h(null, null, renderFnResults);
1282
+ const rootVnode = isHost(renderFnResults) ? renderFnResults : h$1(null, null, renderFnResults);
1283
1283
  hostTagName = hostElm.tagName;
1284
1284
  if (isInitialLoad && rootVnode.$attrs$) {
1285
1285
  for (const key of Object.keys(rootVnode.$attrs$)) {
@@ -1951,14 +1951,14 @@ var hAsync = (nodeName, vnodeData, ...children) => {
1951
1951
  const flatChildren = children.flat(Infinity);
1952
1952
  if (flatChildren.some((child) => child instanceof Promise)) {
1953
1953
  return Promise.all(flatChildren).then((resolvedChildren) => {
1954
- return h(nodeName, vnodeData, ...resolvedChildren);
1954
+ return h$1(nodeName, vnodeData, ...resolvedChildren);
1955
1955
  }).catch((err2) => {
1956
- return h(nodeName, vnodeData);
1956
+ return h$1(nodeName, vnodeData);
1957
1957
  });
1958
1958
  }
1959
- return h(nodeName, vnodeData, ...flatChildren);
1959
+ return h$1(nodeName, vnodeData, ...flatChildren);
1960
1960
  }
1961
- return h(nodeName, vnodeData);
1961
+ return h$1(nodeName, vnodeData);
1962
1962
  };
1963
1963
  function proxyHostElement(elm, cstr) {
1964
1964
  const cmpMeta = cstr.cmpMeta;
@@ -3182,12 +3182,12 @@ Object.keys(react).forEach(function (k) {
3182
3182
 
3183
3183
  var B = Object.defineProperty;
3184
3184
  var N = (a, e, n) => e in a ? B(a, e, { enumerable: !0, configurable: !0, writable: !0, value: n }) : a[e] = n;
3185
- var l = (a, e, n) => N(a, typeof e != "symbol" ? e + "" : e, n);
3185
+ var h = (a, e, n) => N(a, typeof e != "symbol" ? e + "" : e, n);
3186
3186
  var O = /* @__PURE__ */ ((a) => (a[a.DEBUG = 0] = "DEBUG", a[a.INFO = 1] = "INFO", a[a.WARN = 2] = "WARN", a[a.ERROR = 3] = "ERROR", a))(O || {});
3187
3187
  class pe {
3188
3188
  constructor(e) {
3189
- l(this, "logLevel");
3190
- l(this, "logFormatter");
3189
+ h(this, "logLevel");
3190
+ h(this, "logFormatter");
3191
3191
  this.logLevel = e.logLevel || 1, this.logFormatter = e.logFormatter || this.defaultFormatter;
3192
3192
  }
3193
3193
  defaultFormatter(e, n) {
@@ -3222,87 +3222,87 @@ class pe {
3222
3222
  }
3223
3223
  }
3224
3224
  }
3225
- function w(a, e, n, r) {
3226
- return new (n || (n = Promise))(function(i, o) {
3225
+ function y(a, e, n, r) {
3226
+ return new (n || (n = Promise))(function(s, o) {
3227
3227
  function t(c) {
3228
3228
  try {
3229
- h(r.next(c));
3230
- } catch (s) {
3231
- o(s);
3229
+ d(r.next(c));
3230
+ } catch (i) {
3231
+ o(i);
3232
3232
  }
3233
3233
  }
3234
3234
  function u(c) {
3235
3235
  try {
3236
- h(r.throw(c));
3237
- } catch (s) {
3238
- o(s);
3236
+ d(r.throw(c));
3237
+ } catch (i) {
3238
+ o(i);
3239
3239
  }
3240
3240
  }
3241
- function h(c) {
3242
- var s;
3243
- c.done ? i(c.value) : (s = c.value, s instanceof n ? s : new n(function(p) {
3244
- p(s);
3241
+ function d(c) {
3242
+ var i;
3243
+ c.done ? s(c.value) : (i = c.value, i instanceof n ? i : new n(function(p) {
3244
+ p(i);
3245
3245
  })).then(t, u);
3246
3246
  }
3247
- h((r = r.apply(a, [])).next());
3247
+ d((r = r.apply(a, [])).next());
3248
3248
  });
3249
3249
  }
3250
- function y(a, e) {
3251
- var n, r, i, o, t = { label: 0, sent: function() {
3252
- if (1 & i[0]) throw i[1];
3253
- return i[1];
3250
+ function w(a, e) {
3251
+ var n, r, s, o, t = { label: 0, sent: function() {
3252
+ if (1 & s[0]) throw s[1];
3253
+ return s[1];
3254
3254
  }, trys: [], ops: [] };
3255
3255
  return o = { next: u(0), throw: u(1), return: u(2) }, typeof Symbol == "function" && (o[Symbol.iterator] = function() {
3256
3256
  return this;
3257
3257
  }), o;
3258
- function u(h) {
3258
+ function u(d) {
3259
3259
  return function(c) {
3260
- return function(s) {
3260
+ return function(i) {
3261
3261
  if (n) throw new TypeError("Generator is already executing.");
3262
- for (; o && (o = 0, s[0] && (t = 0)), t; ) try {
3263
- if (n = 1, r && (i = 2 & s[0] ? r.return : s[0] ? r.throw || ((i = r.return) && i.call(r), 0) : r.next) && !(i = i.call(r, s[1])).done) return i;
3264
- switch (r = 0, i && (s = [2 & s[0], i.value]), s[0]) {
3262
+ for (; o && (o = 0, i[0] && (t = 0)), t; ) try {
3263
+ if (n = 1, r && (s = 2 & i[0] ? r.return : i[0] ? r.throw || ((s = r.return) && s.call(r), 0) : r.next) && !(s = s.call(r, i[1])).done) return s;
3264
+ switch (r = 0, s && (i = [2 & i[0], s.value]), i[0]) {
3265
3265
  case 0:
3266
3266
  case 1:
3267
- i = s;
3267
+ s = i;
3268
3268
  break;
3269
3269
  case 4:
3270
- return t.label++, { value: s[1], done: !1 };
3270
+ return t.label++, { value: i[1], done: !1 };
3271
3271
  case 5:
3272
- t.label++, r = s[1], s = [0];
3272
+ t.label++, r = i[1], i = [0];
3273
3273
  continue;
3274
3274
  case 7:
3275
- s = t.ops.pop(), t.trys.pop();
3275
+ i = t.ops.pop(), t.trys.pop();
3276
3276
  continue;
3277
3277
  default:
3278
- if (i = t.trys, !((i = i.length > 0 && i[i.length - 1]) || s[0] !== 6 && s[0] !== 2)) {
3278
+ if (s = t.trys, !((s = s.length > 0 && s[s.length - 1]) || i[0] !== 6 && i[0] !== 2)) {
3279
3279
  t = 0;
3280
3280
  continue;
3281
3281
  }
3282
- if (s[0] === 3 && (!i || s[1] > i[0] && s[1] < i[3])) {
3283
- t.label = s[1];
3282
+ if (i[0] === 3 && (!s || i[1] > s[0] && i[1] < s[3])) {
3283
+ t.label = i[1];
3284
3284
  break;
3285
3285
  }
3286
- if (s[0] === 6 && t.label < i[1]) {
3287
- t.label = i[1], i = s;
3286
+ if (i[0] === 6 && t.label < s[1]) {
3287
+ t.label = s[1], s = i;
3288
3288
  break;
3289
3289
  }
3290
- if (i && t.label < i[2]) {
3291
- t.label = i[2], t.ops.push(s);
3290
+ if (s && t.label < s[2]) {
3291
+ t.label = s[2], t.ops.push(i);
3292
3292
  break;
3293
3293
  }
3294
- i[2] && t.ops.pop(), t.trys.pop();
3294
+ s[2] && t.ops.pop(), t.trys.pop();
3295
3295
  continue;
3296
3296
  }
3297
- s = e.call(a, t);
3297
+ i = e.call(a, t);
3298
3298
  } catch (p) {
3299
- s = [6, p], r = 0;
3299
+ i = [6, p], r = 0;
3300
3300
  } finally {
3301
- n = i = 0;
3301
+ n = s = 0;
3302
3302
  }
3303
- if (5 & s[0]) throw s[1];
3304
- return { value: s[0] ? s[1] : void 0, done: !0 };
3305
- }([h, c]);
3303
+ if (5 & i[0]) throw i[1];
3304
+ return { value: i[0] ? i[1] : void 0, done: !0 };
3305
+ }([d, c]);
3306
3306
  };
3307
3307
  }
3308
3308
  }
@@ -3316,54 +3316,54 @@ var m = new Uint32Array([597399067, 2869860233, 951274213, 2716044179]);
3316
3316
  function g(a, e) {
3317
3317
  return a << e | a >>> 32 - e;
3318
3318
  }
3319
- function I(a, e) {
3319
+ function _(a, e) {
3320
3320
  var n;
3321
3321
  if (e === void 0 && (e = 0), e = e ? 0 | e : 0, typeof a == "string" && (n = a, a = new TextEncoder().encode(n).buffer), !(a instanceof ArrayBuffer)) throw new TypeError("Expected key to be ArrayBuffer or string");
3322
3322
  var r = new Uint32Array([e, e, e, e]);
3323
3323
  (((function(o, t) {
3324
- for (var u = o.byteLength / 16 | 0, h = new Uint32Array(o, 0, 4 * u), c = 0; c < u; c++) {
3325
- var s = h.subarray(4 * c, 4 * (c + 1));
3326
- s[0] = Math.imul(s[0], m[0]), s[0] = g(s[0], 15), s[0] = Math.imul(s[0], m[1]), t[0] = t[0] ^ s[0], t[0] = g(t[0], 19), t[0] = t[0] + t[1], t[0] = Math.imul(t[0], 5) + 1444728091, s[1] = Math.imul(s[1], m[1]), s[1] = g(s[1], 16), s[1] = Math.imul(s[1], m[2]), t[1] = t[1] ^ s[1], t[1] = g(t[1], 17), t[1] = t[1] + t[2], t[1] = Math.imul(t[1], 5) + 197830471, s[2] = Math.imul(s[2], m[2]), s[2] = g(s[2], 17), s[2] = Math.imul(s[2], m[3]), t[2] = t[2] ^ s[2], t[2] = g(t[2], 15), t[2] = t[2] + t[3], t[2] = Math.imul(t[2], 5) + 2530024501, s[3] = Math.imul(s[3], m[3]), s[3] = g(s[3], 18), s[3] = Math.imul(s[3], m[0]), t[3] = t[3] ^ s[3], t[3] = g(t[3], 13), t[3] = t[3] + t[0], t[3] = Math.imul(t[3], 5) + 850148119;
3324
+ for (var u = o.byteLength / 16 | 0, d = new Uint32Array(o, 0, 4 * u), c = 0; c < u; c++) {
3325
+ var i = d.subarray(4 * c, 4 * (c + 1));
3326
+ i[0] = Math.imul(i[0], m[0]), i[0] = g(i[0], 15), i[0] = Math.imul(i[0], m[1]), t[0] = t[0] ^ i[0], t[0] = g(t[0], 19), t[0] = t[0] + t[1], t[0] = Math.imul(t[0], 5) + 1444728091, i[1] = Math.imul(i[1], m[1]), i[1] = g(i[1], 16), i[1] = Math.imul(i[1], m[2]), t[1] = t[1] ^ i[1], t[1] = g(t[1], 17), t[1] = t[1] + t[2], t[1] = Math.imul(t[1], 5) + 197830471, i[2] = Math.imul(i[2], m[2]), i[2] = g(i[2], 17), i[2] = Math.imul(i[2], m[3]), t[2] = t[2] ^ i[2], t[2] = g(t[2], 15), t[2] = t[2] + t[3], t[2] = Math.imul(t[2], 5) + 2530024501, i[3] = Math.imul(i[3], m[3]), i[3] = g(i[3], 18), i[3] = Math.imul(i[3], m[0]), t[3] = t[3] ^ i[3], t[3] = g(t[3], 13), t[3] = t[3] + t[0], t[3] = Math.imul(t[3], 5) + 850148119;
3327
3327
  }
3328
3328
  })))(a, r), function(o, t) {
3329
- var u = o.byteLength / 16 | 0, h = o.byteLength % 16, c = new Uint32Array(4), s = new Uint8Array(o, 16 * u, h);
3330
- switch (h) {
3329
+ var u = o.byteLength / 16 | 0, d = o.byteLength % 16, c = new Uint32Array(4), i = new Uint8Array(o, 16 * u, d);
3330
+ switch (d) {
3331
3331
  case 15:
3332
- c[3] = c[3] ^ s[14] << 16;
3332
+ c[3] = c[3] ^ i[14] << 16;
3333
3333
  case 14:
3334
- c[3] = c[3] ^ s[13] << 8;
3334
+ c[3] = c[3] ^ i[13] << 8;
3335
3335
  case 13:
3336
- c[3] = c[3] ^ s[12] << 0, c[3] = Math.imul(c[3], m[3]), c[3] = g(c[3], 18), c[3] = Math.imul(c[3], m[0]), t[3] = t[3] ^ c[3];
3336
+ c[3] = c[3] ^ i[12] << 0, c[3] = Math.imul(c[3], m[3]), c[3] = g(c[3], 18), c[3] = Math.imul(c[3], m[0]), t[3] = t[3] ^ c[3];
3337
3337
  case 12:
3338
- c[2] = c[2] ^ s[11] << 24;
3338
+ c[2] = c[2] ^ i[11] << 24;
3339
3339
  case 11:
3340
- c[2] = c[2] ^ s[10] << 16;
3340
+ c[2] = c[2] ^ i[10] << 16;
3341
3341
  case 10:
3342
- c[2] = c[2] ^ s[9] << 8;
3342
+ c[2] = c[2] ^ i[9] << 8;
3343
3343
  case 9:
3344
- c[2] = c[2] ^ s[8] << 0, c[2] = Math.imul(c[2], m[2]), c[2] = g(c[2], 17), c[2] = Math.imul(c[2], m[3]), t[2] = t[2] ^ c[2];
3344
+ c[2] = c[2] ^ i[8] << 0, c[2] = Math.imul(c[2], m[2]), c[2] = g(c[2], 17), c[2] = Math.imul(c[2], m[3]), t[2] = t[2] ^ c[2];
3345
3345
  case 8:
3346
- c[1] = c[1] ^ s[7] << 24;
3346
+ c[1] = c[1] ^ i[7] << 24;
3347
3347
  case 7:
3348
- c[1] = c[1] ^ s[6] << 16;
3348
+ c[1] = c[1] ^ i[6] << 16;
3349
3349
  case 6:
3350
- c[1] = c[1] ^ s[5] << 8;
3350
+ c[1] = c[1] ^ i[5] << 8;
3351
3351
  case 5:
3352
- c[1] = c[1] ^ s[4] << 0, c[1] = Math.imul(c[1], m[1]), c[1] = g(c[1], 16), c[1] = Math.imul(c[1], m[2]), t[1] = t[1] ^ c[1];
3352
+ c[1] = c[1] ^ i[4] << 0, c[1] = Math.imul(c[1], m[1]), c[1] = g(c[1], 16), c[1] = Math.imul(c[1], m[2]), t[1] = t[1] ^ c[1];
3353
3353
  case 4:
3354
- c[0] = c[0] ^ s[3] << 24;
3354
+ c[0] = c[0] ^ i[3] << 24;
3355
3355
  case 3:
3356
- c[0] = c[0] ^ s[2] << 16;
3356
+ c[0] = c[0] ^ i[2] << 16;
3357
3357
  case 2:
3358
- c[0] = c[0] ^ s[1] << 8;
3358
+ c[0] = c[0] ^ i[1] << 8;
3359
3359
  case 1:
3360
- c[0] = c[0] ^ s[0] << 0, c[0] = Math.imul(c[0], m[0]), c[0] = g(c[0], 15), c[0] = Math.imul(c[0], m[1]), t[0] = t[0] ^ c[0];
3360
+ c[0] = c[0] ^ i[0] << 0, c[0] = Math.imul(c[0], m[0]), c[0] = g(c[0], 15), c[0] = Math.imul(c[0], m[1]), t[0] = t[0] ^ c[0];
3361
3361
  }
3362
3362
  }(a, r), function(o, t) {
3363
3363
  t[0] = t[0] ^ o.byteLength, t[1] = t[1] ^ o.byteLength, t[2] = t[2] ^ o.byteLength, t[3] = t[3] ^ o.byteLength, t[0] = t[0] + t[1] | 0, t[0] = t[0] + t[2] | 0, t[0] = t[0] + t[3] | 0, t[1] = t[1] + t[0] | 0, t[2] = t[2] + t[0] | 0, t[3] = t[3] + t[0] | 0, t[0] = T(t[0]), t[1] = T(t[1]), t[2] = T(t[2]), t[3] = T(t[3]), t[0] = t[0] + t[1] | 0, t[0] = t[0] + t[2] | 0, t[0] = t[0] + t[3] | 0, t[1] = t[1] + t[0] | 0, t[2] = t[2] + t[0] | 0, t[3] = t[3] + t[0] | 0;
3364
3364
  }(a, r);
3365
- var i = new Uint8Array(r.buffer);
3366
- return Array.from(i).map(function(o) {
3365
+ var s = new Uint8Array(r.buffer);
3366
+ return Array.from(s).map(function(o) {
3367
3367
  return o.toString(16).padStart(2, "0");
3368
3368
  }).join("");
3369
3369
  }
@@ -3372,8 +3372,8 @@ function H(a) {
3372
3372
  return e;
3373
3373
  }
3374
3374
  function L(a, e, n) {
3375
- for (var r = [], i = 0; i < a[0].data.length; i++) {
3376
- for (var o = [], t = 0; t < a.length; t++) o.push(a[t].data[i]);
3375
+ for (var r = [], s = 0; s < a[0].data.length; s++) {
3376
+ for (var o = [], t = 0; t < a.length; t++) o.push(a[t].data[s]);
3377
3377
  r.push(Q(o));
3378
3378
  }
3379
3379
  var u = new Uint8ClampedArray(r);
@@ -3383,69 +3383,69 @@ function Q(a) {
3383
3383
  if (a.length === 0) return 0;
3384
3384
  for (var e = {}, n = 0, r = a; n < r.length; n++)
3385
3385
  e[o = r[n]] = (e[o] || 0) + 1;
3386
- var i = a[0];
3387
- for (var o in e) e[o] > e[i] && (i = parseInt(o, 10));
3388
- return i;
3386
+ var s = a[0];
3387
+ for (var o in e) e[o] > e[s] && (s = parseInt(o, 10));
3388
+ return s;
3389
3389
  }
3390
3390
  function C() {
3391
3391
  if (typeof navigator > "u") return { name: "unknown", version: "unknown" };
3392
3392
  for (var a = navigator.userAgent, e = { Edg: "Edge", OPR: "Opera" }, n = 0, r = [/(?<name>Edge|Edg)\/(?<version>\d+(?:\.\d+)?)/, /(?<name>(?:Chrome|Chromium|OPR|Opera|Vivaldi|Brave))\/(?<version>\d+(?:\.\d+)?)/, /(?<name>(?:Firefox|Waterfox|Iceweasel|IceCat))\/(?<version>\d+(?:\.\d+)?)/, /(?<name>Safari)\/(?<version>\d+(?:\.\d+)?)/, /(?<name>MSIE|Trident|IEMobile).+?(?<version>\d+(?:\.\d+)?)/, /(?<name>[A-Za-z]+)\/(?<version>\d+(?:\.\d+)?)/, /(?<name>SamsungBrowser)\/(?<version>\d+(?:\.\d+)?)/]; n < r.length; n++) {
3393
- var i = r[n], o = a.match(i);
3393
+ var s = r[n], o = a.match(s);
3394
3394
  if (o && o.groups) return { name: e[o.groups.name] || o.groups.name, version: o.groups.version };
3395
3395
  }
3396
3396
  return { name: "unknown", version: "unknown" };
3397
3397
  }
3398
3398
  v("audio", function() {
3399
- return w(this, void 0, void 0, function() {
3400
- return y(this, function(a) {
3399
+ return y(this, void 0, void 0, function() {
3400
+ return w(this, function(a) {
3401
3401
  return [2, new Promise(function(e, n) {
3402
3402
  try {
3403
- var r = new (window.OfflineAudioContext || window.webkitOfflineAudioContext)(1, 5e3, 44100), i = r.createBufferSource(), o = r.createOscillator();
3403
+ var r = new (window.OfflineAudioContext || window.webkitOfflineAudioContext)(1, 5e3, 44100), s = r.createBufferSource(), o = r.createOscillator();
3404
3404
  o.frequency.value = 1e3;
3405
3405
  var t, u = r.createDynamicsCompressor();
3406
- u.threshold.value = -50, u.knee.value = 40, u.ratio.value = 12, u.attack.value = 0, u.release.value = 0.2, o.connect(u), u.connect(r.destination), o.start(), r.oncomplete = function(h) {
3407
- t = h.renderedBuffer.getChannelData(0), e({ sampleHash: H(t), oscillator: o.type, maxChannels: r.destination.maxChannelCount, channelCountMode: i.channelCountMode });
3406
+ u.threshold.value = -50, u.knee.value = 40, u.ratio.value = 12, u.attack.value = 0, u.release.value = 0.2, o.connect(u), u.connect(r.destination), o.start(), r.oncomplete = function(d) {
3407
+ t = d.renderedBuffer.getChannelData(0), e({ sampleHash: H(t), oscillator: o.type, maxChannels: r.destination.maxChannelCount, channelCountMode: s.channelCountMode });
3408
3408
  }, r.startRendering();
3409
- } catch (h) {
3410
- console.error("Error creating audio fingerprint:", h), n(h);
3409
+ } catch (d) {
3410
+ console.error("Error creating audio fingerprint:", d), n(d);
3411
3411
  }
3412
3412
  })];
3413
3413
  });
3414
3414
  });
3415
3415
  });
3416
- var K = C().name !== "SamsungBrowser" ? 1 : 3, P = 280, k = 20;
3416
+ var K = C().name !== "SamsungBrowser" ? 1 : 3, P = 280, F = 20;
3417
3417
  C().name != "Firefox" && v("canvas", function() {
3418
3418
  return document.createElement("canvas").getContext("2d"), new Promise(function(a) {
3419
3419
  var e = Array.from({ length: K }, function() {
3420
3420
  return function() {
3421
3421
  var n = document.createElement("canvas"), r = n.getContext("2d");
3422
3422
  if (!r) return new ImageData(1, 1);
3423
- n.width = P, n.height = k;
3424
- var i = r.createLinearGradient(0, 0, n.width, n.height);
3425
- i.addColorStop(0, "red"), i.addColorStop(0.16666666666666666, "orange"), i.addColorStop(0.3333333333333333, "yellow"), i.addColorStop(0.5, "green"), i.addColorStop(0.6666666666666666, "blue"), i.addColorStop(0.8333333333333334, "indigo"), i.addColorStop(1, "violet"), r.fillStyle = i, r.fillRect(0, 0, n.width, n.height);
3423
+ n.width = P, n.height = F;
3424
+ var s = r.createLinearGradient(0, 0, n.width, n.height);
3425
+ s.addColorStop(0, "red"), s.addColorStop(0.16666666666666666, "orange"), s.addColorStop(0.3333333333333333, "yellow"), s.addColorStop(0.5, "green"), s.addColorStop(0.6666666666666666, "blue"), s.addColorStop(0.8333333333333334, "indigo"), s.addColorStop(1, "violet"), r.fillStyle = s, r.fillRect(0, 0, n.width, n.height);
3426
3426
  var o = "Random Text WMwmil10Oo";
3427
3427
  r.font = "23.123px Arial", r.fillStyle = "black", r.fillText(o, -5, 15), r.fillStyle = "rgba(0, 0, 255, 0.5)", r.fillText(o, -3.3, 17.7), r.beginPath(), r.moveTo(0, 0), r.lineTo(2 * n.width / 7, n.height), r.strokeStyle = "white", r.lineWidth = 2, r.stroke();
3428
3428
  var t = r.getImageData(0, 0, n.width, n.height);
3429
3429
  return t;
3430
3430
  }();
3431
3431
  });
3432
- a({ commonImageDataHash: I(L(e, P, k).data.toString()).toString() });
3432
+ a({ commonImageDataHash: _(L(e, P, F).data.toString()).toString() });
3433
3433
  });
3434
3434
  });
3435
- var A, X = ["Arial", "Arial Black", "Arial Narrow", "Arial Rounded MT", "Arimo", "Archivo", "Barlow", "Bebas Neue", "Bitter", "Bookman", "Calibri", "Cabin", "Candara", "Century", "Century Gothic", "Comic Sans MS", "Constantia", "Courier", "Courier New", "Crimson Text", "DM Mono", "DM Sans", "DM Serif Display", "DM Serif Text", "Dosis", "Droid Sans", "Exo", "Fira Code", "Fira Sans", "Franklin Gothic Medium", "Garamond", "Geneva", "Georgia", "Gill Sans", "Helvetica", "Impact", "Inconsolata", "Indie Flower", "Inter", "Josefin Sans", "Karla", "Lato", "Lexend", "Lucida Bright", "Lucida Console", "Lucida Sans Unicode", "Manrope", "Merriweather", "Merriweather Sans", "Montserrat", "Myriad", "Noto Sans", "Nunito", "Nunito Sans", "Open Sans", "Optima", "Orbitron", "Oswald", "Pacifico", "Palatino", "Perpetua", "PT Sans", "PT Serif", "Poppins", "Prompt", "Public Sans", "Quicksand", "Rajdhani", "Recursive", "Roboto", "Roboto Condensed", "Rockwell", "Rubik", "Segoe Print", "Segoe Script", "Segoe UI", "Sora", "Source Sans Pro", "Space Mono", "Tahoma", "Taviraj", "Times", "Times New Roman", "Titillium Web", "Trebuchet MS", "Ubuntu", "Varela Round", "Verdana", "Work Sans"], J = ["monospace", "sans-serif", "serif"];
3436
- function F(a, e) {
3435
+ var I, X = ["Arial", "Arial Black", "Arial Narrow", "Arial Rounded MT", "Arimo", "Archivo", "Barlow", "Bebas Neue", "Bitter", "Bookman", "Calibri", "Cabin", "Candara", "Century", "Century Gothic", "Comic Sans MS", "Constantia", "Courier", "Courier New", "Crimson Text", "DM Mono", "DM Sans", "DM Serif Display", "DM Serif Text", "Dosis", "Droid Sans", "Exo", "Fira Code", "Fira Sans", "Franklin Gothic Medium", "Garamond", "Geneva", "Georgia", "Gill Sans", "Helvetica", "Impact", "Inconsolata", "Indie Flower", "Inter", "Josefin Sans", "Karla", "Lato", "Lexend", "Lucida Bright", "Lucida Console", "Lucida Sans Unicode", "Manrope", "Merriweather", "Merriweather Sans", "Montserrat", "Myriad", "Noto Sans", "Nunito", "Nunito Sans", "Open Sans", "Optima", "Orbitron", "Oswald", "Pacifico", "Palatino", "Perpetua", "PT Sans", "PT Serif", "Poppins", "Prompt", "Public Sans", "Quicksand", "Rajdhani", "Recursive", "Roboto", "Roboto Condensed", "Rockwell", "Rubik", "Segoe Print", "Segoe Script", "Segoe UI", "Sora", "Source Sans Pro", "Space Mono", "Tahoma", "Taviraj", "Times", "Times New Roman", "Titillium Web", "Trebuchet MS", "Ubuntu", "Varela Round", "Verdana", "Work Sans"], J = ["monospace", "sans-serif", "serif"];
3436
+ function k(a, e) {
3437
3437
  if (!a) throw new Error("Canvas context not supported");
3438
3438
  return a.font = "72px ".concat(e), a.measureText("WwMmLli0Oo").width;
3439
3439
  }
3440
3440
  function Y() {
3441
3441
  var a, e = document.createElement("canvas"), n = (a = e.getContext("webgl")) !== null && a !== void 0 ? a : e.getContext("experimental-webgl");
3442
3442
  if (n && "getParameter" in n) try {
3443
- var r = (n.getParameter(n.VENDOR) || "").toString(), i = (n.getParameter(n.RENDERER) || "").toString(), o = { vendor: r, renderer: i, version: (n.getParameter(n.VERSION) || "").toString(), shadingLanguageVersion: (n.getParameter(n.SHADING_LANGUAGE_VERSION) || "").toString() };
3444
- if (!i.length || !r.length) {
3443
+ var r = (n.getParameter(n.VENDOR) || "").toString(), s = (n.getParameter(n.RENDERER) || "").toString(), o = { vendor: r, renderer: s, version: (n.getParameter(n.VERSION) || "").toString(), shadingLanguageVersion: (n.getParameter(n.SHADING_LANGUAGE_VERSION) || "").toString() };
3444
+ if (!s.length || !r.length) {
3445
3445
  var t = n.getExtension("WEBGL_debug_renderer_info");
3446
3446
  if (t) {
3447
- var u = (n.getParameter(t.UNMASKED_VENDOR_WEBGL) || "").toString(), h = (n.getParameter(t.UNMASKED_RENDERER_WEBGL) || "").toString();
3448
- u && (o.vendorUnmasked = u), h && (o.rendererUnmasked = h);
3447
+ var u = (n.getParameter(t.UNMASKED_VENDOR_WEBGL) || "").toString(), d = (n.getParameter(t.UNMASKED_RENDERER_WEBGL) || "").toString();
3448
+ u && (o.vendorUnmasked = u), d && (o.rendererUnmasked = d);
3449
3449
  }
3450
3450
  }
3451
3451
  return o;
@@ -3460,23 +3460,23 @@ function Z() {
3460
3460
  function ee(a, e) {
3461
3461
  var n = {};
3462
3462
  return e.forEach(function(r) {
3463
- var i = function(o) {
3463
+ var s = function(o) {
3464
3464
  if (o.length === 0) return null;
3465
3465
  var t = {};
3466
3466
  o.forEach(function(c) {
3467
- var s = String(c);
3468
- t[s] = (t[s] || 0) + 1;
3467
+ var i = String(c);
3468
+ t[i] = (t[i] || 0) + 1;
3469
3469
  });
3470
- var u = o[0], h = 1;
3470
+ var u = o[0], d = 1;
3471
3471
  return Object.keys(t).forEach(function(c) {
3472
- t[c] > h && (u = c, h = t[c]);
3472
+ t[c] > d && (u = c, d = t[c]);
3473
3473
  }), u;
3474
3474
  }(a.map(function(o) {
3475
3475
  return r in o ? o[r] : void 0;
3476
3476
  }).filter(function(o) {
3477
3477
  return o !== void 0;
3478
3478
  }));
3479
- i && (n[r] = i);
3479
+ s && (n[r] = s);
3480
3480
  }), n;
3481
3481
  }
3482
3482
  function te() {
@@ -3500,37 +3500,37 @@ C().name != "Firefox" && v("fonts", function() {
3500
3500
  return new Promise(function(e, n) {
3501
3501
  try {
3502
3502
  (function(r) {
3503
- var i;
3504
- w(this, void 0, void 0, function() {
3503
+ var s;
3504
+ y(this, void 0, void 0, function() {
3505
3505
  var o, t, u;
3506
- return y(this, function(h) {
3507
- switch (h.label) {
3506
+ return w(this, function(d) {
3507
+ switch (d.label) {
3508
3508
  case 0:
3509
3509
  return document.body ? [3, 2] : [4, (c = 50, new Promise(function(p) {
3510
- return setTimeout(p, c, s);
3510
+ return setTimeout(p, c, i);
3511
3511
  }))];
3512
3512
  case 1:
3513
- return h.sent(), [3, 0];
3513
+ return d.sent(), [3, 0];
3514
3514
  case 2:
3515
- if ((o = document.createElement("iframe")).setAttribute("frameBorder", "0"), (t = o.style).setProperty("position", "fixed"), t.setProperty("display", "block", "important"), t.setProperty("visibility", "visible"), t.setProperty("border", "0"), t.setProperty("opacity", "0"), o.src = "about:blank", document.body.appendChild(o), !(u = o.contentDocument || ((i = o.contentWindow) === null || i === void 0 ? void 0 : i.document))) throw new Error("Iframe document is not accessible");
3515
+ if ((o = document.createElement("iframe")).setAttribute("frameBorder", "0"), (t = o.style).setProperty("position", "fixed"), t.setProperty("display", "block", "important"), t.setProperty("visibility", "visible"), t.setProperty("border", "0"), t.setProperty("opacity", "0"), o.src = "about:blank", document.body.appendChild(o), !(u = o.contentDocument || ((s = o.contentWindow) === null || s === void 0 ? void 0 : s.document))) throw new Error("Iframe document is not accessible");
3516
3516
  return r({ iframe: u }), setTimeout(function() {
3517
3517
  document.body.removeChild(o);
3518
3518
  }, 0), [2];
3519
3519
  }
3520
- var c, s;
3520
+ var c, i;
3521
3521
  });
3522
3522
  });
3523
3523
  })(function(r) {
3524
- var i = r.iframe;
3525
- return w(a, void 0, void 0, function() {
3526
- var o, t, u, h;
3527
- return y(this, function(c) {
3528
- return o = i.createElement("canvas"), t = o.getContext("2d"), u = J.map(function(s) {
3529
- return F(t, s);
3530
- }), h = {}, X.forEach(function(s) {
3531
- var p = F(t, s);
3532
- u.includes(p) || (h[s] = p);
3533
- }), e(h), [2];
3524
+ var s = r.iframe;
3525
+ return y(a, void 0, void 0, function() {
3526
+ var o, t, u, d;
3527
+ return w(this, function(c) {
3528
+ return o = s.createElement("canvas"), t = o.getContext("2d"), u = J.map(function(i) {
3529
+ return k(t, i);
3530
+ }), d = {}, X.forEach(function(i) {
3531
+ var p = k(t, i);
3532
+ u.includes(p) || (d[i] = p);
3533
+ }), e(d), [2];
3534
3534
  });
3535
3535
  });
3536
3536
  });
@@ -3548,20 +3548,20 @@ C().name != "Firefox" && v("fonts", function() {
3548
3548
  a({ languages: navigator.language, timezone: Intl.DateTimeFormat().resolvedOptions().timeZone });
3549
3549
  });
3550
3550
  }), v("permissions", function() {
3551
- return w(this, void 0, void 0, function() {
3551
+ return y(this, void 0, void 0, function() {
3552
3552
  var a;
3553
- return y(this, function(e) {
3554
- return A = (S == null ? void 0 : S.permissions_to_check) || ["accelerometer", "accessibility", "accessibility-events", "ambient-light-sensor", "background-fetch", "background-sync", "bluetooth", "camera", "clipboard-read", "clipboard-write", "device-info", "display-capture", "gyroscope", "geolocation", "local-fonts", "magnetometer", "microphone", "midi", "nfc", "notifications", "payment-handler", "persistent-storage", "push", "speaker", "storage-access", "top-level-storage-access", "window-management", "query"], a = Array.from({ length: (S == null ? void 0 : S.retries) || 3 }, function() {
3553
+ return w(this, function(e) {
3554
+ return I = (S == null ? void 0 : S.permissions_to_check) || ["accelerometer", "accessibility", "accessibility-events", "ambient-light-sensor", "background-fetch", "background-sync", "bluetooth", "camera", "clipboard-read", "clipboard-write", "device-info", "display-capture", "gyroscope", "geolocation", "local-fonts", "magnetometer", "microphone", "midi", "nfc", "notifications", "payment-handler", "persistent-storage", "push", "speaker", "storage-access", "top-level-storage-access", "window-management", "query"], a = Array.from({ length: (S == null ? void 0 : S.retries) || 3 }, function() {
3555
3555
  return function() {
3556
- return w(this, void 0, void 0, function() {
3557
- var n, r, i, o, t;
3558
- return y(this, function(u) {
3556
+ return y(this, void 0, void 0, function() {
3557
+ var n, r, s, o, t;
3558
+ return w(this, function(u) {
3559
3559
  switch (u.label) {
3560
3560
  case 0:
3561
- n = {}, r = 0, i = A, u.label = 1;
3561
+ n = {}, r = 0, s = I, u.label = 1;
3562
3562
  case 1:
3563
- if (!(r < i.length)) return [3, 6];
3564
- o = i[r], u.label = 2;
3563
+ if (!(r < s.length)) return [3, 6];
3564
+ o = s[r], u.label = 2;
3565
3565
  case 2:
3566
3566
  return u.trys.push([2, 4, , 5]), [4, navigator.permissions.query({ name: o })];
3567
3567
  case 3:
@@ -3577,7 +3577,7 @@ C().name != "Firefox" && v("fonts", function() {
3577
3577
  });
3578
3578
  }();
3579
3579
  }), [2, Promise.all(a).then(function(n) {
3580
- return ee(n, A);
3580
+ return ee(n, I);
3581
3581
  })];
3582
3582
  });
3583
3583
  });
@@ -3600,18 +3600,18 @@ C().name != "Firefox" && v("fonts", function() {
3600
3600
  a({ platform: window.navigator.platform, cookieEnabled: window.navigator.cookieEnabled, productSub: navigator.productSub, product: navigator.product, useragent: navigator.userAgent, hardwareConcurrency: navigator.hardwareConcurrency, browser: { name: e.name, version: e.version }, applePayVersion: ne() });
3601
3601
  });
3602
3602
  });
3603
- var f, re = C().name !== "SamsungBrowser" ? 1 : 3, d = null;
3603
+ var f, re = C().name !== "SamsungBrowser" ? 1 : 3, l = null;
3604
3604
  v("webgl", function() {
3605
- return w(this, void 0, void 0, function() {
3605
+ return y(this, void 0, void 0, function() {
3606
3606
  var a;
3607
- return y(this, function(e) {
3608
- typeof document < "u" && ((f = document.createElement("canvas")).width = 200, f.height = 100, d = f.getContext("webgl"));
3607
+ return w(this, function(e) {
3608
+ typeof document < "u" && ((f = document.createElement("canvas")).width = 200, f.height = 100, l = f.getContext("webgl"));
3609
3609
  try {
3610
- if (!d) throw new Error("WebGL not supported");
3610
+ if (!l) throw new Error("WebGL not supported");
3611
3611
  return a = Array.from({ length: re }, function() {
3612
3612
  return function() {
3613
3613
  try {
3614
- if (!d) throw new Error("WebGL not supported");
3614
+ if (!l) throw new Error("WebGL not supported");
3615
3615
  var n = `
3616
3616
  attribute vec2 position;
3617
3617
  void main() {
@@ -3622,31 +3622,31 @@ v("webgl", function() {
3622
3622
  void main() {
3623
3623
  gl_FragColor = vec4(0.812, 0.195, 0.553, 0.921); // Set line color
3624
3624
  }
3625
- `, i = d.createShader(d.VERTEX_SHADER), o = d.createShader(d.FRAGMENT_SHADER);
3626
- if (!i || !o) throw new Error("Failed to create shaders");
3627
- if (d.shaderSource(i, n), d.shaderSource(o, r), d.compileShader(i), !d.getShaderParameter(i, d.COMPILE_STATUS)) throw new Error("Vertex shader compilation failed: " + d.getShaderInfoLog(i));
3628
- if (d.compileShader(o), !d.getShaderParameter(o, d.COMPILE_STATUS)) throw new Error("Fragment shader compilation failed: " + d.getShaderInfoLog(o));
3629
- var t = d.createProgram();
3625
+ `, s = l.createShader(l.VERTEX_SHADER), o = l.createShader(l.FRAGMENT_SHADER);
3626
+ if (!s || !o) throw new Error("Failed to create shaders");
3627
+ if (l.shaderSource(s, n), l.shaderSource(o, r), l.compileShader(s), !l.getShaderParameter(s, l.COMPILE_STATUS)) throw new Error("Vertex shader compilation failed: " + l.getShaderInfoLog(s));
3628
+ if (l.compileShader(o), !l.getShaderParameter(o, l.COMPILE_STATUS)) throw new Error("Fragment shader compilation failed: " + l.getShaderInfoLog(o));
3629
+ var t = l.createProgram();
3630
3630
  if (!t) throw new Error("Failed to create shader program");
3631
- if (d.attachShader(t, i), d.attachShader(t, o), d.linkProgram(t), !d.getProgramParameter(t, d.LINK_STATUS)) throw new Error("Shader program linking failed: " + d.getProgramInfoLog(t));
3632
- d.useProgram(t);
3633
- for (var u = 137, h = new Float32Array(4 * u), c = 2 * Math.PI / u, s = 0; s < u; s++) {
3634
- var p = s * c;
3635
- h[4 * s] = 0, h[4 * s + 1] = 0, h[4 * s + 2] = Math.cos(p) * (f.width / 2), h[4 * s + 3] = Math.sin(p) * (f.height / 2);
3631
+ if (l.attachShader(t, s), l.attachShader(t, o), l.linkProgram(t), !l.getProgramParameter(t, l.LINK_STATUS)) throw new Error("Shader program linking failed: " + l.getProgramInfoLog(t));
3632
+ l.useProgram(t);
3633
+ for (var u = 137, d = new Float32Array(4 * u), c = 2 * Math.PI / u, i = 0; i < u; i++) {
3634
+ var p = i * c;
3635
+ d[4 * i] = 0, d[4 * i + 1] = 0, d[4 * i + 2] = Math.cos(p) * (f.width / 2), d[4 * i + 3] = Math.sin(p) * (f.height / 2);
3636
3636
  }
3637
- var q = d.createBuffer();
3638
- d.bindBuffer(d.ARRAY_BUFFER, q), d.bufferData(d.ARRAY_BUFFER, h, d.STATIC_DRAW);
3639
- var R = d.getAttribLocation(t, "position");
3640
- d.enableVertexAttribArray(R), d.vertexAttribPointer(R, 2, d.FLOAT, !1, 0, 0), d.viewport(0, 0, f.width, f.height), d.clearColor(0, 0, 0, 1), d.clear(d.COLOR_BUFFER_BIT), d.drawArrays(d.LINES, 0, 2 * u);
3637
+ var q = l.createBuffer();
3638
+ l.bindBuffer(l.ARRAY_BUFFER, q), l.bufferData(l.ARRAY_BUFFER, d, l.STATIC_DRAW);
3639
+ var R = l.getAttribLocation(t, "position");
3640
+ l.enableVertexAttribArray(R), l.vertexAttribPointer(R, 2, l.FLOAT, !1, 0, 0), l.viewport(0, 0, f.width, f.height), l.clearColor(0, 0, 0, 1), l.clear(l.COLOR_BUFFER_BIT), l.drawArrays(l.LINES, 0, 2 * u);
3641
3641
  var x = new Uint8ClampedArray(f.width * f.height * 4);
3642
- return d.readPixels(0, 0, f.width, f.height, d.RGBA, d.UNSIGNED_BYTE, x), new ImageData(x, f.width, f.height);
3642
+ return l.readPixels(0, 0, f.width, f.height, l.RGBA, l.UNSIGNED_BYTE, x), new ImageData(x, f.width, f.height);
3643
3643
  } catch {
3644
3644
  return new ImageData(1, 1);
3645
3645
  } finally {
3646
- d && (d.bindBuffer(d.ARRAY_BUFFER, null), d.useProgram(null), d.viewport(0, 0, d.drawingBufferWidth, d.drawingBufferHeight), d.clearColor(0, 0, 0, 0));
3646
+ l && (l.bindBuffer(l.ARRAY_BUFFER, null), l.useProgram(null), l.viewport(0, 0, l.drawingBufferWidth, l.drawingBufferHeight), l.clearColor(0, 0, 0, 0));
3647
3647
  }
3648
3648
  }();
3649
- }), [2, { commonImageHash: I(L(a, f.width, f.height).data.toString()).toString() }];
3649
+ }), [2, { commonImageHash: _(L(a, f.width, f.height).data.toString()).toString() }];
3650
3650
  } catch {
3651
3651
  return [2, { webgl: "unsupported" }];
3652
3652
  }
@@ -3655,13 +3655,13 @@ v("webgl", function() {
3655
3655
  });
3656
3656
  });
3657
3657
  var b = function(a, e, n, r) {
3658
- for (var i = (n - e) / r, o = 0, t = 0; t < r; t++)
3659
- o += a(e + (t + 0.5) * i);
3660
- return o * i;
3658
+ for (var s = (n - e) / r, o = 0, t = 0; t < r; t++)
3659
+ o += a(e + (t + 0.5) * s);
3660
+ return o * s;
3661
3661
  };
3662
3662
  v("math", function() {
3663
- return w(void 0, void 0, void 0, function() {
3664
- return y(this, function(a) {
3663
+ return y(void 0, void 0, void 0, function() {
3664
+ return w(this, function(a) {
3665
3665
  return [2, { acos: Math.acos(0.5), asin: b(Math.asin, -1, 1, 97), atan: b(Math.atan, -1, 1, 97), cos: b(Math.cos, 0, Math.PI, 97), cosh: Math.cosh(9 / 7), e: Math.E, largeCos: Math.cos(1e20), largeSin: Math.sin(1e20), largeTan: Math.tan(1e20), log: Math.log(1e3), pi: Math.PI, sin: b(Math.sin, -Math.PI, Math.PI, 97), sinh: b(Math.sinh, -9 / 7, 7 / 9, 97), sqrt: Math.sqrt(2), tan: b(Math.tan, 0, 2 * Math.PI, 97), tanh: b(Math.tanh, -9 / 7, 7 / 9, 97) }];
3666
3666
  });
3667
3667
  });
@@ -3684,6 +3684,7 @@ const initialSearchcraftStateValues = {
3684
3684
  searchClientResponseItems: [],
3685
3685
  searchResponseTimeTaken: undefined,
3686
3686
  searchResponseFacetPrime: undefined,
3687
+ supplementalFacetPrime: undefined,
3687
3688
  searchResultsCount: 0,
3688
3689
  searchResultsPerPage: 20,
3689
3690
  searchResultsPage: 1,
@@ -3783,7 +3784,7 @@ const searchcraftStore = zustand.createStore((_set, get) => {
3783
3784
  }, functions.setSearchClientResponseItemsFromResponse, functions.setAdClientResponseItems);
3784
3785
  },
3785
3786
  setAdClientResponseItems: (items) => functions.set({ adClientResponseItems: items }),
3786
- setSearchClientResponseItemsFromResponse: (response, items) => {
3787
+ setSearchClientResponseItemsFromResponse: (response, items, supplementalResponse) => {
3787
3788
  const { facets, count = 0, time_taken = 0 } = response.data;
3788
3789
  const state = functions.set((state) => {
3789
3790
  return {
@@ -3794,7 +3795,8 @@ const searchcraftStore = zustand.createStore((_set, get) => {
3794
3795
  // Reset to first page when response count changes
3795
3796
  count === state.searchResultsCount ? state.searchResultsPage : 1,
3796
3797
  searchResultsCount: count,
3797
- ...(facets && { searchResponseFacetPrime: facets }),
3798
+ searchResponseFacetPrime: facets,
3799
+ supplementalFacetPrime: supplementalResponse?.data.facets,
3798
3800
  };
3799
3801
  });
3800
3802
  state.logger?.log(O.DEBUG, `Search results: ${JSON.stringify(items)}`);
@@ -3872,7 +3874,22 @@ const searchcraftStore = zustand.createStore((_set, get) => {
3872
3874
  return stateObject;
3873
3875
  });
3874
3876
 
3875
- function deepMergeWithSpread(obj1, obj2) {
3877
+ /**
3878
+ * Helper function for getting a Node (FacetWithChildrenObject)
3879
+ * at a given path. Traverses the node tree to get the node.
3880
+ */
3881
+ const getNodeAtPath = (tree, nodePaths) => {
3882
+ let cursor = tree;
3883
+ for (const nodePath of nodePaths) {
3884
+ cursor = cursor?.children[nodePath];
3885
+ }
3886
+ return cursor;
3887
+ };
3888
+ /**
3889
+ * Helper function to perform a deep merge.
3890
+ * Used for merging two branches of a facet tree together.
3891
+ */
3892
+ const deepMergeWithSpread = (obj1, obj2) => {
3876
3893
  const result = { ...obj1 };
3877
3894
  for (const key in obj2) {
3878
3895
  // biome-ignore lint/suspicious/noPrototypeBuiltins: <explanation>
@@ -3886,119 +3903,95 @@ function deepMergeWithSpread(obj1, obj2) {
3886
3903
  }
3887
3904
  }
3888
3905
  return result;
3889
- }
3906
+ };
3890
3907
  /**
3891
- * Given an array of facet paths, removes parent facet paths.
3908
+ * Given an array of facet paths, removes parent facet paths so that only the
3909
+ * Leaf facets are sent with the search request.
3892
3910
  */
3893
3911
  function removeSubstringMatches(arr) {
3894
3912
  return arr.filter((entry, index, array) => !array.some((otherEntry, otherIndex) => otherIndex !== index && otherEntry.includes(entry)));
3895
3913
  }
3896
- function facetToRecord(facet) {
3897
- const records = {};
3898
- const traverseAndAddToFragments = (facetChild) => {
3899
- records[facetChild.path] = {
3900
- count: facetChild.count,
3901
- path: facetChild.path,
3902
- };
3903
- facetChild.children?.forEach((child) => {
3904
- traverseAndAddToFragments(child);
3905
- });
3906
- };
3907
- traverseAndAddToFragments(facet);
3908
- return records;
3909
- }
3910
- function recordToObject(record) {
3911
- const root = {
3912
- count: 0,
3913
- path: '/',
3914
- children: {},
3915
- };
3916
- Object.keys(record).forEach((key) => {
3917
- const fragment = record[key];
3918
- if (!fragment) {
3919
- return;
3920
- }
3921
- if (fragment.path === '/') {
3922
- return;
3923
- }
3924
- const pathParts = fragment.path.substring(1).split('/');
3925
- let currentRoot = root;
3926
- let currentPath = '';
3927
- pathParts.forEach((part, index) => {
3928
- const nextPath = `${currentPath}/${part}`;
3929
- if (!currentRoot.children[nextPath]) {
3930
- currentRoot.children[nextPath] = {
3931
- count: 0,
3932
- path: nextPath,
3933
- children: {},
3914
+ /**
3915
+ * Merges a current facet tree with an incoming facet tree.
3916
+ *
3917
+ * At each branch, the incoming facet tree's facets override current facet tree
3918
+ *
3919
+ * @param currentTree
3920
+ * @param incomingTree
3921
+ */
3922
+ const mergeFacetTrees = (currentTree, incomingTree) => {
3923
+ const mergedTree = structuredClone(currentTree);
3924
+ const merge = (currentBranch, nodePath) => {
3925
+ const mergedBranch = structuredClone(currentBranch);
3926
+ const incomingBranch = getNodeAtPath(incomingTree, nodePath);
3927
+ if (!incomingBranch) {
3928
+ return mergedBranch;
3929
+ }
3930
+ for (const nodeName of Object.keys(currentBranch.children)) {
3931
+ if (incomingBranch.children[nodeName]) {
3932
+ mergedBranch.children[nodeName] = {
3933
+ ...deepMergeWithSpread(currentBranch.children[nodeName], incomingBranch.children[nodeName]),
3934
+ count: mergedBranch.children[nodeName]?.count || 0,
3934
3935
  };
3935
3936
  }
3936
- if (index === pathParts.length - 1) {
3937
- currentRoot.children[nextPath].count = fragment.count;
3937
+ else if (mergedBranch.children[nodeName]) {
3938
+ mergedBranch.children[nodeName] = merge(mergedBranch.children[nodeName], [...nodePath, nodeName]);
3938
3939
  }
3939
- currentPath = nextPath;
3940
- currentRoot = currentRoot.children[nextPath];
3941
- });
3942
- });
3943
- return root;
3944
- }
3945
- function objectToFacet(childObject) {
3946
- const transformed = {
3947
- count: childObject.count,
3948
- path: childObject.path,
3949
- children: [],
3940
+ }
3941
+ return mergedBranch;
3950
3942
  };
3951
- if (Object.keys(childObject.children).length > 0) {
3952
- transformed.children = Object.values(childObject.children).map((subChildObject) => objectToFacet(subChildObject));
3953
- }
3954
- return transformed;
3955
- }
3943
+ return merge(mergedTree, []);
3944
+ };
3956
3945
  /**
3957
- * Filters records with the parent paths from record2 OUT of record1
3946
+ * A function that converts a FacetWithChidrenArray to a complete FacetTree object.
3947
+ *
3948
+ * It uses the `path` of each Facet to build the tree.
3949
+ *
3950
+ * @param facetWithChildArray
3958
3951
  */
3959
- function filterRecordByParentPaths(record1, record2) {
3960
- // Extract all paths (keys) both records
3961
- const paths1 = Object.keys(record1);
3962
- const paths2 = Object.keys(record2);
3963
- // Find all parent paths in record2
3964
- const parentPaths = new Set(paths2
3965
- .filter((path) => path.split('/').length > 2) // Only consider paths with more than one level
3966
- .map((path) => path.substring(0, path.lastIndexOf('/'))));
3967
- // Filter out keys in record1 that share a parent path with any of the identified parent paths
3968
- const filteredRecord = Object.fromEntries(paths1
3969
- .filter((path) => !parentPaths.has(path.substring(0, path.lastIndexOf('/'))))
3970
- .map((path) => [path, record1[path]]));
3971
- return filteredRecord;
3972
- }
3973
- function mergeFacetRoots(fieldName, currentRoot, incomingRoot) {
3974
- const currentArray = currentRoot[fieldName];
3975
- const incomingArray = incomingRoot[fieldName];
3976
- const currentRootFacetChild = {
3977
- count: 0,
3952
+ const facetWithChildrenArrayToCompleteFacetTree = (rootArray) => {
3953
+ // 1) Start with an empty tree at root "/"
3954
+ const tree = {
3978
3955
  path: '/',
3979
- children: currentArray,
3980
- };
3981
- const incomingRootFacetChild = {
3982
3956
  count: 0,
3983
- path: '/',
3984
- children: incomingArray,
3957
+ children: {},
3985
3958
  };
3986
- // Flatten them into records
3987
- const currentRecord = facetToRecord(currentRootFacetChild);
3988
- const incomingRecord = facetToRecord(incomingRootFacetChild);
3989
- // Filter out the records from record1 (the current set of records)
3990
- // that share a parent path with record2 (the incoming records)
3991
- const filteredCurrentRecord = filterRecordByParentPaths(currentRecord, incomingRecord);
3992
- // Deep merge the records together
3993
- const mergedRecord = deepMergeWithSpread(filteredCurrentRecord, incomingRecord);
3994
- // Convert into a heirarchical object
3995
- const mergedObject = recordToObject(mergedRecord);
3996
- // Convert the heirarchical object back to the Facet child structure
3997
- const mergedFacetChild = objectToFacet(mergedObject);
3998
- return {
3999
- [fieldName]: mergedFacetChild.children,
3959
+ // 2) Recursively collect all nodes except the implicit "/" itself
3960
+ const allFacets = [];
3961
+ const collect = (node) => {
3962
+ if (node.path !== '/') {
3963
+ allFacets.push({ path: node.path, count: node.count });
3964
+ }
3965
+ if (node.children) {
3966
+ for (const child of node.children) {
3967
+ collect(child);
3968
+ }
3969
+ }
4000
3970
  };
4001
- }
3971
+ collect(rootArray);
3972
+ // 3) Insert each flat node into our tree, creating missing ancestors
3973
+ for (const { path, count } of allFacets) {
3974
+ const segments = path.split('/').filter(Boolean); // "/sports/outdoors" -> ["sports","outdoors"]
3975
+ let cursor = tree; // start at the root
3976
+ for (const segment of segments) {
3977
+ // Build the full path of this level
3978
+ const prefixPath = cursor.path === '/' ? `/${segment}` : `${cursor.path}/${segment}`;
3979
+ // If this segment doesn't exist yet, create it
3980
+ if (!cursor.children[segment]) {
3981
+ cursor.children[segment] = {
3982
+ path: prefixPath,
3983
+ count: count,
3984
+ children: {},
3985
+ };
3986
+ }
3987
+ // Descend to the next level deeper
3988
+ cursor = cursor.children[segment];
3989
+ }
3990
+ // 4) now `cursor` is the node matching `path` — assign its real count
3991
+ cursor.count = count;
3992
+ }
3993
+ return tree;
3994
+ };
4002
3995
 
4003
3996
  /**
4004
3997
  * Given a document and a SearchResultMapping, return a mapped value from the document.
@@ -4031,30 +4024,6 @@ function getDocumentValueFromSearchResultMapping(document, mapping) {
4031
4024
  .join(mapping.delimiter || ' ');
4032
4025
  }
4033
4026
  }
4034
- /**
4035
- * Convert different units of time to milliseconds.
4036
- *
4037
- * @param unit - The unit of time
4038
- * @returns {number}
4039
- */
4040
- function getMillis(unit) {
4041
- const millisInHour = 60 * 60 * 1000;
4042
- const millisInDay = 24 * millisInHour;
4043
- const millisInMonth = 30 * millisInDay;
4044
- const millisInYear = 365 * millisInDay;
4045
- switch (unit) {
4046
- case 'hour':
4047
- return millisInHour;
4048
- case 'day':
4049
- return millisInDay;
4050
- case 'month':
4051
- return millisInMonth;
4052
- case 'year':
4053
- return millisInYear;
4054
- default:
4055
- return 3600000;
4056
- }
4057
- }
4058
4027
  /**
4059
4028
  * Format a number with commas as thousands separators.
4060
4029
  *
@@ -4101,6 +4070,107 @@ function formatRelativeDate(dateInput, locale = 'en-US', options = {
4101
4070
  }
4102
4071
  return new Intl.DateTimeFormat(locale, options).format(date);
4103
4072
  }
4073
+ /**
4074
+ * Given a date, returns the timestamp (in ms) for the start of the specified unit.
4075
+ *
4076
+ * @param unit - The unit to calculate the start of ('year' | 'month' | 'day' | 'hour').
4077
+ * @param timestamp - The date to evaluate.
4078
+ * @param offset - The number of units to offset by.
4079
+ * @returns The timestamp (in ms) for the start of the specified unit.
4080
+ */
4081
+ function getStartOf(timestamp, unit, offset = 0) {
4082
+ const d = new Date(timestamp);
4083
+ switch (unit) {
4084
+ case 'year':
4085
+ return new Date(d.getFullYear() + offset, 0, 1, 0, 0, 0, 0).getTime();
4086
+ case 'month':
4087
+ return new Date(d.getFullYear(), d.getMonth() + offset, 1, 0, 0, 0, 0).getTime();
4088
+ case 'day':
4089
+ return new Date(d.getFullYear(), d.getMonth(), d.getDate() + offset, 0, 0, 0, 0).getTime();
4090
+ case 'hour':
4091
+ return new Date(d.getFullYear(), d.getMonth(), d.getDate(), d.getHours() + offset, 0, 0, 0).getTime();
4092
+ default:
4093
+ throw new Error(`Unsupported unit: ${unit}`);
4094
+ }
4095
+ }
4096
+ /**
4097
+ * Given a start and end date, returns the difference in the number of the specified units.
4098
+ *
4099
+ * @param units - The unit to measure ('year' | 'month' | 'day' | 'hour').
4100
+ * @param startDate - The start date.
4101
+ * @param endDate - The end date.
4102
+ * @returns The difference in the given unit.
4103
+ */
4104
+ function getDifferenceInUnits(unit, startTime, endTime) {
4105
+ const start = new Date(startTime);
4106
+ const end = new Date(endTime);
4107
+ switch (unit) {
4108
+ case 'year':
4109
+ return Math.abs(end.getFullYear() - start.getFullYear());
4110
+ case 'month':
4111
+ return Math.abs(end.getFullYear() * 12 +
4112
+ end.getMonth() -
4113
+ (start.getFullYear() * 12 + start.getMonth()));
4114
+ case 'day':
4115
+ return Math.floor(Math.abs(end.getTime() - start.getTime()) / (1000 * 60 * 60 * 24));
4116
+ case 'hour':
4117
+ return Math.floor(Math.abs(end.getTime() - start.getTime()) / (1000 * 60 * 60));
4118
+ default:
4119
+ throw new Error(`Unsupported unit: ${unit}`);
4120
+ }
4121
+ }
4122
+ /**
4123
+ * Returns the ordinal representation of a day of the month.
4124
+ */
4125
+ const getOrdinal = (n) => {
4126
+ if (n >= 11 && n <= 13)
4127
+ return `${n}th`;
4128
+ switch (n % 10) {
4129
+ case 1:
4130
+ return `${n}st`;
4131
+ case 2:
4132
+ return `${n}nd`;
4133
+ case 3:
4134
+ return `${n}rd`;
4135
+ default:
4136
+ return `${n}th`;
4137
+ }
4138
+ };
4139
+ /**
4140
+ * Given a granularity level, returns a formatted, human-readable, date string.
4141
+ *
4142
+ * @param granularity - The granularity level to display. The granularity level dictates how the date is formatted.
4143
+ * @param date - The date to format.
4144
+ *
4145
+ * @returns A formatted string representing the date at the specified granularity.
4146
+ *
4147
+ * @example
4148
+ * getFormattedDateString('year', new Date('2023-01-01')) // "2023"
4149
+ * getFormattedDateString('month', new Date('2023-01-01')) // "Jan 2023"
4150
+ * getFormattedDateString('day', new Date('2023-01-31')) // "Jan 31st, 2023"
4151
+ * getFormattedDateString('hour', new Date('2023-01-31T12:00:00')) // "Jan 31st, 12:00 PM"
4152
+ */
4153
+ function getFormattedDateString(granularity, date) {
4154
+ const monthFormatter = new Intl.DateTimeFormat('en-US', { month: 'short' });
4155
+ switch (granularity) {
4156
+ case 'year':
4157
+ return date.getFullYear().toString();
4158
+ case 'month':
4159
+ return `${monthFormatter.format(date)} ${date.getFullYear()}`;
4160
+ case 'day':
4161
+ return `${monthFormatter.format(date)} ${getOrdinal(date.getDate())}, ${date.getFullYear()}`;
4162
+ case 'hour': {
4163
+ const timeFormatter = new Intl.DateTimeFormat('en-US', {
4164
+ hour: 'numeric',
4165
+ minute: '2-digit',
4166
+ hour12: true,
4167
+ });
4168
+ return `${monthFormatter.format(date)} ${getOrdinal(date.getDate())}, ${timeFormatter.format(date)}`;
4169
+ }
4170
+ default:
4171
+ throw new Error(`Unsupported granularity: ${granularity}`);
4172
+ }
4173
+ }
4104
4174
 
4105
4175
  var purify = {exports: {}};
4106
4176
 
@@ -5495,53 +5565,110 @@ class SearchcraftFacetList {
5495
5565
  */
5496
5566
  fieldName = '';
5497
5567
  /**
5498
- * When the facets are updated.
5568
+ * Emitted when the facets are updated.
5499
5569
  */
5500
5570
  facetSelectionUpdated;
5501
- baseFacetRoot;
5502
- facetRoot;
5571
+ /**
5572
+ * A Tree Representing all of the facets we know about to be rendered.
5573
+ */
5574
+ facetTree = {
5575
+ path: '/',
5576
+ count: 0,
5577
+ children: {},
5578
+ };
5579
+ /**
5580
+ * The currently selected facet paths.
5581
+ */
5503
5582
  selectedPaths = {};
5583
+ // Internal vars used to track when to perform various facet actions.
5504
5584
  lastTimeTaken;
5505
- hasNewSearchTerm = false;
5506
5585
  lastSearchTerm;
5507
5586
  lastSearchMode;
5508
5587
  lastSortType;
5588
+ lastRangeValues;
5589
+ lastFacetValues;
5509
5590
  unsubscribe;
5510
- searchStore = searchcraftStore.getState();
5511
- handleStateUpdate(state) {
5512
- const facetPrime = state.searchResponseFacetPrime;
5513
- const timeTaken = state.searchResponseTimeTaken;
5514
- if (!this.fieldName) {
5515
- return;
5591
+ handleIncomingSearchResponse(state, actionType) {
5592
+ // Look at the incoming facet root from the search response, and convert it to a FacetTree
5593
+ const incomingFacetRoot = state.searchResponseFacetPrime?.find((facet) => this.fieldName === Object.keys(facet)[0]);
5594
+ const incomingFacetsWithChildrenArray = incomingFacetRoot?.[this.fieldName];
5595
+ const incomingFacetTree = facetWithChildrenArrayToCompleteFacetTree({
5596
+ path: '/',
5597
+ count: 0,
5598
+ children: incomingFacetsWithChildrenArray || [],
5599
+ });
5600
+ // Determine what action to take (merge with existing FacetTree vs overwrite FacetTree)
5601
+ switch (actionType) {
5602
+ case 'SEARCH_TERM_EMPTY':
5603
+ this.facetTree = {
5604
+ path: '/',
5605
+ count: 0,
5606
+ children: {},
5607
+ };
5608
+ break;
5609
+ case 'NEW_SEARCH_TERM':
5610
+ this.facetTree = incomingFacetTree;
5611
+ break;
5612
+ case 'EXACT_MATCH_UPDATE':
5613
+ case 'RANGE_VALUE_UPDATE': {
5614
+ if (state.supplementalFacetPrime) {
5615
+ const supplementalFacetRoot = state.supplementalFacetPrime?.find((facet) => this.fieldName === Object.keys(facet)[0]);
5616
+ const supplementalFacetsWithChildrenArray = supplementalFacetRoot?.[this.fieldName];
5617
+ const supplementalFacetTree = facetWithChildrenArrayToCompleteFacetTree({
5618
+ path: '/',
5619
+ count: 0,
5620
+ children: supplementalFacetsWithChildrenArray || [],
5621
+ });
5622
+ this.facetTree = mergeFacetTrees(supplementalFacetTree, incomingFacetTree);
5623
+ }
5624
+ else {
5625
+ this.facetTree = incomingFacetTree;
5626
+ }
5627
+ break;
5628
+ }
5629
+ case 'FACET_UPDATE':
5630
+ case 'SORT_ORDER_UPDATE':
5631
+ this.facetTree = mergeFacetTrees(this.facetTree, incomingFacetTree);
5632
+ break;
5633
+ default:
5634
+ this.facetTree = mergeFacetTrees(this.facetTree, incomingFacetTree);
5516
5635
  }
5517
- /** Things to do when the state's search term has changed, but before the response received */
5518
- if (state.searchTerm !== this.lastSearchTerm ||
5519
- state.searchMode !== this.lastSearchMode) {
5520
- this.selectedPaths = {};
5521
- this.hasNewSearchTerm = true;
5522
- }
5523
- /** Things to do when a new response with a new facet prime has been received */
5524
- if (timeTaken !== this.lastTimeTaken && facetPrime) {
5525
- this.facetRoot = undefined;
5526
- const incomingFacetRoot = facetPrime.find((facet) => this.fieldName === Object.keys(facet)[0]);
5527
- /** Data is from a new search term: completely override our facets */
5528
- if (this.hasNewSearchTerm) {
5529
- this.baseFacetRoot = incomingFacetRoot;
5530
- this.facetRoot = incomingFacetRoot;
5531
- this.hasNewSearchTerm = false;
5636
+ }
5637
+ handleStateUpdate(state) {
5638
+ // Determine what action to take based on the current State
5639
+ if (this.lastSearchTerm !== state.searchTerm &&
5640
+ state.searchTerm.trim() === '') {
5641
+ this.handleIncomingSearchResponse(state, 'SEARCH_TERM_EMPTY');
5642
+ }
5643
+ else if (this.lastTimeTaken !== state.searchResponseTimeTaken) {
5644
+ let actionType = 'UNKNOWN';
5645
+ if (this.lastSearchTerm !== state.searchTerm) {
5646
+ actionType = 'NEW_SEARCH_TERM';
5647
+ }
5648
+ else if (this.lastRangeValues !== JSON.stringify(state.rangeValueForIndexFields)) {
5649
+ actionType = 'RANGE_VALUE_UPDATE';
5532
5650
  }
5533
- else if (this.baseFacetRoot && incomingFacetRoot) {
5534
- /** Data is from an existing search term, merge the facets together */
5535
- this.facetRoot = mergeFacetRoots(this.fieldName, this.baseFacetRoot, incomingFacetRoot);
5651
+ else if (this.lastFacetValues !== JSON.stringify(state.facetPathsForIndexFields)) {
5652
+ actionType = 'FACET_UPDATE';
5536
5653
  }
5654
+ else if (this.lastSortType !== state.sortType) {
5655
+ actionType = 'SORT_ORDER_UPDATE';
5656
+ }
5657
+ else if (this.lastSearchMode !== state.searchMode) {
5658
+ actionType = 'EXACT_MATCH_UPDATE';
5659
+ }
5660
+ // Handle the incoming response, using the action we have determined.
5661
+ this.handleIncomingSearchResponse(state, actionType);
5662
+ this.lastSearchTerm = state.searchTerm;
5663
+ this.lastRangeValues = JSON.stringify(state.rangeValueForIndexFields);
5664
+ this.lastFacetValues = JSON.stringify(state.facetPathsForIndexFields);
5665
+ this.lastSortType = state.sortType;
5666
+ this.lastSearchMode = state.searchMode;
5537
5667
  }
5538
- this.lastSearchTerm = state.searchTerm;
5539
- this.lastSearchMode = state.searchMode;
5540
- this.lastSortType = state.sortType;
5541
- this.lastTimeTaken = timeTaken;
5668
+ this.lastTimeTaken = state.searchResponseTimeTaken;
5542
5669
  }
5543
5670
  connectedCallback() {
5544
- this.handleStateUpdate(this.searchStore);
5671
+ this.handleStateUpdate(searchcraftStore.getState());
5545
5672
  this.unsubscribe = searchcraftStore.subscribe((state) => {
5546
5673
  this.handleStateUpdate(state);
5547
5674
  });
@@ -5578,44 +5705,55 @@ class SearchcraftFacetList {
5578
5705
  const pathsWithParentPathsRemoved = removeSubstringMatches(paths);
5579
5706
  this.facetSelectionUpdated?.emit({ paths: pathsWithParentPathsRemoved });
5580
5707
  }
5581
- formatLabel = (facetChild) => {
5582
- const label = facetChild.path.replace(/^\//, '');
5583
- const count = facetChild.count;
5584
- return `${label.replace(/-/g, ' ').replace(/\b\w/g, (char) => char.toUpperCase())} (${count})`;
5585
- };
5586
- formatSubLabel = (facetChild, facetChildAncestor) => {
5587
- const facetChildPath = facetChild.path.substring(facetChildAncestor.path.length);
5588
- const label = facetChildPath.replace(/^\//, '');
5589
- const count = facetChild.count;
5590
- return `${label.replace(/-/g, ' ').replace(/\b\w/g, (char) => char.toUpperCase())} (${count})`;
5708
+ formatFacetName = (name) => {
5709
+ const label = name.replace(/^\//, '');
5710
+ return `${label.replace(/-/g, ' ').replace(/\b\w/g, (char) => char.toUpperCase())}`;
5591
5711
  };
5712
+ renderFacet(keyName, facet) {
5713
+ let isChildSelected = false;
5714
+ for (const path of Object.keys(this.selectedPaths)) {
5715
+ if (this.selectedPaths[path] &&
5716
+ path.startsWith(facet.path) &&
5717
+ path.length > facet.path.length) {
5718
+ isChildSelected = true;
5719
+ }
5720
+ }
5721
+ const isSelected = Object.keys(this.selectedPaths).includes(facet.path);
5722
+ const shouldRenderChildren = (Object.keys(facet.children).length > 0 &&
5723
+ (isSelected || isChildSelected)) ||
5724
+ keyName === '@@root';
5725
+ return (hAsync("div", { class: 'searchcraft-facet-list-item' }, keyName !== '@@root' && (hAsync("label", { class: 'searchcraft-facet-list-checkbox-label' }, hAsync("div", { class: 'searchcraft-facet-list-checkbox-input-wrapper' }, hAsync("input", { class: 'searchcraft-facet-list-checkbox-input', checked: this.selectedPaths[facet.path], onChange: (_event) => {
5726
+ this.handleCheckboxChange(facet.path);
5727
+ }, type: 'checkbox' }), isChildSelected ? (hAsync("div", { class: 'searchcraft-facet-list-checkbox-input-dash-icon' }, hAsync("svg", { viewBox: '0 0 14 3', fill: 'none' }, hAsync("title", null, "Checkbox dash"), hAsync("line", { x1: '1.5', y1: '1.5', x2: '12.5', y2: '1.5', stroke: 'white', "stroke-width": '3', "stroke-linecap": 'round' })))) : (hAsync("div", { class: 'searchcraft-facet-list-checkbox-input-check-icon' }, hAsync("svg", { width: '16', height: '16', viewBox: '0 0 16 16', fill: 'none' }, hAsync("title", null, "Checkbox check"), hAsync("path", { d: 'M13.9999 2L5.74988 10L1.99988 6.36364', stroke: 'white', "stroke-width": '3', "stroke-linecap": 'round', "stroke-linejoin": 'round' }))))), hAsync("span", null, this.formatFacetName(keyName), " (", facet.count, ")"))), shouldRenderChildren && (hAsync("div", { class: 'searchcraft-facet-list', style: {
5728
+ paddingLeft: keyName !== '@@root' ? '24px' : '0px',
5729
+ paddingTop: keyName !== '@@root' ? '6px' : '0px',
5730
+ } }, Object.keys(facet.children).map((key) => {
5731
+ if (facet.children[key]) {
5732
+ return this.renderFacet(key, facet.children[key]);
5733
+ }
5734
+ })))));
5735
+ }
5592
5736
  render() {
5593
5737
  if (!this.fieldName) {
5594
5738
  return;
5595
5739
  }
5596
- const firstFacet = this.facetRoot?.[this.fieldName];
5597
- return (hAsync("div", { class: 'searchcraft-facet-list' }, !firstFacet && (hAsync("p", { class: 'searchcraft-facet-list-message' }, "Enter a search to view facets.")), firstFacet?.map((facetChild) => {
5598
- const isChildSelected = facetChild.children
5599
- ? facetChild.children?.some((child) => this.selectedPaths[child.path])
5600
- : false;
5601
- return (hAsync("div", { key: facetChild.path, class: 'searchcraft-facet-list-item' }, hAsync("label", { class: 'searchcraft-facet-list-checkbox-label' }, hAsync("div", { class: 'searchcraft-facet-list-checkbox-input-wrapper' }, hAsync("input", { class: 'searchcraft-facet-list-checkbox-input', checked: this.selectedPaths[facetChild.path], onChange: (_event) => this.handleCheckboxChange(facetChild.path), type: 'checkbox' }), isChildSelected ? (hAsync("div", { class: 'searchcraft-facet-list-checkbox-input-dash-icon' }, hAsync("svg", { width: '14', height: '3', viewBox: '0 0 14 3', fill: 'none' }, hAsync("title", null, "Checkbox dash"), hAsync("line", { x1: '1.5', y1: '1.5', x2: '12.5', y2: '1.5', stroke: 'white', "stroke-width": '3', "stroke-linecap": 'round' })))) : (hAsync("div", { class: 'searchcraft-facet-list-checkbox-input-check-icon' }, hAsync("svg", { width: '16', height: '16', viewBox: '0 0 16 16', fill: 'none' }, hAsync("title", null, "Checkbox check"), hAsync("path", { d: 'M13.9999 2L5.74988 10L1.99988 6.36364', stroke: 'white', "stroke-width": '3', "stroke-linecap": 'round', "stroke-linejoin": 'round' }))))), this.formatLabel(facetChild)), facetChild.children && facetChild.children.length > 0 && (hAsync("div", { class: 'searchcraft-facet-child-list' }, facetChild.children.map((grandchild) => (hAsync("label", { key: grandchild.path, class: 'searchcraft-facet-list-checkbox-label searchcraft-facet-child-list-checkbox-label', style: {
5602
- display: this.selectedPaths[facetChild.path]
5603
- ? 'flex'
5604
- : 'none',
5605
- } }, hAsync("div", { class: 'searchcraft-facet-list-checkbox-input-wrapper searchcraft-facet-child-list-checkbox-input-wrapper' }, hAsync("input", { class: 'searchcraft-facet-list-checkbox-input searchcraft-facet-child-list-checkbox-input', checked: this.selectedPaths[grandchild.path], onChange: (_event) => {
5606
- this.handleCheckboxChange(grandchild.path);
5607
- }, type: 'checkbox' }), hAsync("div", { class: 'searchcraft-facet-list-checkbox-input-check-icon searchcraft-facet-child-list-checkbox-input-check-icon' }, hAsync("svg", { width: '16', height: '16', viewBox: '0 0 16 16', fill: 'none' }, hAsync("title", null, "Checkbox check"), hAsync("path", { d: 'M13.9999 2L5.74988 10L1.99988 6.36364', stroke: 'white', "stroke-width": '3', "stroke-linecap": 'round', "stroke-linejoin": 'round' })))), this.formatSubLabel(grandchild, facetChild))))))));
5608
- })));
5740
+ if (Object.keys(this.facetTree.children).length === 0 &&
5741
+ (this.lastSearchTerm || '').trim().length === 0) {
5742
+ return;
5743
+ }
5744
+ if (Object.keys(this.facetTree.children).length === 0 &&
5745
+ (this.lastSearchTerm || '').trim().length > 0) {
5746
+ return (hAsync("p", { class: 'searchcraft-facet-list-message' }, "No facets are available for this search query."));
5747
+ }
5748
+ return (hAsync("div", { class: 'searchcraft-facet-list' }, this.renderFacet('@@root', this.facetTree)));
5609
5749
  }
5610
5750
  static get cmpMeta() { return {
5611
5751
  "$flags$": 0,
5612
5752
  "$tagName$": "searchcraft-facet-list",
5613
5753
  "$members$": {
5614
5754
  "fieldName": [1, "field-name"],
5615
- "baseFacetRoot": [32],
5616
- "facetRoot": [32],
5617
- "selectedPaths": [32],
5618
- "lastTimeTaken": [32]
5755
+ "facetTree": [32],
5756
+ "selectedPaths": [32]
5619
5757
  },
5620
5758
  "$listeners$": undefined,
5621
5759
  "$lazyBundleId$": "-",
@@ -5680,12 +5818,12 @@ class SearchcraftFilterPanel {
5680
5818
  disconnectedCallback() {
5681
5819
  this.unsubscribe?.();
5682
5820
  }
5683
- handleDateRangeChanged(fieldName, min, max) {
5684
- const start = new Date(new Date(min).getFullYear(), 0, 1);
5685
- const end = new Date(new Date(max).getFullYear() + 1, 0, 0);
5821
+ handleDateRangeChanged(item, min, max) {
5822
+ const start = new Date(min);
5823
+ const end = new Date(max);
5686
5824
  this.searchStore.addRangeValueForIndexField({
5687
- fieldName,
5688
- value: `${fieldName}:[${start.toISOString()} TO ${end.toISOString()}]`,
5825
+ fieldName: item.fieldName,
5826
+ value: `${item.fieldName}:[${start.toISOString()} TO ${end.toISOString()}]`,
5689
5827
  });
5690
5828
  this.searchStore.search();
5691
5829
  }
@@ -5731,22 +5869,19 @@ class SearchcraftFilterPanel {
5731
5869
  * Iterate through `items` and render them based on `type`
5732
5870
  */
5733
5871
  render() {
5734
- return (hAsync("div", { key: '7f15e8f1a2e1be763118f9cd4ded34cf7e2902d0', class: 'searchcraft-filter-panel' }, this.items.map((filterItem) => {
5872
+ return (hAsync("div", { key: 'fb5fce357783f39b0a2846a0bd99994faa5e742d', class: 'searchcraft-filter-panel' }, this.items.map((filterItem) => {
5735
5873
  switch (filterItem.type) {
5736
5874
  case 'dateRange': {
5737
5875
  const item = filterItem;
5738
- const min = new Date(item.options.minDate).getTime();
5739
- const max = new Date(item.options.maxDate).getTime();
5740
- const granularityValue = getMillis(item.options.granularity);
5741
5876
  // return date range slider
5742
- return (hAsync("div", { class: 'searchcraft-filter-panel-section' }, hAsync("p", { class: 'searchcraft-filter-panel-label' }, filterItem.label), hAsync("searchcraft-slider", { min: min, max: max, granularity: granularityValue, dataType: 'date', onRangeChanged: (event) => {
5743
- this.handleDateRangeChanged(item.fieldName, event.detail.startValue, event.detail.endValue);
5877
+ return (hAsync("div", { class: 'searchcraft-filter-panel-section' }, hAsync("p", { class: 'searchcraft-filter-panel-label' }, filterItem.label), hAsync("searchcraft-slider", { min: item.options.minDate.getTime(), max: item.options.maxDate.getTime(), dataType: 'date', step: 1, dateGranularity: item.options.granularity, onRangeChanged: (event) => {
5878
+ this.handleDateRangeChanged(item, event.detail.startValue, event.detail.endValue);
5744
5879
  } })));
5745
5880
  }
5746
5881
  case 'numericRange': {
5747
5882
  const item = filterItem;
5748
5883
  // return date range slider
5749
- return (hAsync("div", { class: 'searchcraft-filter-panel-section' }, hAsync("p", { class: 'searchcraft-filter-panel-label' }, filterItem.label), hAsync("searchcraft-slider", { min: item.options.min, max: item.options.max, granularity: item.options.granularity, onRangeChanged: (event) => {
5884
+ return (hAsync("div", { class: 'searchcraft-filter-panel-section' }, hAsync("p", { class: 'searchcraft-filter-panel-label' }, filterItem.label), hAsync("searchcraft-slider", { min: item.options.min, max: item.options.max, step: item.options.granularity, onRangeChanged: (event) => {
5750
5885
  this.handleNumericRangeChanged(item.fieldName, event.detail.startValue, event.detail.endValue);
5751
5886
  } })));
5752
5887
  }
@@ -5842,6 +5977,12 @@ class SearchcraftInputForm {
5842
5977
  * The input element's placeholder value.
5843
5978
  */
5844
5979
  placeholderValue = 'Enter Search';
5980
+ /**
5981
+ * The placeholder's render behavior.
5982
+ * 'hide-on-focus' - Hide the placeholder text immediately when the input form gains focus.
5983
+ * 'hide-on-text-entered' - Only hide the placeholder when the input form has text entered into it.
5984
+ */
5985
+ placeholderBehavior;
5845
5986
  /**
5846
5987
  * When the input becomes focused.
5847
5988
  */
@@ -5928,9 +6069,11 @@ class SearchcraftInputForm {
5928
6069
  const inputGridStyles = {
5929
6070
  gap: shouldHaveVerticalGap ? '4px 8px' : '0px 8px',
5930
6071
  };
5931
- return (hAsync("form", { key: '6af89b2ab634e0f3e0ef575f98f33d091602f95a', class: 'searchcraft-input-form', onSubmit: this.handleFormSubmit }, hAsync("div", { key: '93fea8e2b80468afeb6014122d5b749d74bfaf35', class: inputGridClassNames, style: inputGridStyles }, hAsync("div", { key: '1e5a416843b99aec68c4672a9c78f607347dc9d1', class: 'searchcraft-input-form-button' }, hAsync("searchcraft-button", { key: 'c38c1df0ce20f914ed76fbc0acad5a22b40e6fff', onButtonClick: this.handleFormSubmit, label: this.buttonLabel })), this.inputLabel && (hAsync("div", { key: '2169a4466b0fdc8075c0dc74da442aef28a84d65', class: 'searchcraft-input-form-label' }, hAsync("searchcraft-input-label", { key: 'a263b5aa2a4d50d297f06c1fe9e6afb64763f097', label: this.inputLabel }))), this.error && (hAsync("div", { key: '49be2ac0f2d01916e5ea533e6406ee9d4d932178', class: 'searchcraft-input-form-error-message' }, hAsync("searchcraft-error-message", { key: '310c9aebcf580d4abe92d288c6b70a5adf083f8e' }, "Something went wrong."))), hAsync("div", { key: 'f4702e368815e049586e97cf59541b2dc5460fc0', class: 'searchcraft-input-form-input-wrapper' }, hAsync("input", { key: 'a8cddd5e937eee1d30fb98eaaa3dbffe96c192ce', autoComplete: 'off', class: 'searchcraft-input-form-input', onFocus: () => this.inputFocus?.emit(), onBlur: () => this.inputBlur?.emit(), onInput: (event) => {
6072
+ return (hAsync("form", { key: '7f3fe524949a5940d2852ef8fe510ab0c0b910f1', class: 'searchcraft-input-form', onSubmit: this.handleFormSubmit }, hAsync("div", { key: '12a137ff4ecaab2a047cb787c878ddf0ed973d3f', class: inputGridClassNames, style: inputGridStyles }, hAsync("div", { key: '12c7dadcc6fa22467a5165c10e12a0e343ea2ed3', class: 'searchcraft-input-form-button' }, hAsync("searchcraft-button", { key: '477fe1299556e5c5bc6b902de65c71f11aad97ac', onButtonClick: this.handleFormSubmit, label: this.buttonLabel })), this.inputLabel && (hAsync("div", { key: 'cf04132b3a95943fe8371f64778130c3f8bbc379', class: 'searchcraft-input-form-label' }, hAsync("searchcraft-input-label", { key: 'b840d1b65c1fc11879cf25bcc88022eafa583109', label: this.inputLabel }))), this.error && (hAsync("div", { key: 'ed9a441bfd57cab076f8218e1f7d4baecf5e9ce2', class: 'searchcraft-input-form-error-message' }, hAsync("searchcraft-error-message", { key: '9624592768ab3cc0c683f5636b83022349af66cd' }, "Something went wrong."))), hAsync("div", { key: '99f06b4c38b4cc26f534a3f3be6a7c23b5946c62', class: 'searchcraft-input-form-input-wrapper' }, hAsync("input", { key: '90fe4eca0771ca15378685861ae0bd700110ac15', autoComplete: 'off', class: classNames('searchcraft-input-form-input', {
6073
+ 'searchcraft-placeholder-hide-on-focus': this.placeholderBehavior === 'hide-on-focus',
6074
+ }), onFocus: () => this.inputFocus?.emit(), onBlur: () => this.inputBlur?.emit(), onInput: (event) => {
5932
6075
  this.handleInput(event);
5933
- }, placeholder: this.placeholderValue, type: 'text', value: this.inputValue }), hAsync("div", { key: '616b4dde1ba016cf6a2fba8594a99a3a3f584ef5', class: 'searchcraft-input-form-input-icon' }, hAsync("svg", { key: 'daaef561677a06a76813375e429be7e053b8b122', class: 'searchcraft-input-form-input-search-icon', viewBox: '0 0 20 20', fill: 'none', xmlns: 'http://www.w3.org/2000/svg', "aria-labelledby": 'searchcraft-title' }, hAsync("title", { key: 'e6d82ca64dd9bfc663813c239d11e5652aa0b9a1' }, "Search icon"), hAsync("path", { key: '1df856c98c2063c1d0c80027255935f73b513939', d: 'M17.5 17.5L13.875 13.875M15.8333 9.16667C15.8333 12.8486 12.8486 15.8333 9.16667 15.8333C5.48477 15.8333 2.5 12.8486 2.5 9.16667C2.5 5.48477 5.48477 2.5 9.16667 2.5C12.8486 2.5 15.8333 5.48477 15.8333 9.16667Z', stroke: 'currentColor', "stroke-width": '1.5', "stroke-linecap": 'round', "stroke-linejoin": 'round' }))), isShowingClearButton && (hAsync("button", { key: '8dd6dfefe0ba909657bd436b559ce35b5004f9ae', type: 'button', class: 'searchcraft-input-form-clear-button', onClick: this.handleClearInput }, hAsync("svg", { key: 'bcdba04d5c0949cacc8e1962d2b3cd40ad995de6', class: 'searchcraft-input-form-clear-icon', viewBox: '0 0 22 22', fill: 'none', xmlns: 'http://www.w3.org/2000/svg', "aria-labelledby": 'icon-title' }, hAsync("title", { key: 'e01e7fb9b23daf9434520c4c68c0d7539b37d1f8' }, "Clear icon"), hAsync("path", { key: 'ce526d332b6e352cd9cf6008ee2f7497c6769782', d: 'M14 8L8 14M8 8L14 14M21 11C21 16.5228 16.5228 21 11 21C5.47715 21 1 16.5228 1 11C1 5.47715 5.47715 1 11 1C16.5228 1 21 5.47715 21 11Z', stroke: 'currentColor', "stroke-width": '1.5', "stroke-linecap": 'round', "stroke-linejoin": 'round' }))))))));
6076
+ }, placeholder: this.placeholderValue, type: 'text', value: this.inputValue }), hAsync("div", { key: '81a377845c20ba1ea8ed2ff73469026c7b2dc16a', class: 'searchcraft-input-form-input-icon' }, hAsync("svg", { key: '06e127c9878b65c17a72ae75841c9b5a1eec6197', class: 'searchcraft-input-form-input-search-icon', viewBox: '0 0 20 20', fill: 'none', xmlns: 'http://www.w3.org/2000/svg', "aria-labelledby": 'searchcraft-title' }, hAsync("title", { key: '37ebce26440a6e3fcdad1b342412b0aaec5e690c' }, "Search icon"), hAsync("path", { key: '3c5bcab0759d52e05a5f07ef27396461cf3b626c', d: 'M17.5 17.5L13.875 13.875M15.8333 9.16667C15.8333 12.8486 12.8486 15.8333 9.16667 15.8333C5.48477 15.8333 2.5 12.8486 2.5 9.16667C2.5 5.48477 5.48477 2.5 9.16667 2.5C12.8486 2.5 15.8333 5.48477 15.8333 9.16667Z', stroke: 'currentColor', "stroke-width": '1.5', "stroke-linecap": 'round', "stroke-linejoin": 'round' }))), isShowingClearButton && (hAsync("button", { key: 'bbca17429ef3de340d7ee064e71c3858abc1022a', type: 'button', class: 'searchcraft-input-form-clear-button', onClick: this.handleClearInput }, hAsync("svg", { key: '94eee54f0735020bf77f56607bb870888d5a23e9', class: 'searchcraft-input-form-clear-icon', viewBox: '0 0 22 22', fill: 'none', xmlns: 'http://www.w3.org/2000/svg', "aria-labelledby": 'icon-title' }, hAsync("title", { key: '5f7e9beb4f2c4c394f19cc2c312be59de166a0c8' }, "Clear icon"), hAsync("path", { key: '138c29ea054bd535d0a8b5cb708bbea31d21c40a', d: 'M14 8L8 14M8 8L14 14M21 11C21 16.5228 16.5228 21 11 21C5.47715 21 1 16.5228 1 11C1 5.47715 5.47715 1 11 1C16.5228 1 21 5.47715 21 11Z', stroke: 'currentColor', "stroke-width": '1.5', "stroke-linecap": 'round', "stroke-linejoin": 'round' }))))))));
5934
6077
  }
5935
6078
  static get watchers() { return {
5936
6079
  "core": ["onCoreChange"]
@@ -5944,6 +6087,7 @@ class SearchcraftInputForm {
5944
6087
  "buttonLabel": [1, "button-label"],
5945
6088
  "inputLabel": [1, "input-label"],
5946
6089
  "placeholderValue": [1, "placeholder-value"],
6090
+ "placeholderBehavior": [1, "placeholder-behavior"],
5947
6091
  "core": [16],
5948
6092
  "inputValue": [32],
5949
6093
  "searchTerm": [32],
@@ -7579,6 +7723,43 @@ class SearchcraftSelect {
7579
7723
  }; }
7580
7724
  }
7581
7725
 
7726
+ /**
7727
+ * Creates a throttled version of the given function that only invokes
7728
+ * the original function at most once every specified number of milliseconds.
7729
+ *
7730
+ * The logic is written in a way that the last invocation is always called, after the
7731
+ * throttle cooldown period has ended.
7732
+ *
7733
+ * @template Arguments - The argument types for the function to throttle
7734
+ * @param callback - The function to throttle
7735
+ * @param delayInMilliseconds - The number of milliseconds to wait before allowing the next invocation
7736
+ * @returns A throttled version of the original function
7737
+ */
7738
+ function throttle(callback, delayInMilliseconds) {
7739
+ let isThrottleOnCooldown = false;
7740
+ let trailingCallArgs = null;
7741
+ const invokeAction = (args) => {
7742
+ callback(...args);
7743
+ isThrottleOnCooldown = true;
7744
+ setTimeout(() => {
7745
+ isThrottleOnCooldown = false;
7746
+ if (trailingCallArgs) {
7747
+ const nextArgs = trailingCallArgs;
7748
+ trailingCallArgs = null;
7749
+ invokeAction(nextArgs);
7750
+ }
7751
+ }, delayInMilliseconds);
7752
+ };
7753
+ return (...args) => {
7754
+ if (!isThrottleOnCooldown) {
7755
+ invokeAction(args);
7756
+ }
7757
+ else {
7758
+ trailingCallArgs = args;
7759
+ }
7760
+ };
7761
+ }
7762
+
7582
7763
  /**
7583
7764
  * This web component is designed to allow users to select a value from a range defined by a minimum and maximum value. The component renders a slider interface, which can be used to visually choose a value between two boundaries.
7584
7765
  *
@@ -7598,27 +7779,60 @@ class SearchcraftSlider {
7598
7779
  */
7599
7780
  min = 0;
7600
7781
  /**
7601
- * The granularity that the value must adhere to.
7782
+ * The step amount for the slider inputs.
7602
7783
  */
7603
- granularity = getMillis('month');
7604
- /** The type of data allowed. */
7784
+ step = 1;
7785
+ /** The type of data the sliders are using. */
7605
7786
  dataType = 'number';
7606
- endValue = this.max;
7607
- startValue = this.min;
7787
+ /** The date granularity to use. Used to format date labels. */
7788
+ dateGranularity;
7789
+ lowerBound = 0;
7790
+ upperBound = 1;
7791
+ endValue = 0;
7792
+ startValue = 0;
7608
7793
  lastFocusedHandle = 'max';
7794
+ throttledEmitUpdate = () => { };
7609
7795
  /**
7610
7796
  * When the range has changed.
7611
7797
  * */
7612
7798
  rangeChanged;
7613
- componentDidLoad() {
7614
- this.startValue = this.min;
7615
- this.endValue = this.max;
7799
+ connectedCallback() {
7800
+ switch (this.dataType) {
7801
+ case 'number':
7802
+ this.startValue = this.min;
7803
+ this.endValue = this.max;
7804
+ this.lowerBound = this.min;
7805
+ this.upperBound = this.max;
7806
+ break;
7807
+ case 'date': {
7808
+ this.startValue = 0;
7809
+ this.endValue = getDifferenceInUnits(this.dateGranularity || 'year', this.min, this.max);
7810
+ this.lowerBound = 0;
7811
+ this.upperBound = this.endValue;
7812
+ break;
7813
+ }
7814
+ }
7815
+ this.throttledEmitUpdate = throttle(this.emitUpdate, 120);
7616
7816
  }
7617
7817
  emitUpdate = async () => {
7618
- this.rangeChanged?.emit({
7619
- startValue: this.startValue,
7620
- endValue: this.endValue,
7621
- });
7818
+ switch (this.dataType) {
7819
+ case 'number':
7820
+ this.rangeChanged?.emit({
7821
+ startValue: this.startValue,
7822
+ endValue: this.endValue,
7823
+ });
7824
+ break;
7825
+ case 'date': {
7826
+ const granularity = this.dateGranularity || 'year';
7827
+ const startTimestamp = getStartOf(this.min, granularity, this.lowerBound + this.startValue);
7828
+ const endTimestamp = getStartOf(this.min, granularity, this.lowerBound + this.endValue + 1);
7829
+ this.rangeChanged?.emit({
7830
+ startValue: startTimestamp,
7831
+ endValue: endTimestamp,
7832
+ });
7833
+ break;
7834
+ }
7835
+ }
7622
7836
  };
7623
7837
  handleStartValueChange = (event) => {
7624
7838
  const inputElement = event.target;
@@ -7626,7 +7840,7 @@ class SearchcraftSlider {
7626
7840
  this.lastFocusedHandle = 'min';
7627
7841
  if (value <= this.endValue) {
7628
7842
  this.startValue = value;
7629
- this.emitUpdate();
7843
+ this.throttledEmitUpdate();
7630
7844
  }
7631
7845
  else {
7632
7846
  this.startValue = this.endValue;
@@ -7639,28 +7853,38 @@ class SearchcraftSlider {
7639
7853
  this.lastFocusedHandle = 'max';
7640
7854
  if (value >= this.startValue) {
7641
7855
  this.endValue = value;
7642
- this.emitUpdate();
7856
+ this.throttledEmitUpdate();
7643
7857
  }
7644
7858
  else {
7645
7859
  this.endValue = this.startValue;
7646
7860
  inputElement.value = `${this.startValue}`;
7647
7861
  }
7648
7862
  };
7863
+ getLabel = (value) => {
7864
+ switch (this.dataType) {
7865
+ case 'number':
7866
+ return `${this.startValue}`;
7867
+ case 'date': {
7868
+ const granularity = this.dateGranularity || 'year';
7869
+ const dateOffset = this.lowerBound + value;
7870
+ const timestamp = getStartOf(this.min, granularity, dateOffset);
7871
+ return getFormattedDateString(this.dateGranularity || 'year', new Date(timestamp));
7872
+ }
7873
+ }
7874
+ };
7649
7875
  render() {
7650
- const rangeMin = this.min;
7651
- const rangeMax = this.max;
7652
- const startPercent = ((this.startValue - rangeMin) / (rangeMax - rangeMin)) * 100;
7653
- const endPercent = ((this.endValue - rangeMin) / (rangeMax - rangeMin)) * 100;
7654
- const startLabel = this.dataType === 'number'
7655
- ? this.startValue
7656
- : new Date(this.startValue).getFullYear();
7657
- const endLabel = this.dataType === 'number'
7658
- ? this.endValue
7659
- : new Date(this.endValue).getFullYear();
7660
- return (hAsync("div", { key: '9225b18ce2f40246837d183fcefdd0be7cc22383', class: 'searchcraft-slider' }, hAsync("div", { key: '8078c1eda2ceb781282f59216915896fdbe2a8d3', class: 'searchcraft-slider-range' }, hAsync("div", { key: '6a6bafa9f7abf41ab24f020cd291a4a08c618afb', class: 'searchcraft-slider-active-range', style: {
7876
+ const startPercent = ((this.startValue - this.lowerBound) /
7877
+ (this.upperBound - this.lowerBound)) *
7878
+ 100;
7879
+ const endPercent = ((this.endValue - this.lowerBound) /
7880
+ (this.upperBound - this.lowerBound)) *
7881
+ 100;
7882
+ const startLabel = this.getLabel(this.startValue);
7883
+ const endLabel = this.getLabel(this.endValue);
7884
+ return (hAsync("div", { key: '3b2e8576d64826f123d40deff3b0df9316649a03', class: 'searchcraft-slider' }, hAsync("div", { key: 'ecaa546b96855aad4e839c5e34e995da0925e0b6', class: 'searchcraft-slider-range' }, hAsync("div", { key: 'f37fc0329249857a29f77d9e3739d10f05f6bf62', class: 'searchcraft-slider-active-range', style: {
7661
7885
  left: `${startPercent}%`,
7662
7886
  width: `${endPercent - startPercent}%`,
7663
- } }), hAsync("input", { key: 'f07a91d441d277b8e9eba34e39093393a44bbf53', class: classNames('searchcraft-slider-input', 'searchcraft-slider-input-min-handle'), max: this.max, min: this.min, onInput: this.handleStartValueChange.bind(this), step: this.granularity, style: { zIndex: this.lastFocusedHandle === 'min' ? '2' : '1' }, type: 'range', value: this.startValue }), hAsync("input", { key: '0637ea5fe123abe1d77c540b347c78fc8ad3d281', class: classNames('searchcraft-slider-input', 'searchcraft-slider-input-max-handle'), max: this.max, min: this.min, onInput: this.handleEndValueChange.bind(this), step: this.granularity, style: { zIndex: this.lastFocusedHandle === 'max' ? '2' : '1' }, type: 'range', value: this.endValue })), hAsync("div", { key: 'b62f8d8485915dddefb7ca29f62b4a96d70470c5', class: 'searchcraft-slider-label' }, hAsync("span", { key: 'fd5d32172ce53d93b858ca54c17b12b80fcdde1d', class: 'searchcraft-slider-start-label' }, startLabel), hAsync("span", { key: '8f4d230b78fb8d896a469f17ade3a3fd3162b427', class: 'searchcraft-slider-end-label' }, endLabel))));
7887
+ } }), hAsync("input", { key: '7b5e6f3983b7c109ea0a3f2b248c35d0e225400b', class: classNames('searchcraft-slider-input', 'searchcraft-slider-input-min-handle'), max: this.upperBound, min: this.lowerBound, onInput: this.handleStartValueChange.bind(this), step: this.step, style: { zIndex: this.lastFocusedHandle === 'min' ? '2' : '1' }, type: 'range', value: this.startValue }), hAsync("input", { key: 'b5bb628b73c8b582a31453e73cb3ef38579eeea5', class: classNames('searchcraft-slider-input', 'searchcraft-slider-input-max-handle'), max: this.upperBound, min: this.lowerBound, onInput: this.handleEndValueChange.bind(this), step: this.step, style: { zIndex: this.lastFocusedHandle === 'max' ? '2' : '1' }, type: 'range', value: this.endValue })), hAsync("div", { key: 'ecb379babd244e3205f30d45628506566fbeff3c', class: 'searchcraft-slider-label' }, hAsync("span", { key: '2be886d05c323f7da1059be88c0cb8ede2e1e98b', class: 'searchcraft-slider-start-label' }, startLabel), hAsync("span", { key: 'bf66fcab3fae565980a4637cb13b14589ffcb5ba', class: 'searchcraft-slider-end-label' }, endLabel))));
7664
7888
  }
7665
7889
  static get cmpMeta() { return {
7666
7890
  "$flags$": 0,
@@ -7668,8 +7892,11 @@ class SearchcraftSlider {
7668
7892
  "$members$": {
7669
7893
  "max": [2],
7670
7894
  "min": [2],
7671
- "granularity": [2],
7895
+ "step": [2],
7672
7896
  "dataType": [1, "data-type"],
7897
+ "dateGranularity": [1, "date-granularity"],
7898
+ "lowerBound": [32],
7899
+ "upperBound": [32],
7673
7900
  "endValue": [32],
7674
7901
  "startValue": [32],
7675
7902
  "lastFocusedHandle": [32]
@@ -7680,7 +7907,7 @@ class SearchcraftSlider {
7680
7907
  }; }
7681
7908
  }
7682
7909
 
7683
- var styles = `[class*=searchcraft-],[class*=searchcraft-] *,[class*=searchcraft-]::before,[class*=searchcraft-]::after,[class*=searchcraft-] *,::before,[class*=searchcraft-] *,::after{box-sizing:border-box;padding:0;margin:0}:root{--sc-text-base-size: 1em;--sc-text-scale-ratio: 1.1;--sc-font-family: sans-serif;--sc-font-bold: 700;--sc-font-normal: 400;--sc-heading-1-font-size: calc( var(--sc-text-base-size) * var(--sc-text-scale-ratio) * var(--sc-text-scale-ratio) * var(--sc-text-scale-ratio) * var(--sc-text-scale-ratio) * var(--sc-text-scale-ratio) * var(--sc-text-scale-ratio) * var(--sc-text-scale-ratio) );--sc-heading-2-font-size: calc( var(--sc-text-base-size) * var(--sc-text-scale-ratio) * var(--sc-text-scale-ratio) * var(--sc-text-scale-ratio) * var(--sc-text-scale-ratio) * var(--sc-text-scale-ratio) * var(--sc-text-scale-ratio) );--sc-heading-3-font-size: calc( var(--sc-text-base-size) * var(--sc-text-scale-ratio) * var(--sc-text-scale-ratio) * var(--sc-text-scale-ratio) * var(--sc-text-scale-ratio) * var(--sc-text-scale-ratio) );--sc-heading-4-font-size: calc( var(--sc-text-base-size) * var(--sc-text-scale-ratio) * var(--sc-text-scale-ratio) * var(--sc-text-scale-ratio) * var(--sc-text-scale-ratio) );--sc-heading-5-font-size: calc( var(--sc-text-base-size) * var(--sc-text-scale-ratio) * var(--sc-text-scale-ratio) * var(--sc-text-scale-ratio) );--sc-heading-6-font-size: calc( var(--sc-text-base-size) / ( var(--sc-text-scale-ratio) * var(--sc-text-scale-ratio) * var(--sc-text-scale-ratio) * var(--sc-text-scale-ratio) ) );--sc-body-font-size: calc(var(--sc-text-base-size));--sc-body-small-font-size: calc( var(--sc-text-base-size) / ( var(--sc-text-scale-ratio) * var(--sc-text-scale-ratio) * var(--sc-text-scale-ratio) ) )}:root{--sc-border-radius: 8px;--sc-border-radius-sm: calc(var(--sc-border-radius) / 2);--sc-border-radius-lg: calc(var(--sc-border-radius) * 2);--sc-border-radius-xl: calc(var(--sc-border-radius) * 3);--sc-border-radius-2xl: calc(var(--sc-border-radius) * 4);--sc-border-radius-full: 9999px}:root{--sc-breakpoint-sm: 576px;--sc-breakpoint-md: 768px;--sc-breakpoint-lg: 992px}:root{--sc-surface-neutral-primary: var(--sc-color-background, #ffffff);--sc-color-background-hover-computed: hsl( from var(--sc-color-background) h s clamp(10, calc(l + 5), 95) );--sc-surface-neutral-primary-hover: var( --sc-color-background-hover, var(--sc-color-background-hover-computed, #fafafa) );--sc-color-background-active-computed: hsl( from var(--sc-color-background) h s clamp(5, calc(l - 5), 90) );--sc-surface-neutral-primary-active: var( --sc-color-background-active, var(--sc-color-background-active-computed, #f7f7f7) );--sc-surface-neutral-secondary: var( --sc-color-background-secondary, var(--sc-color-background, #f3f3f3) );--sc-color-background-secondary-hover-computed: hsl( from var(--sc-color-background-secondary) h s clamp(10, calc(l + 5), 95) );--sc-surface-neutral-secondary-hover: var( --sc-color-background-hover, var(--sc-color-background-hover-computed, #e6e6e6) );--sc-color-background-secondary-active-computed: hsl( from var(--sc-color-background-secondary) h s clamp(5, calc(l - 5), 90) );--sc-surface-neutral-secondary-active: var( --sc-color-background-secondary-active, var(--sc-color-background-active-computed, #e0e0e0) );--sc-surface-neutral-light: #ffffff;--sc-content-neutral-primary: var(--sc-color-foreground, #292929);--sc-color-foreground-secondary-computed: hsl( from var(--sc-color-foreground) h s clamp(10, calc(l + 5), 90) );--sc-content-neutral-secondary: var( --sc-color-foreground-secondary, var(--sc-color-foreground-secondary-computed, #404040) );--sc-border-neutral: var(--sc-color-border, rgba(0, 0, 0, 0.1));--sc-surface-brand-primary: var(--sc-color-brand, #000000);--sc-color-brand-hover-computed: hsl( from var(--sc-color-brand) h s clamp(20, calc(l + 5), 95) );--sc-surface-brand-primary-hover: var( --sc-color-brand-hover, var(--sc-color-brand-hover-computed, #2e2e2e) );--sc-color-brand-active-computed: hsl( from var(--sc-color-brand) h s clamp(10, calc(l - 5), 85) );--sc-surface-brand-primary-active: var( --sc-color-brand-active, var(--sc-color-brand-active-computed, #292929) );--sc-surface-brand-secondary: var( --sc-color-brand-secondary, var(--sc-color-brand, #e6e6e6) );--sc-color-brand-secondary-hover-computed: hsl( from var(--sc-color-brand-secondary) h s clamp(10, calc(l + 5), 95) );--sc-surface-brand-secondary-hover: var( --sc-color-background-hover, var(--sc-color-background-hover-computed, #ebebeb) );--sc-color-brand-secondary-active-computed: hsl( from var(--sc-color-brand-secondary) h s clamp(5, calc(l - 5), 90) );--sc-surface-brand-secondary-active: var( --sc-color-brand-secondary-active, var(--sc-color-brand-active-computed, #e0e0e0) );--sc-content-brand: var( --sc-color-brand-text, var(--sc-surface-brand-primary) );--sc-content-brand-on-primary: #ffffff;--sc-border-brand: var(--sc-surface-brand-primary);--sc-surface-success-primary: var(--sc-color-success, #008000);--sc-color-success-primary-hover-computed: hsl( from var(--sc-color-success) h s 30 );--sc-surface-success-primary-hover: var( --sc-color-success-primary-hover, var(--sc-color-success-primary-hover-computed, #009900) );--sc-color-success-primary-active-computed: hsl( from var(--sc-color-success) h s 20 );--sc-surface-success-primary-active: var( --sc-color-success-primary-active, var(--sc-color-success-primary-active-computed, #006600) );--sc-color-success-secondary-computed: hsl( from var(--sc-color-success) h s 90 );--sc-surface-success-secondary: var( --sc-color-success-secondary, var(--sc-color-success-secondary-computed, #ccffcc) );--sc-color-success-secondary-hover-computed: hsl( from var(--sc-color-success-secondary) h s 95 );--sc-surface-success-secondary-hover: var( --sc-color-success-secondary-hover, var(--sc-color-success-secondary-hover-computed, #e6ffe6) );--sc-color-success-secondary-active-computed: hsl( from var(--sc-color-success-secondary) h s 85 );--sc-surface-success-secondary-active: var( --sc-color-success-secondary-active, var(--sc-color-success-secondary-active-computed, #b2ffb2) );--sc-content-success: var( --sc-color-brand-text, hsl(from var(--sc-surface-success-primary) h s 30) );--sc-content-success-on-primary: #ffffff;--sc-border-success: var(--sc-surface-success-primary);--sc-surface-caution-primary: var(--sc-color-caution, #cc6600);--sc-color-caution-primary-hover-computed: hsl( from var(--sc-color-caution) h s 30 );--sc-surface-caution-primary-hover: var( --sc-color-caution-primary-hover, var(--sc-color-caution-primary-hover-computed, #e57300) );--sc-color-caution-primary-active-computed: hsl( from var(--sc-color-caution) h s 20 );--sc-surface-caution-primary-active: var( --sc-color-caution-primary-active, var(--sc-color-caution-primary-active-computed, #b25a00) );--sc-color-caution-secondary-computed: hsl( from var(--sc-color-caution) h s 90 );--sc-surface-caution-secondary: var( --sc-color-caution-secondary, var(--sc-color-caution-secondary-computed, #ffd9b3) );--sc-color-caution-secondary-hover-computed: hsl( from var(--sc-color-caution-secondary) h s 95 );--sc-surface-caution-secondary-hover: var( --sc-color-caution-secondary-hover, var(--sc-color-caution-secondary-hover-computed, #ffe5cc) );--sc-color-caution-secondary-active-computed: hsl( from var(--sc-color-caution-secondary) h s 85 );--sc-surface-caution-secondary-active: var( --sc-color-caution-secondary-active, var(--sc-color-caution-secondary-active-computed, #ffcc99) );--sc-content-caution: var( --sc-color-caution-text, hsl(from var(--sc-surface-caution-primary) h s 30) );--sc-content-caution-on-primary: #ffffff;--sc-border-caution: var(--sc-surface-caution-primary);--sc-surface-danger-primary: var(--sc-color-danger, #cc0000);--sc-color-danger-primary-hover-computed: hsl( from var(--sc-color-danger) h s 30 );--sc-surface-danger-primary-hover: var( --sc-color-danger-primary-hover, var(--sc-color-danger-primary-hover-computed, #e50000) );--sc-color-danger-primary-active-computed: hsl( from var(--sc-color-danger) h s 20 );--sc-surface-danger-primary-active: var( --sc-color-danger-primary-active, var(--sc-color-danger-primary-active-computed, #b30000) );--sc-color-danger-secondary-computed: hsl(from var(--sc-color-danger) h s 90);--sc-surface-danger-secondary: var( --sc-color-danger-secondary, var(--sc-color-danger-secondary-computed, #ffcccc) );--sc-color-danger-secondary-hover-computed: hsl( from var(--sc-color-danger-secondary) h s 95 );--sc-surface-danger-secondary-hover: var( --sc-color-danger-secondary-hover, var(--sc-color-danger-secondary-hover-computed, #ffe7e7) );--sc-color-danger-secondary-active-computed: hsl( from var(--sc-color-danger-secondary) h s 85 );--sc-surface-danger-secondary-active: var( --sc-color-danger-secondary-active, var(--sc-color-danger-secondary-active-computed, #ffb3b3) );--sc-content-danger: var( --sc-color-caution-text, hsl(from var(--sc-surface-danger-primary) h s 30) );--sc-content-danger-on-primary: #ffffff;--sc-border-danger: var(--sc-surface-danger-primary);--sc-color-disabled: hsl(from var(--sc-color-page-primary) h s calc(l * 0.5));--sc-surface-disabled: var(--sc-color-disabled, #d9d9d9);--sc-color-disabled-text: hsl( from var(--sc-color-text-primary) h s calc(l * 0.5) );--sc-content-disabled: var(--sc-color-disabled-text, #737373);--sc-content-disabled-on-disabled: var(--sc-color-disabled-text, #737373)}@supports(hanging-punctuation: first) and (font: -apple-system-body) and (-webkit-appearance: none){:root{--sc-color-background-hover-computed: hsl( from var(--sc-color-background) h s clamp(10%, calc(l + 5%), 95%) );--sc-color-background-active-computed: hsl( from var(--sc-color-background) h s clamp(5%, calc(l - 5%), 90%) );--sc-color-foreground-secondary-computed: hsl( from var(--sc-color-foreground) h s clamp(10%, calc(l + 5%), 90%) );--sc-color-brand-hover-computed: hsl( from var(--sc-color-brand) h s clamp(20%, calc(l + 5%), 95%) );--sc-color-brand-active-computed: hsl( from var(--sc-color-brand) h s clamp(10%, calc(l - 5%), 85%) );--sc-color-success-primary-hover-computed: hsl( from var(--sc-color-success) h s 30% );--sc-color-success-primary-active-computed: hsl( from var(--sc-color-success) h s 20% );--sc-color-success-secondary-computed: hsl( from var(--sc-color-success) h s 90% );--sc-color-success-secondary-hover-computed: hsl( from var(--sc-color-success-secondary) h s 95% );--sc-color-success-secondary-active-computed: hsl( from var(--sc-color-success-secondary) h s 85% );--sc-content-success: var( --sc-color-brand-text, hsl(from var(--sc-surface-success-primary) h s 30%) );--sc-color-caution-primary-hover-computed: hsl( from var(--sc-color-caution) h s 30% );--sc-color-caution-primary-active-computed: hsl( from var(--sc-color-caution) h s 20% );--sc-color-caution-secondary-computed: hsl( from var(--sc-color-caution) h s 90% );--sc-color-caution-secondary-hover-computed: hsl( from var(--sc-color-caution-secondary) h s 95% );--sc-color-caution-secondary-active-computed: hsl( from var(--sc-color-caution-secondary) h s 85% );--sc-content-caution: var( --sc-color-caution-text, hsl(from var(--sc-surface-caution-primary) h s 30%) );--sc-color-danger-primary-hover-computed: hsl( from var(--sc-color-danger) h s 30% );--sc-color-danger-primary-active-computed: hsl( from var(--sc-color-danger) h s 20% );--sc-color-danger-secondary-computed: hsl( from var(--sc-color-danger) h s 90% );--sc-color-danger-secondary-hover-computed: hsl( from var(--sc-color-danger-secondary) h s 95% );--sc-color-danger-secondary-active-computed: hsl( from var(--sc-color-danger-secondary) h s 85% );--sc-content-danger: var( --sc-color-caution-text, hsl(from var(--sc-surface-danger-primary) h s 30%) )}}.searchcraft-ad{font-family:var(--sc-font-family);line-height:1.25;-webkit-font-smoothing:antialiased}.searchcraft-ad-no-template{display:flex;flex-direction:column;font-size:.875rem}.searchcraft-ad-no-template>p{margin:0}.searchcraft-adm-ad{display:flex;flex-direction:column;justify-content:center;gap:16px}.searchcraft-search-result{font-family:var(--sc-font-family);line-height:1.25;-webkit-font-smoothing:antialiased}.searchcraft-search-result-no-template{display:flex;flex-direction:column;font-size:.875rem}.searchcraft-search-result-no-template>p{margin:0}.searchcraft-search-results{display:flex;flex-direction:column;justify-content:center;gap:16px}.searchcraft-search-results-empty-state{text-align:center}.searchcraft-search-results-error-message{text-align:center}.searchcraft-button{font-family:var(--sc-font-family);line-height:1.25;-webkit-font-smoothing:antialiased;font-size:var(--sc-body-font-size);font-weight:var(--sc-font-normal);background:none;border:2px solid rgba(0,0,0,0);border-radius:var(--sc-border-radius);cursor:pointer;display:flex;gap:4px;padding:12px;position:relative}.searchcraft-button.searchcraft-button-disabled{cursor:not-allowed}.searchcraft-button-primary{background-color:var(--sc-surface-brand-primary);color:var(--sc-content-brand-on-primary);font-weight:var(--sc-font-bold)}.searchcraft-button-primary:hover{background-color:var(--sc-surface-brand-primary-hover)}.searchcraft-button-primary:focus{border-color:var(--sc-border-primary)}.searchcraft-button-primary:active{background-color:var(--sc-surface-brand-primary-active)}.searchcraft-button-primary.searchcraft-button-disabled,.searchcraft-button-primary.searchcraft-button-disabled:hover,.searchcraft-button-primary.searchcraft-button-disabled:focus,.searchcraft-button-primary.searchcraft-button-disabled:active{background-color:var(--sc-surface-disabled);border-color:rgba(0,0,0,0);color:var(--sc-content-disabled)}.searchcraft-button-tertiary{background-color:var(--sc-surface-neutral-primary);color:var(--sc-content-brand);font-weight:var(--sc-font-normal)}.searchcraft-button-tertiary:hover{background-color:var(--sc-surface-brand-secondary-hover)}.searchcraft-button-tertiary:focus{background-color:var(--sc-surface-neutral-light);border-color:var(--sc-border-primary)}.searchcraft-button-tertiary:active{background-color:var(--sc-surface-brand-secondary-active)}.searchcraft-button-tertiary.searchcraft-button-disabled,.searchcraft-button-tertiary.searchcraft-button-disabled:hover,.searchcraft-button-tertiary.searchcraft-button-disabled:focus,.searchcraft-button-tertiary.searchcraft-button-disabled:active{background-color:var(--sc-surface-neutral-light);border-color:rgba(0,0,0,0);color:var(--sc-content-disabled)}.searchcraft-button-icon{fill:none}.searchcraft-error-message{font-family:var(--sc-font-family);line-height:1.25;-webkit-font-smoothing:antialiased;font-size:var(--sc-body-small-font-size);font-weight:var(--sc-font-normal);color:var(--sc-content-danger);margin:0}.searchcraft-facet-list{display:flex;flex-direction:column;gap:6px;width:100%}.searchcraft-facet-list-checkbox-label{align-items:center;color:var(--sc-content-neutral-primary);display:flex;font-family:var(--sc-font-family);font-size:14px;font-weight:600;gap:14px;position:relative;-webkit-font-smoothing:antialiased}.searchcraft-facet-list-checkbox-input-wrapper{position:relative}.searchcraft-facet-list-checkbox-input{align-items:center;appearance:none;background-color:var(--sc-surface-neutral-secondary);border:1px solid var(--sc-surface-disabled);border-radius:var(--sc-border-radius-sm);cursor:pointer;display:flex;height:24px;justify-content:center;width:24px;margin:0}.searchcraft-facet-list-checkbox-input:focus{outline:2px solid var(--sc-surface-brand-primary)}.searchcraft-facet-list-checkbox-input:checked{background-color:var(--sc-surface-brand-primary);position:relative}.searchcraft-facet-list-checkbox-input:checked+.searchcraft-facet-list-checkbox-input-check-icon{display:block}.searchcraft-facet-list-checkbox-input:checked+.searchcraft-facet-list-checkbox-input-dash-icon{display:block}.searchcraft-facet-child-list{display:flex;flex-direction:column;gap:6px}.searchcraft-facet-child-list-checkbox-label{margin-left:24px}.searchcraft-facet-child-list-checkbox-label:first-child{margin-top:6px}.searchcraft-facet-list-checkbox-input-check-icon{display:none;height:16px;left:50%;position:absolute;margin-top:2px;top:50%;transform:translate(-50%, -50%);width:16px}.searchcraft-facet-list-checkbox-input-dash-icon{display:none;height:3px;left:50%;position:absolute;top:50%;transform:translate(-50%, -50%);width:14px}.searchcraft-facet-list-message{font-family:var(--sc-font-family);line-height:1.25;-webkit-font-smoothing:antialiased;font-size:var(--sc-body-small-font-size);font-weight:var(--sc-font-normal);color:var(--sc-content-disabled);text-align:center}.searchcraft-filter-panel{display:flex;flex-direction:column;gap:16px}.searchcraft-filter-panel-section{display:flex;flex-direction:column;gap:8px}.searchcraft-filter-panel-label{font-family:var(--sc-font-family);line-height:1.25;-webkit-font-smoothing:antialiased;font-size:var(--sc-body-small-font-size);font-weight:var(--sc-font-normal);font-weight:var(--sc-font-bold)}:root{--sc-input-form-border-radius: var(--sc-border-radius);--sc-input-form-search-icon-size: 20px;--sc-input-form-clear-icon-size: 20px}.searchcraft-input-form-grid{display:grid;gap:4px 8px}.searchcraft-input-form-grid-button-left{grid-template-rows:repeat(3, auto);grid-template-columns:auto 1fr}.searchcraft-input-form-grid-button-left .searchcraft-input-form-button{grid-column:1/span 1;grid-row:2/span 1}.searchcraft-input-form-grid-button-left .searchcraft-input-form-label{grid-column:2/span 1;grid-row:1/span 1}.searchcraft-input-form-grid-button-left .searchcraft-input-form-error-message{grid-column:2/span 1;grid-row:3/span 1}.searchcraft-input-form-grid-button-left .searchcraft-input-form-input-wrapper{grid-column:2/span 1;grid-row:2/span 1}.searchcraft-input-form-grid-button-right{grid-template-rows:repeat(3, auto);grid-template-columns:1fr auto}.searchcraft-input-form-grid-button-right .searchcraft-input-form-button{grid-column:2/span 1;grid-row:2/span 1}.searchcraft-input-form-grid-button-right .searchcraft-input-form-label{grid-column:1/span 1;grid-row:1/span 1}.searchcraft-input-form-grid-button-right .searchcraft-input-form-error-message{grid-column:1/span 1;grid-row:3/span 1}.searchcraft-input-form-grid-button-right .searchcraft-input-form-input-wrapper{grid-column:1/span 1;grid-row:2/span 1}.searchcraft-input-form-grid-button-none{grid-template-rows:repeat(3, auto);grid-template-columns:auto}.searchcraft-input-form-grid-button-none .searchcraft-input-form-button{display:none}.searchcraft-input-form-grid-button-none .searchcraft-input-form-label{grid-column:1/span 1;grid-row:1/span 1}.searchcraft-input-form-grid-button-none .searchcraft-input-form-error-message{grid-column:1/span 1;grid-row:3/span 1}.searchcraft-input-form-grid-button-none .searchcraft-input-form-input-wrapper{grid-column:1/span 1;grid-row:2/span 1}.searchcraft-input-form-input-wrapper{display:flex;position:relative}.searchcraft-input-form-input{font-family:var(--sc-font-family);line-height:1.25;-webkit-font-smoothing:antialiased;font-size:var(--sc-body-font-size);font-weight:var(--sc-font-normal);background-color:var(--sc-surface-neutral-secondary);border-radius:var(--sc-input-form-border-radius);border:none;color:var(--sc-content-neutral-primary);flex:1;outline:none;padding:12px 44px}.searchcraft-input-form-input::placeholder{color:var(--sc-content-disabled)}.searchcraft-input-form-input:focus{outline:var(--sc-border-brand) solid 2px;outline-offset:-1px}.searchcraft-input-form-input:focus::placeholder{opacity:0}.searchcraft-input-form-error{color:var(--sc-content-danger);outline:var(--sc-border-danger) solid 2px}.searchcraft-input-form-error:focus{outline:var(--sc-border-danger) solid 2px}.searchcraft-input-form-input-icon{align-items:center;bottom:0;display:flex;justify-content:center;left:0;position:absolute;pointer-events:none;top:0;width:44px}.searchcraft-input-form-input-search-icon{color:var(--sc-content-neutral-secondary);fill:none;height:var(--sc-input-form-search-icon-size);pointer-events:none;width:var(--sc-input-form-search-icon-size)}.searchcraft-input-form-clear-button{all:unset;align-items:center;bottom:0;border:none;cursor:pointer;display:flex;justify-content:center;outline:none;position:absolute;right:0;top:0;width:44px}.searchcraft-input-form-clear-icon{color:var(--sc-content-brand);fill:none;height:var(--sc-input-form-clear-icon-size);width:var(--sc-input-form-clear-icon-size)}.searchcraft-input-label{font-family:var(--sc-font-family);line-height:1.25;-webkit-font-smoothing:antialiased;font-size:var(--sc-body-small-font-size);font-weight:var(--sc-font-normal);color:var(--sc-content-neutral-primary);font-weight:var(--sc-font-bold);margin-top:4px;margin-bottom:4px}:root{--sc-popover-button-border-radius: var(--sc-border-radius)}@media(min-width: 576px){:root{--sc-popover-button-border-radius: var(--sc-border-radius-lg)}}.searchcraft-popover-button{font-family:var(--sc-font-family);line-height:1.25;-webkit-font-smoothing:antialiased;font-size:var(--sc-body-font-size);font-weight:var(--sc-font-normal);cursor:pointer}.searchcraft-popover-button-skeuomorphic{appearance:none;background:none;border:none;color:var(--sc-content-neutral-primary);display:block;width:100%}.searchcraft-popover-button-skeuomorphic .searchcraft-popover-button-wrapper{border:1px solid var(--sc-border-neutral);border-radius:var(--sc-popover-button-border-radius);box-shadow:0 1px 1px rgb(from var(--sc-content-neutral-secondary) r g b/10%) inset,0 2px 4px rgb(from var(--sc-content-neutral-secondary) r g b/5%) inset;display:flex;gap:24px;height:40px;justify-content:space-between;line-height:1;padding:4px 5px 4px 10px;background:var(--sc-surface-neutral-primary)}@media(min-width: 576px){.searchcraft-popover-button-skeuomorphic .searchcraft-popover-button-wrapper{box-shadow:0 1px 1px rgb(from var(--sc-content-neutral-secondary) r g b/10%) inset,0 2px 2px rgb(from var(--sc-content-neutral-secondary) r g b/5%) inset,0 4px 4px rgb(from var(--sc-content-neutral-secondary) r g b/5%) inset;height:63px;padding:8px 10px 8px 16px}}.searchcraft-popover-button-skeuomorphic .searchcraft-popover-button-input{align-items:center;display:flex;gap:4px}@media(min-width: 576px){.searchcraft-popover-button-skeuomorphic .searchcraft-popover-button-input{gap:8px}}.searchcraft-popover-button-skeuomorphic .searchcraft-popover-button-keycaps{color:var(--sc-content-neutral-secondary);display:flex;gap:4px;font-size:20px;font-weight:500}@media(min-width: 576px){.searchcraft-popover-button-skeuomorphic .searchcraft-popover-button-keycaps{gap:8px}}.searchcraft-popover-button-skeuomorphic .searchcraft-popover-button-keycaps-keycap{border-radius:calc(var(--sc-popover-button-border-radius) - 3px);border-radius:calc(var(var(--sc-popover-button-border-radius)) - 3px);background-color:var(--sc-surface-neutral-primary);box-shadow:0 3px hsl(from var(--sc-surface-neutral-secondary) h s calc(l - 5)),0 1px 2px rgb(from var(--sc-content-neutral-secondary) r g b/10%),0 6px 4px rgb(from var(--sc-content-neutral-secondary) r g b/5%);height:calc(100% - 2px);position:relative}@media(min-width: 576px){.searchcraft-popover-button-skeuomorphic .searchcraft-popover-button-keycaps-keycap{border-radius:calc(var(--sc-popover-button-border-radius) - 8px);border-radius:calc(var(var(--sc-popover-button-border-radius)) - 8px);box-shadow:0 4px hsl(from var(--sc-surface-neutral-secondary) h s calc(l - 5)),0 1px 2px rgb(from var(--sc-content-neutral-secondary) r g b/15%),0 6px 1px rgb(from var(--sc-content-neutral-secondary) r g b/20%),0 7px 2px rgb(from var(--sc-content-neutral-secondary) r g b/15%),0 9px 4px rgb(from var(--sc-content-neutral-secondary) r g b/10%),0 13px 8px rgb(from var(--sc-content-neutral-secondary) r g b/5%);height:calc(100% - 5px)}}.searchcraft-popover-button-skeuomorphic .searchcraft-popover-button-keycaps-keycap::before,.searchcraft-popover-button-skeuomorphic .searchcraft-popover-button-keycaps-keycap::after{content:"";display:block}.searchcraft-popover-button-skeuomorphic .searchcraft-popover-button-keycaps-keycap::before{border-radius:calc(var(--sc-popover-button-border-radius) - 4px);border-radius:calc(var(var(--sc-popover-button-border-radius)) - 4px);background:linear-gradient(340deg, rgb(from var(--sc-surface-neutral-secondary) r g b/2%) 0%, var(--sc-surface-neutral-secondary) 100%);inset:2px;position:absolute}@media(min-width: 576px){.searchcraft-popover-button-skeuomorphic .searchcraft-popover-button-keycaps-keycap::before{border-radius:calc(var(--sc-popover-button-border-radius) - 12px);border-radius:calc(var(var(--sc-popover-button-border-radius)) - 12px);inset:4px}}.searchcraft-popover-button-skeuomorphic .searchcraft-popover-button-keycaps-keycap::after{aspect-ratio:1/1;height:100%}.searchcraft-popover-button-skeuomorphic .searchcraft-popover-button-keycaps-keycap>span{display:flex;line-height:1;left:50%;margin-top:2%;position:absolute;top:50%;transform:translate(-50%, -50%)}.searchcraft-popover-button-skeuomorphic .searchcraft-popover-button-input-search-icon{height:60%;width:auto}@media(min-width: 576px){.searchcraft-popover-button-skeuomorphic .searchcraft-popover-button-input-search-icon{height:50%}}:root{--sc-popover-list-view-height: 600px;--sc-popover-modal-max-width: 800px}.searchcraft-popover-form{font-family:var(--sc-font-family);line-height:1.25;-webkit-font-smoothing:antialiased;font-size:var(--sc-body-font-size);font-weight:var(--sc-font-normal);display:flex;flex:1;flex-direction:column}.searchcraft-popover-form searchcraft-input-form,.searchcraft-popover-form searchcraft-popover-footer{width:100%}.searchcraft-popover-form.searchcraft-popover-form-active .searchcraft-popover-form-input{padding-bottom:1px}.searchcraft-popover-form searchcraft-popover-list-view{flex-shrink:1;height:100%;min-height:0;overflow:auto;padding:0 24px}.searchcraft-popover-form-input{display:flex;flex-direction:row;gap:12px}.searchcraft-popover-form-input .searchcraft-input-form-input{background-color:var(--sc-surface-neutral-primary);border:1px solid var(--sc-border-neutral);border-radius:var(--sc-border-radius-lg);box-shadow:0 1px 1px rgb(from var(--sc-content-neutral-primary) r g b/10%) inset,0 2px 2px rgb(from var(--sc-content-neutral-primary) r g b/5%) inset,0 4px 4px rgb(from var(--sc-content-neutral-primary) r g b/5%) inset;width:0}.searchcraft-popover-form-cancel-button{background:none;border:none;cursor:pointer;font-size:14px}.searchcraft-popover-form-modal-input,.searchcraft-popover-form-fullscreen-input{padding:24px}.searchcraft-popover-form-modal-popover-list-view,.searchcraft-popover-form-fullscreen-popover-list-view{flex-grow:1;flex-shrink:1;min-height:0;overflow:auto;padding:0 24px}.searchcraft-popover-form-inline{background-color:var(--sc-surface-neutral-primary);border:1px solid rgba(0,0,0,0);border-radius:var(--sc-border-radius-xl);padding:12px;position:relative}.searchcraft-popover-form-inline.searchcraft-popover-form-active{border:1px solid var(--sc-border-neutral);border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0;padding-bottom:1px}.searchcraft-popover-form-inline searchcraft-popover-list-view{padding:0 12px}.searchcraft-popover-form-inline .searchcraft-input-form-input,.searchcraft-popover-form-inline .searchcraft-popover-list-item-link,.searchcraft-popover-form-inline .searchcraft-adm-ad-link{border-radius:calc(--sc-border-radius-xl - 12px);border-radius:calc(var(--sc-border-radius-xl) - 12px)}.searchcraft-popover-form-inline-wrapper{background-color:var(--sc-surface-neutral-primary);border:1px solid var(--sc-border-neutral);border-top:none;border-bottom-left-radius:var(--sc-border-radius-xl);border-bottom-right-radius:var(--sc-border-radius-xl);display:flex;flex-direction:column;left:-1px;max-height:var(--sc-popover-list-view-height);overflow:hidden;position:absolute;right:-1px;top:100%}.searchcraft-popover-form-modal{align-items:center;display:flex;inset:0;position:fixed;z-index:1000}.searchcraft-popover-form-modal .searchcraft-input-form-input,.searchcraft-popover-form-modal .searchcraft-popover-list-item-link,.searchcraft-popover-form-modal .searchcraft-adm-ad-link{border-radius:calc(--sc-border-radius-2xl - 20px);border-radius:calc(var(--sc-border-radius-2xl) - 20px)}.searchcraft-popover-form-modal-backdrop{background-color:rgb(from var(--sc-content-neutral-primary) r g b/50%);display:none;inset:0;position:fixed}@media(min-width: 576px){.searchcraft-popover-form-modal-backdrop{display:block}}.searchcraft-popover-form-modal-wrapper{background-color:var(--sc-surface-neutral-primary);box-shadow:1px 2px rgb(from var(--sc-content-neutral-primary) r g b/7%),0 2px 4px rgb(from var(--sc-content-neutral-primary) r g b/7%),0 4px 8px rgb(from var(--sc-content-neutral-primary) r g b/7%),0 8px 16px rgb(from var(--sc-content-neutral-primary) r g b/7%),0 16px 32px rgb(from var(--sc-content-neutral-primary) r g b/7%),0 32px 64px rgb(from var(--sc-content-neutral-primary) r g b/7%);display:flex;flex-direction:column;inset:0;max-width:var(--sc-popover-modal-max-width);overflow:hidden;position:absolute;width:100%;z-index:1001}@media(min-width: 576px){.searchcraft-popover-form-modal-wrapper{border-radius:var(--sc-border-radius-2xl);inset:0;margin-top:100px;max-height:var(--sc-popover-list-view-height);max-width:var(--sc-popover-modal-max-width);position:relative}}.searchcraft-popover-form-modal-cancel-button{border-radius:calc(--sc-border-radius-2xl - 20px);border-radius:calc(var(--sc-border-radius-2xl) - 20px);padding:8px}@media(min-width: 576px){.searchcraft-popover-form-modal-cancel-button{padding:8px 12px}}.searchcraft-popover-form-fullscreen{background-color:var(--sc-surface-neutral-primary);display:flex;flex-direction:column;justify-content:space-between;inset:0;position:fixed;z-index:1000}.searchcraft-popover-form-fullscreen .searchcraft-popover-list-item-link,.searchcraft-popover-form-fullscreen .searchcraft-adm-ad-link{border-radius:var(--sc-border-radius-lg)}.searchcraft-popover-form-fullscreen-cancel-button{border-radius:var(--sc-border-radius-lg);padding:8px}@media(min-width: 576px){.searchcraft-popover-form-fullscreen-cancel-button{padding:8px 12px}}.searchcraft-popover-footer{font-family:var(--sc-font-family);line-height:1.25;-webkit-font-smoothing:antialiased;background-color:var(--sc-surface-neutral-secondary);box-shadow:0 1px 1px rgb(from var(--sc-content-neutral-primary) r g b/10%) inset,0 2px 2px rgb(from var(--sc-content-neutral-primary) r g b/5%) inset,0 4px 4px rgb(from var(--sc-content-neutral-primary) r g b/5%) inset;display:flex;gap:8px;justify-content:space-between;line-height:1;padding:20px 24px}@media(min-width: 576px){.searchcraft-popover-footer{padding:20px 32px}}.searchcraft-popover-footer-results-info{margin:0}.searchcraft-popover-footer-link{color:var(--sc-content-neutral-primary);display:flex;max-width:160px;width:100%}:root{--sc-popover-list-item-image-fit: contain}.searchcraft-popover-list-item{font-family:var(--sc-font-family);line-height:1.25;-webkit-font-smoothing:antialiased;border-bottom:1px solid var(--sc-border-neutral);padding:12px 0}searchcraft-popover-list-item:last-child .searchcraft-popover-list-item{border-bottom:none}.searchcraft-popover-list-item-link{align-items:flex-start;color:var(--sc-content-neutral-primary);display:flex;gap:24px;padding:12px;text-decoration:none}.searchcraft-popover-list-item-link:focus,.searchcraft-popover-list-item-link:active{background-color:var(--sc-surface-neutral-primary-active)}.searchcraft-popover-list-item-link:hover{background-color:var(--sc-surface-neutral-primary-hover)}.searchcraft-popover-list-item-image-wrapper{align-items:center;aspect-ratio:16/9;display:flex;flex-shrink:0;justify-content:center;width:160px}.searchcraft-popover-list-item-image{height:100%;object-fit:var(--sc-popover-list-item-image-fit);width:100%}.searchcraft-popover-list-item-content{display:flex;flex-direction:column;flex-grow:1;gap:4px;justify-content:center}.searchcraft-popover-list-item-content-title,.searchcraft-popover-list-item-content-subtitle{display:-webkit-box;line-clamp:2;margin:0;overflow:hidden;-webkit-line-clamp:2;-webkit-box-orient:vertical}.searchcraft-popover-list-item-content-title{font-family:var(--sc-font-family);line-height:1.25;-webkit-font-smoothing:antialiased;font-size:var(--sc-heading-5-font-size);font-weight:var(--sc-font-bold)}.searchcraft-popover-list-item-content-subtitle{font-family:var(--sc-font-family);line-height:1.25;-webkit-font-smoothing:antialiased;font-size:var(--sc-body-font-size);font-weight:var(--sc-font-normal)}.searchcraft-popover-list-view{display:flex;flex-direction:column}.searchcraft-results-info{font-family:var(--sc-font-family);line-height:1.25;-webkit-font-smoothing:antialiased;font-size:var(--sc-body-font-size);font-weight:var(--sc-font-normal);color:var(--sc-content-primary);margin:0}.searchcraft-slider{align-items:center;display:flex;flex-direction:column;gap:10px;width:100%}.searchcraft-slider-range{align-items:center;background-color:var(--sc-surface-disabled);border-radius:999px;display:flex;position:relative;height:4px;width:100%}.searchcraft-slider-range::-webkit-slider-runnable-track{pointer-events:none}.searchcraft-slider-range .searchcraft-slider-active-range{background-color:var(--sc-surface-brand-primary);border-radius:2px;height:4px;position:absolute;top:50%;transform:translateY(-50%);z-index:0}.searchcraft-slider-range .searchcraft-slider-active-range::-webkit-slider-runnable-track{pointer-events:none}.searchcraft-slider-range .searchcraft-slider-active-range::-moz-range-track{pointer-events:none}.searchcraft-slider-range .searchcraft-slider-input{appearance:none;background:rgba(0,0,0,0);border-radius:2px;height:4px;margin:0;outline:none;pointer-events:none;position:absolute;width:100%;-webkit-appearance:none}.searchcraft-slider-range .searchcraft-slider-input::-webkit-slider-thumb{background-color:var(--sc-surface-neutral-light);border-radius:50%;border:2px solid var(--sc-border-neutral);cursor:pointer;height:20px;pointer-events:all;width:20px;-webkit-appearance:none}.searchcraft-slider-range .searchcraft-slider-input::-moz-range-thumb{background-color:var(--sc-surface-neutral-light);border-radius:50%;border:2px solid var(--sc-border-neutral);cursor:pointer;height:20px;pointer-events:all;width:20px}.searchcraft-slider-label{color:var(--sc-content-primary);display:flex;font-family:"Source Sans Pro",sans-serif;font-size:15px;font-weight:600;justify-content:space-between;margin-top:10px;width:100%}.searchcraft-slider-start-label,.searchcraft-slider-end-label{min-width:30px;text-align:center}.searchcraft-toggle-button{align-items:flex-start;display:flex;gap:10px;justify-content:space-between}.searchcraft-toggle-button-label{font-family:var(--sc-font-family);line-height:1.25;-webkit-font-smoothing:antialiased;font-size:var(--sc-body-font-size);font-weight:var(--sc-font-normal);color:var(--sc-content-neutral-primary);margin:0}.searchcraft-toggle-button-sub-label{font-family:var(--sc-font-family);line-height:1.25;-webkit-font-smoothing:antialiased;font-size:var(--sc-body-small-font-size);font-weight:var(--sc-font-normal);color:var(--sc-content-neutral-secondary);margin:0}.searchcraft-toggle-button-background{background:var(--sc-surface-disabled);border-radius:var(--sc-border-radius-full);border:none;cursor:pointer;flex-shrink:0;height:26px;position:relative;transition:background-color .2s;width:44px}.searchcraft-toggle-button-handle{background:var(--sc-surface-neutral-light);border-radius:50%;height:18px;left:4px;position:absolute;top:calc(50% - 9px);transition:transform .3s ease;width:18px}.searchcraft-toggle-button-active .searchcraft-toggle-button-background{background:var(--sc-surface-brand-primary);box-shadow:0px 0px 0px 1px rgba(0,0,0,.05)}.searchcraft-toggle-button-active .searchcraft-toggle-button-handle{transform:translateX(16px)}.searchcraft-pagination{display:inline-grid;gap:16px;grid-template-columns:repeat(3, auto);grid-template-rows:1fr}.searchcraft-pagination-list{border:1px solid var(--sc-border-neutral);border-radius:var(--sc-border-radius);display:flex;list-style-type:none;margin:0;overflow:hidden;padding:0;width:auto}.searchcraft-pagination-list li{border-right:1px solid var(--sc-border-neutral);height:100%;min-height:44px;width:44px}.searchcraft-pagination-list li:last-child{border-right:none}.searchcraft-pagination-item{font-family:var(--sc-font-family);line-height:1.25;-webkit-font-smoothing:antialiased;font-size:var(--sc-body-font-size);font-weight:var(--sc-font-normal);align-items:center;background-color:var(--sc-surface-neutral-primary);border:none;display:flex;height:100%;justify-content:center;width:100%}.searchcraft-pagination-item-active{background-color:var(--sc-surface-brand-secondary);font-weight:var(--sc-font-bold)}.searchcraft-pagination-control{border:1px solid var(--sc-border-neutral);border-radius:var(--sc-border-radius)}.searchcraft-pagination-range{font-family:var(--sc-font-family);line-height:1.25;-webkit-font-smoothing:antialiased;font-size:var(--sc-body-font-size);font-weight:var(--sc-font-normal);align-items:center;display:flex}.searchcraft-select{display:flex;flex-direction:column;gap:4px}.searchcraft-select-label{font-family:var(--sc-font-family);line-height:1.25;-webkit-font-smoothing:antialiased;font-size:var(--sc-body-small-font-size);font-weight:var(--sc-font-normal);font-weight:var(--sc-font-bold)}.searchcraft-select-input-wrapper{position:relative}.searchcraft-select-input{font-family:var(--sc-font-family);line-height:1.25;-webkit-font-smoothing:antialiased;font-size:var(--sc-body-font-size);font-weight:var(--sc-font-normal);appearance:none;background-color:var(--sc-surface-neutral-secondary);border:2px solid rgba(0,0,0,0);border-radius:var(--sc-border-radius);cursor:pointer;height:44px;padding:0 44px 0 16px;width:100%}.searchcraft-select-input:hover{background-color:var(--sc-surface-neutral-secondary-hover)}.searchcraft-select-input:active{background-color:var(--sc-surface-neutral-secondary-active)}.searchcraft-select-input:focus{border-color:var(--sc-border-brand);outline:none}.searchcraft-select-input-icon{fill:none;pointer-events:none;position:absolute;right:12px;top:50%;transform:translateY(-50%)}.searchcraft-select-caption{font-family:var(--sc-font-family);line-height:1.25;-webkit-font-smoothing:antialiased;font-size:var(--sc-body-small-font-size);font-weight:var(--sc-font-normal)}.searchcraft-search-results-per-page{display:flex}.searchcraft-search-results-per-page-select{align-items:center;display:flex;gap:12px}.searchcraft-search-results-per-page-select-label{font-family:var(--sc-font-family);line-height:1.25;-webkit-font-smoothing:antialiased;font-size:var(--sc-body-font-size);font-weight:var(--sc-font-normal)}.searchcraft-search-results-per-page-select-input{min-width:120px}/*# sourceMappingURL=hologram.css.map */
7910
+ var styles = `[class*=searchcraft-],[class*=searchcraft-] *,[class*=searchcraft-]::before,[class*=searchcraft-]::after,[class*=searchcraft-] *,::before,[class*=searchcraft-] *,::after{box-sizing:border-box;padding:0;margin:0}:root{--sc-text-base-size: 1em;--sc-text-scale-ratio: 1.1;--sc-font-family: sans-serif;--sc-font-bold: 700;--sc-font-normal: 400;--sc-heading-1-font-size: calc( var(--sc-text-base-size) * var(--sc-text-scale-ratio) * var(--sc-text-scale-ratio) * var(--sc-text-scale-ratio) * var(--sc-text-scale-ratio) * var(--sc-text-scale-ratio) * var(--sc-text-scale-ratio) * var(--sc-text-scale-ratio) );--sc-heading-2-font-size: calc( var(--sc-text-base-size) * var(--sc-text-scale-ratio) * var(--sc-text-scale-ratio) * var(--sc-text-scale-ratio) * var(--sc-text-scale-ratio) * var(--sc-text-scale-ratio) * var(--sc-text-scale-ratio) );--sc-heading-3-font-size: calc( var(--sc-text-base-size) * var(--sc-text-scale-ratio) * var(--sc-text-scale-ratio) * var(--sc-text-scale-ratio) * var(--sc-text-scale-ratio) * var(--sc-text-scale-ratio) );--sc-heading-4-font-size: calc( var(--sc-text-base-size) * var(--sc-text-scale-ratio) * var(--sc-text-scale-ratio) * var(--sc-text-scale-ratio) * var(--sc-text-scale-ratio) );--sc-heading-5-font-size: calc( var(--sc-text-base-size) * var(--sc-text-scale-ratio) * var(--sc-text-scale-ratio) * var(--sc-text-scale-ratio) );--sc-heading-6-font-size: calc( var(--sc-text-base-size) / ( var(--sc-text-scale-ratio) * var(--sc-text-scale-ratio) * var(--sc-text-scale-ratio) * var(--sc-text-scale-ratio) ) );--sc-body-font-size: calc(var(--sc-text-base-size));--sc-body-small-font-size: calc( var(--sc-text-base-size) / ( var(--sc-text-scale-ratio) * var(--sc-text-scale-ratio) * var(--sc-text-scale-ratio) ) )}:root{--sc-border-radius: 8px;--sc-border-radius-sm: calc(var(--sc-border-radius) / 2);--sc-border-radius-lg: calc(var(--sc-border-radius) * 2);--sc-border-radius-xl: calc(var(--sc-border-radius) * 3);--sc-border-radius-2xl: calc(var(--sc-border-radius) * 4);--sc-border-radius-full: 9999px}:root{--sc-breakpoint-sm: 576px;--sc-breakpoint-md: 768px;--sc-breakpoint-lg: 992px}:root{--sc-surface-neutral-primary: var(--sc-color-background, #ffffff);--sc-color-background-hover-computed: hsl( from var(--sc-color-background) h s clamp(10, calc(l + 5), 95) );--sc-surface-neutral-primary-hover: var( --sc-color-background-hover, var(--sc-color-background-hover-computed, #fafafa) );--sc-color-background-active-computed: hsl( from var(--sc-color-background) h s clamp(5, calc(l - 5), 90) );--sc-surface-neutral-primary-active: var( --sc-color-background-active, var(--sc-color-background-active-computed, #f7f7f7) );--sc-surface-neutral-secondary: var( --sc-color-background-secondary, var(--sc-color-background, #f3f3f3) );--sc-color-background-secondary-hover-computed: hsl( from var(--sc-color-background-secondary) h s clamp(10, calc(l + 5), 95) );--sc-surface-neutral-secondary-hover: var( --sc-color-background-hover, var(--sc-color-background-hover-computed, #e6e6e6) );--sc-color-background-secondary-active-computed: hsl( from var(--sc-color-background-secondary) h s clamp(5, calc(l - 5), 90) );--sc-surface-neutral-secondary-active: var( --sc-color-background-secondary-active, var(--sc-color-background-active-computed, #e0e0e0) );--sc-surface-neutral-light: #ffffff;--sc-content-neutral-primary: var(--sc-color-foreground, #292929);--sc-color-foreground-secondary-computed: hsl( from var(--sc-color-foreground) h s clamp(10, calc(l + 5), 90) );--sc-content-neutral-secondary: var( --sc-color-foreground-secondary, var(--sc-color-foreground-secondary-computed, #404040) );--sc-border-neutral: var(--sc-color-border, rgba(0, 0, 0, 0.1));--sc-surface-brand-primary: var(--sc-color-brand, #000000);--sc-color-brand-hover-computed: hsl( from var(--sc-color-brand) h s clamp(20, calc(l + 5), 95) );--sc-surface-brand-primary-hover: var( --sc-color-brand-hover, var(--sc-color-brand-hover-computed, #2e2e2e) );--sc-color-brand-active-computed: hsl( from var(--sc-color-brand) h s clamp(10, calc(l - 5), 85) );--sc-surface-brand-primary-active: var( --sc-color-brand-active, var(--sc-color-brand-active-computed, #292929) );--sc-surface-brand-secondary: var( --sc-color-brand-secondary, var(--sc-color-brand, #e6e6e6) );--sc-color-brand-secondary-hover-computed: hsl( from var(--sc-color-brand-secondary) h s clamp(10, calc(l + 5), 95) );--sc-surface-brand-secondary-hover: var( --sc-color-background-hover, var(--sc-color-background-hover-computed, #ebebeb) );--sc-color-brand-secondary-active-computed: hsl( from var(--sc-color-brand-secondary) h s clamp(5, calc(l - 5), 90) );--sc-surface-brand-secondary-active: var( --sc-color-brand-secondary-active, var(--sc-color-brand-active-computed, #e0e0e0) );--sc-content-brand: var( --sc-color-brand-text, var(--sc-surface-brand-primary) );--sc-content-brand-on-primary: #ffffff;--sc-border-brand: var(--sc-surface-brand-primary);--sc-surface-success-primary: var(--sc-color-success, #008000);--sc-color-success-primary-hover-computed: hsl( from var(--sc-color-success) h s 30 );--sc-surface-success-primary-hover: var( --sc-color-success-primary-hover, var(--sc-color-success-primary-hover-computed, #009900) );--sc-color-success-primary-active-computed: hsl( from var(--sc-color-success) h s 20 );--sc-surface-success-primary-active: var( --sc-color-success-primary-active, var(--sc-color-success-primary-active-computed, #006600) );--sc-color-success-secondary-computed: hsl( from var(--sc-color-success) h s 90 );--sc-surface-success-secondary: var( --sc-color-success-secondary, var(--sc-color-success-secondary-computed, #ccffcc) );--sc-color-success-secondary-hover-computed: hsl( from var(--sc-color-success-secondary) h s 95 );--sc-surface-success-secondary-hover: var( --sc-color-success-secondary-hover, var(--sc-color-success-secondary-hover-computed, #e6ffe6) );--sc-color-success-secondary-active-computed: hsl( from var(--sc-color-success-secondary) h s 85 );--sc-surface-success-secondary-active: var( --sc-color-success-secondary-active, var(--sc-color-success-secondary-active-computed, #b2ffb2) );--sc-content-success: var( --sc-color-brand-text, hsl(from var(--sc-surface-success-primary) h s 30) );--sc-content-success-on-primary: #ffffff;--sc-border-success: var(--sc-surface-success-primary);--sc-surface-caution-primary: var(--sc-color-caution, #cc6600);--sc-color-caution-primary-hover-computed: hsl( from var(--sc-color-caution) h s 30 );--sc-surface-caution-primary-hover: var( --sc-color-caution-primary-hover, var(--sc-color-caution-primary-hover-computed, #e57300) );--sc-color-caution-primary-active-computed: hsl( from var(--sc-color-caution) h s 20 );--sc-surface-caution-primary-active: var( --sc-color-caution-primary-active, var(--sc-color-caution-primary-active-computed, #b25a00) );--sc-color-caution-secondary-computed: hsl( from var(--sc-color-caution) h s 90 );--sc-surface-caution-secondary: var( --sc-color-caution-secondary, var(--sc-color-caution-secondary-computed, #ffd9b3) );--sc-color-caution-secondary-hover-computed: hsl( from var(--sc-color-caution-secondary) h s 95 );--sc-surface-caution-secondary-hover: var( --sc-color-caution-secondary-hover, var(--sc-color-caution-secondary-hover-computed, #ffe5cc) );--sc-color-caution-secondary-active-computed: hsl( from var(--sc-color-caution-secondary) h s 85 );--sc-surface-caution-secondary-active: var( --sc-color-caution-secondary-active, var(--sc-color-caution-secondary-active-computed, #ffcc99) );--sc-content-caution: var( --sc-color-caution-text, hsl(from var(--sc-surface-caution-primary) h s 30) );--sc-content-caution-on-primary: #ffffff;--sc-border-caution: var(--sc-surface-caution-primary);--sc-surface-danger-primary: var(--sc-color-danger, #cc0000);--sc-color-danger-primary-hover-computed: hsl( from var(--sc-color-danger) h s 30 );--sc-surface-danger-primary-hover: var( --sc-color-danger-primary-hover, var(--sc-color-danger-primary-hover-computed, #e50000) );--sc-color-danger-primary-active-computed: hsl( from var(--sc-color-danger) h s 20 );--sc-surface-danger-primary-active: var( --sc-color-danger-primary-active, var(--sc-color-danger-primary-active-computed, #b30000) );--sc-color-danger-secondary-computed: hsl(from var(--sc-color-danger) h s 90);--sc-surface-danger-secondary: var( --sc-color-danger-secondary, var(--sc-color-danger-secondary-computed, #ffcccc) );--sc-color-danger-secondary-hover-computed: hsl( from var(--sc-color-danger-secondary) h s 95 );--sc-surface-danger-secondary-hover: var( --sc-color-danger-secondary-hover, var(--sc-color-danger-secondary-hover-computed, #ffe7e7) );--sc-color-danger-secondary-active-computed: hsl( from var(--sc-color-danger-secondary) h s 85 );--sc-surface-danger-secondary-active: var( --sc-color-danger-secondary-active, var(--sc-color-danger-secondary-active-computed, #ffb3b3) );--sc-content-danger: var( --sc-color-caution-text, hsl(from var(--sc-surface-danger-primary) h s 30) );--sc-content-danger-on-primary: #ffffff;--sc-border-danger: var(--sc-surface-danger-primary);--sc-color-disabled: hsl(from var(--sc-color-page-primary) h s calc(l * 0.5));--sc-surface-disabled: var(--sc-color-disabled, #d9d9d9);--sc-color-disabled-text: hsl( from var(--sc-color-text-primary) h s calc(l * 0.5) );--sc-content-disabled: var(--sc-color-disabled-text, #737373);--sc-content-disabled-on-disabled: var(--sc-color-disabled-text, #737373)}@supports(hanging-punctuation: first) and (font: -apple-system-body) and (-webkit-appearance: none){:root{--sc-color-background-hover-computed: hsl( from var(--sc-color-background) h s clamp(10%, calc(l + 5%), 95%) );--sc-color-background-active-computed: hsl( from var(--sc-color-background) h s clamp(5%, calc(l - 5%), 90%) );--sc-color-foreground-secondary-computed: hsl( from var(--sc-color-foreground) h s clamp(10%, calc(l + 5%), 90%) );--sc-color-brand-hover-computed: hsl( from var(--sc-color-brand) h s clamp(20%, calc(l + 5%), 95%) );--sc-color-brand-active-computed: hsl( from var(--sc-color-brand) h s clamp(10%, calc(l - 5%), 85%) );--sc-color-success-primary-hover-computed: hsl( from var(--sc-color-success) h s 30% );--sc-color-success-primary-active-computed: hsl( from var(--sc-color-success) h s 20% );--sc-color-success-secondary-computed: hsl( from var(--sc-color-success) h s 90% );--sc-color-success-secondary-hover-computed: hsl( from var(--sc-color-success-secondary) h s 95% );--sc-color-success-secondary-active-computed: hsl( from var(--sc-color-success-secondary) h s 85% );--sc-content-success: var( --sc-color-brand-text, hsl(from var(--sc-surface-success-primary) h s 30%) );--sc-color-caution-primary-hover-computed: hsl( from var(--sc-color-caution) h s 30% );--sc-color-caution-primary-active-computed: hsl( from var(--sc-color-caution) h s 20% );--sc-color-caution-secondary-computed: hsl( from var(--sc-color-caution) h s 90% );--sc-color-caution-secondary-hover-computed: hsl( from var(--sc-color-caution-secondary) h s 95% );--sc-color-caution-secondary-active-computed: hsl( from var(--sc-color-caution-secondary) h s 85% );--sc-content-caution: var( --sc-color-caution-text, hsl(from var(--sc-surface-caution-primary) h s 30%) );--sc-color-danger-primary-hover-computed: hsl( from var(--sc-color-danger) h s 30% );--sc-color-danger-primary-active-computed: hsl( from var(--sc-color-danger) h s 20% );--sc-color-danger-secondary-computed: hsl( from var(--sc-color-danger) h s 90% );--sc-color-danger-secondary-hover-computed: hsl( from var(--sc-color-danger-secondary) h s 95% );--sc-color-danger-secondary-active-computed: hsl( from var(--sc-color-danger-secondary) h s 85% );--sc-content-danger: var( --sc-color-caution-text, hsl(from var(--sc-surface-danger-primary) h s 30%) )}}.searchcraft-ad{font-family:var(--sc-font-family);line-height:1.25;-webkit-font-smoothing:antialiased}.searchcraft-ad-no-template{display:flex;flex-direction:column;font-size:.875rem}.searchcraft-ad-no-template>p{margin:0}.searchcraft-adm-ad{display:flex;flex-direction:column;justify-content:center;gap:16px}.searchcraft-search-result{font-family:var(--sc-font-family);line-height:1.25;-webkit-font-smoothing:antialiased}.searchcraft-search-result-no-template{display:flex;flex-direction:column;font-size:.875rem}.searchcraft-search-result-no-template>p{margin:0}.searchcraft-search-results{display:flex;flex-direction:column;justify-content:center;gap:16px}.searchcraft-search-results-empty-state{text-align:center}.searchcraft-search-results-error-message{text-align:center}.searchcraft-button{font-family:var(--sc-font-family);line-height:1.25;-webkit-font-smoothing:antialiased;font-size:var(--sc-body-font-size);font-weight:var(--sc-font-normal);background:none;border:2px solid rgba(0,0,0,0);border-radius:var(--sc-border-radius);cursor:pointer;display:flex;gap:4px;padding:12px;position:relative}.searchcraft-button.searchcraft-button-disabled{cursor:not-allowed}.searchcraft-button-primary{background-color:var(--sc-surface-brand-primary);color:var(--sc-content-brand-on-primary);font-weight:var(--sc-font-bold)}.searchcraft-button-primary:hover{background-color:var(--sc-surface-brand-primary-hover)}.searchcraft-button-primary:focus{border-color:var(--sc-border-primary)}.searchcraft-button-primary:active{background-color:var(--sc-surface-brand-primary-active)}.searchcraft-button-primary.searchcraft-button-disabled,.searchcraft-button-primary.searchcraft-button-disabled:hover,.searchcraft-button-primary.searchcraft-button-disabled:focus,.searchcraft-button-primary.searchcraft-button-disabled:active{background-color:var(--sc-surface-disabled);border-color:rgba(0,0,0,0);color:var(--sc-content-disabled)}.searchcraft-button-tertiary{background-color:var(--sc-surface-neutral-primary);color:var(--sc-content-brand);font-weight:var(--sc-font-normal)}.searchcraft-button-tertiary:hover{background-color:var(--sc-surface-brand-secondary-hover)}.searchcraft-button-tertiary:focus{background-color:var(--sc-surface-neutral-light);border-color:var(--sc-border-primary)}.searchcraft-button-tertiary:active{background-color:var(--sc-surface-brand-secondary-active)}.searchcraft-button-tertiary.searchcraft-button-disabled,.searchcraft-button-tertiary.searchcraft-button-disabled:hover,.searchcraft-button-tertiary.searchcraft-button-disabled:focus,.searchcraft-button-tertiary.searchcraft-button-disabled:active{background-color:var(--sc-surface-neutral-light);border-color:rgba(0,0,0,0);color:var(--sc-content-disabled)}.searchcraft-button-icon{fill:none}.searchcraft-error-message{font-family:var(--sc-font-family);line-height:1.25;-webkit-font-smoothing:antialiased;font-size:var(--sc-body-small-font-size);font-weight:var(--sc-font-normal);color:var(--sc-content-danger);margin:0}.searchcraft-facet-list{display:flex;flex-direction:column;gap:8px;width:100%}.searchcraft-facet-list-checkbox-label{align-items:center;color:var(--sc-content-neutral-primary);display:flex;font-family:var(--sc-font-family);line-height:1.25;-webkit-font-smoothing:antialiased;font-size:var(--sc-body-font-size);font-weight:var(--sc-font-normal);gap:8px;position:relative;-webkit-font-smoothing:antialiased}.searchcraft-facet-list-checkbox-input-wrapper{position:relative}.searchcraft-facet-list-checkbox-input{align-items:center;appearance:none;background-color:var(--sc-surface-neutral-secondary);border:1px solid var(--sc-surface-disabled);border-radius:var(--sc-border-radius);cursor:pointer;display:flex;height:24px;justify-content:center;width:24px;margin:0}.searchcraft-facet-list-checkbox-input:focus{outline:2px solid var(--sc-surface-brand-primary);outline-offset:2px}.searchcraft-facet-list-checkbox-input:checked{background-color:var(--sc-surface-brand-primary);position:relative}.searchcraft-facet-list-checkbox-input:checked+.searchcraft-facet-list-checkbox-input-check-icon{display:flex}.searchcraft-facet-list-checkbox-input:checked+.searchcraft-facet-list-checkbox-input-dash-icon{display:flex}.searchcraft-facet-child-list{display:flex;flex-direction:column;gap:6px}.searchcraft-facet-child-list-checkbox-label{margin-left:24px}.searchcraft-facet-child-list-checkbox-label:first-child{margin-top:6px}.searchcraft-facet-list-checkbox-input-check-icon{display:none;height:16px;left:50%;position:absolute;margin-top:2px;top:50%;transform:translate(-50%, -50%);width:16px}.searchcraft-facet-list-checkbox-input-dash-icon{display:none;height:3px;left:50%;position:absolute;top:50%;transform:translate(-50%, -50%);width:14px}.searchcraft-facet-list-message{font-family:var(--sc-font-family);line-height:1.25;-webkit-font-smoothing:antialiased;font-size:var(--sc-body-small-font-size);font-weight:var(--sc-font-normal);color:var(--sc-content-disabled);text-align:center}.searchcraft-filter-panel{display:flex;flex-direction:column;gap:16px}.searchcraft-filter-panel-section{display:flex;flex-direction:column;gap:8px}.searchcraft-filter-panel-label{font-family:var(--sc-font-family);line-height:1.25;-webkit-font-smoothing:antialiased;font-size:var(--sc-body-small-font-size);font-weight:var(--sc-font-normal);font-weight:var(--sc-font-bold)}:root{--sc-input-form-border-radius: var(--sc-border-radius);--sc-input-form-search-icon-size: 20px;--sc-input-form-clear-icon-size: 20px}.searchcraft-input-form-grid{display:grid;gap:4px 8px}.searchcraft-input-form-grid-button-left{grid-template-rows:repeat(3, auto);grid-template-columns:auto 1fr}.searchcraft-input-form-grid-button-left .searchcraft-input-form-button{grid-column:1/span 1;grid-row:2/span 1}.searchcraft-input-form-grid-button-left .searchcraft-input-form-label{grid-column:2/span 1;grid-row:1/span 1}.searchcraft-input-form-grid-button-left .searchcraft-input-form-error-message{grid-column:2/span 1;grid-row:3/span 1}.searchcraft-input-form-grid-button-left .searchcraft-input-form-input-wrapper{grid-column:2/span 1;grid-row:2/span 1}.searchcraft-input-form-grid-button-right{grid-template-rows:repeat(3, auto);grid-template-columns:1fr auto}.searchcraft-input-form-grid-button-right .searchcraft-input-form-button{grid-column:2/span 1;grid-row:2/span 1}.searchcraft-input-form-grid-button-right .searchcraft-input-form-label{grid-column:1/span 1;grid-row:1/span 1}.searchcraft-input-form-grid-button-right .searchcraft-input-form-error-message{grid-column:1/span 1;grid-row:3/span 1}.searchcraft-input-form-grid-button-right .searchcraft-input-form-input-wrapper{grid-column:1/span 1;grid-row:2/span 1}.searchcraft-input-form-grid-button-none{grid-template-rows:repeat(3, auto);grid-template-columns:auto}.searchcraft-input-form-grid-button-none .searchcraft-input-form-button{display:none}.searchcraft-input-form-grid-button-none .searchcraft-input-form-label{grid-column:1/span 1;grid-row:1/span 1}.searchcraft-input-form-grid-button-none .searchcraft-input-form-error-message{grid-column:1/span 1;grid-row:3/span 1}.searchcraft-input-form-grid-button-none .searchcraft-input-form-input-wrapper{grid-column:1/span 1;grid-row:2/span 1}.searchcraft-input-form-input-wrapper{display:flex;position:relative}.searchcraft-input-form-input{font-family:var(--sc-font-family);line-height:1.25;-webkit-font-smoothing:antialiased;font-size:var(--sc-body-font-size);font-weight:var(--sc-font-normal);background-color:var(--sc-surface-neutral-secondary);border-radius:var(--sc-input-form-border-radius);border:none;color:var(--sc-content-neutral-primary);flex:1;outline:none;padding:12px 44px}.searchcraft-input-form-input::placeholder{color:var(--sc-content-disabled)}.searchcraft-input-form-input:focus{outline:var(--sc-border-brand) solid 2px;outline-offset:-1px}.searchcraft-input-form-input.searchcraft-placeholder-hide-on-focus:focus::placeholder{opacity:0}.searchcraft-input-form-error{color:var(--sc-content-danger);outline:var(--sc-border-danger) solid 2px}.searchcraft-input-form-error:focus{outline:var(--sc-border-danger) solid 2px}.searchcraft-input-form-input-icon{align-items:center;bottom:0;display:flex;justify-content:center;left:0;position:absolute;pointer-events:none;top:0;width:44px}.searchcraft-input-form-input-search-icon{color:var(--sc-content-neutral-secondary);fill:none;height:var(--sc-input-form-search-icon-size);pointer-events:none;width:var(--sc-input-form-search-icon-size)}.searchcraft-input-form-clear-button{all:unset;align-items:center;bottom:0;border:none;cursor:pointer;display:flex;justify-content:center;outline:none;position:absolute;right:0;top:0;width:44px}.searchcraft-input-form-clear-icon{color:var(--sc-content-brand);fill:none;height:var(--sc-input-form-clear-icon-size);width:var(--sc-input-form-clear-icon-size)}.searchcraft-input-label{font-family:var(--sc-font-family);line-height:1.25;-webkit-font-smoothing:antialiased;font-size:var(--sc-body-small-font-size);font-weight:var(--sc-font-normal);color:var(--sc-content-neutral-primary);font-weight:var(--sc-font-bold);margin-top:4px;margin-bottom:4px}:root{--sc-popover-button-border-radius: var(--sc-border-radius)}@media(min-width: 576px){:root{--sc-popover-button-border-radius: var(--sc-border-radius-lg)}}.searchcraft-popover-button{font-family:var(--sc-font-family);line-height:1.25;-webkit-font-smoothing:antialiased;font-size:var(--sc-body-font-size);font-weight:var(--sc-font-normal);cursor:pointer}.searchcraft-popover-button-skeuomorphic{appearance:none;background:none;border:none;color:var(--sc-content-neutral-primary);display:block;width:100%}.searchcraft-popover-button-skeuomorphic .searchcraft-popover-button-wrapper{border:1px solid var(--sc-border-neutral);border-radius:var(--sc-popover-button-border-radius);box-shadow:0 1px 1px rgb(from var(--sc-content-neutral-secondary) r g b/10%) inset,0 2px 4px rgb(from var(--sc-content-neutral-secondary) r g b/5%) inset;display:flex;gap:24px;height:40px;justify-content:space-between;line-height:1;padding:4px 5px 4px 10px;background:var(--sc-surface-neutral-primary)}@media(min-width: 576px){.searchcraft-popover-button-skeuomorphic .searchcraft-popover-button-wrapper{box-shadow:0 1px 1px rgb(from var(--sc-content-neutral-secondary) r g b/10%) inset,0 2px 2px rgb(from var(--sc-content-neutral-secondary) r g b/5%) inset,0 4px 4px rgb(from var(--sc-content-neutral-secondary) r g b/5%) inset;height:63px;padding:8px 10px 8px 16px}}.searchcraft-popover-button-skeuomorphic .searchcraft-popover-button-input{align-items:center;display:flex;gap:4px}@media(min-width: 576px){.searchcraft-popover-button-skeuomorphic .searchcraft-popover-button-input{gap:8px}}.searchcraft-popover-button-skeuomorphic .searchcraft-popover-button-keycaps{color:var(--sc-content-neutral-secondary);display:flex;gap:4px;font-size:20px;font-weight:500}@media(min-width: 576px){.searchcraft-popover-button-skeuomorphic .searchcraft-popover-button-keycaps{gap:8px}}.searchcraft-popover-button-skeuomorphic .searchcraft-popover-button-keycaps-keycap{border-radius:calc(var(--sc-popover-button-border-radius) - 3px);border-radius:calc(var(var(--sc-popover-button-border-radius)) - 3px);background-color:var(--sc-surface-neutral-primary);box-shadow:0 3px hsl(from var(--sc-surface-neutral-secondary) h s calc(l - 5)),0 1px 2px rgb(from var(--sc-content-neutral-secondary) r g b/10%),0 6px 4px rgb(from var(--sc-content-neutral-secondary) r g b/5%);height:calc(100% - 2px);position:relative}@media(min-width: 576px){.searchcraft-popover-button-skeuomorphic .searchcraft-popover-button-keycaps-keycap{border-radius:calc(var(--sc-popover-button-border-radius) - 8px);border-radius:calc(var(var(--sc-popover-button-border-radius)) - 8px);box-shadow:0 4px hsl(from var(--sc-surface-neutral-secondary) h s calc(l - 5)),0 1px 2px rgb(from var(--sc-content-neutral-secondary) r g b/15%),0 6px 1px rgb(from var(--sc-content-neutral-secondary) r g b/20%),0 7px 2px rgb(from var(--sc-content-neutral-secondary) r g b/15%),0 9px 4px rgb(from var(--sc-content-neutral-secondary) r g b/10%),0 13px 8px rgb(from var(--sc-content-neutral-secondary) r g b/5%);height:calc(100% - 5px)}}.searchcraft-popover-button-skeuomorphic .searchcraft-popover-button-keycaps-keycap::before,.searchcraft-popover-button-skeuomorphic .searchcraft-popover-button-keycaps-keycap::after{content:"";display:block}.searchcraft-popover-button-skeuomorphic .searchcraft-popover-button-keycaps-keycap::before{border-radius:calc(var(--sc-popover-button-border-radius) - 4px);border-radius:calc(var(var(--sc-popover-button-border-radius)) - 4px);background:linear-gradient(340deg, rgb(from var(--sc-surface-neutral-secondary) r g b/2%) 0%, var(--sc-surface-neutral-secondary) 100%);inset:2px;position:absolute}@media(min-width: 576px){.searchcraft-popover-button-skeuomorphic .searchcraft-popover-button-keycaps-keycap::before{border-radius:calc(var(--sc-popover-button-border-radius) - 12px);border-radius:calc(var(var(--sc-popover-button-border-radius)) - 12px);inset:4px}}.searchcraft-popover-button-skeuomorphic .searchcraft-popover-button-keycaps-keycap::after{aspect-ratio:1/1;height:100%}.searchcraft-popover-button-skeuomorphic .searchcraft-popover-button-keycaps-keycap>span{display:flex;line-height:1;left:50%;margin-top:2%;position:absolute;top:50%;transform:translate(-50%, -50%)}.searchcraft-popover-button-skeuomorphic .searchcraft-popover-button-input-search-icon{height:60%;width:auto}@media(min-width: 576px){.searchcraft-popover-button-skeuomorphic .searchcraft-popover-button-input-search-icon{height:50%}}:root{--sc-popover-list-view-height: 600px;--sc-popover-modal-max-width: 800px}.searchcraft-popover-form{font-family:var(--sc-font-family);line-height:1.25;-webkit-font-smoothing:antialiased;font-size:var(--sc-body-font-size);font-weight:var(--sc-font-normal);display:flex;flex:1;flex-direction:column}.searchcraft-popover-form searchcraft-input-form,.searchcraft-popover-form searchcraft-popover-footer{width:100%}.searchcraft-popover-form.searchcraft-popover-form-active .searchcraft-popover-form-input{padding-bottom:1px}.searchcraft-popover-form searchcraft-popover-list-view{flex-shrink:1;height:100%;min-height:0;overflow:auto;padding:0 24px}.searchcraft-popover-form-input{display:flex;flex-direction:row;gap:12px}.searchcraft-popover-form-input .searchcraft-input-form-input{background-color:var(--sc-surface-neutral-primary);border:1px solid var(--sc-border-neutral);border-radius:var(--sc-border-radius-lg);box-shadow:0 1px 1px rgb(from var(--sc-content-neutral-primary) r g b/10%) inset,0 2px 2px rgb(from var(--sc-content-neutral-primary) r g b/5%) inset,0 4px 4px rgb(from var(--sc-content-neutral-primary) r g b/5%) inset;width:0}.searchcraft-popover-form-cancel-button{background:none;border:none;cursor:pointer;font-size:14px}.searchcraft-popover-form-modal-input,.searchcraft-popover-form-fullscreen-input{padding:24px}.searchcraft-popover-form-modal-popover-list-view,.searchcraft-popover-form-fullscreen-popover-list-view{flex-grow:1;flex-shrink:1;min-height:0;overflow:auto;padding:0 24px}.searchcraft-popover-form-inline{background-color:var(--sc-surface-neutral-primary);border:1px solid rgba(0,0,0,0);border-radius:var(--sc-border-radius-xl);padding:12px;position:relative}.searchcraft-popover-form-inline.searchcraft-popover-form-active{border:1px solid var(--sc-border-neutral);border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0;padding-bottom:1px}.searchcraft-popover-form-inline searchcraft-popover-list-view{padding:0 12px}.searchcraft-popover-form-inline .searchcraft-input-form-input,.searchcraft-popover-form-inline .searchcraft-popover-list-item-link,.searchcraft-popover-form-inline .searchcraft-adm-ad-link{border-radius:calc(--sc-border-radius-xl - 12px);border-radius:calc(var(--sc-border-radius-xl) - 12px)}.searchcraft-popover-form-inline-wrapper{background-color:var(--sc-surface-neutral-primary);border:1px solid var(--sc-border-neutral);border-top:none;border-bottom-left-radius:var(--sc-border-radius-xl);border-bottom-right-radius:var(--sc-border-radius-xl);display:flex;flex-direction:column;left:-1px;max-height:var(--sc-popover-list-view-height);overflow:hidden;position:absolute;right:-1px;top:100%}.searchcraft-popover-form-modal{align-items:center;display:flex;inset:0;position:fixed;z-index:1000}.searchcraft-popover-form-modal .searchcraft-input-form-input,.searchcraft-popover-form-modal .searchcraft-popover-list-item-link,.searchcraft-popover-form-modal .searchcraft-adm-ad-link{border-radius:calc(--sc-border-radius-2xl - 20px);border-radius:calc(var(--sc-border-radius-2xl) - 20px)}.searchcraft-popover-form-modal-backdrop{background-color:rgb(from var(--sc-content-neutral-primary) r g b/50%);display:none;inset:0;position:fixed}@media(min-width: 576px){.searchcraft-popover-form-modal-backdrop{display:block}}.searchcraft-popover-form-modal-wrapper{background-color:var(--sc-surface-neutral-primary);box-shadow:1px 2px rgb(from var(--sc-content-neutral-primary) r g b/7%),0 2px 4px rgb(from var(--sc-content-neutral-primary) r g b/7%),0 4px 8px rgb(from var(--sc-content-neutral-primary) r g b/7%),0 8px 16px rgb(from var(--sc-content-neutral-primary) r g b/7%),0 16px 32px rgb(from var(--sc-content-neutral-primary) r g b/7%),0 32px 64px rgb(from var(--sc-content-neutral-primary) r g b/7%);display:flex;flex-direction:column;inset:0;max-width:var(--sc-popover-modal-max-width);overflow:hidden;position:absolute;width:100%;z-index:1001}@media(min-width: 576px){.searchcraft-popover-form-modal-wrapper{border-radius:var(--sc-border-radius-2xl);inset:0;margin-top:100px;max-height:var(--sc-popover-list-view-height);max-width:var(--sc-popover-modal-max-width);position:relative}}.searchcraft-popover-form-modal-cancel-button{border-radius:calc(--sc-border-radius-2xl - 20px);border-radius:calc(var(--sc-border-radius-2xl) - 20px);padding:8px}@media(min-width: 576px){.searchcraft-popover-form-modal-cancel-button{padding:8px 12px}}.searchcraft-popover-form-fullscreen{background-color:var(--sc-surface-neutral-primary);display:flex;flex-direction:column;justify-content:space-between;inset:0;position:fixed;z-index:1000}.searchcraft-popover-form-fullscreen .searchcraft-popover-list-item-link,.searchcraft-popover-form-fullscreen .searchcraft-adm-ad-link{border-radius:var(--sc-border-radius-lg)}.searchcraft-popover-form-fullscreen-cancel-button{border-radius:var(--sc-border-radius-lg);padding:8px}@media(min-width: 576px){.searchcraft-popover-form-fullscreen-cancel-button{padding:8px 12px}}.searchcraft-popover-footer{font-family:var(--sc-font-family);line-height:1.25;-webkit-font-smoothing:antialiased;background-color:var(--sc-surface-neutral-secondary);box-shadow:0 1px 1px rgb(from var(--sc-content-neutral-primary) r g b/10%) inset,0 2px 2px rgb(from var(--sc-content-neutral-primary) r g b/5%) inset,0 4px 4px rgb(from var(--sc-content-neutral-primary) r g b/5%) inset;display:flex;gap:8px;justify-content:space-between;line-height:1;padding:20px 24px}@media(min-width: 576px){.searchcraft-popover-footer{padding:20px 32px}}.searchcraft-popover-footer-results-info{margin:0}.searchcraft-popover-footer-link{color:var(--sc-content-neutral-primary);display:flex;max-width:160px;width:100%}:root{--sc-popover-list-item-image-fit: contain}.searchcraft-popover-list-item{font-family:var(--sc-font-family);line-height:1.25;-webkit-font-smoothing:antialiased;border-bottom:1px solid var(--sc-border-neutral);padding:12px 0}searchcraft-popover-list-item:last-child .searchcraft-popover-list-item{border-bottom:none}.searchcraft-popover-list-item-link{align-items:flex-start;color:var(--sc-content-neutral-primary);display:flex;gap:24px;padding:12px;text-decoration:none}.searchcraft-popover-list-item-link:focus,.searchcraft-popover-list-item-link:active{background-color:var(--sc-surface-neutral-primary-active)}.searchcraft-popover-list-item-link:hover{background-color:var(--sc-surface-neutral-primary-hover)}.searchcraft-popover-list-item-image-wrapper{align-items:center;aspect-ratio:16/9;display:flex;flex-shrink:0;justify-content:center;width:160px}.searchcraft-popover-list-item-image{height:100%;object-fit:var(--sc-popover-list-item-image-fit);width:100%}.searchcraft-popover-list-item-content{display:flex;flex-direction:column;flex-grow:1;gap:4px;justify-content:center}.searchcraft-popover-list-item-content-title,.searchcraft-popover-list-item-content-subtitle{display:-webkit-box;line-clamp:2;margin:0;overflow:hidden;-webkit-line-clamp:2;-webkit-box-orient:vertical}.searchcraft-popover-list-item-content-title{font-family:var(--sc-font-family);line-height:1.25;-webkit-font-smoothing:antialiased;font-size:var(--sc-heading-5-font-size);font-weight:var(--sc-font-bold)}.searchcraft-popover-list-item-content-subtitle{font-family:var(--sc-font-family);line-height:1.25;-webkit-font-smoothing:antialiased;font-size:var(--sc-body-font-size);font-weight:var(--sc-font-normal)}.searchcraft-popover-list-view{display:flex;flex-direction:column}.searchcraft-results-info{font-family:var(--sc-font-family);line-height:1.25;-webkit-font-smoothing:antialiased;font-size:var(--sc-body-font-size);font-weight:var(--sc-font-normal);color:var(--sc-content-primary);margin:0}.searchcraft-slider{align-items:center;display:flex;flex-direction:column;gap:10px;width:100%;margin-top:4px}.searchcraft-slider-range{align-items:center;background-color:var(--sc-surface-disabled);border-radius:999px;display:flex;position:relative;height:4px;width:100%}.searchcraft-slider-range::-webkit-slider-runnable-track{pointer-events:none}.searchcraft-slider-range .searchcraft-slider-active-range{background-color:var(--sc-surface-brand-primary);border-radius:2px;height:4px;position:absolute;top:50%;transform:translateY(-50%);z-index:0}.searchcraft-slider-range .searchcraft-slider-active-range::-webkit-slider-runnable-track{pointer-events:none}.searchcraft-slider-range .searchcraft-slider-active-range::-moz-range-track{pointer-events:none}.searchcraft-slider-range .searchcraft-slider-input{appearance:none;background:rgba(0,0,0,0);border-radius:2px;height:4px;margin:0;outline:none;pointer-events:none;position:absolute;width:100%;-webkit-appearance:none}.searchcraft-slider-range .searchcraft-slider-input::-webkit-slider-thumb{background-color:var(--sc-surface-neutral-light);border-radius:50%;border:1px solid var(--sc-border-neutral);cursor:pointer;height:18px;pointer-events:all;width:18px;-webkit-appearance:none}.searchcraft-slider-range .searchcraft-slider-input::-moz-range-thumb{background-color:var(--sc-surface-neutral-light);border-radius:50%;border:1px solid var(--sc-border-neutral);cursor:pointer;height:18px;pointer-events:all;width:18px}.searchcraft-slider-range .searchcraft-slider-input:focus::-webkit-slider-thumb{outline:2px solid var(--sc-surface-brand-primary)}.searchcraft-slider-range .searchcraft-slider-input:focus::-moz-range-thumb{outline:2px solid var(--sc-surface-brand-primary)}.searchcraft-slider-label{color:var(--sc-content-primary);display:flex;font-family:var(--sc-font-family);line-height:1.25;-webkit-font-smoothing:antialiased;font-size:var(--sc-body-small-font-size);font-weight:var(--sc-font-normal);justify-content:space-between;margin-top:4px;width:100%}.searchcraft-slider-start-label,.searchcraft-slider-end-label{min-width:30px;text-align:center}.searchcraft-toggle-button{align-items:flex-start;display:flex;gap:10px;justify-content:space-between}.searchcraft-toggle-button-label{font-family:var(--sc-font-family);line-height:1.25;-webkit-font-smoothing:antialiased;font-size:var(--sc-body-font-size);font-weight:var(--sc-font-normal);color:var(--sc-content-neutral-primary);margin:0}.searchcraft-toggle-button-sub-label{font-family:var(--sc-font-family);line-height:1.25;-webkit-font-smoothing:antialiased;font-size:var(--sc-body-small-font-size);font-weight:var(--sc-font-normal);color:var(--sc-content-neutral-secondary);margin:0}.searchcraft-toggle-button-background{background:var(--sc-surface-disabled);border-radius:var(--sc-border-radius-full);border:none;cursor:pointer;flex-shrink:0;height:26px;position:relative;transition:background-color .2s;width:44px}.searchcraft-toggle-button-handle{background:var(--sc-surface-neutral-light);border-radius:50%;height:18px;left:4px;position:absolute;top:calc(50% - 9px);transition:transform .3s ease;width:18px}.searchcraft-toggle-button-active .searchcraft-toggle-button-background{background:var(--sc-surface-brand-primary);box-shadow:0px 0px 0px 1px rgba(0,0,0,.05)}.searchcraft-toggle-button-active .searchcraft-toggle-button-handle{transform:translateX(16px)}.searchcraft-pagination{display:inline-grid;gap:16px;grid-template-columns:repeat(3, auto);grid-template-rows:1fr}.searchcraft-pagination-list{border:1px solid var(--sc-border-neutral);border-radius:var(--sc-border-radius);display:flex;list-style-type:none;margin:0;overflow:hidden;padding:0;width:auto}.searchcraft-pagination-list li{border-right:1px solid var(--sc-border-neutral);height:100%;min-height:44px;width:44px}.searchcraft-pagination-list li:last-child{border-right:none}.searchcraft-pagination-item{font-family:var(--sc-font-family);line-height:1.25;-webkit-font-smoothing:antialiased;font-size:var(--sc-body-font-size);font-weight:var(--sc-font-normal);align-items:center;background-color:var(--sc-surface-neutral-primary);border:none;display:flex;height:100%;justify-content:center;width:100%}.searchcraft-pagination-item-active{background-color:var(--sc-surface-brand-secondary);font-weight:var(--sc-font-bold)}.searchcraft-pagination-control{border:1px solid var(--sc-border-neutral);border-radius:var(--sc-border-radius)}.searchcraft-pagination-range{font-family:var(--sc-font-family);line-height:1.25;-webkit-font-smoothing:antialiased;font-size:var(--sc-body-font-size);font-weight:var(--sc-font-normal);align-items:center;display:flex}.searchcraft-select{display:flex;flex-direction:column;gap:4px}.searchcraft-select-label{font-family:var(--sc-font-family);line-height:1.25;-webkit-font-smoothing:antialiased;font-size:var(--sc-body-small-font-size);font-weight:var(--sc-font-normal);font-weight:var(--sc-font-bold)}.searchcraft-select-input-wrapper{position:relative}.searchcraft-select-input{font-family:var(--sc-font-family);line-height:1.25;-webkit-font-smoothing:antialiased;font-size:var(--sc-body-font-size);font-weight:var(--sc-font-normal);appearance:none;background-color:var(--sc-surface-neutral-secondary);border:2px solid rgba(0,0,0,0);border-radius:var(--sc-border-radius);cursor:pointer;height:44px;padding:0 44px 0 16px;width:100%}.searchcraft-select-input:hover{background-color:var(--sc-surface-neutral-secondary-hover)}.searchcraft-select-input:active{background-color:var(--sc-surface-neutral-secondary-active)}.searchcraft-select-input:focus{border-color:var(--sc-border-brand);outline:none}.searchcraft-select-input-icon{fill:none;pointer-events:none;position:absolute;right:12px;top:50%;transform:translateY(-50%)}.searchcraft-select-caption{font-family:var(--sc-font-family);line-height:1.25;-webkit-font-smoothing:antialiased;font-size:var(--sc-body-small-font-size);font-weight:var(--sc-font-normal)}.searchcraft-search-results-per-page{display:flex}.searchcraft-search-results-per-page-select{align-items:center;display:flex;gap:12px}.searchcraft-search-results-per-page-select-label{font-family:var(--sc-font-family);line-height:1.25;-webkit-font-smoothing:antialiased;font-size:var(--sc-body-font-size);font-weight:var(--sc-font-normal)}.searchcraft-search-results-per-page-select-input{min-width:120px}/*# sourceMappingURL=hologram.css.map */
7684
7911
  `;
7685
7912
 
7686
7913
  /**