@searchcraft/javascript-sdk 0.10.4 → 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 +49 -19
  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-9d2e55a7.js → p-6c471ee0.js} +3 -3
  6. package/dist/components/{p-9d2e55a7.js.map → p-6c471ee0.js.map} +1 -1
  7. package/dist/components/{p-60fd824d.js → p-7c10ca44.js} +238 -226
  8. package/dist/components/p-7c10ca44.js.map +1 -0
  9. package/dist/components/{p-4c610bc4.js → p-8a4cfe99.js} +2 -2
  10. package/dist/components/{p-4c610bc4.js.map → p-8a4cfe99.js.map} +1 -1
  11. package/dist/components/{p-2d975f19.js → p-b72015a6.js} +2 -2
  12. package/dist/components/{p-2d975f19.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-6065aee1.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-6ed5cca1.js → p-d9222264.js} +4 -4
  20. package/dist/components/{p-6ed5cca1.js.map → p-d9222264.js.map} +1 -1
  21. package/dist/components/{p-35ee16e2.js → p-f1afb299.js} +2 -2
  22. package/dist/components/{p-35ee16e2.js.map → p-f1afb299.js.map} +1 -1
  23. package/dist/components/{p-eb633481.js → p-f4b0ff45.js} +3 -3
  24. package/dist/components/{p-eb633481.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 +586 -371
  45. package/dist/hydrate/index.mjs +586 -371
  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 +2 -1
  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-163402fb.js +0 -291
  59. package/dist/components/p-163402fb.js.map +0 -1
  60. package/dist/components/p-4d37616e.js +0 -105
  61. package/dist/components/p-4d37616e.js.map +0 -1
  62. package/dist/components/p-6065aee1.js.map +0 -1
  63. package/dist/components/p-60fd824d.js.map +0 -1
  64. package/dist/components/p-7c650118.js +0 -110
  65. package/dist/components/p-7c650118.js.map +0 -1
@@ -3178,12 +3178,12 @@ Object.keys(react).forEach(function (k) {
3178
3178
 
3179
3179
  var B = Object.defineProperty;
3180
3180
  var N = (a, e, n) => e in a ? B(a, e, { enumerable: !0, configurable: !0, writable: !0, value: n }) : a[e] = n;
3181
- var l = (a, e, n) => N(a, typeof e != "symbol" ? e + "" : e, n);
3181
+ var h = (a, e, n) => N(a, typeof e != "symbol" ? e + "" : e, n);
3182
3182
  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 || {});
3183
3183
  class pe {
3184
3184
  constructor(e) {
3185
- l(this, "logLevel");
3186
- l(this, "logFormatter");
3185
+ h(this, "logLevel");
3186
+ h(this, "logFormatter");
3187
3187
  this.logLevel = e.logLevel || 1, this.logFormatter = e.logFormatter || this.defaultFormatter;
3188
3188
  }
3189
3189
  defaultFormatter(e, n) {
@@ -3218,86 +3218,86 @@ class pe {
3218
3218
  }
3219
3219
  }
3220
3220
  }
3221
- function w(a, e, n, r) {
3222
- return new (n || (n = Promise))(function(i, o) {
3221
+ function y(a, e, n, r) {
3222
+ return new (n || (n = Promise))(function(s, o) {
3223
3223
  function t(c) {
3224
3224
  try {
3225
3225
  d(r.next(c));
3226
- } catch (s) {
3227
- o(s);
3226
+ } catch (i) {
3227
+ o(i);
3228
3228
  }
3229
3229
  }
3230
3230
  function u(c) {
3231
3231
  try {
3232
3232
  d(r.throw(c));
3233
- } catch (s) {
3234
- o(s);
3233
+ } catch (i) {
3234
+ o(i);
3235
3235
  }
3236
3236
  }
3237
3237
  function d(c) {
3238
- var s;
3239
- c.done ? i(c.value) : (s = c.value, s instanceof n ? s : new n(function(p) {
3240
- p(s);
3238
+ var i;
3239
+ c.done ? s(c.value) : (i = c.value, i instanceof n ? i : new n(function(p) {
3240
+ p(i);
3241
3241
  })).then(t, u);
3242
3242
  }
3243
3243
  d((r = r.apply(a, [])).next());
3244
3244
  });
3245
3245
  }
3246
- function y(a, e) {
3247
- var n, r, i, o, t = { label: 0, sent: function() {
3248
- if (1 & i[0]) throw i[1];
3249
- return i[1];
3246
+ function w(a, e) {
3247
+ var n, r, s, o, t = { label: 0, sent: function() {
3248
+ if (1 & s[0]) throw s[1];
3249
+ return s[1];
3250
3250
  }, trys: [], ops: [] };
3251
3251
  return o = { next: u(0), throw: u(1), return: u(2) }, typeof Symbol == "function" && (o[Symbol.iterator] = function() {
3252
3252
  return this;
3253
3253
  }), o;
3254
3254
  function u(d) {
3255
3255
  return function(c) {
3256
- return function(s) {
3256
+ return function(i) {
3257
3257
  if (n) throw new TypeError("Generator is already executing.");
3258
- for (; o && (o = 0, s[0] && (t = 0)), t; ) try {
3259
- 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;
3260
- switch (r = 0, i && (s = [2 & s[0], i.value]), s[0]) {
3258
+ for (; o && (o = 0, i[0] && (t = 0)), t; ) try {
3259
+ 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;
3260
+ switch (r = 0, s && (i = [2 & i[0], s.value]), i[0]) {
3261
3261
  case 0:
3262
3262
  case 1:
3263
- i = s;
3263
+ s = i;
3264
3264
  break;
3265
3265
  case 4:
3266
- return t.label++, { value: s[1], done: !1 };
3266
+ return t.label++, { value: i[1], done: !1 };
3267
3267
  case 5:
3268
- t.label++, r = s[1], s = [0];
3268
+ t.label++, r = i[1], i = [0];
3269
3269
  continue;
3270
3270
  case 7:
3271
- s = t.ops.pop(), t.trys.pop();
3271
+ i = t.ops.pop(), t.trys.pop();
3272
3272
  continue;
3273
3273
  default:
3274
- if (i = t.trys, !((i = i.length > 0 && i[i.length - 1]) || s[0] !== 6 && s[0] !== 2)) {
3274
+ if (s = t.trys, !((s = s.length > 0 && s[s.length - 1]) || i[0] !== 6 && i[0] !== 2)) {
3275
3275
  t = 0;
3276
3276
  continue;
3277
3277
  }
3278
- if (s[0] === 3 && (!i || s[1] > i[0] && s[1] < i[3])) {
3279
- t.label = s[1];
3278
+ if (i[0] === 3 && (!s || i[1] > s[0] && i[1] < s[3])) {
3279
+ t.label = i[1];
3280
3280
  break;
3281
3281
  }
3282
- if (s[0] === 6 && t.label < i[1]) {
3283
- t.label = i[1], i = s;
3282
+ if (i[0] === 6 && t.label < s[1]) {
3283
+ t.label = s[1], s = i;
3284
3284
  break;
3285
3285
  }
3286
- if (i && t.label < i[2]) {
3287
- t.label = i[2], t.ops.push(s);
3286
+ if (s && t.label < s[2]) {
3287
+ t.label = s[2], t.ops.push(i);
3288
3288
  break;
3289
3289
  }
3290
- i[2] && t.ops.pop(), t.trys.pop();
3290
+ s[2] && t.ops.pop(), t.trys.pop();
3291
3291
  continue;
3292
3292
  }
3293
- s = e.call(a, t);
3293
+ i = e.call(a, t);
3294
3294
  } catch (p) {
3295
- s = [6, p], r = 0;
3295
+ i = [6, p], r = 0;
3296
3296
  } finally {
3297
- n = i = 0;
3297
+ n = s = 0;
3298
3298
  }
3299
- if (5 & s[0]) throw s[1];
3300
- return { value: s[0] ? s[1] : void 0, done: !0 };
3299
+ if (5 & i[0]) throw i[1];
3300
+ return { value: i[0] ? i[1] : void 0, done: !0 };
3301
3301
  }([d, c]);
3302
3302
  };
3303
3303
  }
@@ -3312,54 +3312,54 @@ var m = new Uint32Array([597399067, 2869860233, 951274213, 2716044179]);
3312
3312
  function g(a, e) {
3313
3313
  return a << e | a >>> 32 - e;
3314
3314
  }
3315
- function I(a, e) {
3315
+ function _(a, e) {
3316
3316
  var n;
3317
3317
  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");
3318
3318
  var r = new Uint32Array([e, e, e, e]);
3319
3319
  (((function(o, t) {
3320
3320
  for (var u = o.byteLength / 16 | 0, d = new Uint32Array(o, 0, 4 * u), c = 0; c < u; c++) {
3321
- var s = d.subarray(4 * c, 4 * (c + 1));
3322
- 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;
3321
+ var i = d.subarray(4 * c, 4 * (c + 1));
3322
+ 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;
3323
3323
  }
3324
3324
  })))(a, r), function(o, t) {
3325
- var u = o.byteLength / 16 | 0, d = o.byteLength % 16, c = new Uint32Array(4), s = new Uint8Array(o, 16 * u, d);
3325
+ var u = o.byteLength / 16 | 0, d = o.byteLength % 16, c = new Uint32Array(4), i = new Uint8Array(o, 16 * u, d);
3326
3326
  switch (d) {
3327
3327
  case 15:
3328
- c[3] = c[3] ^ s[14] << 16;
3328
+ c[3] = c[3] ^ i[14] << 16;
3329
3329
  case 14:
3330
- c[3] = c[3] ^ s[13] << 8;
3330
+ c[3] = c[3] ^ i[13] << 8;
3331
3331
  case 13:
3332
- 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];
3332
+ 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];
3333
3333
  case 12:
3334
- c[2] = c[2] ^ s[11] << 24;
3334
+ c[2] = c[2] ^ i[11] << 24;
3335
3335
  case 11:
3336
- c[2] = c[2] ^ s[10] << 16;
3336
+ c[2] = c[2] ^ i[10] << 16;
3337
3337
  case 10:
3338
- c[2] = c[2] ^ s[9] << 8;
3338
+ c[2] = c[2] ^ i[9] << 8;
3339
3339
  case 9:
3340
- 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];
3340
+ 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];
3341
3341
  case 8:
3342
- c[1] = c[1] ^ s[7] << 24;
3342
+ c[1] = c[1] ^ i[7] << 24;
3343
3343
  case 7:
3344
- c[1] = c[1] ^ s[6] << 16;
3344
+ c[1] = c[1] ^ i[6] << 16;
3345
3345
  case 6:
3346
- c[1] = c[1] ^ s[5] << 8;
3346
+ c[1] = c[1] ^ i[5] << 8;
3347
3347
  case 5:
3348
- 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];
3348
+ 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];
3349
3349
  case 4:
3350
- c[0] = c[0] ^ s[3] << 24;
3350
+ c[0] = c[0] ^ i[3] << 24;
3351
3351
  case 3:
3352
- c[0] = c[0] ^ s[2] << 16;
3352
+ c[0] = c[0] ^ i[2] << 16;
3353
3353
  case 2:
3354
- c[0] = c[0] ^ s[1] << 8;
3354
+ c[0] = c[0] ^ i[1] << 8;
3355
3355
  case 1:
3356
- 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];
3356
+ 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];
3357
3357
  }
3358
3358
  }(a, r), function(o, t) {
3359
3359
  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;
3360
3360
  }(a, r);
3361
- var i = new Uint8Array(r.buffer);
3362
- return Array.from(i).map(function(o) {
3361
+ var s = new Uint8Array(r.buffer);
3362
+ return Array.from(s).map(function(o) {
3363
3363
  return o.toString(16).padStart(2, "0");
3364
3364
  }).join("");
3365
3365
  }
@@ -3368,8 +3368,8 @@ function H(a) {
3368
3368
  return e;
3369
3369
  }
3370
3370
  function L(a, e, n) {
3371
- for (var r = [], i = 0; i < a[0].data.length; i++) {
3372
- for (var o = [], t = 0; t < a.length; t++) o.push(a[t].data[i]);
3371
+ for (var r = [], s = 0; s < a[0].data.length; s++) {
3372
+ for (var o = [], t = 0; t < a.length; t++) o.push(a[t].data[s]);
3373
3373
  r.push(Q(o));
3374
3374
  }
3375
3375
  var u = new Uint8ClampedArray(r);
@@ -3379,28 +3379,28 @@ function Q(a) {
3379
3379
  if (a.length === 0) return 0;
3380
3380
  for (var e = {}, n = 0, r = a; n < r.length; n++)
3381
3381
  e[o = r[n]] = (e[o] || 0) + 1;
3382
- var i = a[0];
3383
- for (var o in e) e[o] > e[i] && (i = parseInt(o, 10));
3384
- return i;
3382
+ var s = a[0];
3383
+ for (var o in e) e[o] > e[s] && (s = parseInt(o, 10));
3384
+ return s;
3385
3385
  }
3386
3386
  function C() {
3387
3387
  if (typeof navigator > "u") return { name: "unknown", version: "unknown" };
3388
3388
  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++) {
3389
- var i = r[n], o = a.match(i);
3389
+ var s = r[n], o = a.match(s);
3390
3390
  if (o && o.groups) return { name: e[o.groups.name] || o.groups.name, version: o.groups.version };
3391
3391
  }
3392
3392
  return { name: "unknown", version: "unknown" };
3393
3393
  }
3394
3394
  v("audio", function() {
3395
- return w(this, void 0, void 0, function() {
3396
- return y(this, function(a) {
3395
+ return y(this, void 0, void 0, function() {
3396
+ return w(this, function(a) {
3397
3397
  return [2, new Promise(function(e, n) {
3398
3398
  try {
3399
- var r = new (window.OfflineAudioContext || window.webkitOfflineAudioContext)(1, 5e3, 44100), i = r.createBufferSource(), o = r.createOscillator();
3399
+ var r = new (window.OfflineAudioContext || window.webkitOfflineAudioContext)(1, 5e3, 44100), s = r.createBufferSource(), o = r.createOscillator();
3400
3400
  o.frequency.value = 1e3;
3401
3401
  var t, u = r.createDynamicsCompressor();
3402
3402
  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) {
3403
- t = d.renderedBuffer.getChannelData(0), e({ sampleHash: H(t), oscillator: o.type, maxChannels: r.destination.maxChannelCount, channelCountMode: i.channelCountMode });
3403
+ t = d.renderedBuffer.getChannelData(0), e({ sampleHash: H(t), oscillator: o.type, maxChannels: r.destination.maxChannelCount, channelCountMode: s.channelCountMode });
3404
3404
  }, r.startRendering();
3405
3405
  } catch (d) {
3406
3406
  console.error("Error creating audio fingerprint:", d), n(d);
@@ -3409,35 +3409,35 @@ v("audio", function() {
3409
3409
  });
3410
3410
  });
3411
3411
  });
3412
- var K = C().name !== "SamsungBrowser" ? 1 : 3, P = 280, k = 20;
3412
+ var K = C().name !== "SamsungBrowser" ? 1 : 3, P = 280, F = 20;
3413
3413
  C().name != "Firefox" && v("canvas", function() {
3414
3414
  return document.createElement("canvas").getContext("2d"), new Promise(function(a) {
3415
3415
  var e = Array.from({ length: K }, function() {
3416
3416
  return function() {
3417
3417
  var n = document.createElement("canvas"), r = n.getContext("2d");
3418
3418
  if (!r) return new ImageData(1, 1);
3419
- n.width = P, n.height = k;
3420
- var i = r.createLinearGradient(0, 0, n.width, n.height);
3421
- 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);
3419
+ n.width = P, n.height = F;
3420
+ var s = r.createLinearGradient(0, 0, n.width, n.height);
3421
+ 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);
3422
3422
  var o = "Random Text WMwmil10Oo";
3423
3423
  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();
3424
3424
  var t = r.getImageData(0, 0, n.width, n.height);
3425
3425
  return t;
3426
3426
  }();
3427
3427
  });
3428
- a({ commonImageDataHash: I(L(e, P, k).data.toString()).toString() });
3428
+ a({ commonImageDataHash: _(L(e, P, F).data.toString()).toString() });
3429
3429
  });
3430
3430
  });
3431
- 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"];
3432
- function F(a, e) {
3431
+ 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"];
3432
+ function k(a, e) {
3433
3433
  if (!a) throw new Error("Canvas context not supported");
3434
3434
  return a.font = "72px ".concat(e), a.measureText("WwMmLli0Oo").width;
3435
3435
  }
3436
3436
  function Y() {
3437
3437
  var a, e = document.createElement("canvas"), n = (a = e.getContext("webgl")) !== null && a !== void 0 ? a : e.getContext("experimental-webgl");
3438
3438
  if (n && "getParameter" in n) try {
3439
- 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() };
3440
- if (!i.length || !r.length) {
3439
+ 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() };
3440
+ if (!s.length || !r.length) {
3441
3441
  var t = n.getExtension("WEBGL_debug_renderer_info");
3442
3442
  if (t) {
3443
3443
  var u = (n.getParameter(t.UNMASKED_VENDOR_WEBGL) || "").toString(), d = (n.getParameter(t.UNMASKED_RENDERER_WEBGL) || "").toString();
@@ -3456,12 +3456,12 @@ function Z() {
3456
3456
  function ee(a, e) {
3457
3457
  var n = {};
3458
3458
  return e.forEach(function(r) {
3459
- var i = function(o) {
3459
+ var s = function(o) {
3460
3460
  if (o.length === 0) return null;
3461
3461
  var t = {};
3462
3462
  o.forEach(function(c) {
3463
- var s = String(c);
3464
- t[s] = (t[s] || 0) + 1;
3463
+ var i = String(c);
3464
+ t[i] = (t[i] || 0) + 1;
3465
3465
  });
3466
3466
  var u = o[0], d = 1;
3467
3467
  return Object.keys(t).forEach(function(c) {
@@ -3472,7 +3472,7 @@ function ee(a, e) {
3472
3472
  }).filter(function(o) {
3473
3473
  return o !== void 0;
3474
3474
  }));
3475
- i && (n[r] = i);
3475
+ s && (n[r] = s);
3476
3476
  }), n;
3477
3477
  }
3478
3478
  function te() {
@@ -3496,36 +3496,36 @@ C().name != "Firefox" && v("fonts", function() {
3496
3496
  return new Promise(function(e, n) {
3497
3497
  try {
3498
3498
  (function(r) {
3499
- var i;
3500
- w(this, void 0, void 0, function() {
3499
+ var s;
3500
+ y(this, void 0, void 0, function() {
3501
3501
  var o, t, u;
3502
- return y(this, function(d) {
3502
+ return w(this, function(d) {
3503
3503
  switch (d.label) {
3504
3504
  case 0:
3505
3505
  return document.body ? [3, 2] : [4, (c = 50, new Promise(function(p) {
3506
- return setTimeout(p, c, s);
3506
+ return setTimeout(p, c, i);
3507
3507
  }))];
3508
3508
  case 1:
3509
3509
  return d.sent(), [3, 0];
3510
3510
  case 2:
3511
- 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");
3511
+ 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");
3512
3512
  return r({ iframe: u }), setTimeout(function() {
3513
3513
  document.body.removeChild(o);
3514
3514
  }, 0), [2];
3515
3515
  }
3516
- var c, s;
3516
+ var c, i;
3517
3517
  });
3518
3518
  });
3519
3519
  })(function(r) {
3520
- var i = r.iframe;
3521
- return w(a, void 0, void 0, function() {
3520
+ var s = r.iframe;
3521
+ return y(a, void 0, void 0, function() {
3522
3522
  var o, t, u, d;
3523
- return y(this, function(c) {
3524
- return o = i.createElement("canvas"), t = o.getContext("2d"), u = J.map(function(s) {
3525
- return F(t, s);
3526
- }), d = {}, X.forEach(function(s) {
3527
- var p = F(t, s);
3528
- u.includes(p) || (d[s] = p);
3523
+ return w(this, function(c) {
3524
+ return o = s.createElement("canvas"), t = o.getContext("2d"), u = J.map(function(i) {
3525
+ return k(t, i);
3526
+ }), d = {}, X.forEach(function(i) {
3527
+ var p = k(t, i);
3528
+ u.includes(p) || (d[i] = p);
3529
3529
  }), e(d), [2];
3530
3530
  });
3531
3531
  });
@@ -3544,20 +3544,20 @@ C().name != "Firefox" && v("fonts", function() {
3544
3544
  a({ languages: navigator.language, timezone: Intl.DateTimeFormat().resolvedOptions().timeZone });
3545
3545
  });
3546
3546
  }), v("permissions", function() {
3547
- return w(this, void 0, void 0, function() {
3547
+ return y(this, void 0, void 0, function() {
3548
3548
  var a;
3549
- return y(this, function(e) {
3550
- 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() {
3549
+ return w(this, function(e) {
3550
+ 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() {
3551
3551
  return function() {
3552
- return w(this, void 0, void 0, function() {
3553
- var n, r, i, o, t;
3554
- return y(this, function(u) {
3552
+ return y(this, void 0, void 0, function() {
3553
+ var n, r, s, o, t;
3554
+ return w(this, function(u) {
3555
3555
  switch (u.label) {
3556
3556
  case 0:
3557
- n = {}, r = 0, i = A, u.label = 1;
3557
+ n = {}, r = 0, s = I, u.label = 1;
3558
3558
  case 1:
3559
- if (!(r < i.length)) return [3, 6];
3560
- o = i[r], u.label = 2;
3559
+ if (!(r < s.length)) return [3, 6];
3560
+ o = s[r], u.label = 2;
3561
3561
  case 2:
3562
3562
  return u.trys.push([2, 4, , 5]), [4, navigator.permissions.query({ name: o })];
3563
3563
  case 3:
@@ -3573,7 +3573,7 @@ C().name != "Firefox" && v("fonts", function() {
3573
3573
  });
3574
3574
  }();
3575
3575
  }), [2, Promise.all(a).then(function(n) {
3576
- return ee(n, A);
3576
+ return ee(n, I);
3577
3577
  })];
3578
3578
  });
3579
3579
  });
@@ -3596,18 +3596,18 @@ C().name != "Firefox" && v("fonts", function() {
3596
3596
  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() });
3597
3597
  });
3598
3598
  });
3599
- var f, re = C().name !== "SamsungBrowser" ? 1 : 3, h = null;
3599
+ var f, re = C().name !== "SamsungBrowser" ? 1 : 3, l = null;
3600
3600
  v("webgl", function() {
3601
- return w(this, void 0, void 0, function() {
3601
+ return y(this, void 0, void 0, function() {
3602
3602
  var a;
3603
- return y(this, function(e) {
3604
- typeof document < "u" && ((f = document.createElement("canvas")).width = 200, f.height = 100, h = f.getContext("webgl"));
3603
+ return w(this, function(e) {
3604
+ typeof document < "u" && ((f = document.createElement("canvas")).width = 200, f.height = 100, l = f.getContext("webgl"));
3605
3605
  try {
3606
- if (!h) throw new Error("WebGL not supported");
3606
+ if (!l) throw new Error("WebGL not supported");
3607
3607
  return a = Array.from({ length: re }, function() {
3608
3608
  return function() {
3609
3609
  try {
3610
- if (!h) throw new Error("WebGL not supported");
3610
+ if (!l) throw new Error("WebGL not supported");
3611
3611
  var n = `
3612
3612
  attribute vec2 position;
3613
3613
  void main() {
@@ -3618,31 +3618,31 @@ v("webgl", function() {
3618
3618
  void main() {
3619
3619
  gl_FragColor = vec4(0.812, 0.195, 0.553, 0.921); // Set line color
3620
3620
  }
3621
- `, i = h.createShader(h.VERTEX_SHADER), o = h.createShader(h.FRAGMENT_SHADER);
3622
- if (!i || !o) throw new Error("Failed to create shaders");
3623
- if (h.shaderSource(i, n), h.shaderSource(o, r), h.compileShader(i), !h.getShaderParameter(i, h.COMPILE_STATUS)) throw new Error("Vertex shader compilation failed: " + h.getShaderInfoLog(i));
3624
- if (h.compileShader(o), !h.getShaderParameter(o, h.COMPILE_STATUS)) throw new Error("Fragment shader compilation failed: " + h.getShaderInfoLog(o));
3625
- var t = h.createProgram();
3621
+ `, s = l.createShader(l.VERTEX_SHADER), o = l.createShader(l.FRAGMENT_SHADER);
3622
+ if (!s || !o) throw new Error("Failed to create shaders");
3623
+ 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));
3624
+ if (l.compileShader(o), !l.getShaderParameter(o, l.COMPILE_STATUS)) throw new Error("Fragment shader compilation failed: " + l.getShaderInfoLog(o));
3625
+ var t = l.createProgram();
3626
3626
  if (!t) throw new Error("Failed to create shader program");
3627
- if (h.attachShader(t, i), h.attachShader(t, o), h.linkProgram(t), !h.getProgramParameter(t, h.LINK_STATUS)) throw new Error("Shader program linking failed: " + h.getProgramInfoLog(t));
3628
- h.useProgram(t);
3629
- for (var u = 137, d = new Float32Array(4 * u), c = 2 * Math.PI / u, s = 0; s < u; s++) {
3630
- var p = s * c;
3631
- d[4 * s] = 0, d[4 * s + 1] = 0, d[4 * s + 2] = Math.cos(p) * (f.width / 2), d[4 * s + 3] = Math.sin(p) * (f.height / 2);
3627
+ 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));
3628
+ l.useProgram(t);
3629
+ for (var u = 137, d = new Float32Array(4 * u), c = 2 * Math.PI / u, i = 0; i < u; i++) {
3630
+ var p = i * c;
3631
+ 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);
3632
3632
  }
3633
- var q = h.createBuffer();
3634
- h.bindBuffer(h.ARRAY_BUFFER, q), h.bufferData(h.ARRAY_BUFFER, d, h.STATIC_DRAW);
3635
- var R = h.getAttribLocation(t, "position");
3636
- h.enableVertexAttribArray(R), h.vertexAttribPointer(R, 2, h.FLOAT, !1, 0, 0), h.viewport(0, 0, f.width, f.height), h.clearColor(0, 0, 0, 1), h.clear(h.COLOR_BUFFER_BIT), h.drawArrays(h.LINES, 0, 2 * u);
3633
+ var q = l.createBuffer();
3634
+ l.bindBuffer(l.ARRAY_BUFFER, q), l.bufferData(l.ARRAY_BUFFER, d, l.STATIC_DRAW);
3635
+ var R = l.getAttribLocation(t, "position");
3636
+ 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);
3637
3637
  var x = new Uint8ClampedArray(f.width * f.height * 4);
3638
- return h.readPixels(0, 0, f.width, f.height, h.RGBA, h.UNSIGNED_BYTE, x), new ImageData(x, f.width, f.height);
3638
+ return l.readPixels(0, 0, f.width, f.height, l.RGBA, l.UNSIGNED_BYTE, x), new ImageData(x, f.width, f.height);
3639
3639
  } catch {
3640
3640
  return new ImageData(1, 1);
3641
3641
  } finally {
3642
- h && (h.bindBuffer(h.ARRAY_BUFFER, null), h.useProgram(null), h.viewport(0, 0, h.drawingBufferWidth, h.drawingBufferHeight), h.clearColor(0, 0, 0, 0));
3642
+ l && (l.bindBuffer(l.ARRAY_BUFFER, null), l.useProgram(null), l.viewport(0, 0, l.drawingBufferWidth, l.drawingBufferHeight), l.clearColor(0, 0, 0, 0));
3643
3643
  }
3644
3644
  }();
3645
- }), [2, { commonImageHash: I(L(a, f.width, f.height).data.toString()).toString() }];
3645
+ }), [2, { commonImageHash: _(L(a, f.width, f.height).data.toString()).toString() }];
3646
3646
  } catch {
3647
3647
  return [2, { webgl: "unsupported" }];
3648
3648
  }
@@ -3651,13 +3651,13 @@ v("webgl", function() {
3651
3651
  });
3652
3652
  });
3653
3653
  var b = function(a, e, n, r) {
3654
- for (var i = (n - e) / r, o = 0, t = 0; t < r; t++)
3655
- o += a(e + (t + 0.5) * i);
3656
- return o * i;
3654
+ for (var s = (n - e) / r, o = 0, t = 0; t < r; t++)
3655
+ o += a(e + (t + 0.5) * s);
3656
+ return o * s;
3657
3657
  };
3658
3658
  v("math", function() {
3659
- return w(void 0, void 0, void 0, function() {
3660
- return y(this, function(a) {
3659
+ return y(void 0, void 0, void 0, function() {
3660
+ return w(this, function(a) {
3661
3661
  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) }];
3662
3662
  });
3663
3663
  });
@@ -3680,6 +3680,7 @@ const initialSearchcraftStateValues = {
3680
3680
  searchClientResponseItems: [],
3681
3681
  searchResponseTimeTaken: undefined,
3682
3682
  searchResponseFacetPrime: undefined,
3683
+ supplementalFacetPrime: undefined,
3683
3684
  searchResultsCount: 0,
3684
3685
  searchResultsPerPage: 20,
3685
3686
  searchResultsPage: 1,
@@ -3779,7 +3780,7 @@ const searchcraftStore = zustand.createStore((_set, get) => {
3779
3780
  }, functions.setSearchClientResponseItemsFromResponse, functions.setAdClientResponseItems);
3780
3781
  },
3781
3782
  setAdClientResponseItems: (items) => functions.set({ adClientResponseItems: items }),
3782
- setSearchClientResponseItemsFromResponse: (response, items) => {
3783
+ setSearchClientResponseItemsFromResponse: (response, items, supplementalResponse) => {
3783
3784
  const { facets, count = 0, time_taken = 0 } = response.data;
3784
3785
  const state = functions.set((state) => {
3785
3786
  return {
@@ -3791,6 +3792,7 @@ const searchcraftStore = zustand.createStore((_set, get) => {
3791
3792
  count === state.searchResultsCount ? state.searchResultsPage : 1,
3792
3793
  searchResultsCount: count,
3793
3794
  searchResponseFacetPrime: facets,
3795
+ supplementalFacetPrime: supplementalResponse?.data.facets,
3794
3796
  };
3795
3797
  });
3796
3798
  state.logger?.log(O.DEBUG, `Search results: ${JSON.stringify(items)}`);
@@ -3868,7 +3870,22 @@ const searchcraftStore = zustand.createStore((_set, get) => {
3868
3870
  return stateObject;
3869
3871
  });
3870
3872
 
3871
- function deepMergeWithSpread(obj1, obj2) {
3873
+ /**
3874
+ * Helper function for getting a Node (FacetWithChildrenObject)
3875
+ * at a given path. Traverses the node tree to get the node.
3876
+ */
3877
+ const getNodeAtPath = (tree, nodePaths) => {
3878
+ let cursor = tree;
3879
+ for (const nodePath of nodePaths) {
3880
+ cursor = cursor?.children[nodePath];
3881
+ }
3882
+ return cursor;
3883
+ };
3884
+ /**
3885
+ * Helper function to perform a deep merge.
3886
+ * Used for merging two branches of a facet tree together.
3887
+ */
3888
+ const deepMergeWithSpread = (obj1, obj2) => {
3872
3889
  const result = { ...obj1 };
3873
3890
  for (const key in obj2) {
3874
3891
  // biome-ignore lint/suspicious/noPrototypeBuiltins: <explanation>
@@ -3882,119 +3899,95 @@ function deepMergeWithSpread(obj1, obj2) {
3882
3899
  }
3883
3900
  }
3884
3901
  return result;
3885
- }
3902
+ };
3886
3903
  /**
3887
- * Given an array of facet paths, removes parent facet paths.
3904
+ * Given an array of facet paths, removes parent facet paths so that only the
3905
+ * Leaf facets are sent with the search request.
3888
3906
  */
3889
3907
  function removeSubstringMatches(arr) {
3890
3908
  return arr.filter((entry, index, array) => !array.some((otherEntry, otherIndex) => otherIndex !== index && otherEntry.includes(entry)));
3891
3909
  }
3892
- function facetToRecord(facet) {
3893
- const records = {};
3894
- const traverseAndAddToFragments = (facetChild) => {
3895
- records[facetChild.path] = {
3896
- count: facetChild.count,
3897
- path: facetChild.path,
3898
- };
3899
- facetChild.children?.forEach((child) => {
3900
- traverseAndAddToFragments(child);
3901
- });
3902
- };
3903
- traverseAndAddToFragments(facet);
3904
- return records;
3905
- }
3906
- function recordToObject(record) {
3907
- const root = {
3908
- count: 0,
3909
- path: '/',
3910
- children: {},
3911
- };
3912
- Object.keys(record).forEach((key) => {
3913
- const fragment = record[key];
3914
- if (!fragment) {
3915
- return;
3916
- }
3917
- if (fragment.path === '/') {
3918
- return;
3919
- }
3920
- const pathParts = fragment.path.substring(1).split('/');
3921
- let currentRoot = root;
3922
- let currentPath = '';
3923
- pathParts.forEach((part, index) => {
3924
- const nextPath = `${currentPath}/${part}`;
3925
- if (!currentRoot.children[nextPath]) {
3926
- currentRoot.children[nextPath] = {
3927
- count: 0,
3928
- path: nextPath,
3929
- children: {},
3910
+ /**
3911
+ * Merges a current facet tree with an incoming facet tree.
3912
+ *
3913
+ * At each branch, the incoming facet tree's facets override current facet tree
3914
+ *
3915
+ * @param currentTree
3916
+ * @param incomingTree
3917
+ */
3918
+ const mergeFacetTrees = (currentTree, incomingTree) => {
3919
+ const mergedTree = structuredClone(currentTree);
3920
+ const merge = (currentBranch, nodePath) => {
3921
+ const mergedBranch = structuredClone(currentBranch);
3922
+ const incomingBranch = getNodeAtPath(incomingTree, nodePath);
3923
+ if (!incomingBranch) {
3924
+ return mergedBranch;
3925
+ }
3926
+ for (const nodeName of Object.keys(currentBranch.children)) {
3927
+ if (incomingBranch.children[nodeName]) {
3928
+ mergedBranch.children[nodeName] = {
3929
+ ...deepMergeWithSpread(currentBranch.children[nodeName], incomingBranch.children[nodeName]),
3930
+ count: mergedBranch.children[nodeName]?.count || 0,
3930
3931
  };
3931
3932
  }
3932
- if (index === pathParts.length - 1) {
3933
- currentRoot.children[nextPath].count = fragment.count;
3933
+ else if (mergedBranch.children[nodeName]) {
3934
+ mergedBranch.children[nodeName] = merge(mergedBranch.children[nodeName], [...nodePath, nodeName]);
3934
3935
  }
3935
- currentPath = nextPath;
3936
- currentRoot = currentRoot.children[nextPath];
3937
- });
3938
- });
3939
- return root;
3940
- }
3941
- function objectToFacet(childObject) {
3942
- const transformed = {
3943
- count: childObject.count,
3944
- path: childObject.path,
3945
- children: [],
3936
+ }
3937
+ return mergedBranch;
3946
3938
  };
3947
- if (Object.keys(childObject.children).length > 0) {
3948
- transformed.children = Object.values(childObject.children).map((subChildObject) => objectToFacet(subChildObject));
3949
- }
3950
- return transformed;
3951
- }
3939
+ return merge(mergedTree, []);
3940
+ };
3952
3941
  /**
3953
- * Filters records with the parent paths from record2 OUT of record1
3942
+ * A function that converts a FacetWithChidrenArray to a complete FacetTree object.
3943
+ *
3944
+ * It uses the `path` of each Facet to build the tree.
3945
+ *
3946
+ * @param facetWithChildArray
3954
3947
  */
3955
- function filterRecordByParentPaths(record1, record2) {
3956
- // Extract all paths (keys) both records
3957
- const paths1 = Object.keys(record1);
3958
- const paths2 = Object.keys(record2);
3959
- // Find all parent paths in record2
3960
- const parentPaths = new Set(paths2
3961
- .filter((path) => path.split('/').length > 2) // Only consider paths with more than one level
3962
- .map((path) => path.substring(0, path.lastIndexOf('/'))));
3963
- // Filter out keys in record1 that share a parent path with any of the identified parent paths
3964
- const filteredRecord = Object.fromEntries(paths1
3965
- .filter((path) => !parentPaths.has(path.substring(0, path.lastIndexOf('/'))))
3966
- .map((path) => [path, record1[path]]));
3967
- return filteredRecord;
3968
- }
3969
- function mergeFacetRoots(fieldName, currentRoot, incomingRoot) {
3970
- const currentArray = currentRoot[fieldName];
3971
- const incomingArray = incomingRoot[fieldName];
3972
- const currentRootFacetChild = {
3973
- count: 0,
3948
+ const facetWithChildrenArrayToCompleteFacetTree = (rootArray) => {
3949
+ // 1) Start with an empty tree at root "/"
3950
+ const tree = {
3974
3951
  path: '/',
3975
- children: currentArray,
3976
- };
3977
- const incomingRootFacetChild = {
3978
3952
  count: 0,
3979
- path: '/',
3980
- children: incomingArray,
3953
+ children: {},
3981
3954
  };
3982
- // Flatten them into records
3983
- const currentRecord = facetToRecord(currentRootFacetChild);
3984
- const incomingRecord = facetToRecord(incomingRootFacetChild);
3985
- // Filter out the records from record1 (the current set of records)
3986
- // that share a parent path with record2 (the incoming records)
3987
- const filteredCurrentRecord = filterRecordByParentPaths(currentRecord, incomingRecord);
3988
- // Deep merge the records together
3989
- const mergedRecord = deepMergeWithSpread(filteredCurrentRecord, incomingRecord);
3990
- // Convert into a heirarchical object
3991
- const mergedObject = recordToObject(mergedRecord);
3992
- // Convert the heirarchical object back to the Facet child structure
3993
- const mergedFacetChild = objectToFacet(mergedObject);
3994
- return {
3995
- [fieldName]: mergedFacetChild.children,
3955
+ // 2) Recursively collect all nodes except the implicit "/" itself
3956
+ const allFacets = [];
3957
+ const collect = (node) => {
3958
+ if (node.path !== '/') {
3959
+ allFacets.push({ path: node.path, count: node.count });
3960
+ }
3961
+ if (node.children) {
3962
+ for (const child of node.children) {
3963
+ collect(child);
3964
+ }
3965
+ }
3996
3966
  };
3997
- }
3967
+ collect(rootArray);
3968
+ // 3) Insert each flat node into our tree, creating missing ancestors
3969
+ for (const { path, count } of allFacets) {
3970
+ const segments = path.split('/').filter(Boolean); // "/sports/outdoors" -> ["sports","outdoors"]
3971
+ let cursor = tree; // start at the root
3972
+ for (const segment of segments) {
3973
+ // Build the full path of this level
3974
+ const prefixPath = cursor.path === '/' ? `/${segment}` : `${cursor.path}/${segment}`;
3975
+ // If this segment doesn't exist yet, create it
3976
+ if (!cursor.children[segment]) {
3977
+ cursor.children[segment] = {
3978
+ path: prefixPath,
3979
+ count: count,
3980
+ children: {},
3981
+ };
3982
+ }
3983
+ // Descend to the next level deeper
3984
+ cursor = cursor.children[segment];
3985
+ }
3986
+ // 4) now `cursor` is the node matching `path` — assign its real count
3987
+ cursor.count = count;
3988
+ }
3989
+ return tree;
3990
+ };
3998
3991
 
3999
3992
  /**
4000
3993
  * Given a document and a SearchResultMapping, return a mapped value from the document.
@@ -4027,30 +4020,6 @@ function getDocumentValueFromSearchResultMapping(document, mapping) {
4027
4020
  .join(mapping.delimiter || ' ');
4028
4021
  }
4029
4022
  }
4030
- /**
4031
- * Convert different units of time to milliseconds.
4032
- *
4033
- * @param unit - The unit of time
4034
- * @returns {number}
4035
- */
4036
- function getMillis(unit) {
4037
- const millisInHour = 60 * 60 * 1000;
4038
- const millisInDay = 24 * millisInHour;
4039
- const millisInMonth = 30 * millisInDay;
4040
- const millisInYear = 365 * millisInDay;
4041
- switch (unit) {
4042
- case 'hour':
4043
- return millisInHour;
4044
- case 'day':
4045
- return millisInDay;
4046
- case 'month':
4047
- return millisInMonth;
4048
- case 'year':
4049
- return millisInYear;
4050
- default:
4051
- return 3600000;
4052
- }
4053
- }
4054
4023
  /**
4055
4024
  * Format a number with commas as thousands separators.
4056
4025
  *
@@ -4097,6 +4066,107 @@ function formatRelativeDate(dateInput, locale = 'en-US', options = {
4097
4066
  }
4098
4067
  return new Intl.DateTimeFormat(locale, options).format(date);
4099
4068
  }
4069
+ /**
4070
+ * Given a date, returns the timestamp (in ms) for the start of the specified unit.
4071
+ *
4072
+ * @param unit - The unit to calculate the start of ('year' | 'month' | 'day' | 'hour').
4073
+ * @param timestamp - The date to evaluate.
4074
+ * @param offset - The number of units to offset by.
4075
+ * @returns The timestamp (in ms) for the start of the specified unit.
4076
+ */
4077
+ function getStartOf(timestamp, unit, offset = 0) {
4078
+ const d = new Date(timestamp);
4079
+ switch (unit) {
4080
+ case 'year':
4081
+ return new Date(d.getFullYear() + offset, 0, 1, 0, 0, 0, 0).getTime();
4082
+ case 'month':
4083
+ return new Date(d.getFullYear(), d.getMonth() + offset, 1, 0, 0, 0, 0).getTime();
4084
+ case 'day':
4085
+ return new Date(d.getFullYear(), d.getMonth(), d.getDate() + offset, 0, 0, 0, 0).getTime();
4086
+ case 'hour':
4087
+ return new Date(d.getFullYear(), d.getMonth(), d.getDate(), d.getHours() + offset, 0, 0, 0).getTime();
4088
+ default:
4089
+ throw new Error(`Unsupported unit: ${unit}`);
4090
+ }
4091
+ }
4092
+ /**
4093
+ * Given a start and end date, returns the difference in the number of the specified units.
4094
+ *
4095
+ * @param units - The unit to measure ('year' | 'month' | 'day' | 'hour').
4096
+ * @param startDate - The start date.
4097
+ * @param endDate - The end date.
4098
+ * @returns The difference in the given unit.
4099
+ */
4100
+ function getDifferenceInUnits(unit, startTime, endTime) {
4101
+ const start = new Date(startTime);
4102
+ const end = new Date(endTime);
4103
+ switch (unit) {
4104
+ case 'year':
4105
+ return Math.abs(end.getFullYear() - start.getFullYear());
4106
+ case 'month':
4107
+ return Math.abs(end.getFullYear() * 12 +
4108
+ end.getMonth() -
4109
+ (start.getFullYear() * 12 + start.getMonth()));
4110
+ case 'day':
4111
+ return Math.floor(Math.abs(end.getTime() - start.getTime()) / (1000 * 60 * 60 * 24));
4112
+ case 'hour':
4113
+ return Math.floor(Math.abs(end.getTime() - start.getTime()) / (1000 * 60 * 60));
4114
+ default:
4115
+ throw new Error(`Unsupported unit: ${unit}`);
4116
+ }
4117
+ }
4118
+ /**
4119
+ * Returns the ordinal representation of a day of the month.
4120
+ */
4121
+ const getOrdinal = (n) => {
4122
+ if (n >= 11 && n <= 13)
4123
+ return `${n}th`;
4124
+ switch (n % 10) {
4125
+ case 1:
4126
+ return `${n}st`;
4127
+ case 2:
4128
+ return `${n}nd`;
4129
+ case 3:
4130
+ return `${n}rd`;
4131
+ default:
4132
+ return `${n}th`;
4133
+ }
4134
+ };
4135
+ /**
4136
+ * Given a granularity level, returns a formatted, human-readable, date string.
4137
+ *
4138
+ * @param granularity - The granularity level to display. The granularity level dictates how the date is formatted.
4139
+ * @param date - The date to format.
4140
+ *
4141
+ * @returns A formatted string representing the date at the specified granularity.
4142
+ *
4143
+ * @example
4144
+ * getFormattedDateString('year', new Date('2023-01-01')) // "2023"
4145
+ * getFormattedDateString('month', new Date('2023-01-01')) // "Jan 2023"
4146
+ * getFormattedDateString('day', new Date('2023-01-31')) // "Jan 31st, 2023"
4147
+ * getFormattedDateString('hour', new Date('2023-01-31T12:00:00')) // "Jan 31st, 12:00 PM"
4148
+ */
4149
+ function getFormattedDateString(granularity, date) {
4150
+ const monthFormatter = new Intl.DateTimeFormat('en-US', { month: 'short' });
4151
+ switch (granularity) {
4152
+ case 'year':
4153
+ return date.getFullYear().toString();
4154
+ case 'month':
4155
+ return `${monthFormatter.format(date)} ${date.getFullYear()}`;
4156
+ case 'day':
4157
+ return `${monthFormatter.format(date)} ${getOrdinal(date.getDate())}, ${date.getFullYear()}`;
4158
+ case 'hour': {
4159
+ const timeFormatter = new Intl.DateTimeFormat('en-US', {
4160
+ hour: 'numeric',
4161
+ minute: '2-digit',
4162
+ hour12: true,
4163
+ });
4164
+ return `${monthFormatter.format(date)} ${getOrdinal(date.getDate())}, ${timeFormatter.format(date)}`;
4165
+ }
4166
+ default:
4167
+ throw new Error(`Unsupported granularity: ${granularity}`);
4168
+ }
4169
+ }
4100
4170
 
4101
4171
  var purify = {exports: {}};
4102
4172
 
@@ -5491,65 +5561,110 @@ class SearchcraftFacetList {
5491
5561
  */
5492
5562
  fieldName = '';
5493
5563
  /**
5494
- * When the facets are updated.
5564
+ * Emitted when the facets are updated.
5495
5565
  */
5496
5566
  facetSelectionUpdated;
5497
- baseFacetRoot;
5498
- facetRoot;
5567
+ /**
5568
+ * A Tree Representing all of the facets we know about to be rendered.
5569
+ */
5570
+ facetTree = {
5571
+ path: '/',
5572
+ count: 0,
5573
+ children: {},
5574
+ };
5575
+ /**
5576
+ * The currently selected facet paths.
5577
+ */
5499
5578
  selectedPaths = {};
5579
+ // Internal vars used to track when to perform various facet actions.
5500
5580
  lastTimeTaken;
5501
- hasNewSearchTerm = false;
5502
5581
  lastSearchTerm;
5503
5582
  lastSearchMode;
5504
5583
  lastSortType;
5584
+ lastRangeValues;
5585
+ lastFacetValues;
5505
5586
  unsubscribe;
5506
- searchStore = searchcraftStore.getState();
5507
- handleStateUpdate(state) {
5508
- const facetPrime = state.searchResponseFacetPrime;
5509
- const timeTaken = state.searchResponseTimeTaken;
5510
- if (!this.fieldName) {
5511
- return;
5587
+ handleIncomingSearchResponse(state, actionType) {
5588
+ // Look at the incoming facet root from the search response, and convert it to a FacetTree
5589
+ const incomingFacetRoot = state.searchResponseFacetPrime?.find((facet) => this.fieldName === Object.keys(facet)[0]);
5590
+ const incomingFacetsWithChildrenArray = incomingFacetRoot?.[this.fieldName];
5591
+ const incomingFacetTree = facetWithChildrenArrayToCompleteFacetTree({
5592
+ path: '/',
5593
+ count: 0,
5594
+ children: incomingFacetsWithChildrenArray || [],
5595
+ });
5596
+ // Determine what action to take (merge with existing FacetTree vs overwrite FacetTree)
5597
+ switch (actionType) {
5598
+ case 'SEARCH_TERM_EMPTY':
5599
+ this.facetTree = {
5600
+ path: '/',
5601
+ count: 0,
5602
+ children: {},
5603
+ };
5604
+ break;
5605
+ case 'NEW_SEARCH_TERM':
5606
+ this.facetTree = incomingFacetTree;
5607
+ break;
5608
+ case 'EXACT_MATCH_UPDATE':
5609
+ case 'RANGE_VALUE_UPDATE': {
5610
+ if (state.supplementalFacetPrime) {
5611
+ const supplementalFacetRoot = state.supplementalFacetPrime?.find((facet) => this.fieldName === Object.keys(facet)[0]);
5612
+ const supplementalFacetsWithChildrenArray = supplementalFacetRoot?.[this.fieldName];
5613
+ const supplementalFacetTree = facetWithChildrenArrayToCompleteFacetTree({
5614
+ path: '/',
5615
+ count: 0,
5616
+ children: supplementalFacetsWithChildrenArray || [],
5617
+ });
5618
+ this.facetTree = mergeFacetTrees(supplementalFacetTree, incomingFacetTree);
5619
+ }
5620
+ else {
5621
+ this.facetTree = incomingFacetTree;
5622
+ }
5623
+ break;
5624
+ }
5625
+ case 'FACET_UPDATE':
5626
+ case 'SORT_ORDER_UPDATE':
5627
+ this.facetTree = mergeFacetTrees(this.facetTree, incomingFacetTree);
5628
+ break;
5629
+ default:
5630
+ this.facetTree = mergeFacetTrees(this.facetTree, incomingFacetTree);
5512
5631
  }
5513
- /** When the search term is empty, clear all facets from facetRoot */
5514
- if (!state.searchTerm) {
5515
- this.facetRoot = undefined;
5516
- }
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;
5632
+ }
5633
+ handleStateUpdate(state) {
5634
+ // Determine what action to take based on the current State
5635
+ if (this.lastSearchTerm !== state.searchTerm &&
5636
+ state.searchTerm.trim() === '') {
5637
+ this.handleIncomingSearchResponse(state, 'SEARCH_TERM_EMPTY');
5638
+ }
5639
+ else if (this.lastTimeTaken !== state.searchResponseTimeTaken) {
5640
+ let actionType = 'UNKNOWN';
5641
+ if (this.lastSearchTerm !== state.searchTerm) {
5642
+ actionType = 'NEW_SEARCH_TERM';
5532
5643
  }
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);
5644
+ else if (this.lastRangeValues !== JSON.stringify(state.rangeValueForIndexFields)) {
5645
+ actionType = 'RANGE_VALUE_UPDATE';
5536
5646
  }
5647
+ else if (this.lastFacetValues !== JSON.stringify(state.facetPathsForIndexFields)) {
5648
+ actionType = 'FACET_UPDATE';
5649
+ }
5650
+ else if (this.lastSortType !== state.sortType) {
5651
+ actionType = 'SORT_ORDER_UPDATE';
5652
+ }
5653
+ else if (this.lastSearchMode !== state.searchMode) {
5654
+ actionType = 'EXACT_MATCH_UPDATE';
5655
+ }
5656
+ // Handle the incoming response, using the action we have determined.
5657
+ this.handleIncomingSearchResponse(state, actionType);
5658
+ this.lastSearchTerm = state.searchTerm;
5659
+ this.lastRangeValues = JSON.stringify(state.rangeValueForIndexFields);
5660
+ this.lastFacetValues = JSON.stringify(state.facetPathsForIndexFields);
5661
+ this.lastSortType = state.sortType;
5662
+ this.lastSearchMode = state.searchMode;
5537
5663
  }
5538
- else if (!facetPrime && Object.keys(this.selectedPaths).length === 0) {
5539
- /**
5540
- * If there's not facetPrime returned from the search response,
5541
- * and no facets are currently selected.
5542
- * Clear all the displayed facets
5543
- */
5544
- this.facetRoot = undefined;
5545
- }
5546
- this.lastSearchTerm = state.searchTerm;
5547
- this.lastSearchMode = state.searchMode;
5548
- this.lastSortType = state.sortType;
5549
- this.lastTimeTaken = timeTaken;
5664
+ this.lastTimeTaken = state.searchResponseTimeTaken;
5550
5665
  }
5551
5666
  connectedCallback() {
5552
- this.handleStateUpdate(this.searchStore);
5667
+ this.handleStateUpdate(searchcraftStore.getState());
5553
5668
  this.unsubscribe = searchcraftStore.subscribe((state) => {
5554
5669
  this.handleStateUpdate(state);
5555
5670
  });
@@ -5586,44 +5701,55 @@ class SearchcraftFacetList {
5586
5701
  const pathsWithParentPathsRemoved = removeSubstringMatches(paths);
5587
5702
  this.facetSelectionUpdated?.emit({ paths: pathsWithParentPathsRemoved });
5588
5703
  }
5589
- formatLabel = (facetChild) => {
5590
- const label = facetChild.path.replace(/^\//, '');
5591
- const count = facetChild.count;
5592
- return `${label.replace(/-/g, ' ').replace(/\b\w/g, (char) => char.toUpperCase())} (${count})`;
5593
- };
5594
- formatSubLabel = (facetChild, facetChildAncestor) => {
5595
- const facetChildPath = facetChild.path.substring(facetChildAncestor.path.length);
5596
- const label = facetChildPath.replace(/^\//, '');
5597
- const count = facetChild.count;
5598
- return `${label.replace(/-/g, ' ').replace(/\b\w/g, (char) => char.toUpperCase())} (${count})`;
5704
+ formatFacetName = (name) => {
5705
+ const label = name.replace(/^\//, '');
5706
+ return `${label.replace(/-/g, ' ').replace(/\b\w/g, (char) => char.toUpperCase())}`;
5599
5707
  };
5708
+ renderFacet(keyName, facet) {
5709
+ let isChildSelected = false;
5710
+ for (const path of Object.keys(this.selectedPaths)) {
5711
+ if (this.selectedPaths[path] &&
5712
+ path.startsWith(facet.path) &&
5713
+ path.length > facet.path.length) {
5714
+ isChildSelected = true;
5715
+ }
5716
+ }
5717
+ const isSelected = Object.keys(this.selectedPaths).includes(facet.path);
5718
+ const shouldRenderChildren = (Object.keys(facet.children).length > 0 &&
5719
+ (isSelected || isChildSelected)) ||
5720
+ keyName === '@@root';
5721
+ 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) => {
5722
+ this.handleCheckboxChange(facet.path);
5723
+ }, 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: {
5724
+ paddingLeft: keyName !== '@@root' ? '24px' : '0px',
5725
+ paddingTop: keyName !== '@@root' ? '6px' : '0px',
5726
+ } }, Object.keys(facet.children).map((key) => {
5727
+ if (facet.children[key]) {
5728
+ return this.renderFacet(key, facet.children[key]);
5729
+ }
5730
+ })))));
5731
+ }
5600
5732
  render() {
5601
5733
  if (!this.fieldName) {
5602
5734
  return;
5603
5735
  }
5604
- const firstFacet = this.facetRoot?.[this.fieldName];
5605
- return (hAsync("div", { class: 'searchcraft-facet-list' }, !firstFacet && (hAsync("p", { class: 'searchcraft-facet-list-message' }, "Enter a search to view facets.")), firstFacet?.map((facetChild) => {
5606
- const isChildSelected = facetChild.children
5607
- ? facetChild.children?.some((child) => this.selectedPaths[child.path])
5608
- : false;
5609
- 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: {
5610
- display: this.selectedPaths[facetChild.path]
5611
- ? 'flex'
5612
- : 'none',
5613
- } }, 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) => {
5614
- this.handleCheckboxChange(grandchild.path);
5615
- }, 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))))))));
5616
- })));
5736
+ if (Object.keys(this.facetTree.children).length === 0 &&
5737
+ (this.lastSearchTerm || '').trim().length === 0) {
5738
+ return;
5739
+ }
5740
+ if (Object.keys(this.facetTree.children).length === 0 &&
5741
+ (this.lastSearchTerm || '').trim().length > 0) {
5742
+ return (hAsync("p", { class: 'searchcraft-facet-list-message' }, "No facets are available for this search query."));
5743
+ }
5744
+ return (hAsync("div", { class: 'searchcraft-facet-list' }, this.renderFacet('@@root', this.facetTree)));
5617
5745
  }
5618
5746
  static get cmpMeta() { return {
5619
5747
  "$flags$": 0,
5620
5748
  "$tagName$": "searchcraft-facet-list",
5621
5749
  "$members$": {
5622
5750
  "fieldName": [1, "field-name"],
5623
- "baseFacetRoot": [32],
5624
- "facetRoot": [32],
5625
- "selectedPaths": [32],
5626
- "lastTimeTaken": [32]
5751
+ "facetTree": [32],
5752
+ "selectedPaths": [32]
5627
5753
  },
5628
5754
  "$listeners$": undefined,
5629
5755
  "$lazyBundleId$": "-",
@@ -5688,12 +5814,12 @@ class SearchcraftFilterPanel {
5688
5814
  disconnectedCallback() {
5689
5815
  this.unsubscribe?.();
5690
5816
  }
5691
- handleDateRangeChanged(fieldName, min, max) {
5692
- const start = new Date(new Date(min).getFullYear(), 0, 1);
5693
- const end = new Date(new Date(max).getFullYear() + 1, 0, 0);
5817
+ handleDateRangeChanged(item, min, max) {
5818
+ const start = new Date(min);
5819
+ const end = new Date(max);
5694
5820
  this.searchStore.addRangeValueForIndexField({
5695
- fieldName,
5696
- value: `${fieldName}:[${start.toISOString()} TO ${end.toISOString()}]`,
5821
+ fieldName: item.fieldName,
5822
+ value: `${item.fieldName}:[${start.toISOString()} TO ${end.toISOString()}]`,
5697
5823
  });
5698
5824
  this.searchStore.search();
5699
5825
  }
@@ -5739,22 +5865,19 @@ class SearchcraftFilterPanel {
5739
5865
  * Iterate through `items` and render them based on `type`
5740
5866
  */
5741
5867
  render() {
5742
- return (hAsync("div", { key: '7f15e8f1a2e1be763118f9cd4ded34cf7e2902d0', class: 'searchcraft-filter-panel' }, this.items.map((filterItem) => {
5868
+ return (hAsync("div", { key: 'fb5fce357783f39b0a2846a0bd99994faa5e742d', class: 'searchcraft-filter-panel' }, this.items.map((filterItem) => {
5743
5869
  switch (filterItem.type) {
5744
5870
  case 'dateRange': {
5745
5871
  const item = filterItem;
5746
- const min = new Date(item.options.minDate).getTime();
5747
- const max = new Date(item.options.maxDate).getTime();
5748
- const granularityValue = getMillis(item.options.granularity);
5749
5872
  // return date range slider
5750
- 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) => {
5751
- this.handleDateRangeChanged(item.fieldName, event.detail.startValue, event.detail.endValue);
5873
+ 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) => {
5874
+ this.handleDateRangeChanged(item, event.detail.startValue, event.detail.endValue);
5752
5875
  } })));
5753
5876
  }
5754
5877
  case 'numericRange': {
5755
5878
  const item = filterItem;
5756
5879
  // return date range slider
5757
- 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) => {
5880
+ 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) => {
5758
5881
  this.handleNumericRangeChanged(item.fieldName, event.detail.startValue, event.detail.endValue);
5759
5882
  } })));
5760
5883
  }
@@ -5850,6 +5973,12 @@ class SearchcraftInputForm {
5850
5973
  * The input element's placeholder value.
5851
5974
  */
5852
5975
  placeholderValue = 'Enter Search';
5976
+ /**
5977
+ * The placeholder's render behavior.
5978
+ * 'hide-on-focus' - Hide the placeholder text immediately when the input form gains focus.
5979
+ * 'hide-on-text-entered' - Only hide the placeholder when the input form has text entered into it.
5980
+ */
5981
+ placeholderBehavior;
5853
5982
  /**
5854
5983
  * When the input becomes focused.
5855
5984
  */
@@ -5936,9 +6065,11 @@ class SearchcraftInputForm {
5936
6065
  const inputGridStyles = {
5937
6066
  gap: shouldHaveVerticalGap ? '4px 8px' : '0px 8px',
5938
6067
  };
5939
- 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) => {
6068
+ 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', {
6069
+ 'searchcraft-placeholder-hide-on-focus': this.placeholderBehavior === 'hide-on-focus',
6070
+ }), onFocus: () => this.inputFocus?.emit(), onBlur: () => this.inputBlur?.emit(), onInput: (event) => {
5940
6071
  this.handleInput(event);
5941
- }, 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' }))))))));
6072
+ }, 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' }))))))));
5942
6073
  }
5943
6074
  static get watchers() { return {
5944
6075
  "core": ["onCoreChange"]
@@ -5952,6 +6083,7 @@ class SearchcraftInputForm {
5952
6083
  "buttonLabel": [1, "button-label"],
5953
6084
  "inputLabel": [1, "input-label"],
5954
6085
  "placeholderValue": [1, "placeholder-value"],
6086
+ "placeholderBehavior": [1, "placeholder-behavior"],
5955
6087
  "core": [16],
5956
6088
  "inputValue": [32],
5957
6089
  "searchTerm": [32],
@@ -7587,6 +7719,43 @@ class SearchcraftSelect {
7587
7719
  }; }
7588
7720
  }
7589
7721
 
7722
+ /**
7723
+ * Creates a throttled version of the given function that only invokes
7724
+ * the original function at most once every specified number of milliseconds.
7725
+ *
7726
+ * The logic is written in a way that the last invocation is always called, after the
7727
+ * throttle cooldown period has ended.
7728
+ *
7729
+ * @template Arguments - The argument types for the function to throttle
7730
+ * @param callback - The function to throttle
7731
+ * @param delayInMilliseconds - The number of milliseconds to wait before allowing the next invocation
7732
+ * @returns A throttled version of the original function
7733
+ */
7734
+ function throttle(callback, delayInMilliseconds) {
7735
+ let isThrottleOnCooldown = false;
7736
+ let trailingCallArgs = null;
7737
+ const invokeAction = (args) => {
7738
+ callback(...args);
7739
+ isThrottleOnCooldown = true;
7740
+ setTimeout(() => {
7741
+ isThrottleOnCooldown = false;
7742
+ if (trailingCallArgs) {
7743
+ const nextArgs = trailingCallArgs;
7744
+ trailingCallArgs = null;
7745
+ invokeAction(nextArgs);
7746
+ }
7747
+ }, delayInMilliseconds);
7748
+ };
7749
+ return (...args) => {
7750
+ if (!isThrottleOnCooldown) {
7751
+ invokeAction(args);
7752
+ }
7753
+ else {
7754
+ trailingCallArgs = args;
7755
+ }
7756
+ };
7757
+ }
7758
+
7590
7759
  /**
7591
7760
  * 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.
7592
7761
  *
@@ -7606,27 +7775,60 @@ class SearchcraftSlider {
7606
7775
  */
7607
7776
  min = 0;
7608
7777
  /**
7609
- * The granularity that the value must adhere to.
7778
+ * The step amount for the slider inputs.
7610
7779
  */
7611
- granularity = getMillis('month');
7612
- /** The type of data allowed. */
7780
+ step = 1;
7781
+ /** The type of data the sliders are using. */
7613
7782
  dataType = 'number';
7614
- endValue = this.max;
7615
- startValue = this.min;
7783
+ /** The date granularity to use. Used to format date labels. */
7784
+ dateGranularity;
7785
+ lowerBound = 0;
7786
+ upperBound = 1;
7787
+ endValue = 0;
7788
+ startValue = 0;
7616
7789
  lastFocusedHandle = 'max';
7790
+ throttledEmitUpdate = () => { };
7617
7791
  /**
7618
7792
  * When the range has changed.
7619
7793
  * */
7620
7794
  rangeChanged;
7621
- componentDidLoad() {
7622
- this.startValue = this.min;
7623
- this.endValue = this.max;
7795
+ connectedCallback() {
7796
+ switch (this.dataType) {
7797
+ case 'number':
7798
+ this.startValue = this.min;
7799
+ this.endValue = this.max;
7800
+ this.lowerBound = this.min;
7801
+ this.upperBound = this.max;
7802
+ break;
7803
+ case 'date': {
7804
+ this.startValue = 0;
7805
+ this.endValue = getDifferenceInUnits(this.dateGranularity || 'year', this.min, this.max);
7806
+ this.lowerBound = 0;
7807
+ this.upperBound = this.endValue;
7808
+ break;
7809
+ }
7810
+ }
7811
+ this.throttledEmitUpdate = throttle(this.emitUpdate, 120);
7624
7812
  }
7625
7813
  emitUpdate = async () => {
7626
- this.rangeChanged?.emit({
7627
- startValue: this.startValue,
7628
- endValue: this.endValue,
7629
- });
7814
+ switch (this.dataType) {
7815
+ case 'number':
7816
+ this.rangeChanged?.emit({
7817
+ startValue: this.startValue,
7818
+ endValue: this.endValue,
7819
+ });
7820
+ break;
7821
+ case 'date': {
7822
+ const granularity = this.dateGranularity || 'year';
7823
+ const startTimestamp = getStartOf(this.min, granularity, this.lowerBound + this.startValue);
7824
+ const endTimestamp = getStartOf(this.min, granularity, this.lowerBound + this.endValue + 1);
7825
+ this.rangeChanged?.emit({
7826
+ startValue: startTimestamp,
7827
+ endValue: endTimestamp,
7828
+ });
7829
+ break;
7830
+ }
7831
+ }
7630
7832
  };
7631
7833
  handleStartValueChange = (event) => {
7632
7834
  const inputElement = event.target;
@@ -7634,7 +7836,7 @@ class SearchcraftSlider {
7634
7836
  this.lastFocusedHandle = 'min';
7635
7837
  if (value <= this.endValue) {
7636
7838
  this.startValue = value;
7637
- this.emitUpdate();
7839
+ this.throttledEmitUpdate();
7638
7840
  }
7639
7841
  else {
7640
7842
  this.startValue = this.endValue;
@@ -7647,28 +7849,38 @@ class SearchcraftSlider {
7647
7849
  this.lastFocusedHandle = 'max';
7648
7850
  if (value >= this.startValue) {
7649
7851
  this.endValue = value;
7650
- this.emitUpdate();
7852
+ this.throttledEmitUpdate();
7651
7853
  }
7652
7854
  else {
7653
7855
  this.endValue = this.startValue;
7654
7856
  inputElement.value = `${this.startValue}`;
7655
7857
  }
7656
7858
  };
7859
+ getLabel = (value) => {
7860
+ switch (this.dataType) {
7861
+ case 'number':
7862
+ return `${this.startValue}`;
7863
+ case 'date': {
7864
+ const granularity = this.dateGranularity || 'year';
7865
+ const dateOffset = this.lowerBound + value;
7866
+ const timestamp = getStartOf(this.min, granularity, dateOffset);
7867
+ return getFormattedDateString(this.dateGranularity || 'year', new Date(timestamp));
7868
+ }
7869
+ }
7870
+ };
7657
7871
  render() {
7658
- const rangeMin = this.min;
7659
- const rangeMax = this.max;
7660
- const startPercent = ((this.startValue - rangeMin) / (rangeMax - rangeMin)) * 100;
7661
- const endPercent = ((this.endValue - rangeMin) / (rangeMax - rangeMin)) * 100;
7662
- const startLabel = this.dataType === 'number'
7663
- ? this.startValue
7664
- : new Date(this.startValue).getFullYear();
7665
- const endLabel = this.dataType === 'number'
7666
- ? this.endValue
7667
- : new Date(this.endValue).getFullYear();
7668
- 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: {
7872
+ const startPercent = ((this.startValue - this.lowerBound) /
7873
+ (this.upperBound - this.lowerBound)) *
7874
+ 100;
7875
+ const endPercent = ((this.endValue - this.lowerBound) /
7876
+ (this.upperBound - this.lowerBound)) *
7877
+ 100;
7878
+ const startLabel = this.getLabel(this.startValue);
7879
+ const endLabel = this.getLabel(this.endValue);
7880
+ 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: {
7669
7881
  left: `${startPercent}%`,
7670
7882
  width: `${endPercent - startPercent}%`,
7671
- } }), 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))));
7883
+ } }), 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))));
7672
7884
  }
7673
7885
  static get cmpMeta() { return {
7674
7886
  "$flags$": 0,
@@ -7676,8 +7888,11 @@ class SearchcraftSlider {
7676
7888
  "$members$": {
7677
7889
  "max": [2],
7678
7890
  "min": [2],
7679
- "granularity": [2],
7891
+ "step": [2],
7680
7892
  "dataType": [1, "data-type"],
7893
+ "dateGranularity": [1, "date-granularity"],
7894
+ "lowerBound": [32],
7895
+ "upperBound": [32],
7681
7896
  "endValue": [32],
7682
7897
  "startValue": [32],
7683
7898
  "lastFocusedHandle": [32]
@@ -7688,7 +7903,7 @@ class SearchcraftSlider {
7688
7903
  }; }
7689
7904
  }
7690
7905
 
7691
- 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 */
7906
+ 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 */
7692
7907
  `;
7693
7908
 
7694
7909
  /**