@searchcraft/javascript-sdk 0.13.1 → 0.13.3

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 (101) hide show
  1. package/README.md +5 -0
  2. package/dist/components/{p-D0j0UFpV.js → CoreInstanceRegistry.js} +2 -2
  3. package/dist/components/CoreInstanceRegistry.js.map +1 -0
  4. package/dist/components/defineCustomElements.js +23 -23
  5. package/dist/components/{p-_aHgRsRD.js → html.js} +3 -3
  6. package/dist/components/html.js.map +1 -0
  7. package/dist/components/index.d.ts +109 -0
  8. package/dist/components/index.js +28 -28
  9. package/dist/components/{p-DO5g2x-l.js → index2.js} +23 -6
  10. package/dist/components/index2.js.map +1 -0
  11. package/dist/components/{p-BfTCfPZ1.js → index3.js} +2 -2
  12. package/dist/components/index3.js.map +1 -0
  13. package/dist/components/{p-BlYgaV0q.js → purify.es.js} +10 -4
  14. package/dist/components/purify.es.js.map +1 -0
  15. package/dist/components/searchcraft-ad.js +1 -1
  16. package/dist/components/{p-C1S92_N8.js → searchcraft-ad2.js} +8 -8
  17. package/dist/components/searchcraft-ad2.js.map +1 -0
  18. package/dist/components/searchcraft-button.js +1 -1
  19. package/dist/components/{p-C681KruS.js → searchcraft-button2.js} +6 -6
  20. package/dist/components/searchcraft-button2.js.map +1 -0
  21. package/dist/components/searchcraft-error-message.js +1 -1
  22. package/dist/components/{p-DjPZkCLP.js → searchcraft-error-message2.js} +5 -5
  23. package/dist/components/searchcraft-error-message2.js.map +1 -0
  24. package/dist/components/searchcraft-facet-list.js +1 -1
  25. package/dist/components/{p-BV4HUriZ.js → searchcraft-facet-list2.js} +64 -9
  26. package/dist/components/searchcraft-facet-list2.js.map +1 -0
  27. package/dist/components/searchcraft-filter-panel.js +43 -11
  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/{p-C-wcIch1.js → searchcraft-input-form2.js} +13 -13
  31. package/dist/components/searchcraft-input-form2.js.map +1 -0
  32. package/dist/components/searchcraft-input-label.js +1 -1
  33. package/dist/components/{p-L4PwHqQC.js → searchcraft-input-label2.js} +6 -6
  34. package/dist/components/searchcraft-input-label2.js.map +1 -0
  35. package/dist/components/searchcraft-loading.js +1 -1
  36. package/dist/components/{p-B_415D4A.js → searchcraft-loading2.js} +5 -5
  37. package/dist/components/searchcraft-loading2.js.map +1 -0
  38. package/dist/components/searchcraft-pagination.js +52 -7
  39. package/dist/components/searchcraft-pagination.js.map +1 -1
  40. package/dist/components/searchcraft-popover-button.js +5 -5
  41. package/dist/components/searchcraft-popover-footer.js +1 -1
  42. package/dist/components/{p-C7ZK8CYu.js → searchcraft-popover-footer2.js} +8 -8
  43. package/dist/components/searchcraft-popover-footer2.js.map +1 -0
  44. package/dist/components/searchcraft-popover-form.js +22 -22
  45. package/dist/components/searchcraft-popover-list-item.js +1 -1
  46. package/dist/components/{p-Cju73I1E.js → searchcraft-popover-list-item2.js} +8 -8
  47. package/dist/components/searchcraft-popover-list-item2.js.map +1 -0
  48. package/dist/components/searchcraft-popover-list-view.js +1 -1
  49. package/dist/components/{p-Dr9rPC9v.js → searchcraft-popover-list-view2.js} +10 -10
  50. package/dist/components/searchcraft-popover-list-view2.js.map +1 -0
  51. package/dist/components/searchcraft-results-info.js +6 -6
  52. package/dist/components/searchcraft-search-result.js +1 -1
  53. package/dist/components/{p-DotXR-Gz.js → searchcraft-search-result2.js} +7 -7
  54. package/dist/components/searchcraft-search-result2.js.map +1 -0
  55. package/dist/components/searchcraft-search-results-per-page.js +6 -6
  56. package/dist/components/searchcraft-search-results.js +10 -10
  57. package/dist/components/searchcraft-select.js +1 -1
  58. package/dist/components/{p-Dc7S4y3b.js → searchcraft-select2.js} +5 -5
  59. package/dist/components/searchcraft-select2.js.map +1 -0
  60. package/dist/components/searchcraft-slider.js +1 -1
  61. package/dist/components/{p-BbSxfaD7.js → searchcraft-slider2.js} +8 -8
  62. package/dist/components/searchcraft-slider2.js.map +1 -0
  63. package/dist/components/searchcraft-summary-box.js +7 -7
  64. package/dist/components/searchcraft-theme.js +4 -4
  65. package/dist/components/searchcraft-theme.js.map +1 -1
  66. package/dist/components/searchcraft-toggle-button.js +1 -1
  67. package/dist/components/{p-D5p2scT9.js → searchcraft-toggle-button2.js} +7 -7
  68. package/dist/components/searchcraft-toggle-button2.js.map +1 -0
  69. package/dist/components/{p-i8oXh7db.js → units.js} +2 -2
  70. package/dist/components/units.js.map +1 -0
  71. package/dist/hydrate/index.d.ts +12 -0
  72. package/dist/hydrate/index.js +1832 -1619
  73. package/dist/hydrate/index.mjs +1831 -1620
  74. package/dist/themes/hologram.css +1 -1
  75. package/dist/themes/hologram.css.map +1 -1
  76. package/dist/types/components/searchcraft-facet-list/searchcraft-facet-list.d.ts +47 -0
  77. package/dist/types/components/searchcraft-pagination/searchcraft-pagination.d.ts +9 -0
  78. package/dist/types/components.d.ts +96 -0
  79. package/dist/types/stencil-public-runtime.d.ts +43 -0
  80. package/dist/types/types/sdk-types/searchcraft-filter-panel.types.d.ts +13 -0
  81. package/package.json +3 -3
  82. package/dist/components/p-BV4HUriZ.js.map +0 -1
  83. package/dist/components/p-B_415D4A.js.map +0 -1
  84. package/dist/components/p-BbSxfaD7.js.map +0 -1
  85. package/dist/components/p-BfTCfPZ1.js.map +0 -1
  86. package/dist/components/p-BlYgaV0q.js.map +0 -1
  87. package/dist/components/p-C-wcIch1.js.map +0 -1
  88. package/dist/components/p-C1S92_N8.js.map +0 -1
  89. package/dist/components/p-C681KruS.js.map +0 -1
  90. package/dist/components/p-C7ZK8CYu.js.map +0 -1
  91. package/dist/components/p-Cju73I1E.js.map +0 -1
  92. package/dist/components/p-D0j0UFpV.js.map +0 -1
  93. package/dist/components/p-D5p2scT9.js.map +0 -1
  94. package/dist/components/p-DO5g2x-l.js.map +0 -1
  95. package/dist/components/p-Dc7S4y3b.js.map +0 -1
  96. package/dist/components/p-DjPZkCLP.js.map +0 -1
  97. package/dist/components/p-DotXR-Gz.js.map +0 -1
  98. package/dist/components/p-Dr9rPC9v.js.map +0 -1
  99. package/dist/components/p-L4PwHqQC.js.map +0 -1
  100. package/dist/components/p-_aHgRsRD.js.map +0 -1
  101. package/dist/components/p-i8oXh7db.js.map +0 -1
@@ -2,9 +2,100 @@
2
2
 
3
3
  var stream = require('stream');
4
4
 
5
+ // src/app-data/index.ts
6
+ var BUILD = {
7
+ allRenderFn: false,
8
+ element: true,
9
+ event: true,
10
+ hasRenderFn: true,
11
+ hostListener: true,
12
+ hostListenerTargetWindow: true,
13
+ hostListenerTargetDocument: true,
14
+ hostListenerTargetBody: true,
15
+ hostListenerTargetParent: false,
16
+ hostListenerTarget: true,
17
+ member: true,
18
+ method: true,
19
+ mode: true,
20
+ observeAttribute: true,
21
+ prop: true,
22
+ propMutable: true,
23
+ reflect: true,
24
+ scoped: true,
25
+ shadowDom: true,
26
+ slot: true,
27
+ cssAnnotations: true,
28
+ state: true,
29
+ style: true,
30
+ formAssociated: false,
31
+ svg: true,
32
+ updatable: true,
33
+ vdomAttribute: true,
34
+ vdomXlink: true,
35
+ vdomClass: true,
36
+ vdomFunctional: true,
37
+ vdomKey: true,
38
+ vdomListener: true,
39
+ vdomRef: true,
40
+ vdomPropOrAttr: true,
41
+ vdomRender: true,
42
+ vdomStyle: true,
43
+ vdomText: true,
44
+ propChangeCallback: true,
45
+ taskQueue: true,
46
+ hotModuleReplacement: false,
47
+ isDebug: false,
48
+ isDev: false,
49
+ isTesting: false,
50
+ hydrateServerSide: false,
51
+ hydrateClientSide: false,
52
+ lifecycleDOMEvents: false,
53
+ lazyLoad: false,
54
+ profile: false,
55
+ slotRelocation: true,
56
+ // TODO(STENCIL-914): remove this option when `experimentalSlotFixes` is the default behavior
57
+ appendChildSlotFix: false,
58
+ // TODO(STENCIL-914): remove this option when `experimentalSlotFixes` is the default behavior
59
+ cloneNodeFix: false,
60
+ hydratedAttribute: false,
61
+ hydratedClass: true,
62
+ // TODO(STENCIL-1305): remove this option
63
+ scriptDataOpts: false,
64
+ // TODO(STENCIL-914): remove this option when `experimentalSlotFixes` is the default behavior
65
+ scopedSlotTextContentFix: false,
66
+ // TODO(STENCIL-854): Remove code related to legacy shadowDomShim field
67
+ shadowDomShim: false,
68
+ // TODO(STENCIL-914): remove this option when `experimentalSlotFixes` is the default behavior
69
+ slotChildNodesFix: false,
70
+ invisiblePrehydration: true,
71
+ propBoolean: true,
72
+ propNumber: true,
73
+ propString: true,
74
+ constructableCSS: true,
75
+ devTools: false,
76
+ shadowDelegatesFocus: true,
77
+ initializeNextTick: false,
78
+ asyncLoading: true,
79
+ asyncQueue: false,
80
+ // TODO: deprecated in favour of `setTagTransformer` and `transformTag`. Remove in 5.0
81
+ transformTagName: false,
82
+ attachStyles: true,
83
+ // TODO(STENCIL-914): remove this option when `experimentalSlotFixes` is the default behavior
84
+ experimentalSlotFixes: false
85
+ };
86
+ var Env = {};
87
+ var NAMESPACE = (
88
+ /* default */
89
+ "app"
90
+ );
91
+
5
92
  const modeResolutionChain = [];
6
93
 
7
94
  function hydrateFactory($stencilWindow, $stencilHydrateOpts, $stencilHydrateResults, $stencilAfterHydrate, $stencilHydrateResolve) {
95
+ var everywhere;
96
+ try { everywhere = global || globalThis; }
97
+ catch (e) { everywhere = window || globalThis; }
98
+
8
99
  var globalThis = $stencilWindow;
9
100
  var self = $stencilWindow;
10
101
  var top = $stencilWindow;
@@ -132,7 +223,7 @@ const NAMESPACE = 'searchcraft-javascript-sdk';
132
223
  const BUILD = /* searchcraft-javascript-sdk */ { hydratedSelectorName: "hydrated", shadowDom: false, slotRelocation: true, state: true, updatable: true};
133
224
 
134
225
  /*
135
- Stencil Hydrate Platform v4.38.3 | MIT Licensed | https://stenciljs.com
226
+ Stencil Hydrate Platform v4.39.0 | MIT Licensed | https://stenciljs.com
136
227
  */
137
228
  var __defProp = Object.defineProperty;
138
229
  var __export = (target, all) => {
@@ -547,6 +638,9 @@ var uniqueTime = (key, measureText) => {
547
638
  };
548
639
  var getScopeId = (cmp, mode) => "sc-" + (cmp.$tagName$);
549
640
  var h = (nodeName, vnodeData, ...children) => {
641
+ if (typeof nodeName === "string") {
642
+ nodeName = transformTag(nodeName);
643
+ }
550
644
  let child = null;
551
645
  let key = null;
552
646
  let slotName = null;
@@ -693,7 +787,7 @@ var initializeClientHydrate = (hostElm, tagName, hostId, hostRef) => {
693
787
  const orgLocationNode = plt.$orgLocNodes$.get(orgLocationId);
694
788
  const node = childRenderNode.$elm$;
695
789
  if (!shadowRoot) {
696
- node["s-hn"] = tagName.toUpperCase();
790
+ node["s-hn"] = transformTag(tagName).toUpperCase();
697
791
  if (childRenderNode.$tag$ === "slot") {
698
792
  node["s-cr"] = hostElm["s-cr"];
699
793
  }
@@ -1102,7 +1196,11 @@ var setAccessor = (elm, memberName, oldValue, newValue, isSvg, flags, initialRen
1102
1196
  }
1103
1197
  }
1104
1198
  }
1105
- } else if (memberName === "key") ; else if ((!isProp ) && memberName[0] === "o" && memberName[1] === "n") {
1199
+ } else if (memberName === "key") ; else if (memberName === "ref") {
1200
+ if (newValue) {
1201
+ newValue(elm);
1202
+ }
1203
+ } else if ((!isProp ) && memberName[0] === "o" && memberName[1] === "n") {
1106
1204
  if (memberName[2] === "-") {
1107
1205
  memberName = memberName.slice(3);
1108
1206
  } else if (isMemberInElement(win, ln)) {
@@ -1336,6 +1434,7 @@ var removeVnodes = (vnodes, startIdx, endIdx) => {
1336
1434
  const vnode = vnodes[index];
1337
1435
  if (vnode) {
1338
1436
  const elm = vnode.$elm$;
1437
+ nullifyVNodeRefs(vnode);
1339
1438
  if (elm) {
1340
1439
  {
1341
1440
  checkSlotFallbackVisibility = true;
@@ -1548,6 +1647,12 @@ var markSlotContentForRelocation = (elm) => {
1548
1647
  }
1549
1648
  }
1550
1649
  };
1650
+ var nullifyVNodeRefs = (vNode) => {
1651
+ {
1652
+ vNode.$attrs$ && vNode.$attrs$.ref && vNode.$attrs$.ref(null);
1653
+ vNode.$children$ && vNode.$children$.map(nullifyVNodeRefs);
1654
+ }
1655
+ };
1551
1656
  var insertBefore = (parent, newNode, reference) => {
1552
1657
  {
1553
1658
  return parent == null ? void 0 : parent.insertBefore(newNode, reference);
@@ -1807,6 +1912,9 @@ var postUpdateComponent = (hostRef) => {
1807
1912
  safeCall(instance, "componentDidUpdate", void 0, elm);
1808
1913
  endPostUpdate();
1809
1914
  }
1915
+ {
1916
+ hostRef.$onInstanceResolve$(elm);
1917
+ }
1810
1918
  {
1811
1919
  if (hostRef.$onRenderResolve$) {
1812
1920
  hostRef.$onRenderResolve$();
@@ -2102,6 +2210,9 @@ var setContentReference = (elm) => {
2102
2210
 
2103
2211
  // src/runtime/fragment.ts
2104
2212
  var Fragment = (_, children) => children;
2213
+ function transformTag(tag) {
2214
+ return tag;
2215
+ }
2105
2216
 
2106
2217
  // src/runtime/vdom/vdom-annotations.ts
2107
2218
  var insertVdomAnnotations = (doc, staticComponents) => {
@@ -2657,9 +2768,15 @@ var isMemberInElement = (elm, memberName) => {
2657
2768
  var registerComponents = (Cstrs) => {
2658
2769
  for (const Cstr of Cstrs) {
2659
2770
  const exportName = Cstr.cmpMeta.$tagName$;
2771
+ const transformedTagName = everywhere.tagTransform(exportName);
2660
2772
  cmpModules.set(exportName, {
2661
2773
  [exportName]: Cstr
2662
2774
  });
2775
+ if (transformedTagName !== exportName) {
2776
+ cmpModules.set(transformedTagName, {
2777
+ [transformedTagName]: Cstr
2778
+ });
2779
+ }
2663
2780
  }
2664
2781
  };
2665
2782
  var win = window;
@@ -3298,7 +3415,7 @@ function getFormattedDateString(granularity, date) {
3298
3415
  }
3299
3416
  }
3300
3417
 
3301
- /*! @license DOMPurify 3.3.0 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.3.0/LICENSE */
3418
+ /*! @license DOMPurify 3.3.1 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.3.1/LICENSE */
3302
3419
 
3303
3420
  const {
3304
3421
  entries,
@@ -3596,7 +3713,7 @@ const _createHooksMap = function _createHooksMap() {
3596
3713
  function createDOMPurify() {
3597
3714
  let window = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getGlobal();
3598
3715
  const DOMPurify = root => createDOMPurify(root);
3599
- DOMPurify.version = '3.3.0';
3716
+ DOMPurify.version = '3.3.1';
3600
3717
  DOMPurify.removed = [];
3601
3718
  if (!window || !window.document || window.document.nodeType !== NODE_TYPE.document || !window.Element) {
3602
3719
  // Not running in a browser, provide a factory function
@@ -3942,6 +4059,12 @@ function createDOMPurify() {
3942
4059
  }
3943
4060
  addToSet(FORBID_CONTENTS, cfg.FORBID_CONTENTS, transformCaseFunc);
3944
4061
  }
4062
+ if (cfg.ADD_FORBID_CONTENTS) {
4063
+ if (FORBID_CONTENTS === DEFAULT_FORBID_CONTENTS) {
4064
+ FORBID_CONTENTS = clone(FORBID_CONTENTS);
4065
+ }
4066
+ addToSet(FORBID_CONTENTS, cfg.ADD_FORBID_CONTENTS, transformCaseFunc);
4067
+ }
3945
4068
  /* Add #text in case KEEP_CONTENT is set to true */
3946
4069
  if (KEEP_CONTENT) {
3947
4070
  ALLOWED_TAGS['#text'] = true;
@@ -4686,7 +4809,21 @@ const html$1 = (strings, ...values) => {
4686
4809
  * @js-example
4687
4810
  * ```html
4688
4811
  * <!-- index.html -->
4812
+ * <!-- Basic usage -->
4689
4813
  * <searchcraft-facet-list field-name="title" />
4814
+ *
4815
+ * <!-- With collapsible section (initially closed) and view more threshold -->
4816
+ * <searchcraft-facet-list
4817
+ * field-name="category"
4818
+ * initial-collapse-state="closed"
4819
+ * view-more-threshold="5"
4820
+ * />
4821
+ *
4822
+ * <!-- Show all facets without "view more" link -->
4823
+ * <searchcraft-facet-list
4824
+ * field-name="brand"
4825
+ * view-more-threshold="0"
4826
+ * />
4690
4827
  * ```
4691
4828
  *
4692
4829
  * ```js
@@ -4696,6 +4833,9 @@ const html$1 = (strings, ...values) => {
4696
4833
  * facetList.addEventListener('facetSelectionUpdated', () => {
4697
4834
  * console.log('Facet selection updated');
4698
4835
  * });
4836
+ *
4837
+ * // Programmatically toggle collapse state
4838
+ * await facetList.handleCollapseToggle();
4699
4839
  * ```
4700
4840
  *
4701
4841
  * @internal
@@ -4717,6 +4857,17 @@ class SearchcraftFacetList {
4717
4857
  * Array of facet values to exclude from rendering.
4718
4858
  */
4719
4859
  exclude;
4860
+ /**
4861
+ * Initial collapse state of the facet section.
4862
+ * @default 'open'
4863
+ */
4864
+ initialCollapseState = 'open';
4865
+ /**
4866
+ * The number of facets to show before displaying a "view more" link.
4867
+ * Set to 0 to show all facets without a "view more" link.
4868
+ * @default 8
4869
+ */
4870
+ viewMoreThreshold = 8;
4720
4871
  /**
4721
4872
  * Emitted when the facets are updated.
4722
4873
  */
@@ -4751,6 +4902,14 @@ class SearchcraftFacetList {
4751
4902
  count: 0,
4752
4903
  children: {},
4753
4904
  };
4905
+ /**
4906
+ * Tracks whether the facet section is collapsed or expanded.
4907
+ */
4908
+ isCollapsed = false;
4909
+ /**
4910
+ * Tracks whether all facets are shown or limited by the threshold.
4911
+ */
4912
+ showAllFacets = false;
4754
4913
  // Internal vars used to track when to perform various facet actions.
4755
4914
  lastTimeTaken;
4756
4915
  lastSearchTerm;
@@ -4936,6 +5095,8 @@ class SearchcraftFacetList {
4936
5095
  });
4937
5096
  }
4938
5097
  connectedCallback() {
5098
+ // Initialize collapse state based on prop
5099
+ this.isCollapsed = this.initialCollapseState === 'closed';
4939
5100
  this.cleanupCore = registry.useCoreInstance(this.searchcraftId, this.onCoreAvailable.bind(this));
4940
5101
  }
4941
5102
  disconnectedCallback() {
@@ -4975,6 +5136,23 @@ class SearchcraftFacetList {
4975
5136
  const label = name.replace(/^\//, '');
4976
5137
  return `${label.replace(/-/g, ' ').replace(/\b\w/g, (char) => char.toUpperCase())}`;
4977
5138
  };
5139
+ /**
5140
+ * Toggles the collapsed state of the facet section.
5141
+ * @returns A promise that resolves when the toggle is complete.
5142
+ */
5143
+ async handleCollapseToggle() {
5144
+ this.isCollapsed = !this.isCollapsed;
5145
+ }
5146
+ /**
5147
+ * Returns whether the facet section is currently collapsed.
5148
+ * @returns A promise that resolves to true if collapsed, false if expanded.
5149
+ */
5150
+ async getIsCollapsed() {
5151
+ return this.isCollapsed;
5152
+ }
5153
+ handleViewMoreToggle = () => {
5154
+ this.showAllFacets = !this.showAllFacets;
5155
+ };
4978
5156
  renderFacet(keyName, facet) {
4979
5157
  let isChildSelected = false;
4980
5158
  for (const path of Object.keys(this.selectedPaths)) {
@@ -5013,7 +5191,18 @@ class SearchcraftFacetList {
5013
5191
  (this.lastSearchTerm || '').trim().length > 0) {
5014
5192
  return (hAsync("p", { class: 'searchcraft-facet-list-message' }, "No facets are available for this search query."));
5015
5193
  }
5016
- return (hAsync("div", { class: 'searchcraft-facet-list' }, this.renderFacet('@@root', this.renderedFacetTree)));
5194
+ // Get root-level facets for view more functionality
5195
+ const rootFacets = Object.keys(this.renderedFacetTree.children);
5196
+ const threshold = this.viewMoreThreshold ?? 8;
5197
+ const shouldShowViewMore = threshold > 0 && rootFacets.length > threshold;
5198
+ const visibleFacets = shouldShowViewMore && !this.showAllFacets
5199
+ ? rootFacets.slice(0, threshold)
5200
+ : rootFacets;
5201
+ return (hAsync("div", { class: 'searchcraft-facet-list-wrapper', "data-facet-section-collapsed": this.isCollapsed ? '' : undefined, "data-facet-section-expanded": !this.isCollapsed ? '' : undefined }, !this.isCollapsed && (hAsync("div", { class: 'searchcraft-facet-list-content' }, hAsync("div", { class: 'searchcraft-facet-list' }, visibleFacets.map((key) => {
5202
+ if (this.renderedFacetTree.children[key]) {
5203
+ return this.renderFacet(key, this.renderedFacetTree.children[key]);
5204
+ }
5205
+ })), shouldShowViewMore && (hAsync("button", { class: 'searchcraft-facet-list-view-more', onClick: this.handleViewMoreToggle, type: 'button' }, this.showAllFacets ? 'View less' : 'View more...'))))));
5017
5206
  }
5018
5207
  static get cmpMeta() { return {
5019
5208
  "$flags$": 768,
@@ -5022,9 +5211,15 @@ class SearchcraftFacetList {
5022
5211
  "searchcraftId": [1, "searchcraft-id"],
5023
5212
  "fieldName": [1, "field-name"],
5024
5213
  "exclude": [16],
5214
+ "initialCollapseState": [1, "initial-collapse-state"],
5215
+ "viewMoreThreshold": [2, "view-more-threshold"],
5025
5216
  "selectedPaths": [32],
5026
5217
  "facetTreeCollectedFromSearchResponse": [32],
5027
- "renderedFacetTree": [32]
5218
+ "renderedFacetTree": [32],
5219
+ "isCollapsed": [32],
5220
+ "showAllFacets": [32],
5221
+ "handleCollapseToggle": [64],
5222
+ "getIsCollapsed": [64]
5028
5223
  },
5029
5224
  "$listeners$": undefined,
5030
5225
  "$lazyBundleId$": "-",
@@ -5338,8 +5533,40 @@ class SearchcraftFilterPanel {
5338
5533
  }
5339
5534
  case 'facets': {
5340
5535
  const item = filterItem;
5536
+ let facetListElement = null;
5537
+ let labelElement = null;
5538
+ const updateLabelAttributes = (isCollapsed) => {
5539
+ if (labelElement) {
5540
+ if (isCollapsed) {
5541
+ labelElement.removeAttribute('data-facet-section-expanded');
5542
+ labelElement.setAttribute('data-facet-section-collapsed', '');
5543
+ labelElement.setAttribute('aria-expanded', 'false');
5544
+ }
5545
+ else {
5546
+ labelElement.removeAttribute('data-facet-section-collapsed');
5547
+ labelElement.setAttribute('data-facet-section-expanded', '');
5548
+ labelElement.setAttribute('aria-expanded', 'true');
5549
+ }
5550
+ }
5551
+ };
5552
+ const handleToggle = async () => {
5553
+ if (facetListElement && 'handleCollapseToggle' in facetListElement && 'getIsCollapsed' in facetListElement) {
5554
+ await facetListElement.handleCollapseToggle();
5555
+ const isCollapsed = await facetListElement.getIsCollapsed();
5556
+ updateLabelAttributes(isCollapsed);
5557
+ }
5558
+ };
5341
5559
  // return "filters-list"
5342
- return (hAsync("div", { class: 'searchcraft-filter-panel-section' }, hAsync("p", { class: 'searchcraft-filter-panel-label' }, filterItem.label), hAsync("searchcraft-facet-list", { fieldName: item.fieldName, exclude: item.options.exclude, onFacetSelectionUpdated: (event) => {
5560
+ return (hAsync("div", { class: 'searchcraft-filter-panel-section' }, hAsync("p", { ref: (el) => {
5561
+ labelElement = el || null;
5562
+ }, class: 'searchcraft-filter-panel-label', "data-toggle-facet-section": true, "data-facet-section-expanded": item.options.initialCollapseState !== 'closed' ? '' : undefined, "data-facet-section-collapsed": item.options.initialCollapseState === 'closed' ? '' : undefined, onClick: handleToggle, onKeyDown: async (event) => {
5563
+ if (event.key === 'Enter' || event.key === ' ') {
5564
+ event.preventDefault();
5565
+ await handleToggle();
5566
+ }
5567
+ }, tabIndex: 0, role: 'button', "aria-expanded": item.options.initialCollapseState !== 'closed' }, filterItem.label), hAsync("searchcraft-facet-list", { ref: (el) => {
5568
+ facetListElement = el || null;
5569
+ }, fieldName: item.fieldName, exclude: item.options.exclude, initialCollapseState: item.options.initialCollapseState, viewMoreThreshold: item.options.viewMoreThreshold, onFacetSelectionUpdated: (event) => {
5343
5570
  this.handleFacetSelectionUpdated(item.fieldName, event.detail.paths);
5344
5571
  } })));
5345
5572
  }
@@ -5676,6 +5903,11 @@ class SearchcraftPagination {
5676
5903
  * The id of the Searchcraft instance that this component should use.
5677
5904
  */
5678
5905
  searchcraftId;
5906
+ /**
5907
+ * Whether to scroll to the top of the search results when pagination buttons are clicked.
5908
+ * @default true
5909
+ */
5910
+ scrollToTop = true;
5679
5911
  // store vars
5680
5912
  searchTerm;
5681
5913
  searchResultsPerPage;
@@ -5716,8 +5948,47 @@ class SearchcraftPagination {
5716
5948
  this.unsubscribe?.();
5717
5949
  this.cleanupCore?.();
5718
5950
  }
5951
+ /**
5952
+ * Smooth scroll to the top of the search results component
5953
+ */
5954
+ smoothScrollToSearchResults() {
5955
+ if (!this.scrollToTop) {
5956
+ return;
5957
+ }
5958
+ const searchResultsElement = document.querySelector('searchcraft-search-results .searchcraft-search-results');
5959
+ if (!searchResultsElement) {
5960
+ return;
5961
+ }
5962
+ const elementRect = searchResultsElement.getBoundingClientRect();
5963
+ const scrollOffset = 200; // Offset in pixels above the element
5964
+ const targetPosition = elementRect.top + window.scrollY - scrollOffset;
5965
+ const startPosition = window.scrollY;
5966
+ const distance = targetPosition - startPosition;
5967
+ const duration = 1500;
5968
+ let startTime = null;
5969
+ // smooth scrolling
5970
+ const easeOutExpo = (t) => {
5971
+ return t === 1 ? 1 : 1 - 2 ** (-10 * t);
5972
+ };
5973
+ const animation = (currentTime) => {
5974
+ if (startTime === null) {
5975
+ startTime = currentTime;
5976
+ }
5977
+ const timeElapsed = currentTime - startTime;
5978
+ const progress = Math.min(timeElapsed / duration, 1);
5979
+ const ease = easeOutExpo(progress);
5980
+ window.scrollTo(0, startPosition + distance * ease);
5981
+ if (progress < 1) {
5982
+ requestAnimationFrame(animation);
5983
+ }
5984
+ };
5985
+ requestAnimationFrame(animation);
5986
+ }
5719
5987
  handleGoToPage(page) {
5720
5988
  this.setSearchResultsPage(page);
5989
+ if (this.scrollToTop) {
5990
+ this.smoothScrollToSearchResults();
5991
+ }
5721
5992
  }
5722
5993
  renderOddPaginationItem(page) {
5723
5994
  return (hAsync("li", null, hAsync("button", { class: classNames('searchcraft-pagination-item', {
@@ -5776,6 +6047,7 @@ class SearchcraftPagination {
5776
6047
  "$tagName$": "searchcraft-pagination",
5777
6048
  "$members$": {
5778
6049
  "searchcraftId": [1, "searchcraft-id"],
6050
+ "scrollToTop": [4, "scroll-to-top"],
5779
6051
  "searchTerm": [32],
5780
6052
  "searchResultsPerPage": [32],
5781
6053
  "searchResultsPage": [32],
@@ -9874,7 +10146,7 @@ class SearchcraftSummaryBox {
9874
10146
  }; }
9875
10147
  }
9876
10148
 
9877
- 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)}@media(max-width: 767px){[data-toggle-filter-panel]{cursor:pointer;display:flex !important;align-items:center;justify-content:space-between;width:100%}[data-toggle-filter-panel]::after{content:"›";display:inline-block;font-size:1.5em;line-height:1;margin-left:auto;flex-shrink:0;transition:transform .2s ease;transform-origin:center}[data-toggle-filter-panel][data-filter-panel-collapsed]::after{transform:rotate(90deg)}[data-toggle-filter-panel][data-filter-panel-expanded]::after{transform:rotate(-90deg)}}@media(min-width: 768px){[data-toggle-filter-panel]{cursor:default}[data-toggle-filter-panel]::after{display:none}}: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}.searchcraft-summary-box{padding:20px;border-radius:var(--sc-border-radius);background-color:var(--sc-surface-neutral-secondary);position:relative;min-height:200px;color:var(--sc-content-neutral-primary);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-summary-box h1,.searchcraft-summary-box h2,.searchcraft-summary-box h3,.searchcraft-summary-box h4,.searchcraft-summary-box h5{padding-top:10px;padding-bottom:10px}.searchcraft-summary-box p{padding-bottom:10px}.searchcraft-summary-box img{max-width:200px}.searchcraft-summary-box ol,.searchcraft-summary-box ul{padding-left:1em;padding-bottom:10px}.searchcraft-summary-box a{color:var(--sc-content-brand)}.searchcraft-loading-label{position:absolute;top:50%;left:50%;transform:translateY(-50%) translateX(-50%);margin-top:40px;letter-spacing:2px;color:#828282;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-loading-bars{margin:0 auto;width:60px;height:50px;text-align:center;position:absolute;top:50%;left:50%;transform:translateY(-50%) translateX(-50%);display:flex;gap:2px}.searchcraft-loading-bars>div{height:100%;width:8px;-webkit-animation:delay .8s infinite ease-in-out;animation:delay .8s infinite ease-in-out;opacity:.2}.searchcraft-loading-bars .searchcraft-loading-bar-1{background-color:var(--sc-surface-brand-primary);opacity:.1}.searchcraft-loading-bars .searchcraft-loading-bar-2{background-color:var(--sc-surface-brand-primary);animation-delay:-0.7s;opacity:.2}.searchcraft-loading-bars .searchcraft-loading-bar-3{background-color:var(--sc-surface-brand-primary);animation-delay:-0.6s;opacity:.3}.searchcraft-loading-bars .searchcraft-loading-bar-4{background-color:var(--sc-surface-brand-primary);animation-delay:-0.5s;opacity:.4}.searchcraft-loading-bars .searchcraft-loading-bar-5{background-color:var(--sc-surface-brand-primary);animation-delay:-0.4s;opacity:.5}.searchcraft-loading-bars .searchcraft-loading-bar-6{background-color:var(--sc-surface-brand-primary);animation-delay:-0.3s;opacity:.6}@keyframes delay{0%,40%,100%{transform:scaleY(0.05)}20%{transform:scaleY(1)}}/*# sourceMappingURL=hologram.css.map */
10149
+ 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-facet-list-wrapper{display:flex;flex-direction:column;width:100%;min-height:0}.searchcraft-facet-list-content{display:flex;flex-direction:column;gap:8px;min-height:0;flex-shrink:0}.searchcraft-facet-list-view-more{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:none;color:var(--sc-content-brand);cursor:pointer;padding:8px 0;text-align:left;text-decoration:underline}.searchcraft-facet-list-view-more:hover{color:var(--sc-surface-brand-primary-hover)}.searchcraft-facet-list-view-more:focus{outline:2px solid var(--sc-surface-brand-primary);outline-offset:2px}.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)}[data-toggle-facet-section]{cursor:pointer;display:flex;align-items:center;justify-content:space-between;width:100%;position:relative}[data-toggle-facet-section]::after{content:"›";display:inline-block;font-size:1.5em;line-height:1;margin-left:auto;flex-shrink:0;transition:transform .2s ease;transform-origin:center}[data-toggle-facet-section][data-facet-section-collapsed]::after{transform:rotate(90deg)}[data-toggle-facet-section][data-facet-section-expanded]::after{transform:rotate(-90deg)}@media(max-width: 767px){[data-toggle-filter-panel]{cursor:pointer;display:flex !important;align-items:center;justify-content:space-between;width:100%}[data-toggle-filter-panel]::after{content:"›";display:inline-block;font-size:1.5em;line-height:1;margin-left:auto;flex-shrink:0;transition:transform .2s ease;transform-origin:center}[data-toggle-filter-panel][data-filter-panel-collapsed]::after{transform:rotate(90deg)}[data-toggle-filter-panel][data-filter-panel-expanded]::after{transform:rotate(-90deg)}}@media(min-width: 768px){[data-toggle-filter-panel]{cursor:default}[data-toggle-filter-panel]::after{display:none}}: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}.searchcraft-summary-box{padding:20px;border-radius:var(--sc-border-radius);background-color:var(--sc-surface-neutral-secondary);position:relative;min-height:200px;color:var(--sc-content-neutral-primary);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-summary-box h1,.searchcraft-summary-box h2,.searchcraft-summary-box h3,.searchcraft-summary-box h4,.searchcraft-summary-box h5{padding-top:10px;padding-bottom:10px}.searchcraft-summary-box p{padding-bottom:10px}.searchcraft-summary-box img{max-width:200px}.searchcraft-summary-box ol,.searchcraft-summary-box ul{padding-left:1em;padding-bottom:10px}.searchcraft-summary-box a{color:var(--sc-content-brand)}.searchcraft-loading-label{position:absolute;top:50%;left:50%;transform:translateY(-50%) translateX(-50%);margin-top:40px;letter-spacing:2px;color:#828282;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-loading-bars{margin:0 auto;width:60px;height:50px;text-align:center;position:absolute;top:50%;left:50%;transform:translateY(-50%) translateX(-50%);display:flex;gap:2px}.searchcraft-loading-bars>div{height:100%;width:8px;-webkit-animation:delay .8s infinite ease-in-out;animation:delay .8s infinite ease-in-out;opacity:.2}.searchcraft-loading-bars .searchcraft-loading-bar-1{background-color:var(--sc-surface-brand-primary);opacity:.1}.searchcraft-loading-bars .searchcraft-loading-bar-2{background-color:var(--sc-surface-brand-primary);animation-delay:-0.7s;opacity:.2}.searchcraft-loading-bars .searchcraft-loading-bar-3{background-color:var(--sc-surface-brand-primary);animation-delay:-0.6s;opacity:.3}.searchcraft-loading-bars .searchcraft-loading-bar-4{background-color:var(--sc-surface-brand-primary);animation-delay:-0.5s;opacity:.4}.searchcraft-loading-bars .searchcraft-loading-bar-5{background-color:var(--sc-surface-brand-primary);animation-delay:-0.4s;opacity:.5}.searchcraft-loading-bars .searchcraft-loading-bar-6{background-color:var(--sc-surface-brand-primary);animation-delay:-0.3s;opacity:.6}@keyframes delay{0%,40%,100%{transform:scaleY(0.05)}20%{transform:scaleY(1)}}/*# sourceMappingURL=hologram.css.map */
9878
10150
  `;
9879
10151
 
9880
10152
  /**
@@ -10030,805 +10302,1269 @@ exports.hydrateApp = hydrateApp;
10030
10302
  hydrateAppClosure($stencilWindow);
10031
10303
  }
10032
10304
 
10033
- // src/app-data/index.ts
10034
- var BUILD = {
10035
- allRenderFn: false,
10036
- element: true,
10037
- event: true,
10038
- hasRenderFn: true,
10039
- hostListener: true,
10040
- hostListenerTargetWindow: true,
10041
- hostListenerTargetDocument: true,
10042
- hostListenerTargetBody: true,
10043
- hostListenerTargetParent: false,
10044
- hostListenerTarget: true,
10045
- member: true,
10046
- method: true,
10047
- mode: true,
10048
- observeAttribute: true,
10049
- prop: true,
10050
- propMutable: true,
10051
- reflect: true,
10052
- scoped: true,
10053
- shadowDom: true,
10054
- slot: true,
10055
- cssAnnotations: true,
10056
- state: true,
10057
- style: true,
10058
- formAssociated: false,
10059
- svg: true,
10060
- updatable: true,
10061
- vdomAttribute: true,
10062
- vdomXlink: true,
10063
- vdomClass: true,
10064
- vdomFunctional: true,
10065
- vdomKey: true,
10066
- vdomListener: true,
10067
- vdomRef: true,
10068
- vdomPropOrAttr: true,
10069
- vdomRender: true,
10070
- vdomStyle: true,
10071
- vdomText: true,
10072
- propChangeCallback: true,
10073
- taskQueue: true,
10074
- hotModuleReplacement: false,
10075
- isDebug: false,
10076
- isDev: false,
10077
- isTesting: false,
10078
- hydrateServerSide: false,
10079
- hydrateClientSide: false,
10080
- lifecycleDOMEvents: false,
10081
- lazyLoad: false,
10082
- profile: false,
10083
- slotRelocation: true,
10084
- // TODO(STENCIL-914): remove this option when `experimentalSlotFixes` is the default behavior
10085
- appendChildSlotFix: false,
10086
- // TODO(STENCIL-914): remove this option when `experimentalSlotFixes` is the default behavior
10087
- cloneNodeFix: false,
10088
- hydratedAttribute: false,
10089
- hydratedClass: true,
10090
- // TODO(STENCIL-1305): remove this option
10091
- scriptDataOpts: false,
10092
- // TODO(STENCIL-914): remove this option when `experimentalSlotFixes` is the default behavior
10093
- scopedSlotTextContentFix: false,
10094
- // TODO(STENCIL-854): Remove code related to legacy shadowDomShim field
10095
- shadowDomShim: false,
10096
- // TODO(STENCIL-914): remove this option when `experimentalSlotFixes` is the default behavior
10097
- slotChildNodesFix: false,
10098
- invisiblePrehydration: true,
10099
- propBoolean: true,
10100
- propNumber: true,
10101
- propString: true,
10102
- constructableCSS: true,
10103
- devTools: false,
10104
- shadowDelegatesFocus: true,
10105
- initializeNextTick: false,
10106
- asyncLoading: true,
10107
- asyncQueue: false,
10108
- transformTagName: false,
10109
- attachStyles: true,
10110
- // TODO(STENCIL-914): remove this option when `experimentalSlotFixes` is the default behavior
10111
- experimentalSlotFixes: false
10112
- };
10113
- var Env = {};
10114
- var NAMESPACE = (
10115
- /* default */
10116
- "app"
10117
- );
10118
-
10119
10305
  /*
10120
- Stencil Hydrate Runner v4.38.3 | MIT Licensed | https://stenciljs.com
10306
+ Stencil Hydrate Runner v4.39.0 | MIT Licensed | https://stenciljs.com
10121
10307
  */
10122
10308
  var __defProp = Object.defineProperty;
10123
10309
  var __export = (target, all) => {
10124
10310
  for (var name in all)
10125
10311
  __defProp(target, name, { get: all[name], enumerable: true });
10126
10312
  };
10127
-
10128
- // src/runtime/runtime-constants.ts
10129
- var CONTENT_REF_ID = "r";
10130
- var ORG_LOCATION_ID = "o";
10131
- var SLOT_NODE_ID = "s";
10132
- var TEXT_NODE_ID = "t";
10133
- var HYDRATE_ID = "s-id";
10134
- var HYDRATED_STYLE_ID = "sty-id";
10135
- var STENCIL_DOC_DATA = "_stencilDocData";
10136
- var XLINK_NS = "http://www.w3.org/1999/xlink";
10137
-
10138
- // src/mock-doc/attribute.ts
10139
- var attrHandler = {
10140
- get(obj, prop) {
10141
- if (prop in obj) {
10142
- return obj[prop];
10143
- }
10144
- if (typeof prop !== "symbol" && !isNaN(prop)) {
10145
- return obj.__items[prop];
10146
- }
10147
- return void 0;
10148
- }
10313
+ var Build = {
10314
+ isDev: BUILD.isDev ? true : false,
10315
+ isBrowser: true,
10316
+ isServer: false,
10317
+ isTesting: BUILD.isTesting ? true : false
10149
10318
  };
10150
- var createAttributeProxy = (caseInsensitive) => new Proxy(new MockAttributeMap(caseInsensitive), attrHandler);
10151
- var MockAttributeMap = class {
10152
- constructor(caseInsensitive = false) {
10153
- this.caseInsensitive = caseInsensitive;
10154
- this.__items = [];
10155
- }
10156
- get length() {
10157
- return this.__items.length;
10158
- }
10159
- item(index) {
10160
- return this.__items[index] || null;
10161
- }
10162
- setNamedItem(attr) {
10163
- attr.namespaceURI = null;
10164
- this.setNamedItemNS(attr);
10319
+
10320
+ // src/utils/constants.ts
10321
+ var PrimitiveType = /* @__PURE__ */ ((PrimitiveType2) => {
10322
+ PrimitiveType2["Undefined"] = "undefined";
10323
+ PrimitiveType2["Null"] = "null";
10324
+ PrimitiveType2["String"] = "string";
10325
+ PrimitiveType2["Number"] = "number";
10326
+ PrimitiveType2["SpecialNumber"] = "number";
10327
+ PrimitiveType2["Boolean"] = "boolean";
10328
+ PrimitiveType2["BigInt"] = "bigint";
10329
+ return PrimitiveType2;
10330
+ })(PrimitiveType || {});
10331
+ var NonPrimitiveType = /* @__PURE__ */ ((NonPrimitiveType2) => {
10332
+ NonPrimitiveType2["Array"] = "array";
10333
+ NonPrimitiveType2["Date"] = "date";
10334
+ NonPrimitiveType2["Map"] = "map";
10335
+ NonPrimitiveType2["Object"] = "object";
10336
+ NonPrimitiveType2["RegularExpression"] = "regexp";
10337
+ NonPrimitiveType2["Set"] = "set";
10338
+ NonPrimitiveType2["Channel"] = "channel";
10339
+ NonPrimitiveType2["Symbol"] = "symbol";
10340
+ return NonPrimitiveType2;
10341
+ })(NonPrimitiveType || {});
10342
+ var TYPE_CONSTANT = "type";
10343
+ var VALUE_CONSTANT = "value";
10344
+ var SERIALIZED_PREFIX = "serialized:";
10345
+ var STENCIL_DEV_MODE = BUILD.isTesting ? ["STENCIL:"] : [
10346
+ "%cstencil",
10347
+ "color: white;background:#4c47ff;font-weight: bold; font-size:10px; padding:2px 6px; border-radius: 5px"
10348
+ ];
10349
+
10350
+ // src/runtime/runtime-constants.ts
10351
+ var CONTENT_REF_ID = "r";
10352
+ var ORG_LOCATION_ID = "o";
10353
+ var SLOT_NODE_ID = "s";
10354
+ var TEXT_NODE_ID = "t";
10355
+ var HYDRATE_ID = "s-id";
10356
+ var HYDRATED_STYLE_ID = "sty-id";
10357
+ var STENCIL_DOC_DATA = "_stencilDocData";
10358
+ var XLINK_NS = "http://www.w3.org/1999/xlink";
10359
+ var win = typeof window !== "undefined" ? window : {};
10360
+ var H = win.HTMLElement || class {
10361
+ };
10362
+ var supportsShadow = BUILD.shadowDom;
10363
+ var supportsConstructableStylesheets = BUILD.constructableCSS ? /* @__PURE__ */ (() => {
10364
+ try {
10365
+ new CSSStyleSheet();
10366
+ return typeof new CSSStyleSheet().replaceSync === "function";
10367
+ } catch (e) {
10165
10368
  }
10166
- setNamedItemNS(attr) {
10167
- if (attr != null && attr.value != null) {
10168
- attr.value = String(attr.value);
10169
- }
10170
- const existingAttr = this.__items.find((a) => a.name === attr.name && a.namespaceURI === attr.namespaceURI);
10171
- if (existingAttr != null) {
10172
- existingAttr.value = attr.value;
10369
+ return false;
10370
+ })() : false;
10371
+
10372
+ // src/utils/helpers.ts
10373
+ var isString = (v) => typeof v === "string";
10374
+
10375
+ // src/utils/local-value.ts
10376
+ var LocalValue = class _LocalValue {
10377
+ constructor(type, value) {
10378
+ if (type === "undefined" /* Undefined */ || type === "null" /* Null */) {
10379
+ this.type = type;
10173
10380
  } else {
10174
- this.__items.push(attr);
10175
- }
10176
- }
10177
- getNamedItem(attrName) {
10178
- if (this.caseInsensitive) {
10179
- attrName = attrName.toLowerCase();
10381
+ this.type = type;
10382
+ this.value = value;
10180
10383
  }
10181
- return this.getNamedItemNS(null, attrName);
10182
10384
  }
10183
- getNamedItemNS(namespaceURI, attrName) {
10184
- namespaceURI = getNamespaceURI(namespaceURI);
10185
- return this.__items.find((attr) => attr.name === attrName && getNamespaceURI(attr.namespaceURI) === namespaceURI) || null;
10385
+ /**
10386
+ * Creates a new LocalValue object with a string value.
10387
+ *
10388
+ * @param {string} value - The string value to be stored in the LocalValue object.
10389
+ * @returns {LocalValue} - The created LocalValue object.
10390
+ */
10391
+ static createStringValue(value) {
10392
+ return new _LocalValue("string" /* String */, value);
10186
10393
  }
10187
- removeNamedItem(attr) {
10188
- this.removeNamedItemNS(attr);
10394
+ /**
10395
+ * Creates a new LocalValue object with a number value.
10396
+ *
10397
+ * @param {number} value - The number value.
10398
+ * @returns {LocalValue} - The created LocalValue object.
10399
+ */
10400
+ static createNumberValue(value) {
10401
+ return new _LocalValue("number" /* Number */, value);
10189
10402
  }
10190
- removeNamedItemNS(attr) {
10191
- for (let i = 0, ii = this.__items.length; i < ii; i++) {
10192
- if (this.__items[i].name === attr.name && this.__items[i].namespaceURI === attr.namespaceURI) {
10193
- this.__items.splice(i, 1);
10194
- break;
10195
- }
10403
+ /**
10404
+ * Creates a new LocalValue object with a special number value.
10405
+ *
10406
+ * @param {number} value - The value of the special number.
10407
+ * @returns {LocalValue} - The created LocalValue object.
10408
+ */
10409
+ static createSpecialNumberValue(value) {
10410
+ if (Number.isNaN(value)) {
10411
+ return new _LocalValue("number" /* SpecialNumber */, "NaN");
10196
10412
  }
10197
- }
10198
- [Symbol.iterator]() {
10199
- let i = 0;
10200
- return {
10201
- next: () => ({
10202
- done: i === this.length,
10203
- value: this.item(i++)
10204
- })
10205
- };
10206
- }
10207
- get [Symbol.toStringTag]() {
10208
- return "MockAttributeMap";
10209
- }
10210
- };
10211
- function getNamespaceURI(namespaceURI) {
10212
- return namespaceURI === XLINK_NS ? null : namespaceURI;
10213
- }
10214
- function cloneAttributes(srcAttrs, sortByName = false) {
10215
- const dstAttrs = new MockAttributeMap(srcAttrs.caseInsensitive);
10216
- if (srcAttrs != null) {
10217
- const attrLen = srcAttrs.length;
10218
- if (sortByName && attrLen > 1) {
10219
- const sortedAttrs = [];
10220
- for (let i = 0; i < attrLen; i++) {
10221
- const srcAttr = srcAttrs.item(i);
10222
- const dstAttr = new MockAttr(srcAttr.name, srcAttr.value, srcAttr.namespaceURI);
10223
- sortedAttrs.push(dstAttr);
10224
- }
10225
- sortedAttrs.sort(sortAttributes).forEach((attr) => {
10226
- dstAttrs.setNamedItemNS(attr);
10227
- });
10228
- } else {
10229
- for (let i = 0; i < attrLen; i++) {
10230
- const srcAttr = srcAttrs.item(i);
10231
- const dstAttr = new MockAttr(srcAttr.name, srcAttr.value, srcAttr.namespaceURI);
10232
- dstAttrs.setNamedItemNS(dstAttr);
10233
- }
10413
+ if (Object.is(value, -0)) {
10414
+ return new _LocalValue("number" /* SpecialNumber */, "-0");
10234
10415
  }
10416
+ if (value === Infinity) {
10417
+ return new _LocalValue("number" /* SpecialNumber */, "Infinity");
10418
+ }
10419
+ if (value === -Infinity) {
10420
+ return new _LocalValue("number" /* SpecialNumber */, "-Infinity");
10421
+ }
10422
+ return new _LocalValue("number" /* SpecialNumber */, value);
10235
10423
  }
10236
- return dstAttrs;
10237
- }
10238
- function sortAttributes(a, b) {
10239
- if (a.name < b.name) return -1;
10240
- if (a.name > b.name) return 1;
10241
- return 0;
10242
- }
10243
- var MockAttr = class {
10244
- constructor(attrName, attrValue, namespaceURI = null) {
10245
- this._name = attrName;
10246
- this._value = String(attrValue);
10247
- this._namespaceURI = namespaceURI;
10248
- }
10249
- get name() {
10250
- return this._name;
10251
- }
10252
- set name(value) {
10253
- this._name = value;
10254
- }
10255
- get value() {
10256
- return this._value;
10424
+ /**
10425
+ * Creates a new LocalValue object with an undefined value.
10426
+ * @returns {LocalValue} - The created LocalValue object.
10427
+ */
10428
+ static createUndefinedValue() {
10429
+ return new _LocalValue("undefined" /* Undefined */);
10257
10430
  }
10258
- set value(value) {
10259
- this._value = String(value);
10431
+ /**
10432
+ * Creates a new LocalValue object with a null value.
10433
+ * @returns {LocalValue} - The created LocalValue object.
10434
+ */
10435
+ static createNullValue() {
10436
+ return new _LocalValue("null" /* Null */);
10260
10437
  }
10261
- get nodeName() {
10262
- return this._name;
10438
+ /**
10439
+ * Creates a new LocalValue object with a boolean value.
10440
+ *
10441
+ * @param {boolean} value - The boolean value.
10442
+ * @returns {LocalValue} - The created LocalValue object.
10443
+ */
10444
+ static createBooleanValue(value) {
10445
+ return new _LocalValue("boolean" /* Boolean */, value);
10263
10446
  }
10264
- set nodeName(value) {
10265
- this._name = value;
10447
+ /**
10448
+ * Creates a new LocalValue object with a BigInt value.
10449
+ *
10450
+ * @param {BigInt} value - The BigInt value.
10451
+ * @returns {LocalValue} - The created LocalValue object.
10452
+ */
10453
+ static createBigIntValue(value) {
10454
+ return new _LocalValue("bigint" /* BigInt */, value.toString());
10266
10455
  }
10267
- get nodeValue() {
10268
- return this._value;
10456
+ /**
10457
+ * Creates a new LocalValue object with an array.
10458
+ *
10459
+ * @param {Array} value - The array.
10460
+ * @returns {LocalValue} - The created LocalValue object.
10461
+ */
10462
+ static createArrayValue(value) {
10463
+ return new _LocalValue("array" /* Array */, value);
10269
10464
  }
10270
- set nodeValue(value) {
10271
- this._value = String(value);
10465
+ /**
10466
+ * Creates a new LocalValue object with date value.
10467
+ *
10468
+ * @param {string} value - The date.
10469
+ * @returns {LocalValue} - The created LocalValue object.
10470
+ */
10471
+ static createDateValue(value) {
10472
+ return new _LocalValue("date" /* Date */, value);
10272
10473
  }
10273
- get namespaceURI() {
10274
- return this._namespaceURI;
10474
+ /**
10475
+ * Creates a new LocalValue object of map value.
10476
+ * @param {Map} map - The map.
10477
+ * @returns {LocalValue} - The created LocalValue object.
10478
+ */
10479
+ static createMapValue(map2) {
10480
+ const value = [];
10481
+ Array.from(map2.entries()).forEach(([key, val]) => {
10482
+ value.push([_LocalValue.getArgument(key), _LocalValue.getArgument(val)]);
10483
+ });
10484
+ return new _LocalValue("map" /* Map */, value);
10275
10485
  }
10276
- set namespaceURI(namespaceURI) {
10277
- this._namespaceURI = namespaceURI;
10278
- }
10279
- };
10280
-
10281
- // src/mock-doc/css-style-declaration.ts
10282
- var MockCSSStyleDeclaration = class {
10283
- constructor() {
10284
- this._styles = /* @__PURE__ */ new Map();
10285
- }
10286
- setProperty(prop, value) {
10287
- prop = jsCaseToCssCase(prop);
10288
- if (value == null || value === "") {
10289
- this._styles.delete(prop);
10290
- } else {
10291
- this._styles.set(prop, String(value));
10292
- }
10486
+ /**
10487
+ * Creates a new LocalValue object from the passed object.
10488
+ *
10489
+ * @param object the object to create a LocalValue from
10490
+ * @returns {LocalValue} - The created LocalValue object.
10491
+ */
10492
+ static createObjectValue(object) {
10493
+ const value = [];
10494
+ Object.entries(object).forEach(([key, val]) => {
10495
+ value.push([key, _LocalValue.getArgument(val)]);
10496
+ });
10497
+ return new _LocalValue("object" /* Object */, value);
10293
10498
  }
10294
- getPropertyValue(prop) {
10295
- prop = jsCaseToCssCase(prop);
10296
- return String(this._styles.get(prop) || "");
10499
+ /**
10500
+ * Creates a new LocalValue object of regular expression value.
10501
+ *
10502
+ * @param {string} value - The value of the regular expression.
10503
+ * @returns {LocalValue} - The created LocalValue object.
10504
+ */
10505
+ static createRegularExpressionValue(value) {
10506
+ return new _LocalValue("regexp" /* RegularExpression */, value);
10297
10507
  }
10298
- removeProperty(prop) {
10299
- prop = jsCaseToCssCase(prop);
10300
- this._styles.delete(prop);
10508
+ /**
10509
+ * Creates a new LocalValue object with the specified value.
10510
+ * @param {Set} value - The value to be set.
10511
+ * @returns {LocalValue} - The created LocalValue object.
10512
+ */
10513
+ static createSetValue(value) {
10514
+ return new _LocalValue("set" /* Set */, value);
10301
10515
  }
10302
- get length() {
10303
- return this._styles.size;
10516
+ /**
10517
+ * Creates a new LocalValue object with the given channel value
10518
+ *
10519
+ * @param {ChannelValue} value - The channel value.
10520
+ * @returns {LocalValue} - The created LocalValue object.
10521
+ */
10522
+ static createChannelValue(value) {
10523
+ return new _LocalValue("channel" /* Channel */, value);
10304
10524
  }
10305
- get cssText() {
10306
- const cssText = [];
10307
- this._styles.forEach((value, prop) => {
10308
- cssText.push(`${prop}: ${value};`);
10309
- });
10310
- return cssText.join(" ").trim();
10525
+ /**
10526
+ * Creates a new LocalValue object with a Symbol value.
10527
+ *
10528
+ * @param {Symbol} symbol - The Symbol value
10529
+ * @returns {LocalValue} - The created LocalValue object
10530
+ */
10531
+ static createSymbolValue(symbol) {
10532
+ const description = symbol.description || "Symbol()";
10533
+ return new _LocalValue("symbol" /* Symbol */, description);
10311
10534
  }
10312
- set cssText(cssText) {
10313
- if (cssText == null || cssText === "") {
10314
- this._styles.clear();
10315
- return;
10316
- }
10317
- cssText.split(";").forEach((rule) => {
10318
- rule = rule.trim();
10319
- if (rule.length > 0) {
10320
- const splt = rule.split(":");
10321
- if (splt.length > 1) {
10322
- const prop = splt[0].trim();
10323
- const value = splt.slice(1).join(":").trim();
10324
- if (prop !== "" && value !== "") {
10325
- this._styles.set(jsCaseToCssCase(prop), value);
10326
- }
10535
+ static getArgument(argument) {
10536
+ const type = typeof argument;
10537
+ switch (type) {
10538
+ case "string" /* String */:
10539
+ return _LocalValue.createStringValue(argument);
10540
+ case "number" /* Number */:
10541
+ if (Number.isNaN(argument) || Object.is(argument, -0) || !Number.isFinite(argument)) {
10542
+ return _LocalValue.createSpecialNumberValue(argument);
10327
10543
  }
10328
- }
10329
- });
10330
- }
10331
- };
10332
- function createCSSStyleDeclaration() {
10333
- return new Proxy(new MockCSSStyleDeclaration(), cssProxyHandler);
10334
- }
10335
- var cssProxyHandler = {
10336
- get(cssStyle, prop) {
10337
- if (prop in cssStyle) {
10338
- return cssStyle[prop];
10339
- }
10340
- prop = cssCaseToJsCase(prop);
10341
- return cssStyle.getPropertyValue(prop);
10342
- },
10343
- set(cssStyle, prop, value) {
10344
- if (prop in cssStyle) {
10345
- cssStyle[prop] = value;
10346
- } else {
10347
- cssStyle.setProperty(prop, value);
10544
+ return _LocalValue.createNumberValue(argument);
10545
+ case "boolean" /* Boolean */:
10546
+ return _LocalValue.createBooleanValue(argument);
10547
+ case "bigint" /* BigInt */:
10548
+ return _LocalValue.createBigIntValue(argument);
10549
+ case "undefined" /* Undefined */:
10550
+ return _LocalValue.createUndefinedValue();
10551
+ case "symbol" /* Symbol */:
10552
+ return _LocalValue.createSymbolValue(argument);
10553
+ case "object" /* Object */:
10554
+ if (argument === null) {
10555
+ return _LocalValue.createNullValue();
10556
+ }
10557
+ if (argument instanceof Date) {
10558
+ return _LocalValue.createDateValue(argument);
10559
+ }
10560
+ if (argument instanceof Map) {
10561
+ const map2 = [];
10562
+ argument.forEach((value, key) => {
10563
+ const objectKey = typeof key === "string" ? key : _LocalValue.getArgument(key);
10564
+ const objectValue = _LocalValue.getArgument(value);
10565
+ map2.push([objectKey, objectValue]);
10566
+ });
10567
+ return _LocalValue.createMapValue(argument);
10568
+ }
10569
+ if (argument instanceof Set) {
10570
+ const set = [];
10571
+ argument.forEach((value) => {
10572
+ set.push(_LocalValue.getArgument(value));
10573
+ });
10574
+ return _LocalValue.createSetValue(set);
10575
+ }
10576
+ if (argument instanceof Array) {
10577
+ const arr = [];
10578
+ argument.forEach((value) => {
10579
+ arr.push(_LocalValue.getArgument(value));
10580
+ });
10581
+ return _LocalValue.createArrayValue(arr);
10582
+ }
10583
+ if (argument instanceof RegExp) {
10584
+ return _LocalValue.createRegularExpressionValue({
10585
+ pattern: argument.source,
10586
+ flags: argument.flags
10587
+ });
10588
+ }
10589
+ return _LocalValue.createObjectValue(argument);
10348
10590
  }
10349
- return true;
10350
- }
10351
- };
10352
- function cssCaseToJsCase(str) {
10353
- if (str.length > 1 && str.includes("-") === true) {
10354
- str = str.toLowerCase().split("-").map((segment) => segment.charAt(0).toUpperCase() + segment.slice(1)).join("");
10355
- str = str.slice(0, 1).toLowerCase() + str.slice(1);
10591
+ throw new Error(`Unsupported type: ${type}`);
10356
10592
  }
10357
- return str;
10358
- }
10359
- function jsCaseToCssCase(str) {
10360
- if (str.length > 1 && str.includes("-") === false && /[A-Z]/.test(str) === true) {
10361
- str = str.replace(/([A-Z])/g, (g) => " " + g[0]).trim().replace(/ /g, "-").toLowerCase();
10593
+ asMap() {
10594
+ return {
10595
+ [TYPE_CONSTANT]: this.type,
10596
+ ...!(this.type === "null" /* Null */ || this.type === "undefined" /* Undefined */) ? { [VALUE_CONSTANT]: this.value } : {}
10597
+ };
10362
10598
  }
10363
- return str;
10364
- }
10599
+ };
10365
10600
 
10366
- // src/mock-doc/custom-element-registry.ts
10367
- var MockCustomElementRegistry = class {
10368
- constructor(win2) {
10369
- this.win = win2;
10370
- }
10371
- define(tagName, cstr, options) {
10372
- if (tagName.toLowerCase() !== tagName) {
10373
- throw new Error(
10374
- `Failed to execute 'define' on 'CustomElementRegistry': "${tagName}" is not a valid custom element name`
10375
- );
10376
- }
10377
- if (this.__registry == null) {
10378
- this.__registry = /* @__PURE__ */ new Map();
10379
- }
10380
- this.__registry.set(tagName, { cstr, options });
10381
- if (this.__whenDefined != null) {
10382
- const whenDefinedResolveFns = this.__whenDefined.get(tagName);
10383
- if (whenDefinedResolveFns != null) {
10384
- whenDefinedResolveFns.forEach((whenDefinedResolveFn) => {
10385
- whenDefinedResolveFn();
10386
- });
10387
- whenDefinedResolveFns.length = 0;
10388
- this.__whenDefined.delete(tagName);
10601
+ // src/utils/message-utils.ts
10602
+ var catchError = (diagnostics, err2, msg) => {
10603
+ const diagnostic = {
10604
+ level: "error",
10605
+ type: "build",
10606
+ header: "Build Error",
10607
+ messageText: "build error",
10608
+ lines: []
10609
+ };
10610
+ if (isString(msg)) {
10611
+ diagnostic.messageText = msg.length ? msg : "UNKNOWN ERROR";
10612
+ } else if (err2 != null) {
10613
+ if (err2.stack != null) {
10614
+ diagnostic.messageText = err2.stack.toString();
10615
+ } else {
10616
+ if (err2.message != null) {
10617
+ diagnostic.messageText = err2.message.length ? err2.message : "UNKNOWN ERROR";
10618
+ } else {
10619
+ diagnostic.messageText = err2.toString();
10389
10620
  }
10390
10621
  }
10391
- const doc = this.win.document;
10392
- if (doc != null) {
10393
- const hosts = doc.querySelectorAll(tagName);
10394
- hosts.forEach((host) => {
10395
- if (upgradedElements.has(host) === false) {
10396
- tempDisableCallbacks.add(doc);
10397
- const upgradedCmp = createCustomElement(this, doc, tagName);
10398
- for (let i = 0; i < host.childNodes.length; i++) {
10399
- const childNode = host.childNodes[i];
10400
- childNode.remove();
10401
- upgradedCmp.appendChild(childNode);
10402
- }
10403
- tempDisableCallbacks.delete(doc);
10404
- if (proxyElements.has(host)) {
10405
- proxyElements.set(host, upgradedCmp);
10406
- }
10407
- }
10408
- fireConnectedCallback(host);
10409
- });
10410
- }
10411
10622
  }
10412
- get(tagName) {
10413
- if (this.__registry != null) {
10414
- const def = this.__registry.get(tagName.toLowerCase());
10415
- if (def != null) {
10416
- return def.cstr;
10417
- }
10418
- }
10419
- return void 0;
10623
+ if (diagnostics != null && !shouldIgnoreError(diagnostic.messageText)) {
10624
+ diagnostics.push(diagnostic);
10420
10625
  }
10421
- getName(cstr) {
10422
- for (const [tagName, def] of this.__registry.entries()) {
10423
- if (def.cstr === cstr) {
10424
- return tagName;
10425
- }
10626
+ return diagnostic;
10627
+ };
10628
+ var hasError = (diagnostics) => {
10629
+ if (diagnostics == null || diagnostics.length === 0) {
10630
+ return false;
10631
+ }
10632
+ return diagnostics.some((d) => d.level === "error" && d.type !== "runtime");
10633
+ };
10634
+ var shouldIgnoreError = (msg) => {
10635
+ return msg === TASK_CANCELED_MSG;
10636
+ };
10637
+ var TASK_CANCELED_MSG = `task canceled`;
10638
+
10639
+ // src/utils/regular-expression.ts
10640
+ var escapeRegExpSpecialCharacters = (text) => {
10641
+ return text.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
10642
+ };
10643
+
10644
+ // src/utils/remote-value.ts
10645
+ var RemoteValue = class _RemoteValue {
10646
+ /**
10647
+ * Deserializes a LocalValue serialized object back to its original JavaScript representation
10648
+ *
10649
+ * @param serialized The serialized LocalValue object
10650
+ * @returns The original JavaScript value/object
10651
+ */
10652
+ static fromLocalValue(serialized) {
10653
+ const type = serialized[TYPE_CONSTANT];
10654
+ const value = VALUE_CONSTANT in serialized ? serialized[VALUE_CONSTANT] : void 0;
10655
+ switch (type) {
10656
+ case "string" /* String */:
10657
+ return value;
10658
+ case "boolean" /* Boolean */:
10659
+ return value;
10660
+ case "bigint" /* BigInt */:
10661
+ return BigInt(value);
10662
+ case "undefined" /* Undefined */:
10663
+ return void 0;
10664
+ case "null" /* Null */:
10665
+ return null;
10666
+ case "number" /* Number */:
10667
+ if (value === "NaN") return NaN;
10668
+ if (value === "-0") return -0;
10669
+ if (value === "Infinity") return Infinity;
10670
+ if (value === "-Infinity") return -Infinity;
10671
+ return value;
10672
+ case "array" /* Array */:
10673
+ return value.map((item) => _RemoteValue.fromLocalValue(item));
10674
+ case "date" /* Date */:
10675
+ return new Date(value);
10676
+ case "map" /* Map */:
10677
+ const map2 = /* @__PURE__ */ new Map();
10678
+ for (const [key, val] of value) {
10679
+ const deserializedKey = typeof key === "object" && key !== null ? _RemoteValue.fromLocalValue(key) : key;
10680
+ const deserializedValue = _RemoteValue.fromLocalValue(val);
10681
+ map2.set(deserializedKey, deserializedValue);
10682
+ }
10683
+ return map2;
10684
+ case "object" /* Object */:
10685
+ const obj = {};
10686
+ for (const [key, val] of value) {
10687
+ obj[key] = _RemoteValue.fromLocalValue(val);
10688
+ }
10689
+ return obj;
10690
+ case "regexp" /* RegularExpression */:
10691
+ const { pattern, flags } = value;
10692
+ return new RegExp(pattern, flags);
10693
+ case "set" /* Set */:
10694
+ const set = /* @__PURE__ */ new Set();
10695
+ for (const item of value) {
10696
+ set.add(_RemoteValue.fromLocalValue(item));
10697
+ }
10698
+ return set;
10699
+ case "symbol" /* Symbol */:
10700
+ return Symbol(value);
10701
+ default:
10702
+ throw new Error(`Unsupported type: ${type}`);
10426
10703
  }
10427
- return void 0;
10428
10704
  }
10429
- upgrade(_rootNode) {
10705
+ /**
10706
+ * Utility method to deserialize multiple LocalValues at once
10707
+ *
10708
+ * @param serializedValues Array of serialized LocalValue objects
10709
+ * @returns Array of deserialized JavaScript values
10710
+ */
10711
+ static fromLocalValueArray(serializedValues) {
10712
+ return serializedValues.map((value) => _RemoteValue.fromLocalValue(value));
10430
10713
  }
10431
- clear() {
10432
- if (this.__registry != null) {
10433
- this.__registry.clear();
10714
+ /**
10715
+ * Verifies if the given object matches the structure of a serialized LocalValue
10716
+ *
10717
+ * @param obj Object to verify
10718
+ * @returns boolean indicating if the object has LocalValue structure
10719
+ */
10720
+ static isLocalValueObject(obj) {
10721
+ if (typeof obj !== "object" || obj === null) {
10722
+ return false;
10434
10723
  }
10435
- if (this.__whenDefined != null) {
10436
- this.__whenDefined.clear();
10724
+ if (!obj.hasOwnProperty(TYPE_CONSTANT)) {
10725
+ return false;
10437
10726
  }
10438
- }
10439
- whenDefined(tagName) {
10440
- tagName = tagName.toLowerCase();
10441
- if (this.__registry != null && this.__registry.has(tagName) === true) {
10442
- return Promise.resolve(this.__registry.get(tagName).cstr);
10727
+ const type = obj[TYPE_CONSTANT];
10728
+ const hasTypeProperty = Object.values({ ...PrimitiveType, ...NonPrimitiveType }).includes(type);
10729
+ if (!hasTypeProperty) {
10730
+ return false;
10443
10731
  }
10444
- return new Promise((resolve) => {
10445
- if (this.__whenDefined == null) {
10446
- this.__whenDefined = /* @__PURE__ */ new Map();
10447
- }
10448
- let whenDefinedResolveFns = this.__whenDefined.get(tagName);
10449
- if (whenDefinedResolveFns == null) {
10450
- whenDefinedResolveFns = [];
10451
- this.__whenDefined.set(tagName, whenDefinedResolveFns);
10452
- }
10453
- whenDefinedResolveFns.push(resolve);
10454
- });
10732
+ if (type !== "null" /* Null */ && type !== "undefined" /* Undefined */) {
10733
+ return obj.hasOwnProperty(VALUE_CONSTANT);
10734
+ }
10735
+ return true;
10455
10736
  }
10456
10737
  };
10457
- function createCustomElement(customElements2, ownerDocument, tagName) {
10458
- const Cstr = customElements2.get(tagName);
10459
- if (Cstr != null) {
10460
- const cmp = new Cstr(ownerDocument);
10461
- cmp.nodeName = tagName.toUpperCase();
10462
- upgradedElements.add(cmp);
10463
- return cmp;
10464
- }
10465
- const host = new Proxy(
10466
- {},
10467
- {
10468
- get(obj, prop) {
10469
- const elm2 = proxyElements.get(host);
10470
- if (elm2 != null) {
10471
- return elm2[prop];
10472
- }
10473
- return obj[prop];
10474
- },
10475
- set(obj, prop, val) {
10476
- const elm2 = proxyElements.get(host);
10477
- if (elm2 != null) {
10478
- elm2[prop] = val;
10479
- } else {
10480
- obj[prop] = val;
10481
- }
10482
- return true;
10483
- },
10484
- has(obj, prop) {
10485
- const elm2 = proxyElements.get(host);
10486
- if (prop in elm2) {
10487
- return true;
10488
- }
10489
- if (prop in obj) {
10490
- return true;
10491
- }
10492
- return false;
10493
- }
10738
+
10739
+ // src/utils/result.ts
10740
+ var result_exports = {};
10741
+ __export(result_exports, {
10742
+ err: () => err,
10743
+ map: () => map,
10744
+ ok: () => ok,
10745
+ unwrap: () => unwrap,
10746
+ unwrapErr: () => unwrapErr
10747
+ });
10748
+ var ok = (value) => ({
10749
+ isOk: true,
10750
+ isErr: false,
10751
+ value
10752
+ });
10753
+ var err = (value) => ({
10754
+ isOk: false,
10755
+ isErr: true,
10756
+ value
10757
+ });
10758
+ function map(result, fn) {
10759
+ if (result.isOk) {
10760
+ const val = fn(result.value);
10761
+ if (val instanceof Promise) {
10762
+ return val.then((newVal) => ok(newVal));
10763
+ } else {
10764
+ return ok(val);
10494
10765
  }
10495
- );
10496
- const elm = new MockHTMLElement(ownerDocument, tagName);
10497
- proxyElements.set(host, elm);
10498
- return host;
10766
+ }
10767
+ if (result.isErr) {
10768
+ const value = result.value;
10769
+ return err(value);
10770
+ }
10771
+ throw "should never get here";
10499
10772
  }
10500
- var proxyElements = /* @__PURE__ */ new WeakMap();
10501
- var upgradedElements = /* @__PURE__ */ new WeakSet();
10502
- function connectNode(ownerDocument, node) {
10503
- node.ownerDocument = ownerDocument;
10504
- if (node.nodeType === 1 /* ELEMENT_NODE */) {
10505
- if (ownerDocument != null && node.nodeName.includes("-")) {
10506
- const win2 = ownerDocument.defaultView;
10507
- if (win2 != null && typeof node.connectedCallback === "function" && node.isConnected) {
10508
- fireConnectedCallback(node);
10509
- }
10510
- const shadowRoot = node.shadowRoot;
10511
- if (shadowRoot != null) {
10512
- shadowRoot.childNodes.forEach((childNode) => {
10513
- connectNode(ownerDocument, childNode);
10514
- });
10515
- }
10516
- }
10517
- node.childNodes.forEach((childNode) => {
10518
- connectNode(ownerDocument, childNode);
10519
- });
10773
+ var unwrap = (result) => {
10774
+ if (result.isOk) {
10775
+ return result.value;
10520
10776
  } else {
10521
- node.childNodes.forEach((childNode) => {
10522
- childNode.ownerDocument = ownerDocument;
10523
- });
10777
+ throw result.value;
10524
10778
  }
10525
- }
10526
- function fireConnectedCallback(node) {
10527
- if (typeof node.connectedCallback === "function") {
10528
- if (tempDisableCallbacks.has(node.ownerDocument) === false) {
10529
- try {
10530
- node.connectedCallback();
10531
- } catch (e) {
10532
- console.error(e);
10533
- }
10534
- }
10779
+ };
10780
+ var unwrapErr = (result) => {
10781
+ if (result.isErr) {
10782
+ return result.value;
10783
+ } else {
10784
+ throw result.value;
10785
+ }
10786
+ };
10787
+
10788
+ // src/utils/serialize.ts
10789
+ function serializeProperty(value) {
10790
+ if (["string", "boolean", "undefined"].includes(typeof value) || typeof value === "number" && value !== Infinity && value !== -Infinity && !isNaN(value)) {
10791
+ return value;
10535
10792
  }
10793
+ const arg = LocalValue.getArgument(value);
10794
+ return SERIALIZED_PREFIX + btoa(JSON.stringify(arg));
10536
10795
  }
10537
- function disconnectNode(node) {
10538
- if (node.nodeType === 1 /* ELEMENT_NODE */) {
10539
- if (node.nodeName.includes("-") === true && typeof node.disconnectedCallback === "function") {
10540
- if (tempDisableCallbacks.has(node.ownerDocument) === false) {
10541
- try {
10542
- node.disconnectedCallback();
10543
- } catch (e) {
10544
- console.error(e);
10545
- }
10546
- }
10547
- }
10548
- node.childNodes.forEach(disconnectNode);
10549
- }
10550
- }
10551
- function attributeChanged(node, attrName, oldValue, newValue) {
10552
- attrName = attrName.toLowerCase();
10553
- const observedAttributes = node.constructor.observedAttributes;
10554
- if (Array.isArray(observedAttributes) === true && observedAttributes.some((obs) => obs.toLowerCase() === attrName) === true) {
10555
- try {
10556
- node.attributeChangedCallback(attrName, oldValue, newValue);
10557
- } catch (e) {
10558
- console.error(e);
10559
- }
10796
+ function deserializeProperty(value) {
10797
+ if (typeof value !== "string" || !value.startsWith(SERIALIZED_PREFIX)) {
10798
+ return value;
10560
10799
  }
10800
+ return RemoteValue.fromLocalValue(JSON.parse(atob(value.slice(SERIALIZED_PREFIX.length))));
10561
10801
  }
10562
- function checkAttributeChanged(node) {
10563
- return node.nodeName.includes("-") === true && typeof node.attributeChangedCallback === "function";
10564
- }
10565
- var tempDisableCallbacks = /* @__PURE__ */ new Set();
10566
10802
 
10567
- // src/mock-doc/dataset.ts
10568
- function dataset(elm) {
10569
- const ds = {};
10570
- const attributes = elm.attributes;
10571
- const attrLen = attributes.length;
10572
- for (let i = 0; i < attrLen; i++) {
10573
- const attr = attributes.item(i);
10574
- const nodeName = attr.nodeName;
10575
- if (nodeName.startsWith("data-")) {
10576
- ds[dashToPascalCase(nodeName)] = attr.nodeValue;
10577
- }
10578
- }
10579
- return new Proxy(ds, {
10580
- get(_obj, camelCaseProp) {
10581
- return ds[camelCaseProp];
10582
- },
10583
- set(_obj, camelCaseProp, value) {
10584
- const dataAttr = toDataAttribute(camelCaseProp);
10585
- elm.setAttribute(dataAttr, value);
10586
- return true;
10587
- }
10588
- });
10589
- }
10590
- function toDataAttribute(str) {
10591
- return "data-" + String(str).replace(/([A-Z0-9])/g, (g) => " " + g[0]).trim().replace(/ /g, "-").toLowerCase();
10803
+ // src/utils/util.ts
10804
+ var lowerPathParam = (fn) => (p) => fn(p.toLowerCase());
10805
+ var isDtsFile = lowerPathParam((p) => p.endsWith(".d.ts") || p.endsWith(".d.mts") || p.endsWith(".d.cts"));
10806
+ var isTsFile = lowerPathParam(
10807
+ (p) => !isDtsFile(p) && (p.endsWith(".ts") || p.endsWith(".mts") || p.endsWith(".cts"))
10808
+ );
10809
+ var isTsxFile = lowerPathParam(
10810
+ (p) => p.endsWith(".tsx") || p.endsWith(".mtsx") || p.endsWith(".ctsx")
10811
+ );
10812
+ var isJsxFile = lowerPathParam(
10813
+ (p) => p.endsWith(".jsx") || p.endsWith(".mjsx") || p.endsWith(".cjsx")
10814
+ );
10815
+ var isJsFile = lowerPathParam((p) => p.endsWith(".js") || p.endsWith(".mjs") || p.endsWith(".cjs"));
10816
+
10817
+ // src/utils/shadow-css.ts
10818
+ /**
10819
+ * @license
10820
+ * Copyright Google Inc. All Rights Reserved.
10821
+ *
10822
+ * Use of this source code is governed by an MIT-style license that can be
10823
+ * found in the LICENSE file at https://angular.io/license
10824
+ *
10825
+ * This file is a port of shadowCSS from `webcomponents.js` to TypeScript.
10826
+ * https://github.com/webcomponents/webcomponentsjs/blob/4efecd7e0e/src/ShadowCSS/ShadowCSS.js
10827
+ * https://github.com/angular/angular/blob/master/packages/compiler/src/shadow_css.ts
10828
+ */
10829
+ var _polyfillHost = "-shadowcsshost";
10830
+ var _polyfillSlotted = "-shadowcssslotted";
10831
+ var _polyfillHostContext = "-shadowcsscontext";
10832
+ var _parenSuffix = ")(?:\\(((?:\\([^)(]*\\)|[^)(]*)+?)\\))?([^,{]*)";
10833
+ var _cssColonHostRe = new RegExp("(" + _polyfillHost + _parenSuffix, "gim");
10834
+ var _cssColonHostContextRe = new RegExp("(" + _polyfillHostContext + _parenSuffix, "gim");
10835
+ var _cssColonSlottedRe = new RegExp("(" + _polyfillSlotted + _parenSuffix, "gim");
10836
+ var _polyfillHostNoCombinator = _polyfillHost + "-no-combinator";
10837
+ var createSupportsRuleRe = (selector) => {
10838
+ const safeSelector = escapeRegExpSpecialCharacters(selector);
10839
+ return new RegExp(
10840
+ // First capture group: match any context before the selector that's not inside @supports selector()
10841
+ // Using negative lookahead to avoid matching inside @supports selector(...) condition
10842
+ `(^|[^@]|@(?!supports\\s+selector\\s*\\([^{]*?${safeSelector}))(${safeSelector}\\b)`,
10843
+ "g"
10844
+ );
10845
+ };
10846
+ var _colonSlottedRe = createSupportsRuleRe("::slotted");
10847
+ var _colonHostRe = createSupportsRuleRe(":host");
10848
+ var _colonHostContextRe = createSupportsRuleRe(":host-context");
10849
+
10850
+ // src/runtime/mode.ts
10851
+ var setMode = (handler) => modeResolutionChain.push(handler);
10852
+ var CAPTURE_EVENT_SUFFIX = "Capture";
10853
+ var CAPTURE_EVENT_REGEX = new RegExp(CAPTURE_EVENT_SUFFIX + "$");
10854
+ var baseClass = BUILD.lazyLoad ? class {
10855
+ } : globalThis.HTMLElement || class {
10856
+ };
10857
+
10858
+ // src/runtime/tag-transform.ts
10859
+ var tagTransformer = void 0;
10860
+ function transformTag(tag) {
10861
+ if (!tagTransformer) return tag;
10862
+ return tagTransformer(tag);
10592
10863
  }
10593
- function dashToPascalCase(str) {
10594
- str = String(str).slice(5);
10595
- return str.split("-").map((segment, index) => {
10596
- if (index === 0) {
10597
- return segment.charAt(0).toLowerCase() + segment.slice(1);
10598
- }
10599
- return segment.charAt(0).toUpperCase() + segment.slice(1);
10600
- }).join("");
10864
+ function setTagTransformer(transformer) {
10865
+ if (tagTransformer) {
10866
+ console.warn(`
10867
+ A tagTransformer has already been set.
10868
+ Overwriting it may lead to error and unexpected results if your components have already been defined.
10869
+ `);
10870
+ }
10871
+ tagTransformer = transformer;
10601
10872
  }
10602
10873
 
10603
- // src/mock-doc/event.ts
10604
- var MockEvent = class {
10605
- constructor(type, eventInitDict) {
10606
- this.bubbles = false;
10607
- this.cancelBubble = false;
10608
- this.cancelable = false;
10609
- this.composed = false;
10610
- this.currentTarget = null;
10611
- this.defaultPrevented = false;
10612
- this.srcElement = null;
10613
- this.target = null;
10614
- if (typeof type !== "string") {
10615
- throw new Error(`Event type required`);
10874
+ // src/mock-doc/attribute.ts
10875
+ var attrHandler = {
10876
+ get(obj, prop) {
10877
+ if (prop in obj) {
10878
+ return obj[prop];
10616
10879
  }
10617
- this.type = type;
10618
- this.timeStamp = Date.now();
10619
- if (eventInitDict != null) {
10620
- Object.assign(this, eventInitDict);
10880
+ if (typeof prop !== "symbol" && !isNaN(prop)) {
10881
+ return obj.__items[prop];
10621
10882
  }
10883
+ return void 0;
10622
10884
  }
10623
- preventDefault() {
10624
- this.defaultPrevented = true;
10885
+ };
10886
+ var createAttributeProxy = (caseInsensitive) => new Proxy(new MockAttributeMap(caseInsensitive), attrHandler);
10887
+ var MockAttributeMap = class {
10888
+ constructor(caseInsensitive = false) {
10889
+ this.caseInsensitive = caseInsensitive;
10890
+ this.__items = [];
10625
10891
  }
10626
- stopPropagation() {
10627
- this.cancelBubble = true;
10892
+ get length() {
10893
+ return this.__items.length;
10628
10894
  }
10629
- stopImmediatePropagation() {
10630
- this.cancelBubble = true;
10895
+ item(index) {
10896
+ return this.__items[index] || null;
10631
10897
  }
10632
- /**
10633
- * @ref https://developer.mozilla.org/en-US/docs/Web/API/Event/composedPath
10634
- * @returns a composed path of the event
10635
- */
10636
- composedPath() {
10637
- const composedPath = [];
10638
- let currentElement = this.target;
10639
- while (currentElement) {
10640
- composedPath.push(currentElement);
10641
- if (!currentElement.parentElement && currentElement.nodeName === "#document" /* DOCUMENT_NODE */) {
10642
- composedPath.push(currentElement.defaultView);
10643
- break;
10644
- }
10645
- if (currentElement.parentElement == null && currentElement.tagName === "HTML") {
10646
- currentElement = currentElement.ownerDocument;
10647
- } else {
10648
- currentElement = currentElement.parentElement;
10649
- }
10650
- }
10651
- return composedPath;
10898
+ setNamedItem(attr) {
10899
+ attr.namespaceURI = null;
10900
+ this.setNamedItemNS(attr);
10652
10901
  }
10653
- };
10654
- var MockCustomEvent = class extends MockEvent {
10655
- constructor(type, customEventInitDic) {
10656
- super(type);
10657
- this.detail = null;
10658
- if (customEventInitDic != null) {
10659
- Object.assign(this, customEventInitDic);
10902
+ setNamedItemNS(attr) {
10903
+ if (attr != null && attr.value != null) {
10904
+ attr.value = String(attr.value);
10660
10905
  }
10661
- }
10662
- };
10663
- var MockKeyboardEvent = class extends MockEvent {
10664
- constructor(type, keyboardEventInitDic) {
10665
- super(type);
10666
- this.code = "";
10667
- this.key = "";
10668
- this.altKey = false;
10669
- this.ctrlKey = false;
10670
- this.metaKey = false;
10671
- this.shiftKey = false;
10672
- this.location = 0;
10673
- this.repeat = false;
10674
- if (keyboardEventInitDic != null) {
10675
- Object.assign(this, keyboardEventInitDic);
10906
+ const existingAttr = this.__items.find((a) => a.name === attr.name && a.namespaceURI === attr.namespaceURI);
10907
+ if (existingAttr != null) {
10908
+ existingAttr.value = attr.value;
10909
+ } else {
10910
+ this.__items.push(attr);
10676
10911
  }
10677
10912
  }
10678
- };
10679
- var MockMouseEvent = class extends MockEvent {
10680
- constructor(type, mouseEventInitDic) {
10681
- super(type);
10682
- this.screenX = 0;
10683
- this.screenY = 0;
10684
- this.clientX = 0;
10685
- this.clientY = 0;
10686
- this.ctrlKey = false;
10687
- this.shiftKey = false;
10688
- this.altKey = false;
10689
- this.metaKey = false;
10690
- this.button = 0;
10691
- this.buttons = 0;
10692
- this.relatedTarget = null;
10693
- if (mouseEventInitDic != null) {
10694
- Object.assign(this, mouseEventInitDic);
10913
+ getNamedItem(attrName) {
10914
+ if (this.caseInsensitive) {
10915
+ attrName = attrName.toLowerCase();
10695
10916
  }
10917
+ return this.getNamedItemNS(null, attrName);
10696
10918
  }
10697
- };
10698
- var MockUIEvent = class extends MockEvent {
10699
- constructor(type, uiEventInitDic) {
10700
- super(type);
10701
- this.detail = null;
10702
- this.view = null;
10703
- if (uiEventInitDic != null) {
10704
- Object.assign(this, uiEventInitDic);
10705
- }
10919
+ getNamedItemNS(namespaceURI, attrName) {
10920
+ namespaceURI = getNamespaceURI(namespaceURI);
10921
+ return this.__items.find((attr) => attr.name === attrName && getNamespaceURI(attr.namespaceURI) === namespaceURI) || null;
10706
10922
  }
10707
- };
10708
- var MockFocusEvent = class extends MockUIEvent {
10709
- constructor(type, focusEventInitDic) {
10710
- super(type);
10711
- this.relatedTarget = null;
10712
- if (focusEventInitDic != null) {
10713
- Object.assign(this, focusEventInitDic);
10714
- }
10923
+ removeNamedItem(attr) {
10924
+ this.removeNamedItemNS(attr);
10715
10925
  }
10716
- };
10717
- var MockEventListener = class {
10718
- constructor(type, handler) {
10719
- this.type = type;
10720
- this.handler = handler;
10926
+ removeNamedItemNS(attr) {
10927
+ for (let i = 0, ii = this.__items.length; i < ii; i++) {
10928
+ if (this.__items[i].name === attr.name && this.__items[i].namespaceURI === attr.namespaceURI) {
10929
+ this.__items.splice(i, 1);
10930
+ break;
10931
+ }
10932
+ }
10721
10933
  }
10722
- };
10723
- function addEventListener(elm, type, handler) {
10724
- const target = elm;
10725
- if (target.__listeners == null) {
10726
- target.__listeners = [];
10934
+ [Symbol.iterator]() {
10935
+ let i = 0;
10936
+ return {
10937
+ next: () => ({
10938
+ done: i === this.length,
10939
+ value: this.item(i++)
10940
+ })
10941
+ };
10727
10942
  }
10728
- target.__listeners.push(new MockEventListener(type, handler));
10943
+ get [Symbol.toStringTag]() {
10944
+ return "MockAttributeMap";
10945
+ }
10946
+ };
10947
+ function getNamespaceURI(namespaceURI) {
10948
+ return namespaceURI === XLINK_NS ? null : namespaceURI;
10729
10949
  }
10730
- function removeEventListener(elm, type, handler) {
10731
- const target = elm;
10732
- if (target != null && Array.isArray(target.__listeners) === true) {
10733
- const elmListener = target.__listeners.find((e) => e.type === type && e.handler === handler);
10734
- if (elmListener != null) {
10735
- const index = target.__listeners.indexOf(elmListener);
10736
- target.__listeners.splice(index, 1);
10950
+ function cloneAttributes(srcAttrs, sortByName = false) {
10951
+ const dstAttrs = new MockAttributeMap(srcAttrs.caseInsensitive);
10952
+ if (srcAttrs != null) {
10953
+ const attrLen = srcAttrs.length;
10954
+ if (sortByName && attrLen > 1) {
10955
+ const sortedAttrs = [];
10956
+ for (let i = 0; i < attrLen; i++) {
10957
+ const srcAttr = srcAttrs.item(i);
10958
+ const dstAttr = new MockAttr(srcAttr.name, srcAttr.value, srcAttr.namespaceURI);
10959
+ sortedAttrs.push(dstAttr);
10960
+ }
10961
+ sortedAttrs.sort(sortAttributes).forEach((attr) => {
10962
+ dstAttrs.setNamedItemNS(attr);
10963
+ });
10964
+ } else {
10965
+ for (let i = 0; i < attrLen; i++) {
10966
+ const srcAttr = srcAttrs.item(i);
10967
+ const dstAttr = new MockAttr(srcAttr.name, srcAttr.value, srcAttr.namespaceURI);
10968
+ dstAttrs.setNamedItemNS(dstAttr);
10969
+ }
10737
10970
  }
10738
10971
  }
10972
+ return dstAttrs;
10739
10973
  }
10740
- function resetEventListeners(target) {
10741
- if (target != null && target.__listeners != null) {
10742
- target.__listeners = null;
10743
- }
10974
+ function sortAttributes(a, b) {
10975
+ if (a.name < b.name) return -1;
10976
+ if (a.name > b.name) return 1;
10977
+ return 0;
10744
10978
  }
10745
- function triggerEventListener(elm, ev) {
10746
- if (elm == null || ev.cancelBubble === true) {
10747
- return;
10979
+ var MockAttr = class {
10980
+ constructor(attrName, attrValue, namespaceURI = null) {
10981
+ this._name = attrName;
10982
+ this._value = String(attrValue);
10983
+ this._namespaceURI = namespaceURI;
10748
10984
  }
10749
- const target = elm;
10750
- ev.currentTarget = elm;
10751
- if (Array.isArray(target.__listeners) === true) {
10752
- const listeners = target.__listeners.filter((e) => e.type === ev.type);
10753
- listeners.forEach((listener) => {
10754
- try {
10755
- listener.handler.call(target, ev);
10756
- } catch (err2) {
10757
- console.error(err2);
10758
- }
10759
- });
10985
+ get name() {
10986
+ return this._name;
10760
10987
  }
10761
- if (ev.bubbles === false) {
10762
- return;
10988
+ set name(value) {
10989
+ this._name = value;
10763
10990
  }
10764
- if (elm.nodeName === "#document" /* DOCUMENT_NODE */) {
10765
- triggerEventListener(elm.defaultView, ev);
10766
- } else if (elm.parentElement == null && elm.tagName === "HTML") {
10767
- triggerEventListener(elm.ownerDocument, ev);
10768
- } else {
10769
- const nextTarget = getNextEventTarget(elm, ev);
10770
- triggerEventListener(nextTarget, ev);
10991
+ get value() {
10992
+ return this._value;
10771
10993
  }
10772
- }
10773
- function getNextEventTarget(elm, ev) {
10774
- if (elm.parentElement) {
10775
- return elm.parentElement;
10994
+ set value(value) {
10995
+ this._value = String(value);
10776
10996
  }
10777
- if (elm.host && ev.composed) {
10778
- return elm.host;
10997
+ get nodeName() {
10998
+ return this._name;
10779
10999
  }
10780
- if (ev.composed && elm.parentNode && elm.parentNode.host) {
10781
- return elm.parentNode.host;
11000
+ set nodeName(value) {
11001
+ this._name = value;
10782
11002
  }
10783
- return null;
11003
+ get nodeValue() {
11004
+ return this._value;
11005
+ }
11006
+ set nodeValue(value) {
11007
+ this._value = String(value);
11008
+ }
11009
+ get namespaceURI() {
11010
+ return this._namespaceURI;
11011
+ }
11012
+ set namespaceURI(namespaceURI) {
11013
+ this._namespaceURI = namespaceURI;
11014
+ }
11015
+ };
11016
+
11017
+ // src/mock-doc/css-style-declaration.ts
11018
+ var MockCSSStyleDeclaration = class {
11019
+ constructor() {
11020
+ this._styles = /* @__PURE__ */ new Map();
11021
+ }
11022
+ setProperty(prop, value) {
11023
+ prop = jsCaseToCssCase(prop);
11024
+ if (value == null || value === "") {
11025
+ this._styles.delete(prop);
11026
+ } else {
11027
+ this._styles.set(prop, String(value));
11028
+ }
11029
+ }
11030
+ getPropertyValue(prop) {
11031
+ prop = jsCaseToCssCase(prop);
11032
+ return String(this._styles.get(prop) || "");
11033
+ }
11034
+ removeProperty(prop) {
11035
+ prop = jsCaseToCssCase(prop);
11036
+ this._styles.delete(prop);
11037
+ }
11038
+ get length() {
11039
+ return this._styles.size;
11040
+ }
11041
+ get cssText() {
11042
+ const cssText = [];
11043
+ this._styles.forEach((value, prop) => {
11044
+ cssText.push(`${prop}: ${value};`);
11045
+ });
11046
+ return cssText.join(" ").trim();
11047
+ }
11048
+ set cssText(cssText) {
11049
+ if (cssText == null || cssText === "") {
11050
+ this._styles.clear();
11051
+ return;
11052
+ }
11053
+ cssText.split(";").forEach((rule) => {
11054
+ rule = rule.trim();
11055
+ if (rule.length > 0) {
11056
+ const splt = rule.split(":");
11057
+ if (splt.length > 1) {
11058
+ const prop = splt[0].trim();
11059
+ const value = splt.slice(1).join(":").trim();
11060
+ if (prop !== "" && value !== "") {
11061
+ this._styles.set(jsCaseToCssCase(prop), value);
11062
+ }
11063
+ }
11064
+ }
11065
+ });
11066
+ }
11067
+ };
11068
+ function createCSSStyleDeclaration() {
11069
+ return new Proxy(new MockCSSStyleDeclaration(), cssProxyHandler);
10784
11070
  }
10785
- function dispatchEvent(currentTarget, ev) {
10786
- ev.target = currentTarget;
10787
- triggerEventListener(currentTarget, ev);
10788
- return true;
11071
+ var cssProxyHandler = {
11072
+ get(cssStyle, prop) {
11073
+ if (prop in cssStyle) {
11074
+ return cssStyle[prop];
11075
+ }
11076
+ prop = cssCaseToJsCase(prop);
11077
+ return cssStyle.getPropertyValue(prop);
11078
+ },
11079
+ set(cssStyle, prop, value) {
11080
+ if (prop in cssStyle) {
11081
+ cssStyle[prop] = value;
11082
+ } else {
11083
+ cssStyle.setProperty(prop, value);
11084
+ }
11085
+ return true;
11086
+ }
11087
+ };
11088
+ function cssCaseToJsCase(str) {
11089
+ if (str.length > 1 && str.includes("-") === true) {
11090
+ str = str.toLowerCase().split("-").map((segment) => segment.charAt(0).toUpperCase() + segment.slice(1)).join("");
11091
+ str = str.slice(0, 1).toLowerCase() + str.slice(1);
11092
+ }
11093
+ return str;
11094
+ }
11095
+ function jsCaseToCssCase(str) {
11096
+ if (str.length > 1 && str.includes("-") === false && /[A-Z]/.test(str) === true) {
11097
+ str = str.replace(/([A-Z])/g, (g) => " " + g[0]).trim().replace(/ /g, "-").toLowerCase();
11098
+ }
11099
+ return str;
10789
11100
  }
10790
11101
 
10791
- // node_modules/parse5/dist/common/unicode.js
10792
- var UNDEFINED_CODE_POINTS = /* @__PURE__ */ new Set([
10793
- 65534,
10794
- 65535,
10795
- 131070,
10796
- 131071,
10797
- 196606,
10798
- 196607,
10799
- 262142,
10800
- 262143,
10801
- 327678,
10802
- 327679,
10803
- 393214,
10804
- 393215,
10805
- 458750,
10806
- 458751,
10807
- 524286,
10808
- 524287,
10809
- 589822,
10810
- 589823,
10811
- 655358,
10812
- 655359,
10813
- 720894,
10814
- 720895,
10815
- 786430,
10816
- 786431,
10817
- 851966,
10818
- 851967,
10819
- 917502,
10820
- 917503,
10821
- 983038,
10822
- 983039,
10823
- 1048574,
10824
- 1048575,
10825
- 1114110,
10826
- 1114111
10827
- ]);
10828
- var REPLACEMENT_CHARACTER = "\uFFFD";
10829
- var CODE_POINTS;
10830
- (function(CODE_POINTS2) {
10831
- CODE_POINTS2[CODE_POINTS2["EOF"] = -1] = "EOF";
11102
+ // src/mock-doc/custom-element-registry.ts
11103
+ var MockCustomElementRegistry = class {
11104
+ constructor(win2) {
11105
+ this.win = win2;
11106
+ }
11107
+ define(tagName, cstr, options) {
11108
+ if (tagName.toLowerCase() !== tagName) {
11109
+ throw new Error(
11110
+ `Failed to execute 'define' on 'CustomElementRegistry': "${tagName}" is not a valid custom element name`
11111
+ );
11112
+ }
11113
+ if (this.__registry == null) {
11114
+ this.__registry = /* @__PURE__ */ new Map();
11115
+ }
11116
+ this.__registry.set(tagName, { cstr, options });
11117
+ if (this.__whenDefined != null) {
11118
+ const whenDefinedResolveFns = this.__whenDefined.get(tagName);
11119
+ if (whenDefinedResolveFns != null) {
11120
+ whenDefinedResolveFns.forEach((whenDefinedResolveFn) => {
11121
+ whenDefinedResolveFn();
11122
+ });
11123
+ whenDefinedResolveFns.length = 0;
11124
+ this.__whenDefined.delete(tagName);
11125
+ }
11126
+ }
11127
+ const doc = this.win.document;
11128
+ if (doc != null) {
11129
+ const hosts = doc.querySelectorAll(tagName);
11130
+ hosts.forEach((host) => {
11131
+ if (upgradedElements.has(host) === false) {
11132
+ tempDisableCallbacks.add(doc);
11133
+ const upgradedCmp = createCustomElement(this, doc, tagName);
11134
+ for (let i = 0; i < host.childNodes.length; i++) {
11135
+ const childNode = host.childNodes[i];
11136
+ childNode.remove();
11137
+ upgradedCmp.appendChild(childNode);
11138
+ }
11139
+ tempDisableCallbacks.delete(doc);
11140
+ if (proxyElements.has(host)) {
11141
+ proxyElements.set(host, upgradedCmp);
11142
+ }
11143
+ }
11144
+ fireConnectedCallback2(host);
11145
+ });
11146
+ }
11147
+ }
11148
+ get(tagName) {
11149
+ if (this.__registry != null) {
11150
+ const def = this.__registry.get(tagName.toLowerCase());
11151
+ if (def != null) {
11152
+ return def.cstr;
11153
+ }
11154
+ }
11155
+ return void 0;
11156
+ }
11157
+ getName(cstr) {
11158
+ for (const [tagName, def] of this.__registry.entries()) {
11159
+ if (def.cstr === cstr) {
11160
+ return tagName;
11161
+ }
11162
+ }
11163
+ return void 0;
11164
+ }
11165
+ upgrade(_rootNode) {
11166
+ }
11167
+ clear() {
11168
+ if (this.__registry != null) {
11169
+ this.__registry.clear();
11170
+ }
11171
+ if (this.__whenDefined != null) {
11172
+ this.__whenDefined.clear();
11173
+ }
11174
+ }
11175
+ whenDefined(tagName) {
11176
+ tagName = tagName.toLowerCase();
11177
+ if (this.__registry != null && this.__registry.has(tagName) === true) {
11178
+ return Promise.resolve(this.__registry.get(tagName).cstr);
11179
+ }
11180
+ return new Promise((resolve) => {
11181
+ if (this.__whenDefined == null) {
11182
+ this.__whenDefined = /* @__PURE__ */ new Map();
11183
+ }
11184
+ let whenDefinedResolveFns = this.__whenDefined.get(tagName);
11185
+ if (whenDefinedResolveFns == null) {
11186
+ whenDefinedResolveFns = [];
11187
+ this.__whenDefined.set(tagName, whenDefinedResolveFns);
11188
+ }
11189
+ whenDefinedResolveFns.push(resolve);
11190
+ });
11191
+ }
11192
+ };
11193
+ function createCustomElement(customElements2, ownerDocument, tagName) {
11194
+ const Cstr = customElements2.get(tagName);
11195
+ if (Cstr != null) {
11196
+ const cmp = new Cstr(ownerDocument);
11197
+ cmp.nodeName = tagName.toUpperCase();
11198
+ upgradedElements.add(cmp);
11199
+ return cmp;
11200
+ }
11201
+ const host = new Proxy(
11202
+ {},
11203
+ {
11204
+ get(obj, prop) {
11205
+ const elm2 = proxyElements.get(host);
11206
+ if (elm2 != null) {
11207
+ return elm2[prop];
11208
+ }
11209
+ return obj[prop];
11210
+ },
11211
+ set(obj, prop, val) {
11212
+ const elm2 = proxyElements.get(host);
11213
+ if (elm2 != null) {
11214
+ elm2[prop] = val;
11215
+ } else {
11216
+ obj[prop] = val;
11217
+ }
11218
+ return true;
11219
+ },
11220
+ has(obj, prop) {
11221
+ const elm2 = proxyElements.get(host);
11222
+ if (prop in elm2) {
11223
+ return true;
11224
+ }
11225
+ if (prop in obj) {
11226
+ return true;
11227
+ }
11228
+ return false;
11229
+ }
11230
+ }
11231
+ );
11232
+ const elm = new MockHTMLElement(ownerDocument, tagName);
11233
+ proxyElements.set(host, elm);
11234
+ return host;
11235
+ }
11236
+ var proxyElements = /* @__PURE__ */ new WeakMap();
11237
+ var upgradedElements = /* @__PURE__ */ new WeakSet();
11238
+ function connectNode(ownerDocument, node) {
11239
+ node.ownerDocument = ownerDocument;
11240
+ if (node.nodeType === 1 /* ELEMENT_NODE */) {
11241
+ if (ownerDocument != null && node.nodeName.includes("-")) {
11242
+ const win2 = ownerDocument.defaultView;
11243
+ if (win2 != null && typeof node.connectedCallback === "function" && node.isConnected) {
11244
+ fireConnectedCallback2(node);
11245
+ }
11246
+ const shadowRoot = node.shadowRoot;
11247
+ if (shadowRoot != null) {
11248
+ shadowRoot.childNodes.forEach((childNode) => {
11249
+ connectNode(ownerDocument, childNode);
11250
+ });
11251
+ }
11252
+ }
11253
+ node.childNodes.forEach((childNode) => {
11254
+ connectNode(ownerDocument, childNode);
11255
+ });
11256
+ } else {
11257
+ node.childNodes.forEach((childNode) => {
11258
+ childNode.ownerDocument = ownerDocument;
11259
+ });
11260
+ }
11261
+ }
11262
+ function fireConnectedCallback2(node) {
11263
+ if (typeof node.connectedCallback === "function") {
11264
+ if (tempDisableCallbacks.has(node.ownerDocument) === false) {
11265
+ try {
11266
+ node.connectedCallback();
11267
+ } catch (e) {
11268
+ console.error(e);
11269
+ }
11270
+ }
11271
+ }
11272
+ }
11273
+ function disconnectNode(node) {
11274
+ if (node.nodeType === 1 /* ELEMENT_NODE */) {
11275
+ if (node.nodeName.includes("-") === true && typeof node.disconnectedCallback === "function") {
11276
+ if (tempDisableCallbacks.has(node.ownerDocument) === false) {
11277
+ try {
11278
+ node.disconnectedCallback();
11279
+ } catch (e) {
11280
+ console.error(e);
11281
+ }
11282
+ }
11283
+ }
11284
+ node.childNodes.forEach(disconnectNode);
11285
+ }
11286
+ }
11287
+ function attributeChanged(node, attrName, oldValue, newValue) {
11288
+ attrName = attrName.toLowerCase();
11289
+ const observedAttributes = node.constructor.observedAttributes;
11290
+ if (Array.isArray(observedAttributes) === true && observedAttributes.some((obs) => obs.toLowerCase() === attrName) === true) {
11291
+ try {
11292
+ node.attributeChangedCallback(attrName, oldValue, newValue);
11293
+ } catch (e) {
11294
+ console.error(e);
11295
+ }
11296
+ }
11297
+ }
11298
+ function checkAttributeChanged(node) {
11299
+ return node.nodeName.includes("-") === true && typeof node.attributeChangedCallback === "function";
11300
+ }
11301
+ var tempDisableCallbacks = /* @__PURE__ */ new Set();
11302
+
11303
+ // src/mock-doc/dataset.ts
11304
+ function dataset(elm) {
11305
+ const ds = {};
11306
+ const attributes = elm.attributes;
11307
+ const attrLen = attributes.length;
11308
+ for (let i = 0; i < attrLen; i++) {
11309
+ const attr = attributes.item(i);
11310
+ const nodeName = attr.nodeName;
11311
+ if (nodeName.startsWith("data-")) {
11312
+ ds[dashToPascalCase2(nodeName)] = attr.nodeValue;
11313
+ }
11314
+ }
11315
+ return new Proxy(ds, {
11316
+ get(_obj, camelCaseProp) {
11317
+ return ds[camelCaseProp];
11318
+ },
11319
+ set(_obj, camelCaseProp, value) {
11320
+ const dataAttr = toDataAttribute(camelCaseProp);
11321
+ elm.setAttribute(dataAttr, value);
11322
+ return true;
11323
+ }
11324
+ });
11325
+ }
11326
+ function toDataAttribute(str) {
11327
+ return "data-" + String(str).replace(/([A-Z0-9])/g, (g) => " " + g[0]).trim().replace(/ /g, "-").toLowerCase();
11328
+ }
11329
+ function dashToPascalCase2(str) {
11330
+ str = String(str).slice(5);
11331
+ return str.split("-").map((segment, index) => {
11332
+ if (index === 0) {
11333
+ return segment.charAt(0).toLowerCase() + segment.slice(1);
11334
+ }
11335
+ return segment.charAt(0).toUpperCase() + segment.slice(1);
11336
+ }).join("");
11337
+ }
11338
+
11339
+ // src/mock-doc/event.ts
11340
+ var MockEvent = class {
11341
+ constructor(type, eventInitDict) {
11342
+ this.bubbles = false;
11343
+ this.cancelBubble = false;
11344
+ this.cancelable = false;
11345
+ this.composed = false;
11346
+ this.currentTarget = null;
11347
+ this.defaultPrevented = false;
11348
+ this.srcElement = null;
11349
+ this.target = null;
11350
+ if (typeof type !== "string") {
11351
+ throw new Error(`Event type required`);
11352
+ }
11353
+ this.type = type;
11354
+ this.timeStamp = Date.now();
11355
+ if (eventInitDict != null) {
11356
+ Object.assign(this, eventInitDict);
11357
+ }
11358
+ }
11359
+ preventDefault() {
11360
+ this.defaultPrevented = true;
11361
+ }
11362
+ stopPropagation() {
11363
+ this.cancelBubble = true;
11364
+ }
11365
+ stopImmediatePropagation() {
11366
+ this.cancelBubble = true;
11367
+ }
11368
+ /**
11369
+ * @ref https://developer.mozilla.org/en-US/docs/Web/API/Event/composedPath
11370
+ * @returns a composed path of the event
11371
+ */
11372
+ composedPath() {
11373
+ const composedPath = [];
11374
+ let currentElement = this.target;
11375
+ while (currentElement) {
11376
+ composedPath.push(currentElement);
11377
+ if (!currentElement.parentElement && currentElement.nodeName === "#document" /* DOCUMENT_NODE */) {
11378
+ composedPath.push(currentElement.defaultView);
11379
+ break;
11380
+ }
11381
+ if (currentElement.parentElement == null && currentElement.tagName === "HTML") {
11382
+ currentElement = currentElement.ownerDocument;
11383
+ } else {
11384
+ currentElement = currentElement.parentElement;
11385
+ }
11386
+ }
11387
+ return composedPath;
11388
+ }
11389
+ };
11390
+ var MockCustomEvent = class extends MockEvent {
11391
+ constructor(type, customEventInitDic) {
11392
+ super(type);
11393
+ this.detail = null;
11394
+ if (customEventInitDic != null) {
11395
+ Object.assign(this, customEventInitDic);
11396
+ }
11397
+ }
11398
+ };
11399
+ var MockKeyboardEvent = class extends MockEvent {
11400
+ constructor(type, keyboardEventInitDic) {
11401
+ super(type);
11402
+ this.code = "";
11403
+ this.key = "";
11404
+ this.altKey = false;
11405
+ this.ctrlKey = false;
11406
+ this.metaKey = false;
11407
+ this.shiftKey = false;
11408
+ this.location = 0;
11409
+ this.repeat = false;
11410
+ if (keyboardEventInitDic != null) {
11411
+ Object.assign(this, keyboardEventInitDic);
11412
+ }
11413
+ }
11414
+ };
11415
+ var MockMouseEvent = class extends MockEvent {
11416
+ constructor(type, mouseEventInitDic) {
11417
+ super(type);
11418
+ this.screenX = 0;
11419
+ this.screenY = 0;
11420
+ this.clientX = 0;
11421
+ this.clientY = 0;
11422
+ this.ctrlKey = false;
11423
+ this.shiftKey = false;
11424
+ this.altKey = false;
11425
+ this.metaKey = false;
11426
+ this.button = 0;
11427
+ this.buttons = 0;
11428
+ this.relatedTarget = null;
11429
+ if (mouseEventInitDic != null) {
11430
+ Object.assign(this, mouseEventInitDic);
11431
+ }
11432
+ }
11433
+ };
11434
+ var MockUIEvent = class extends MockEvent {
11435
+ constructor(type, uiEventInitDic) {
11436
+ super(type);
11437
+ this.detail = null;
11438
+ this.view = null;
11439
+ if (uiEventInitDic != null) {
11440
+ Object.assign(this, uiEventInitDic);
11441
+ }
11442
+ }
11443
+ };
11444
+ var MockFocusEvent = class extends MockUIEvent {
11445
+ constructor(type, focusEventInitDic) {
11446
+ super(type);
11447
+ this.relatedTarget = null;
11448
+ if (focusEventInitDic != null) {
11449
+ Object.assign(this, focusEventInitDic);
11450
+ }
11451
+ }
11452
+ };
11453
+ var MockEventListener = class {
11454
+ constructor(type, handler) {
11455
+ this.type = type;
11456
+ this.handler = handler;
11457
+ }
11458
+ };
11459
+ function addEventListener(elm, type, handler) {
11460
+ const target = elm;
11461
+ if (target.__listeners == null) {
11462
+ target.__listeners = [];
11463
+ }
11464
+ target.__listeners.push(new MockEventListener(type, handler));
11465
+ }
11466
+ function removeEventListener(elm, type, handler) {
11467
+ const target = elm;
11468
+ if (target != null && Array.isArray(target.__listeners) === true) {
11469
+ const elmListener = target.__listeners.find((e) => e.type === type && e.handler === handler);
11470
+ if (elmListener != null) {
11471
+ const index = target.__listeners.indexOf(elmListener);
11472
+ target.__listeners.splice(index, 1);
11473
+ }
11474
+ }
11475
+ }
11476
+ function resetEventListeners(target) {
11477
+ if (target != null && target.__listeners != null) {
11478
+ target.__listeners = null;
11479
+ }
11480
+ }
11481
+ function triggerEventListener(elm, ev) {
11482
+ if (elm == null || ev.cancelBubble === true) {
11483
+ return;
11484
+ }
11485
+ const target = elm;
11486
+ ev.currentTarget = elm;
11487
+ if (Array.isArray(target.__listeners) === true) {
11488
+ const listeners = target.__listeners.filter((e) => e.type === ev.type);
11489
+ listeners.forEach((listener) => {
11490
+ try {
11491
+ listener.handler.call(target, ev);
11492
+ } catch (err2) {
11493
+ console.error(err2);
11494
+ }
11495
+ });
11496
+ }
11497
+ if (ev.bubbles === false) {
11498
+ return;
11499
+ }
11500
+ if (elm.nodeName === "#document" /* DOCUMENT_NODE */) {
11501
+ triggerEventListener(elm.defaultView, ev);
11502
+ } else if (elm.parentElement == null && elm.tagName === "HTML") {
11503
+ triggerEventListener(elm.ownerDocument, ev);
11504
+ } else {
11505
+ const nextTarget = getNextEventTarget(elm, ev);
11506
+ triggerEventListener(nextTarget, ev);
11507
+ }
11508
+ }
11509
+ function getNextEventTarget(elm, ev) {
11510
+ if (elm.parentElement) {
11511
+ return elm.parentElement;
11512
+ }
11513
+ if (elm.host && ev.composed) {
11514
+ return elm.host;
11515
+ }
11516
+ if (ev.composed && elm.parentNode && elm.parentNode.host) {
11517
+ return elm.parentNode.host;
11518
+ }
11519
+ return null;
11520
+ }
11521
+ function dispatchEvent(currentTarget, ev) {
11522
+ ev.target = currentTarget;
11523
+ triggerEventListener(currentTarget, ev);
11524
+ return true;
11525
+ }
11526
+
11527
+ // node_modules/parse5/dist/common/unicode.js
11528
+ var UNDEFINED_CODE_POINTS = /* @__PURE__ */ new Set([
11529
+ 65534,
11530
+ 65535,
11531
+ 131070,
11532
+ 131071,
11533
+ 196606,
11534
+ 196607,
11535
+ 262142,
11536
+ 262143,
11537
+ 327678,
11538
+ 327679,
11539
+ 393214,
11540
+ 393215,
11541
+ 458750,
11542
+ 458751,
11543
+ 524286,
11544
+ 524287,
11545
+ 589822,
11546
+ 589823,
11547
+ 655358,
11548
+ 655359,
11549
+ 720894,
11550
+ 720895,
11551
+ 786430,
11552
+ 786431,
11553
+ 851966,
11554
+ 851967,
11555
+ 917502,
11556
+ 917503,
11557
+ 983038,
11558
+ 983039,
11559
+ 1048574,
11560
+ 1048575,
11561
+ 1114110,
11562
+ 1114111
11563
+ ]);
11564
+ var REPLACEMENT_CHARACTER = "\uFFFD";
11565
+ var CODE_POINTS;
11566
+ (function(CODE_POINTS2) {
11567
+ CODE_POINTS2[CODE_POINTS2["EOF"] = -1] = "EOF";
10832
11568
  CODE_POINTS2[CODE_POINTS2["NULL"] = 0] = "NULL";
10833
11569
  CODE_POINTS2[CODE_POINTS2["TABULATION"] = 9] = "TABULATION";
10834
11570
  CODE_POINTS2[CODE_POINTS2["CARRIAGE_RETURN"] = 13] = "CARRIAGE_RETURN";
@@ -18942,14 +19678,14 @@ var jquery_default = (
18942
19678
  *
18943
19679
  * Date: 2023-12-11T17:55Z
18944
19680
  */
18945
- function(global2, factory) {
19681
+ (function(global2, factory) {
18946
19682
  "use strict";
18947
19683
  if (true) {
18948
19684
  return factory(global2, true);
18949
19685
  } else {
18950
19686
  factory(global2);
18951
19687
  }
18952
- }({
19688
+ })({
18953
19689
  document: {
18954
19690
  createElement() {
18955
19691
  return {};
@@ -20919,10 +21655,10 @@ var MockNode2 = class {
20919
21655
  insertBefore(newNode, referenceNode) {
20920
21656
  if (newNode.nodeType === 11 /* DOCUMENT_FRAGMENT_NODE */) {
20921
21657
  for (let i = 0, ii = newNode.childNodes.length; i < ii; i++) {
20922
- insertBefore(this, newNode.childNodes[i], referenceNode);
21658
+ insertBefore2(this, newNode.childNodes[i], referenceNode);
20923
21659
  }
20924
21660
  } else {
20925
- insertBefore(this, newNode, referenceNode);
21661
+ insertBefore2(this, newNode, referenceNode);
20926
21662
  }
20927
21663
  return newNode;
20928
21664
  }
@@ -21267,13 +22003,13 @@ var MockElement = class extends MockNode2 {
21267
22003
  }
21268
22004
  insertAdjacentElement(position, elm) {
21269
22005
  if (position === "beforebegin" && this.parentNode) {
21270
- insertBefore(this.parentNode, elm, this);
22006
+ insertBefore2(this.parentNode, elm, this);
21271
22007
  } else if (position === "afterbegin") {
21272
22008
  this.prepend(elm);
21273
22009
  } else if (position === "beforeend") {
21274
22010
  this.appendChild(elm);
21275
22011
  } else if (position === "afterend" && this.parentNode) {
21276
- insertBefore(this.parentNode, elm, this.nextSibling);
22012
+ insertBefore2(this.parentNode, elm, this.nextSibling);
21277
22013
  }
21278
22014
  return elm;
21279
22015
  }
@@ -21282,7 +22018,7 @@ var MockElement = class extends MockNode2 {
21282
22018
  if (position === "beforebegin") {
21283
22019
  while (frag.childNodes.length > 0) {
21284
22020
  if (this.parentNode) {
21285
- insertBefore(this.parentNode, frag.childNodes[0], this);
22021
+ insertBefore2(this.parentNode, frag.childNodes[0], this);
21286
22022
  }
21287
22023
  }
21288
22024
  } else if (position === "afterbegin") {
@@ -21296,7 +22032,7 @@ var MockElement = class extends MockNode2 {
21296
22032
  } else if (position === "afterend") {
21297
22033
  while (frag.childNodes.length > 0) {
21298
22034
  if (this.parentNode) {
21299
- insertBefore(this.parentNode, frag.childNodes[frag.childNodes.length - 1], this.nextSibling);
22035
+ insertBefore2(this.parentNode, frag.childNodes[frag.childNodes.length - 1], this.nextSibling);
21300
22036
  }
21301
22037
  }
21302
22038
  }
@@ -21304,13 +22040,13 @@ var MockElement = class extends MockNode2 {
21304
22040
  insertAdjacentText(position, text) {
21305
22041
  const elm = this.ownerDocument.createTextNode(text);
21306
22042
  if (position === "beforebegin" && this.parentNode) {
21307
- insertBefore(this.parentNode, elm, this);
22043
+ insertBefore2(this.parentNode, elm, this);
21308
22044
  } else if (position === "afterbegin") {
21309
22045
  this.prepend(elm);
21310
22046
  } else if (position === "beforeend") {
21311
22047
  this.appendChild(elm);
21312
22048
  } else if (position === "afterend" && this.parentNode) {
21313
- insertBefore(this.parentNode, elm, this.nextSibling);
22049
+ insertBefore2(this.parentNode, elm, this.nextSibling);
21314
22050
  }
21315
22051
  }
21316
22052
  hasAttribute(attrName) {
@@ -21725,7 +22461,7 @@ function resetElement(elm) {
21725
22461
  delete elm.__shadowRoot;
21726
22462
  delete elm.__style;
21727
22463
  }
21728
- function insertBefore(parentNode, newNode, referenceNode) {
22464
+ function insertBefore2(parentNode, newNode, referenceNode) {
21729
22465
  if (newNode !== referenceNode) {
21730
22466
  newNode.remove();
21731
22467
  newNode.parentNode = parentNode;
@@ -23837,968 +24573,434 @@ var MockWindow = class {
23837
24573
  }
23838
24574
  onpointerout() {
23839
24575
  }
23840
- onpointerover() {
23841
- }
23842
- onpointerup() {
23843
- }
23844
- onprogress() {
23845
- }
23846
- onratechange() {
23847
- }
23848
- onreset() {
23849
- }
23850
- onresize() {
23851
- }
23852
- onscroll() {
23853
- }
23854
- onsearch() {
23855
- }
23856
- onseeked() {
23857
- }
23858
- onseeking() {
23859
- }
23860
- onselect() {
23861
- }
23862
- onselectstart() {
23863
- }
23864
- onstalled() {
23865
- }
23866
- onsubmit() {
23867
- }
23868
- onsuspend() {
23869
- }
23870
- ontimeupdate() {
23871
- }
23872
- ontoggle() {
23873
- }
23874
- onvolumechange() {
23875
- }
23876
- onwaiting() {
23877
- }
23878
- onwebkitfullscreenchange() {
23879
- }
23880
- onwebkitfullscreenerror() {
23881
- }
23882
- onwheel() {
23883
- }
23884
- };
23885
- addGlobalsToWindowPrototype(MockWindow.prototype);
23886
- function resetWindowDefaults(win2) {
23887
- win2.__clearInterval = nativeClearInterval;
23888
- win2.__clearTimeout = nativeClearTimeout;
23889
- win2.__setInterval = nativeSetInterval;
23890
- win2.__setTimeout = nativeSetTimeout;
23891
- win2.__maxTimeout = 6e4;
23892
- win2.__allowInterval = true;
23893
- win2.URL = nativeURL;
23894
- }
23895
- function cloneWindow(srcWin, opts = {}) {
23896
- if (srcWin == null) {
23897
- return null;
23898
- }
23899
- const clonedWin = new MockWindow(false);
23900
- if (!opts.customElementProxy) {
23901
- srcWin.customElements = null;
23902
- }
23903
- if (srcWin.document != null) {
23904
- const clonedDoc = new MockDocument(false, clonedWin);
23905
- clonedWin.document = clonedDoc;
23906
- clonedDoc.documentElement = srcWin.document.documentElement.cloneNode(true);
23907
- } else {
23908
- clonedWin.document = new MockDocument(null, clonedWin);
23909
- }
23910
- return clonedWin;
23911
- }
23912
- function constrainTimeouts(win2) {
23913
- win2.__allowInterval = false;
23914
- win2.__maxTimeout = 0;
23915
- }
23916
- function resetWindow(win2) {
23917
- if (win2 != null) {
23918
- if (win2.__timeouts) {
23919
- win2.__timeouts.forEach((timeoutId) => {
23920
- nativeClearInterval(timeoutId);
23921
- nativeClearTimeout(timeoutId);
23922
- });
23923
- win2.__timeouts.clear();
23924
- }
23925
- if (win2.customElements && win2.customElements.clear) {
23926
- win2.customElements.clear();
23927
- }
23928
- resetDocument(win2.document);
23929
- resetPerformance(win2.performance);
23930
- for (const key in win2) {
23931
- if (win2.hasOwnProperty(key) && key !== "document" && key !== "performance" && key !== "customElements") {
23932
- delete win2[key];
23933
- }
23934
- }
23935
- resetWindowDefaults(win2);
23936
- resetWindowDimensions(win2);
23937
- resetEventListeners(win2);
23938
- if (win2.document != null) {
23939
- try {
23940
- win2.document.defaultView = win2;
23941
- } catch (e) {
23942
- }
23943
- }
23944
- win2.fetch = null;
23945
- win2.Headers = null;
23946
- win2.Request = null;
23947
- win2.Response = null;
23948
- win2.FetchError = null;
23949
- }
23950
- }
23951
- function resetWindowDimensions(win2) {
23952
- try {
23953
- win2.devicePixelRatio = 1;
23954
- win2.innerHeight = 768;
23955
- win2.innerWidth = 1366;
23956
- win2.pageXOffset = 0;
23957
- win2.pageYOffset = 0;
23958
- win2.screenLeft = 0;
23959
- win2.screenTop = 0;
23960
- win2.screenX = 0;
23961
- win2.screenY = 0;
23962
- win2.scrollX = 0;
23963
- win2.scrollY = 0;
23964
- win2.screen = {
23965
- availHeight: win2.innerHeight,
23966
- availLeft: 0,
23967
- availTop: 0,
23968
- availWidth: win2.innerWidth,
23969
- colorDepth: 24,
23970
- height: win2.innerHeight,
23971
- keepAwake: false,
23972
- orientation: {
23973
- angle: 0,
23974
- type: "portrait-primary"
23975
- },
23976
- pixelDepth: 24,
23977
- width: win2.innerWidth
23978
- };
23979
- } catch (e) {
23980
- }
23981
- }
23982
-
23983
- // src/mock-doc/document.ts
23984
- var MockDocument = class _MockDocument extends MockHTMLElement {
23985
- constructor(html = null, win2 = null) {
23986
- super(null, null);
23987
- this.nodeName = "#document" /* DOCUMENT_NODE */;
23988
- this.nodeType = 9 /* DOCUMENT_NODE */;
23989
- this.defaultView = win2;
23990
- this.cookie = "";
23991
- this.referrer = "";
23992
- this.appendChild(this.createDocumentTypeNode());
23993
- if (typeof html === "string") {
23994
- const parsedDoc = parseDocumentUtil(this, html);
23995
- const documentElement = parsedDoc.children.find((elm) => elm.nodeName === "HTML");
23996
- if (documentElement != null) {
23997
- this.appendChild(documentElement);
23998
- setOwnerDocument(documentElement, this);
23999
- }
24000
- } else if (html !== false) {
24001
- const documentElement = new MockHTMLElement(this, "html");
24002
- this.appendChild(documentElement);
24003
- documentElement.appendChild(new MockHTMLElement(this, "head"));
24004
- documentElement.appendChild(new MockHTMLElement(this, "body"));
24005
- }
24006
- }
24007
- get dir() {
24008
- return this.documentElement.dir;
24009
- }
24010
- set dir(value) {
24011
- this.documentElement.dir = value;
24012
- }
24013
- get localName() {
24014
- throw new Error("Unimplemented");
24015
- }
24016
- get location() {
24017
- if (this.defaultView != null) {
24018
- return this.defaultView.location;
24019
- }
24020
- return null;
24021
- }
24022
- set location(val) {
24023
- if (this.defaultView != null) {
24024
- this.defaultView.location.href = val;
24025
- }
24026
- }
24027
- get baseURI() {
24028
- const baseNode = this.head.childNodes.find((node) => node.nodeName === "BASE");
24029
- if (baseNode) {
24030
- return baseNode.href;
24031
- }
24032
- return this.URL;
24033
- }
24034
- get URL() {
24035
- return this.location.href;
24036
- }
24037
- get styleSheets() {
24038
- return this.querySelectorAll("style");
24039
- }
24040
- get scripts() {
24041
- return this.querySelectorAll("script");
24042
- }
24043
- get forms() {
24044
- return this.querySelectorAll("form");
24045
- }
24046
- get images() {
24047
- return this.querySelectorAll("img");
24048
- }
24049
- get scrollingElement() {
24050
- return this.documentElement;
24051
- }
24052
- get documentElement() {
24053
- for (let i = this.childNodes.length - 1; i >= 0; i--) {
24054
- if (this.childNodes[i].nodeName === "HTML") {
24055
- return this.childNodes[i];
24056
- }
24057
- }
24058
- const documentElement = new MockHTMLElement(this, "html");
24059
- this.appendChild(documentElement);
24060
- return documentElement;
24576
+ onpointerover() {
24061
24577
  }
24062
- set documentElement(documentElement) {
24063
- for (let i = this.childNodes.length - 1; i >= 0; i--) {
24064
- if (this.childNodes[i].nodeType !== 10 /* DOCUMENT_TYPE_NODE */) {
24065
- this.childNodes[i].remove();
24066
- }
24067
- }
24068
- if (documentElement != null) {
24069
- this.appendChild(documentElement);
24070
- setOwnerDocument(documentElement, this);
24071
- }
24578
+ onpointerup() {
24072
24579
  }
24073
- get head() {
24074
- const documentElement = this.documentElement;
24075
- for (let i = 0; i < documentElement.childNodes.length; i++) {
24076
- if (documentElement.childNodes[i].nodeName === "HEAD") {
24077
- return documentElement.childNodes[i];
24078
- }
24079
- }
24080
- const head = new MockHTMLElement(this, "head");
24081
- documentElement.insertBefore(head, documentElement.firstChild);
24082
- return head;
24580
+ onprogress() {
24083
24581
  }
24084
- set head(head) {
24085
- const documentElement = this.documentElement;
24086
- for (let i = documentElement.childNodes.length - 1; i >= 0; i--) {
24087
- if (documentElement.childNodes[i].nodeName === "HEAD") {
24088
- documentElement.childNodes[i].remove();
24089
- }
24090
- }
24091
- if (head != null) {
24092
- documentElement.insertBefore(head, documentElement.firstChild);
24093
- setOwnerDocument(head, this);
24094
- }
24582
+ onratechange() {
24095
24583
  }
24096
- get body() {
24097
- const documentElement = this.documentElement;
24098
- for (let i = documentElement.childNodes.length - 1; i >= 0; i--) {
24099
- if (documentElement.childNodes[i].nodeName === "BODY") {
24100
- return documentElement.childNodes[i];
24101
- }
24102
- }
24103
- const body = new MockHTMLElement(this, "body");
24104
- documentElement.appendChild(body);
24105
- return body;
24584
+ onreset() {
24106
24585
  }
24107
- set body(body) {
24108
- const documentElement = this.documentElement;
24109
- for (let i = documentElement.childNodes.length - 1; i >= 0; i--) {
24110
- if (documentElement.childNodes[i].nodeName === "BODY") {
24111
- documentElement.childNodes[i].remove();
24112
- }
24113
- }
24114
- if (body != null) {
24115
- documentElement.appendChild(body);
24116
- setOwnerDocument(body, this);
24117
- }
24586
+ onresize() {
24118
24587
  }
24119
- appendChild(newNode) {
24120
- newNode.remove();
24121
- newNode.parentNode = this;
24122
- this.childNodes.push(newNode);
24123
- return newNode;
24588
+ onscroll() {
24124
24589
  }
24125
- createComment(data) {
24126
- return new MockComment(this, data);
24590
+ onsearch() {
24127
24591
  }
24128
- createAttribute(attrName) {
24129
- return new MockAttr(attrName.toLowerCase(), "");
24592
+ onseeked() {
24130
24593
  }
24131
- createAttributeNS(namespaceURI, attrName) {
24132
- return new MockAttr(attrName, "", namespaceURI);
24594
+ onseeking() {
24133
24595
  }
24134
- createElement(tagName) {
24135
- if (tagName === "#document" /* DOCUMENT_NODE */) {
24136
- const doc = new _MockDocument(false);
24137
- doc.nodeName = tagName;
24138
- doc.parentNode = null;
24139
- return doc;
24140
- }
24141
- return createElement(this, tagName);
24596
+ onselect() {
24142
24597
  }
24143
- createElementNS(namespaceURI, tagName) {
24144
- const elmNs = createElementNS(this, namespaceURI, tagName);
24145
- return elmNs;
24598
+ onselectstart() {
24146
24599
  }
24147
- createTextNode(text) {
24148
- return new MockTextNode(this, text);
24600
+ onstalled() {
24149
24601
  }
24150
- createDocumentFragment() {
24151
- return new MockDocumentFragment(this);
24602
+ onsubmit() {
24152
24603
  }
24153
- createDocumentTypeNode() {
24154
- return new MockDocumentTypeNode(this);
24604
+ onsuspend() {
24155
24605
  }
24156
- getElementById(id) {
24157
- return getElementById(this, id);
24606
+ ontimeupdate() {
24158
24607
  }
24159
- getElementsByName(elmName) {
24160
- return getElementsByName(this, elmName.toLowerCase());
24608
+ ontoggle() {
24161
24609
  }
24162
- get title() {
24163
- const title = this.head.childNodes.find((elm) => elm.nodeName === "TITLE");
24164
- if (title != null && typeof title.textContent === "string") {
24165
- return title.textContent.trim();
24166
- }
24167
- return "";
24610
+ onvolumechange() {
24168
24611
  }
24169
- set title(value) {
24170
- const head = this.head;
24171
- let title = head.childNodes.find((elm) => elm.nodeName === "TITLE");
24172
- if (title == null) {
24173
- title = this.createElement("title");
24174
- head.appendChild(title);
24175
- }
24176
- title.textContent = value;
24612
+ onwaiting() {
24613
+ }
24614
+ onwebkitfullscreenchange() {
24615
+ }
24616
+ onwebkitfullscreenerror() {
24617
+ }
24618
+ onwheel() {
24177
24619
  }
24178
24620
  };
24179
- function resetDocument(doc) {
24180
- if (doc != null) {
24181
- resetEventListeners(doc);
24182
- const documentElement = doc.documentElement;
24183
- if (documentElement != null) {
24184
- resetElement(documentElement);
24185
- for (let i = 0, ii = documentElement.childNodes.length; i < ii; i++) {
24186
- const childNode = documentElement.childNodes[i];
24187
- resetElement(childNode);
24188
- childNode.childNodes.length = 0;
24189
- }
24190
- }
24191
- for (const key in doc) {
24192
- if (doc.hasOwnProperty(key) && !DOC_KEY_KEEPERS.has(key)) {
24193
- delete doc[key];
24194
- }
24195
- }
24196
- try {
24197
- doc.nodeName = "#document" /* DOCUMENT_NODE */;
24198
- } catch (e) {
24199
- }
24200
- try {
24201
- doc.nodeType = 9 /* DOCUMENT_NODE */;
24202
- } catch (e) {
24203
- }
24204
- try {
24205
- doc.cookie = "";
24206
- } catch (e) {
24207
- }
24208
- try {
24209
- doc.referrer = "";
24210
- } catch (e) {
24211
- }
24621
+ addGlobalsToWindowPrototype(MockWindow.prototype);
24622
+ function resetWindowDefaults(win2) {
24623
+ win2.__clearInterval = nativeClearInterval;
24624
+ win2.__clearTimeout = nativeClearTimeout;
24625
+ win2.__setInterval = nativeSetInterval;
24626
+ win2.__setTimeout = nativeSetTimeout;
24627
+ win2.__maxTimeout = 6e4;
24628
+ win2.__allowInterval = true;
24629
+ win2.URL = nativeURL;
24630
+ }
24631
+ function cloneWindow(srcWin, opts = {}) {
24632
+ if (srcWin == null) {
24633
+ return null;
24634
+ }
24635
+ const clonedWin = new MockWindow(false);
24636
+ if (!opts.customElementProxy) {
24637
+ srcWin.customElements = null;
24638
+ }
24639
+ if (srcWin.document != null) {
24640
+ const clonedDoc = new MockDocument(false, clonedWin);
24641
+ clonedWin.document = clonedDoc;
24642
+ clonedDoc.documentElement = srcWin.document.documentElement.cloneNode(true);
24643
+ } else {
24644
+ clonedWin.document = new MockDocument(null, clonedWin);
24212
24645
  }
24646
+ return clonedWin;
24213
24647
  }
24214
- var DOC_KEY_KEEPERS = /* @__PURE__ */ new Set([
24215
- "nodeName",
24216
- "nodeType",
24217
- "nodeValue",
24218
- "ownerDocument",
24219
- "parentNode",
24220
- "childNodes",
24221
- "_shadowRoot"
24222
- ]);
24223
- function getElementById(elm, id) {
24224
- const children = elm.children;
24225
- for (let i = 0, ii = children.length; i < ii; i++) {
24226
- const childElm = children[i];
24227
- if (childElm.id === id) {
24228
- return childElm;
24648
+ function constrainTimeouts(win2) {
24649
+ win2.__allowInterval = false;
24650
+ win2.__maxTimeout = 0;
24651
+ }
24652
+ function resetWindow(win2) {
24653
+ if (win2 != null) {
24654
+ if (win2.__timeouts) {
24655
+ win2.__timeouts.forEach((timeoutId) => {
24656
+ nativeClearInterval(timeoutId);
24657
+ nativeClearTimeout(timeoutId);
24658
+ });
24659
+ win2.__timeouts.clear();
24229
24660
  }
24230
- const childElmFound = getElementById(childElm, id);
24231
- if (childElmFound != null) {
24232
- return childElmFound;
24661
+ if (win2.customElements && win2.customElements.clear) {
24662
+ win2.customElements.clear();
24233
24663
  }
24234
- }
24235
- return null;
24236
- }
24237
- function getElementsByName(elm, elmName, foundElms = []) {
24238
- const children = elm.children;
24239
- for (let i = 0, ii = children.length; i < ii; i++) {
24240
- const childElm = children[i];
24241
- if (childElm.name && childElm.name.toLowerCase() === elmName) {
24242
- foundElms.push(childElm);
24664
+ resetDocument(win2.document);
24665
+ resetPerformance(win2.performance);
24666
+ for (const key in win2) {
24667
+ if (win2.hasOwnProperty(key) && key !== "document" && key !== "performance" && key !== "customElements") {
24668
+ delete win2[key];
24669
+ }
24243
24670
  }
24244
- getElementsByName(childElm, elmName, foundElms);
24245
- }
24246
- return foundElms;
24247
- }
24248
- function setOwnerDocument(elm, ownerDocument) {
24249
- for (let i = 0, ii = elm.childNodes.length; i < ii; i++) {
24250
- elm.childNodes[i].ownerDocument = ownerDocument;
24251
- if (elm.childNodes[i].nodeType === 1 /* ELEMENT_NODE */) {
24252
- setOwnerDocument(elm.childNodes[i], ownerDocument);
24671
+ resetWindowDefaults(win2);
24672
+ resetWindowDimensions(win2);
24673
+ resetEventListeners(win2);
24674
+ if (win2.document != null) {
24675
+ try {
24676
+ win2.document.defaultView = win2;
24677
+ } catch (e) {
24678
+ }
24253
24679
  }
24680
+ win2.fetch = null;
24681
+ win2.Headers = null;
24682
+ win2.Request = null;
24683
+ win2.Response = null;
24684
+ win2.FetchError = null;
24254
24685
  }
24255
24686
  }
24256
-
24257
- // src/hydrate/runner/create-window.ts
24258
- var templateWindows = /* @__PURE__ */ new Map();
24259
- function createWindowFromHtml(templateHtml, uniqueId) {
24260
- let templateWindow = templateWindows.get(uniqueId);
24261
- if (templateWindow == null) {
24262
- templateWindow = new MockWindow(templateHtml);
24263
- templateWindows.set(uniqueId, templateWindow);
24264
- }
24265
- const win2 = cloneWindow(templateWindow);
24266
- return win2;
24267
- }
24268
- var Build = {
24269
- isDev: BUILD.isDev ? true : false,
24270
- isBrowser: true,
24271
- isServer: false,
24272
- isTesting: BUILD.isTesting ? true : false
24273
- };
24274
-
24275
- // src/utils/constants.ts
24276
- var PrimitiveType = /* @__PURE__ */ ((PrimitiveType2) => {
24277
- PrimitiveType2["Undefined"] = "undefined";
24278
- PrimitiveType2["Null"] = "null";
24279
- PrimitiveType2["String"] = "string";
24280
- PrimitiveType2["Number"] = "number";
24281
- PrimitiveType2["SpecialNumber"] = "number";
24282
- PrimitiveType2["Boolean"] = "boolean";
24283
- PrimitiveType2["BigInt"] = "bigint";
24284
- return PrimitiveType2;
24285
- })(PrimitiveType || {});
24286
- var NonPrimitiveType = /* @__PURE__ */ ((NonPrimitiveType2) => {
24287
- NonPrimitiveType2["Array"] = "array";
24288
- NonPrimitiveType2["Date"] = "date";
24289
- NonPrimitiveType2["Map"] = "map";
24290
- NonPrimitiveType2["Object"] = "object";
24291
- NonPrimitiveType2["RegularExpression"] = "regexp";
24292
- NonPrimitiveType2["Set"] = "set";
24293
- NonPrimitiveType2["Channel"] = "channel";
24294
- NonPrimitiveType2["Symbol"] = "symbol";
24295
- return NonPrimitiveType2;
24296
- })(NonPrimitiveType || {});
24297
- var TYPE_CONSTANT = "type";
24298
- var VALUE_CONSTANT = "value";
24299
- var SERIALIZED_PREFIX = "serialized:";
24300
- var STENCIL_DEV_MODE = BUILD.isTesting ? ["STENCIL:"] : [
24301
- "%cstencil",
24302
- "color: white;background:#4c47ff;font-weight: bold; font-size:10px; padding:2px 6px; border-radius: 5px"
24303
- ];
24304
- var win = typeof window !== "undefined" ? window : {};
24305
- var H = win.HTMLElement || class {
24306
- };
24307
- var supportsShadow = BUILD.shadowDom;
24308
- var supportsConstructableStylesheets = BUILD.constructableCSS ? /* @__PURE__ */ (() => {
24687
+ function resetWindowDimensions(win2) {
24309
24688
  try {
24310
- new CSSStyleSheet();
24311
- return typeof new CSSStyleSheet().replaceSync === "function";
24689
+ win2.devicePixelRatio = 1;
24690
+ win2.innerHeight = 768;
24691
+ win2.innerWidth = 1366;
24692
+ win2.pageXOffset = 0;
24693
+ win2.pageYOffset = 0;
24694
+ win2.screenLeft = 0;
24695
+ win2.screenTop = 0;
24696
+ win2.screenX = 0;
24697
+ win2.screenY = 0;
24698
+ win2.scrollX = 0;
24699
+ win2.scrollY = 0;
24700
+ win2.screen = {
24701
+ availHeight: win2.innerHeight,
24702
+ availLeft: 0,
24703
+ availTop: 0,
24704
+ availWidth: win2.innerWidth,
24705
+ colorDepth: 24,
24706
+ height: win2.innerHeight,
24707
+ keepAwake: false,
24708
+ orientation: {
24709
+ angle: 0,
24710
+ type: "portrait-primary"
24711
+ },
24712
+ pixelDepth: 24,
24713
+ width: win2.innerWidth
24714
+ };
24312
24715
  } catch (e) {
24313
24716
  }
24314
- return false;
24315
- })() : false;
24316
-
24317
- // src/utils/helpers.ts
24318
- var isString = (v) => typeof v === "string";
24717
+ }
24319
24718
 
24320
- // src/utils/local-value.ts
24321
- var LocalValue = class _LocalValue {
24322
- constructor(type, value) {
24323
- if (type === "undefined" /* Undefined */ || type === "null" /* Null */) {
24324
- this.type = type;
24325
- } else {
24326
- this.type = type;
24327
- this.value = value;
24719
+ // src/mock-doc/document.ts
24720
+ var MockDocument = class _MockDocument extends MockHTMLElement {
24721
+ constructor(html = null, win2 = null) {
24722
+ super(null, null);
24723
+ this.nodeName = "#document" /* DOCUMENT_NODE */;
24724
+ this.nodeType = 9 /* DOCUMENT_NODE */;
24725
+ this.defaultView = win2;
24726
+ this.cookie = "";
24727
+ this.referrer = "";
24728
+ this.appendChild(this.createDocumentTypeNode());
24729
+ if (typeof html === "string") {
24730
+ const parsedDoc = parseDocumentUtil(this, html);
24731
+ const documentElement = parsedDoc.children.find((elm) => elm.nodeName === "HTML");
24732
+ if (documentElement != null) {
24733
+ this.appendChild(documentElement);
24734
+ setOwnerDocument(documentElement, this);
24735
+ }
24736
+ } else if (html !== false) {
24737
+ const documentElement = new MockHTMLElement(this, "html");
24738
+ this.appendChild(documentElement);
24739
+ documentElement.appendChild(new MockHTMLElement(this, "head"));
24740
+ documentElement.appendChild(new MockHTMLElement(this, "body"));
24328
24741
  }
24329
24742
  }
24330
- /**
24331
- * Creates a new LocalValue object with a string value.
24332
- *
24333
- * @param {string} value - The string value to be stored in the LocalValue object.
24334
- * @returns {LocalValue} - The created LocalValue object.
24335
- */
24336
- static createStringValue(value) {
24337
- return new _LocalValue("string" /* String */, value);
24743
+ get dir() {
24744
+ return this.documentElement.dir;
24338
24745
  }
24339
- /**
24340
- * Creates a new LocalValue object with a number value.
24341
- *
24342
- * @param {number} value - The number value.
24343
- * @returns {LocalValue} - The created LocalValue object.
24344
- */
24345
- static createNumberValue(value) {
24346
- return new _LocalValue("number" /* Number */, value);
24746
+ set dir(value) {
24747
+ this.documentElement.dir = value;
24347
24748
  }
24348
- /**
24349
- * Creates a new LocalValue object with a special number value.
24350
- *
24351
- * @param {number} value - The value of the special number.
24352
- * @returns {LocalValue} - The created LocalValue object.
24353
- */
24354
- static createSpecialNumberValue(value) {
24355
- if (Number.isNaN(value)) {
24356
- return new _LocalValue("number" /* SpecialNumber */, "NaN");
24357
- }
24358
- if (Object.is(value, -0)) {
24359
- return new _LocalValue("number" /* SpecialNumber */, "-0");
24360
- }
24361
- if (value === Infinity) {
24362
- return new _LocalValue("number" /* SpecialNumber */, "Infinity");
24363
- }
24364
- if (value === -Infinity) {
24365
- return new _LocalValue("number" /* SpecialNumber */, "-Infinity");
24366
- }
24367
- return new _LocalValue("number" /* SpecialNumber */, value);
24749
+ get localName() {
24750
+ throw new Error("Unimplemented");
24368
24751
  }
24369
- /**
24370
- * Creates a new LocalValue object with an undefined value.
24371
- * @returns {LocalValue} - The created LocalValue object.
24372
- */
24373
- static createUndefinedValue() {
24374
- return new _LocalValue("undefined" /* Undefined */);
24752
+ get location() {
24753
+ if (this.defaultView != null) {
24754
+ return this.defaultView.location;
24755
+ }
24756
+ return null;
24375
24757
  }
24376
- /**
24377
- * Creates a new LocalValue object with a null value.
24378
- * @returns {LocalValue} - The created LocalValue object.
24379
- */
24380
- static createNullValue() {
24381
- return new _LocalValue("null" /* Null */);
24758
+ set location(val) {
24759
+ if (this.defaultView != null) {
24760
+ this.defaultView.location.href = val;
24761
+ }
24382
24762
  }
24383
- /**
24384
- * Creates a new LocalValue object with a boolean value.
24385
- *
24386
- * @param {boolean} value - The boolean value.
24387
- * @returns {LocalValue} - The created LocalValue object.
24388
- */
24389
- static createBooleanValue(value) {
24390
- return new _LocalValue("boolean" /* Boolean */, value);
24763
+ get baseURI() {
24764
+ const baseNode = this.head.childNodes.find((node) => node.nodeName === "BASE");
24765
+ if (baseNode) {
24766
+ return baseNode.href;
24767
+ }
24768
+ return this.URL;
24391
24769
  }
24392
- /**
24393
- * Creates a new LocalValue object with a BigInt value.
24394
- *
24395
- * @param {BigInt} value - The BigInt value.
24396
- * @returns {LocalValue} - The created LocalValue object.
24397
- */
24398
- static createBigIntValue(value) {
24399
- return new _LocalValue("bigint" /* BigInt */, value.toString());
24770
+ get URL() {
24771
+ return this.location.href;
24400
24772
  }
24401
- /**
24402
- * Creates a new LocalValue object with an array.
24403
- *
24404
- * @param {Array} value - The array.
24405
- * @returns {LocalValue} - The created LocalValue object.
24406
- */
24407
- static createArrayValue(value) {
24408
- return new _LocalValue("array" /* Array */, value);
24773
+ get styleSheets() {
24774
+ return this.querySelectorAll("style");
24409
24775
  }
24410
- /**
24411
- * Creates a new LocalValue object with date value.
24412
- *
24413
- * @param {string} value - The date.
24414
- * @returns {LocalValue} - The created LocalValue object.
24415
- */
24416
- static createDateValue(value) {
24417
- return new _LocalValue("date" /* Date */, value);
24776
+ get scripts() {
24777
+ return this.querySelectorAll("script");
24418
24778
  }
24419
- /**
24420
- * Creates a new LocalValue object of map value.
24421
- * @param {Map} map - The map.
24422
- * @returns {LocalValue} - The created LocalValue object.
24423
- */
24424
- static createMapValue(map2) {
24425
- const value = [];
24426
- Array.from(map2.entries()).forEach(([key, val]) => {
24427
- value.push([_LocalValue.getArgument(key), _LocalValue.getArgument(val)]);
24428
- });
24429
- return new _LocalValue("map" /* Map */, value);
24779
+ get forms() {
24780
+ return this.querySelectorAll("form");
24430
24781
  }
24431
- /**
24432
- * Creates a new LocalValue object from the passed object.
24433
- *
24434
- * @param object the object to create a LocalValue from
24435
- * @returns {LocalValue} - The created LocalValue object.
24436
- */
24437
- static createObjectValue(object) {
24438
- const value = [];
24439
- Object.entries(object).forEach(([key, val]) => {
24440
- value.push([key, _LocalValue.getArgument(val)]);
24441
- });
24442
- return new _LocalValue("object" /* Object */, value);
24782
+ get images() {
24783
+ return this.querySelectorAll("img");
24443
24784
  }
24444
- /**
24445
- * Creates a new LocalValue object of regular expression value.
24446
- *
24447
- * @param {string} value - The value of the regular expression.
24448
- * @returns {LocalValue} - The created LocalValue object.
24449
- */
24450
- static createRegularExpressionValue(value) {
24451
- return new _LocalValue("regexp" /* RegularExpression */, value);
24785
+ get scrollingElement() {
24786
+ return this.documentElement;
24452
24787
  }
24453
- /**
24454
- * Creates a new LocalValue object with the specified value.
24455
- * @param {Set} value - The value to be set.
24456
- * @returns {LocalValue} - The created LocalValue object.
24457
- */
24458
- static createSetValue(value) {
24459
- return new _LocalValue("set" /* Set */, value);
24788
+ get documentElement() {
24789
+ for (let i = this.childNodes.length - 1; i >= 0; i--) {
24790
+ if (this.childNodes[i].nodeName === "HTML") {
24791
+ return this.childNodes[i];
24792
+ }
24793
+ }
24794
+ const documentElement = new MockHTMLElement(this, "html");
24795
+ this.appendChild(documentElement);
24796
+ return documentElement;
24460
24797
  }
24461
- /**
24462
- * Creates a new LocalValue object with the given channel value
24463
- *
24464
- * @param {ChannelValue} value - The channel value.
24465
- * @returns {LocalValue} - The created LocalValue object.
24466
- */
24467
- static createChannelValue(value) {
24468
- return new _LocalValue("channel" /* Channel */, value);
24798
+ set documentElement(documentElement) {
24799
+ for (let i = this.childNodes.length - 1; i >= 0; i--) {
24800
+ if (this.childNodes[i].nodeType !== 10 /* DOCUMENT_TYPE_NODE */) {
24801
+ this.childNodes[i].remove();
24802
+ }
24803
+ }
24804
+ if (documentElement != null) {
24805
+ this.appendChild(documentElement);
24806
+ setOwnerDocument(documentElement, this);
24807
+ }
24469
24808
  }
24470
- /**
24471
- * Creates a new LocalValue object with a Symbol value.
24472
- *
24473
- * @param {Symbol} symbol - The Symbol value
24474
- * @returns {LocalValue} - The created LocalValue object
24475
- */
24476
- static createSymbolValue(symbol) {
24477
- const description = symbol.description || "Symbol()";
24478
- return new _LocalValue("symbol" /* Symbol */, description);
24809
+ get head() {
24810
+ const documentElement = this.documentElement;
24811
+ for (let i = 0; i < documentElement.childNodes.length; i++) {
24812
+ if (documentElement.childNodes[i].nodeName === "HEAD") {
24813
+ return documentElement.childNodes[i];
24814
+ }
24815
+ }
24816
+ const head = new MockHTMLElement(this, "head");
24817
+ documentElement.insertBefore(head, documentElement.firstChild);
24818
+ return head;
24479
24819
  }
24480
- static getArgument(argument) {
24481
- const type = typeof argument;
24482
- switch (type) {
24483
- case "string" /* String */:
24484
- return _LocalValue.createStringValue(argument);
24485
- case "number" /* Number */:
24486
- if (Number.isNaN(argument) || Object.is(argument, -0) || !Number.isFinite(argument)) {
24487
- return _LocalValue.createSpecialNumberValue(argument);
24488
- }
24489
- return _LocalValue.createNumberValue(argument);
24490
- case "boolean" /* Boolean */:
24491
- return _LocalValue.createBooleanValue(argument);
24492
- case "bigint" /* BigInt */:
24493
- return _LocalValue.createBigIntValue(argument);
24494
- case "undefined" /* Undefined */:
24495
- return _LocalValue.createUndefinedValue();
24496
- case "symbol" /* Symbol */:
24497
- return _LocalValue.createSymbolValue(argument);
24498
- case "object" /* Object */:
24499
- if (argument === null) {
24500
- return _LocalValue.createNullValue();
24501
- }
24502
- if (argument instanceof Date) {
24503
- return _LocalValue.createDateValue(argument);
24504
- }
24505
- if (argument instanceof Map) {
24506
- const map2 = [];
24507
- argument.forEach((value, key) => {
24508
- const objectKey = typeof key === "string" ? key : _LocalValue.getArgument(key);
24509
- const objectValue = _LocalValue.getArgument(value);
24510
- map2.push([objectKey, objectValue]);
24511
- });
24512
- return _LocalValue.createMapValue(argument);
24513
- }
24514
- if (argument instanceof Set) {
24515
- const set = [];
24516
- argument.forEach((value) => {
24517
- set.push(_LocalValue.getArgument(value));
24518
- });
24519
- return _LocalValue.createSetValue(set);
24520
- }
24521
- if (argument instanceof Array) {
24522
- const arr = [];
24523
- argument.forEach((value) => {
24524
- arr.push(_LocalValue.getArgument(value));
24525
- });
24526
- return _LocalValue.createArrayValue(arr);
24527
- }
24528
- if (argument instanceof RegExp) {
24529
- return _LocalValue.createRegularExpressionValue({
24530
- pattern: argument.source,
24531
- flags: argument.flags
24532
- });
24533
- }
24534
- return _LocalValue.createObjectValue(argument);
24820
+ set head(head) {
24821
+ const documentElement = this.documentElement;
24822
+ for (let i = documentElement.childNodes.length - 1; i >= 0; i--) {
24823
+ if (documentElement.childNodes[i].nodeName === "HEAD") {
24824
+ documentElement.childNodes[i].remove();
24825
+ }
24826
+ }
24827
+ if (head != null) {
24828
+ documentElement.insertBefore(head, documentElement.firstChild);
24829
+ setOwnerDocument(head, this);
24535
24830
  }
24536
- throw new Error(`Unsupported type: ${type}`);
24537
24831
  }
24538
- asMap() {
24539
- return {
24540
- [TYPE_CONSTANT]: this.type,
24541
- ...!(this.type === "null" /* Null */ || this.type === "undefined" /* Undefined */) ? { [VALUE_CONSTANT]: this.value } : {}
24542
- };
24832
+ get body() {
24833
+ const documentElement = this.documentElement;
24834
+ for (let i = documentElement.childNodes.length - 1; i >= 0; i--) {
24835
+ if (documentElement.childNodes[i].nodeName === "BODY") {
24836
+ return documentElement.childNodes[i];
24837
+ }
24838
+ }
24839
+ const body = new MockHTMLElement(this, "body");
24840
+ documentElement.appendChild(body);
24841
+ return body;
24543
24842
  }
24544
- };
24545
-
24546
- // src/utils/message-utils.ts
24547
- var catchError = (diagnostics, err2, msg) => {
24548
- const diagnostic = {
24549
- level: "error",
24550
- type: "build",
24551
- header: "Build Error",
24552
- messageText: "build error",
24553
- lines: []
24554
- };
24555
- if (isString(msg)) {
24556
- diagnostic.messageText = msg.length ? msg : "UNKNOWN ERROR";
24557
- } else if (err2 != null) {
24558
- if (err2.stack != null) {
24559
- diagnostic.messageText = err2.stack.toString();
24560
- } else {
24561
- if (err2.message != null) {
24562
- diagnostic.messageText = err2.message.length ? err2.message : "UNKNOWN ERROR";
24563
- } else {
24564
- diagnostic.messageText = err2.toString();
24843
+ set body(body) {
24844
+ const documentElement = this.documentElement;
24845
+ for (let i = documentElement.childNodes.length - 1; i >= 0; i--) {
24846
+ if (documentElement.childNodes[i].nodeName === "BODY") {
24847
+ documentElement.childNodes[i].remove();
24565
24848
  }
24566
24849
  }
24850
+ if (body != null) {
24851
+ documentElement.appendChild(body);
24852
+ setOwnerDocument(body, this);
24853
+ }
24567
24854
  }
24568
- if (diagnostics != null && !shouldIgnoreError(diagnostic.messageText)) {
24569
- diagnostics.push(diagnostic);
24855
+ appendChild(newNode) {
24856
+ newNode.remove();
24857
+ newNode.parentNode = this;
24858
+ this.childNodes.push(newNode);
24859
+ return newNode;
24570
24860
  }
24571
- return diagnostic;
24572
- };
24573
- var hasError = (diagnostics) => {
24574
- if (diagnostics == null || diagnostics.length === 0) {
24575
- return false;
24861
+ createComment(data) {
24862
+ return new MockComment(this, data);
24576
24863
  }
24577
- return diagnostics.some((d) => d.level === "error" && d.type !== "runtime");
24578
- };
24579
- var shouldIgnoreError = (msg) => {
24580
- return msg === TASK_CANCELED_MSG;
24581
- };
24582
- var TASK_CANCELED_MSG = `task canceled`;
24583
-
24584
- // src/utils/regular-expression.ts
24585
- var escapeRegExpSpecialCharacters = (text) => {
24586
- return text.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
24587
- };
24588
-
24589
- // src/utils/remote-value.ts
24590
- var RemoteValue = class _RemoteValue {
24591
- /**
24592
- * Deserializes a LocalValue serialized object back to its original JavaScript representation
24593
- *
24594
- * @param serialized The serialized LocalValue object
24595
- * @returns The original JavaScript value/object
24596
- */
24597
- static fromLocalValue(serialized) {
24598
- const type = serialized[TYPE_CONSTANT];
24599
- const value = VALUE_CONSTANT in serialized ? serialized[VALUE_CONSTANT] : void 0;
24600
- switch (type) {
24601
- case "string" /* String */:
24602
- return value;
24603
- case "boolean" /* Boolean */:
24604
- return value;
24605
- case "bigint" /* BigInt */:
24606
- return BigInt(value);
24607
- case "undefined" /* Undefined */:
24608
- return void 0;
24609
- case "null" /* Null */:
24610
- return null;
24611
- case "number" /* Number */:
24612
- if (value === "NaN") return NaN;
24613
- if (value === "-0") return -0;
24614
- if (value === "Infinity") return Infinity;
24615
- if (value === "-Infinity") return -Infinity;
24616
- return value;
24617
- case "array" /* Array */:
24618
- return value.map((item) => _RemoteValue.fromLocalValue(item));
24619
- case "date" /* Date */:
24620
- return new Date(value);
24621
- case "map" /* Map */:
24622
- const map2 = /* @__PURE__ */ new Map();
24623
- for (const [key, val] of value) {
24624
- const deserializedKey = typeof key === "object" && key !== null ? _RemoteValue.fromLocalValue(key) : key;
24625
- const deserializedValue = _RemoteValue.fromLocalValue(val);
24626
- map2.set(deserializedKey, deserializedValue);
24627
- }
24628
- return map2;
24629
- case "object" /* Object */:
24630
- const obj = {};
24631
- for (const [key, val] of value) {
24632
- obj[key] = _RemoteValue.fromLocalValue(val);
24633
- }
24634
- return obj;
24635
- case "regexp" /* RegularExpression */:
24636
- const { pattern, flags } = value;
24637
- return new RegExp(pattern, flags);
24638
- case "set" /* Set */:
24639
- const set = /* @__PURE__ */ new Set();
24640
- for (const item of value) {
24641
- set.add(_RemoteValue.fromLocalValue(item));
24642
- }
24643
- return set;
24644
- case "symbol" /* Symbol */:
24645
- return Symbol(value);
24646
- default:
24647
- throw new Error(`Unsupported type: ${type}`);
24864
+ createAttribute(attrName) {
24865
+ return new MockAttr(attrName.toLowerCase(), "");
24866
+ }
24867
+ createAttributeNS(namespaceURI, attrName) {
24868
+ return new MockAttr(attrName, "", namespaceURI);
24869
+ }
24870
+ createElement(tagName) {
24871
+ if (tagName === "#document" /* DOCUMENT_NODE */) {
24872
+ const doc = new _MockDocument(false);
24873
+ doc.nodeName = tagName;
24874
+ doc.parentNode = null;
24875
+ return doc;
24648
24876
  }
24877
+ return createElement(this, tagName);
24649
24878
  }
24650
- /**
24651
- * Utility method to deserialize multiple LocalValues at once
24652
- *
24653
- * @param serializedValues Array of serialized LocalValue objects
24654
- * @returns Array of deserialized JavaScript values
24655
- */
24656
- static fromLocalValueArray(serializedValues) {
24657
- return serializedValues.map((value) => _RemoteValue.fromLocalValue(value));
24879
+ createElementNS(namespaceURI, tagName) {
24880
+ const elmNs = createElementNS(this, namespaceURI, tagName);
24881
+ return elmNs;
24658
24882
  }
24659
- /**
24660
- * Verifies if the given object matches the structure of a serialized LocalValue
24661
- *
24662
- * @param obj Object to verify
24663
- * @returns boolean indicating if the object has LocalValue structure
24664
- */
24665
- static isLocalValueObject(obj) {
24666
- if (typeof obj !== "object" || obj === null) {
24667
- return false;
24668
- }
24669
- if (!obj.hasOwnProperty(TYPE_CONSTANT)) {
24670
- return false;
24671
- }
24672
- const type = obj[TYPE_CONSTANT];
24673
- const hasTypeProperty = Object.values({ ...PrimitiveType, ...NonPrimitiveType }).includes(type);
24674
- if (!hasTypeProperty) {
24675
- return false;
24883
+ createTextNode(text) {
24884
+ return new MockTextNode(this, text);
24885
+ }
24886
+ createDocumentFragment() {
24887
+ return new MockDocumentFragment(this);
24888
+ }
24889
+ createDocumentTypeNode() {
24890
+ return new MockDocumentTypeNode(this);
24891
+ }
24892
+ getElementById(id) {
24893
+ return getElementById(this, id);
24894
+ }
24895
+ getElementsByName(elmName) {
24896
+ return getElementsByName(this, elmName.toLowerCase());
24897
+ }
24898
+ get title() {
24899
+ const title = this.head.childNodes.find((elm) => elm.nodeName === "TITLE");
24900
+ if (title != null && typeof title.textContent === "string") {
24901
+ return title.textContent.trim();
24676
24902
  }
24677
- if (type !== "null" /* Null */ && type !== "undefined" /* Undefined */) {
24678
- return obj.hasOwnProperty(VALUE_CONSTANT);
24903
+ return "";
24904
+ }
24905
+ set title(value) {
24906
+ const head = this.head;
24907
+ let title = head.childNodes.find((elm) => elm.nodeName === "TITLE");
24908
+ if (title == null) {
24909
+ title = this.createElement("title");
24910
+ head.appendChild(title);
24679
24911
  }
24680
- return true;
24912
+ title.textContent = value;
24681
24913
  }
24682
24914
  };
24683
-
24684
- // src/utils/result.ts
24685
- var result_exports = {};
24686
- __export(result_exports, {
24687
- err: () => err,
24688
- map: () => map,
24689
- ok: () => ok,
24690
- unwrap: () => unwrap,
24691
- unwrapErr: () => unwrapErr
24692
- });
24693
- var ok = (value) => ({
24694
- isOk: true,
24695
- isErr: false,
24696
- value
24697
- });
24698
- var err = (value) => ({
24699
- isOk: false,
24700
- isErr: true,
24701
- value
24702
- });
24703
- function map(result, fn) {
24704
- if (result.isOk) {
24705
- const val = fn(result.value);
24706
- if (val instanceof Promise) {
24707
- return val.then((newVal) => ok(newVal));
24708
- } else {
24709
- return ok(val);
24915
+ function resetDocument(doc) {
24916
+ if (doc != null) {
24917
+ resetEventListeners(doc);
24918
+ const documentElement = doc.documentElement;
24919
+ if (documentElement != null) {
24920
+ resetElement(documentElement);
24921
+ for (let i = 0, ii = documentElement.childNodes.length; i < ii; i++) {
24922
+ const childNode = documentElement.childNodes[i];
24923
+ resetElement(childNode);
24924
+ childNode.childNodes.length = 0;
24925
+ }
24926
+ }
24927
+ for (const key in doc) {
24928
+ if (doc.hasOwnProperty(key) && !DOC_KEY_KEEPERS.has(key)) {
24929
+ delete doc[key];
24930
+ }
24931
+ }
24932
+ try {
24933
+ doc.nodeName = "#document" /* DOCUMENT_NODE */;
24934
+ } catch (e) {
24935
+ }
24936
+ try {
24937
+ doc.nodeType = 9 /* DOCUMENT_NODE */;
24938
+ } catch (e) {
24939
+ }
24940
+ try {
24941
+ doc.cookie = "";
24942
+ } catch (e) {
24943
+ }
24944
+ try {
24945
+ doc.referrer = "";
24946
+ } catch (e) {
24710
24947
  }
24711
24948
  }
24712
- if (result.isErr) {
24713
- const value = result.value;
24714
- return err(value);
24715
- }
24716
- throw "should never get here";
24717
24949
  }
24718
- var unwrap = (result) => {
24719
- if (result.isOk) {
24720
- return result.value;
24721
- } else {
24722
- throw result.value;
24723
- }
24724
- };
24725
- var unwrapErr = (result) => {
24726
- if (result.isErr) {
24727
- return result.value;
24728
- } else {
24729
- throw result.value;
24950
+ var DOC_KEY_KEEPERS = /* @__PURE__ */ new Set([
24951
+ "nodeName",
24952
+ "nodeType",
24953
+ "nodeValue",
24954
+ "ownerDocument",
24955
+ "parentNode",
24956
+ "childNodes",
24957
+ "_shadowRoot"
24958
+ ]);
24959
+ function getElementById(elm, id) {
24960
+ const children = elm.children;
24961
+ for (let i = 0, ii = children.length; i < ii; i++) {
24962
+ const childElm = children[i];
24963
+ if (childElm.id === id) {
24964
+ return childElm;
24965
+ }
24966
+ const childElmFound = getElementById(childElm, id);
24967
+ if (childElmFound != null) {
24968
+ return childElmFound;
24969
+ }
24730
24970
  }
24731
- };
24732
-
24733
- // src/utils/serialize.ts
24734
- function serializeProperty(value) {
24735
- if (["string", "boolean", "undefined"].includes(typeof value) || typeof value === "number" && value !== Infinity && value !== -Infinity && !isNaN(value)) {
24736
- return value;
24971
+ return null;
24972
+ }
24973
+ function getElementsByName(elm, elmName, foundElms = []) {
24974
+ const children = elm.children;
24975
+ for (let i = 0, ii = children.length; i < ii; i++) {
24976
+ const childElm = children[i];
24977
+ if (childElm.name && childElm.name.toLowerCase() === elmName) {
24978
+ foundElms.push(childElm);
24979
+ }
24980
+ getElementsByName(childElm, elmName, foundElms);
24737
24981
  }
24738
- const arg = LocalValue.getArgument(value);
24739
- return SERIALIZED_PREFIX + btoa(JSON.stringify(arg));
24982
+ return foundElms;
24740
24983
  }
24741
- function deserializeProperty(value) {
24742
- if (typeof value !== "string" || !value.startsWith(SERIALIZED_PREFIX)) {
24743
- return value;
24984
+ function setOwnerDocument(elm, ownerDocument) {
24985
+ for (let i = 0, ii = elm.childNodes.length; i < ii; i++) {
24986
+ elm.childNodes[i].ownerDocument = ownerDocument;
24987
+ if (elm.childNodes[i].nodeType === 1 /* ELEMENT_NODE */) {
24988
+ setOwnerDocument(elm.childNodes[i], ownerDocument);
24989
+ }
24744
24990
  }
24745
- return RemoteValue.fromLocalValue(JSON.parse(atob(value.slice(SERIALIZED_PREFIX.length))));
24746
24991
  }
24747
24992
 
24748
- // src/utils/util.ts
24749
- var lowerPathParam = (fn) => (p) => fn(p.toLowerCase());
24750
- var isDtsFile = lowerPathParam((p) => p.endsWith(".d.ts") || p.endsWith(".d.mts") || p.endsWith(".d.cts"));
24751
- var isTsFile = lowerPathParam(
24752
- (p) => !isDtsFile(p) && (p.endsWith(".ts") || p.endsWith(".mts") || p.endsWith(".cts"))
24753
- );
24754
- var isTsxFile = lowerPathParam(
24755
- (p) => p.endsWith(".tsx") || p.endsWith(".mtsx") || p.endsWith(".ctsx")
24756
- );
24757
- var isJsxFile = lowerPathParam(
24758
- (p) => p.endsWith(".jsx") || p.endsWith(".mjsx") || p.endsWith(".cjsx")
24759
- );
24760
- var isJsFile = lowerPathParam((p) => p.endsWith(".js") || p.endsWith(".mjs") || p.endsWith(".cjs"));
24761
-
24762
- // src/utils/shadow-css.ts
24763
- /**
24764
- * @license
24765
- * Copyright Google Inc. All Rights Reserved.
24766
- *
24767
- * Use of this source code is governed by an MIT-style license that can be
24768
- * found in the LICENSE file at https://angular.io/license
24769
- *
24770
- * This file is a port of shadowCSS from `webcomponents.js` to TypeScript.
24771
- * https://github.com/webcomponents/webcomponentsjs/blob/4efecd7e0e/src/ShadowCSS/ShadowCSS.js
24772
- * https://github.com/angular/angular/blob/master/packages/compiler/src/shadow_css.ts
24773
- */
24774
- var _polyfillHost = "-shadowcsshost";
24775
- var _polyfillSlotted = "-shadowcssslotted";
24776
- var _polyfillHostContext = "-shadowcsscontext";
24777
- var _parenSuffix = ")(?:\\(((?:\\([^)(]*\\)|[^)(]*)+?)\\))?([^,{]*)";
24778
- var _cssColonHostRe = new RegExp("(" + _polyfillHost + _parenSuffix, "gim");
24779
- var _cssColonHostContextRe = new RegExp("(" + _polyfillHostContext + _parenSuffix, "gim");
24780
- var _cssColonSlottedRe = new RegExp("(" + _polyfillSlotted + _parenSuffix, "gim");
24781
- var _polyfillHostNoCombinator = _polyfillHost + "-no-combinator";
24782
- var createSupportsRuleRe = (selector) => {
24783
- const safeSelector = escapeRegExpSpecialCharacters(selector);
24784
- return new RegExp(
24785
- // First capture group: match any context before the selector that's not inside @supports selector()
24786
- // Using negative lookahead to avoid matching inside @supports selector(...) condition
24787
- `(^|[^@]|@(?!supports\\s+selector\\s*\\([^{]*?${safeSelector}))(${safeSelector}\\b)`,
24788
- "g"
24789
- );
24790
- };
24791
- var _colonSlottedRe = createSupportsRuleRe("::slotted");
24792
- var _colonHostRe = createSupportsRuleRe(":host");
24793
- var _colonHostContextRe = createSupportsRuleRe(":host-context");
24794
-
24795
- // src/runtime/mode.ts
24796
- var setMode = (handler) => modeResolutionChain.push(handler);
24797
- var CAPTURE_EVENT_SUFFIX = "Capture";
24798
- var CAPTURE_EVENT_REGEX = new RegExp(CAPTURE_EVENT_SUFFIX + "$");
24799
- var baseClass = BUILD.lazyLoad ? class {
24800
- } : globalThis.HTMLElement || class {
24801
- };
24993
+ // src/hydrate/runner/create-window.ts
24994
+ var templateWindows = /* @__PURE__ */ new Map();
24995
+ function createWindowFromHtml(templateHtml, uniqueId) {
24996
+ let templateWindow = templateWindows.get(uniqueId);
24997
+ if (templateWindow == null) {
24998
+ templateWindow = new MockWindow(templateHtml);
24999
+ templateWindows.set(uniqueId, templateWindow);
25000
+ }
25001
+ const win2 = cloneWindow(templateWindow);
25002
+ return win2;
25003
+ }
24802
25004
 
24803
25005
  // src/compiler/html/canonical-link.ts
24804
25006
  var updateCanonicalLink = (doc, href) => {
@@ -26181,10 +26383,21 @@ function removeScripts(elm) {
26181
26383
  }
26182
26384
  }
26183
26385
 
26386
+ // src/hydrate/runner/index.ts
26387
+ var everywhere;
26388
+ try {
26389
+ everywhere = global || globalThis;
26390
+ } catch (e) {
26391
+ everywhere = window || globalThis;
26392
+ }
26393
+ everywhere.tagTransform = transformTag;
26394
+
26184
26395
  exports.createWindowFromHtml = createWindowFromHtml;
26185
26396
  exports.deserializeProperty = deserializeProperty;
26186
26397
  exports.hydrateDocument = hydrateDocument;
26187
26398
  exports.renderToString = renderToString;
26188
26399
  exports.serializeDocumentToString = serializeDocumentToString;
26189
26400
  exports.serializeProperty = serializeProperty;
26401
+ exports.setTagTransformer = setTagTransformer;
26190
26402
  exports.streamToString = streamToString;
26403
+ exports.transformTag = transformTag;