@froomle/frontend-sdk 0.0.17 → 0.0.18

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.
package/README.md CHANGED
@@ -1,399 +1,5 @@
1
- # Javascript Library Documentation
1
+ # Froomle Frontend SDK (JS)
2
2
 
3
- 1. [Framework-Agnostic Recommendation Proxy](#framework-agnostic-recommendation-proxy)
4
- 2. [React Integration Helpers](#react-integration-helpers)
5
- 3. [JavaScript Modules](#javascript-modules)
6
- 4. [Supporting a New Framework](#supporting-a-new-framework)
3
+ Public documentation is located at:
7
4
 
8
- ## Framework-Agnostic Recommendation Proxy
9
-
10
- To support multiple frontend frameworks (React and others) while preserving a single shared SDK core, the SDK uses a **proxy-based recommendation wrapper**.
11
-
12
- This mechanism allows recommendation items to be **used immediately**, even though the underlying data may not yet be available.
13
-
14
- ---
15
-
16
- ### Problem Being Solved
17
-
18
- Frameworks like React expect values to be:
19
-
20
- - referentially stable
21
- - accessible during render
22
- - optionally async-aware
23
-
24
- At the same time, the SDK:
25
-
26
- - batches recommendation requests
27
- - resolves them later via a single backend call
28
- - relies on shared static state
29
- - cannot expose all internal APIs directly
30
-
31
- Returning a raw `Promise<RecommendationItem>` would not work, because components often need to **read fields synchronously**.
32
-
33
- ---
34
-
35
- ### High-Level Idea
36
-
37
- The solution is to return a **Proxy object** that behaves as both:
38
-
39
- - a `RecommendationItem`
40
- - a `PromiseLike<RecommendationItem>`
41
-
42
- This proxy:
43
-
44
- - intercepts property access
45
- - defers resolution until recommendations are fulfilled
46
- - transparently switches to real data once available
47
-
48
- From the consumer’s point of view, it behaves like a normal recommendation object that “fills itself in later”.
49
-
50
- ---
51
-
52
- ### Deferred Request Queue
53
-
54
- When a recommendation is requested:
55
-
56
- - a deferred promise is created
57
- - the request is added to a shared queue
58
- - no backend call is executed immediately
59
-
60
- All pending requests are stored in a global request list until they are explicitly fulfilled.
61
-
62
- This allows:
63
-
64
- - batching multiple requests into one backend call
65
- - predictable request ordering
66
- - shared static backend state
67
-
68
- ---
69
-
70
- ### Fulfilling Recommendations
71
-
72
- `fulfillRecommendations()`:
73
-
74
- - executes a single backend request for all queued recommendations
75
- - receives a list of recommendation items
76
- - resolves each deferred promise with its corresponding item
77
- - clears the request queue
78
-
79
- This function is typically called once per render cycle (for example on application mount in React).
80
-
81
- ---
82
-
83
- ### Proxy-Based Recommendation Item
84
-
85
- The returned object is a JavaScript `Proxy` wrapping an internal recommendation item.
86
-
87
- The proxy provides three key behaviors:
88
-
89
- - **Property access interception**
90
- When a field is accessed, the proxy either:
91
- - returns the real value (once resolved)
92
- - returns a safe placeholder value
93
-
94
- - **Promise compatibility**
95
- Accessing `.then(...)` forwards to the underlying deferred promise, allowing async usage.
96
-
97
- - **Late data injection**
98
- Once the real recommendation item is available, its data is copied into the proxy target object.
99
-
100
- This makes the transition from “unresolved” to “resolved” completely transparent.
101
-
102
- ---
103
-
104
- ### Why This Works Across Frameworks
105
-
106
- This approach ensures that:
107
-
108
- - the same core logic works for React and non-React frameworks
109
- - recommendation items can be read synchronously
110
- - async resolution integrates naturally with effects and lifecycle hooks
111
- - internal SDK boundaries remain intact
112
- - static backend state is shared correctly
113
-
114
- No framework-specific logic is required in the core SDK.
115
-
116
- ---
117
-
118
- ## React Integration Helpers
119
-
120
- The SDK provides a small React-specific helper layer to integrate recommendations into React applications while preserving the SDK’s internal async model and shared state.
121
-
122
- This layer is intentionally thin and does **not** reimplement SDK logic. It only adapts existing SDK primitives to React’s rendering and lifecycle model.
123
-
124
- ---
125
-
126
- ### `FroomleSdkInit`
127
-
128
- `FroomleSdkInit` is a lightweight initialization component.
129
-
130
- Its responsibility is to trigger the resolution of pending recommendation requests once the React application is mounted.
131
-
132
- Key characteristics:
133
-
134
- - Calls `fulfillRecommendations()` exactly once on mount
135
- - Ensures all queued recommendation requests are executed
136
- - Does not render anything itself
137
- - Acts purely as a lifecycle hook
138
-
139
- This component should be mounted near the root of the React tree.
140
-
141
- ---
142
-
143
- ### `useNewCreateReco`
144
-
145
- `useNewCreateReco` is a React hook that requests a single recommendation and binds it to component state.
146
-
147
- It bridges three concerns:
148
-
149
- - the SDK’s promise-like recommendation model
150
- - React’s render cycle
151
- - referential stability across renders
152
-
153
- ---
154
-
155
- ### Hook Behavior
156
-
157
- The hook works as follows:
158
-
159
- 1. A recommendation request is created once using `proxyReco(req)`
160
- 2. The result is stored in a `ref` to ensure it is not recreated on re-renders
161
- 3. A `then(...)` callback is registered to detect when the recommendation resolves
162
- 4. When resolved, the hook forces a component update
163
- 5. The resolved `RecommendationItem` is returned
164
-
165
- This allows React components to render immediately and update automatically once recommendation data becomes available.
166
-
167
- ---
168
-
169
- ### Why `useRef` Is Used
170
-
171
- `useRef` is used instead of `useState` to ensure that:
172
-
173
- - the recommendation request is created only once
174
- - no duplicate requests are triggered
175
- - static SDK state remains consistent
176
- - React re-renders do not affect request identity
177
-
178
- This is critical because the SDK relies on shared internal state.
179
-
180
- ---
181
-
182
- If you want next, I can:
183
- - add a **usage example** section
184
- - document `proxyReco` explicitly
185
- - or explain how multiple hooks coordinate through `fulfillRecommendations()`
186
-
187
- ## JavaScript Modules
188
-
189
- The SDK ships multiple JavaScript modules, including:
190
-
191
- - a **default JavaScript module**
192
- - a **React-specific module**
193
- - **( potentially more modules in the future )**
194
-
195
- Both modules are distributed together but serve different integration use cases.
196
-
197
- ---
198
-
199
- ### Background Problem
200
-
201
- Originally, the default JavaScript module and the React module were **compiled separately**.
202
-
203
- However, the React module depended on internal logic that was also used by the default module. Because both modules were built independently, this resulted in:
204
-
205
- - the **same internal code being compiled twice**
206
- - **separate static instances** of internal classes
207
- - shared state (for example backend state or configuration) no longer being shared
208
-
209
- This caused incorrect behavior, as the SDK relies on **single, shared static state** across the entire runtime.
210
-
211
- ---
212
-
213
- ### Why Not Just Re-Export Everything
214
-
215
- Exposing all internal logic from the default module was not an option because:
216
-
217
- - not all internal classes are part of the public API
218
- - many classes must remain hidden to prevent incorrect usage
219
- - exposing everything would break the SDK’s API boundaries
220
-
221
- The React module needed access to internal functionality **without making that functionality public**.
222
-
223
- ---
224
-
225
- ### Solution: Shared Module Chunk
226
-
227
- To solve this, the JavaScript builds are structured so that:
228
-
229
- - shared internal code is compiled **once**
230
- - both the default module and the React module depend on the **same compiled chunk**
231
- - static state is shared correctly at runtime
232
-
233
- This is achieved by compiling the modules together and extracting shared code into a **common chunk**, which both modules import.
234
-
235
- ---
236
-
237
- ### Resulting Behavior
238
-
239
- With this setup:
240
-
241
- - internal singletons and static state exist only once
242
- - the default module and React module remain logically separate
243
- - API boundaries are preserved
244
- - users can import only what is intended to be public
245
- - internal code reuse is safe and consistent
246
-
247
- From the user’s perspective, the modules behave independently, while internally they share the same core implementation.
248
-
249
- ---
250
-
251
- ## Supporting a New Framework
252
-
253
- The SDK is designed so that **adding support for a new frontend framework does not require changes to the core logic**. Instead, framework support is implemented as a thin adaptation layer on top of the existing primitives.
254
-
255
- This section describes what is required to integrate a new framework.
256
-
257
- ---
258
-
259
- ### Core Principles
260
-
261
- When adding a new framework integration, the following principles must be preserved:
262
-
263
- - **Single shared SDK state**
264
- All framework integrations must share the same internal static state (backend, requests, configuration).
265
-
266
- - **Deferred recommendation resolution**
267
- Recommendation requests are created early and resolved later in a batched backend call.
268
-
269
- - **No direct backend access**
270
- Framework layers must never call backend logic directly. They rely on existing SDK functions.
271
-
272
- - **No expansion of the public API**
273
- Internal classes remain internal; the framework layer adapts behavior, not visibility.
274
-
275
- ---
276
-
277
- ### Required Building Blocks
278
-
279
- A framework integration typically needs the following pieces.
280
-
281
- #### 1. A Stable Recommendation Handle
282
-
283
- The framework must receive a value that:
284
-
285
- - can be accessed synchronously during render
286
- - is referentially stable across renders
287
- - updates automatically once data becomes available
288
-
289
- This is achieved by using the existing **proxy-based recommendation item**, which behaves as both:
290
-
291
- - a `RecommendationItem`
292
- - a `PromiseLike<RecommendationItem>`
293
-
294
- New frameworks should reuse this mechanism rather than reimplementing it.
295
-
296
- ---
297
-
298
- #### 2. Deferred Request Registration
299
-
300
- The framework layer must:
301
-
302
- - create recommendation requests using the shared request queue
303
- - avoid triggering backend requests immediately
304
- - rely on deferred resolution
305
-
306
- This ensures that:
307
-
308
- - requests can be batched
309
- - ordering is preserved
310
- - backend calls remain predictable
311
-
312
- ---
313
- #### 3. A Lifecycle Hook to Fulfill Requests
314
-
315
- Every framework must provide **one well-defined moment** where pending recommendation requests are fulfilled.
316
-
317
- This usually maps to:
318
-
319
- - an application mount hook
320
- - a root-level lifecycle event
321
- - a global effect or initialization step
322
-
323
- At this point, the framework integration must call:
324
-
325
- - `fulfillRecommendations()`
326
-
327
- This triggers the backend request and resolves all pending recommendation proxies.
328
-
329
- ---
330
-
331
- ##### How This SDK Does It
332
-
333
- In this SDK, recommendation requests are **created lazily** during component or template execution, but they are **not fulfilled immediately**.
334
-
335
- Instead:
336
-
337
- - all recommendation requests are collected in a shared queue
338
- - the framework integration defines a single initialization point
339
- - at that point, `fulfillRecommendations()` is called once
340
-
341
- For example:
342
-
343
- - in React, this is done via a small root-level initialization component
344
- - the call is placed inside a mount effect
345
- - this ensures all components have had a chance to register their requests first
346
-
347
- This approach guarantees that:
348
-
349
- - all requests are batched into a single backend call
350
- - request order is preserved
351
- - static SDK state is shared correctly
352
- - framework rendering remains predictable
353
-
354
- The same pattern can be applied to any other framework by choosing an appropriate lifecycle boundary and invoking `fulfillRecommendations()` exactly once per render cycle or application start.
355
-
356
-
357
- #### 4. Controlled Re-render or Update Trigger
358
-
359
- Once a recommendation resolves, the framework must:
360
-
361
- - trigger a re-render
362
- - or notify the framework’s change detection system
363
-
364
- How this is done depends on the framework:
365
-
366
- - React: `useEffect` + state update
367
- - Vue: reactive ref update
368
- - Svelte: store or reactive assignment
369
- - Others: equivalent lifecycle or observer mechanism
370
-
371
- The SDK itself does **not** trigger renders; this is the responsibility of the framework adapter.
372
-
373
- ---
374
-
375
- ### What You Do *Not* Need
376
-
377
- When supporting a new framework, you do **not** need to:
378
-
379
- - modify `RecoBackendV2`
380
- - modify DOM logic (`DomDomDom`, `FroomleDomTree`, `DomNode`)
381
- - introduce framework-specific logic into the core SDK
382
- - expose additional internal classes
383
-
384
- The framework layer is purely an adapter.
385
-
386
- ---
387
-
388
- ### Minimal Integration Checklist
389
-
390
- To support a new framework, you need:
391
-
392
- - a wrapper that calls `proxyReco(...)`
393
- - a place to call `fulfillRecommendations()`
394
- - a mechanism to trigger framework updates on resolution
395
- - no changes to core SDK internals
396
-
397
- If these conditions are met, the framework will integrate correctly.
398
-
399
- ---
5
+ https://docs.froomle.ai/froomle-doc-main/v2/js_lib/jslib.html
@@ -0,0 +1,5 @@
1
+ var l=class u{static global(e){return u.globals[e]?u.globals[e]:u.globals[e]={}}static createStatic(e,t,r){let i=null;Object.defineProperty(e,t,{enumerable:!0,get:function(){return r!=null&&(i=r(),r=null),i},set:function(n){r!=null&&(i=r(),r=null),i=n}})}static iterator(e){if(Array.isArray(e)){let t=e;return function(){return u.mkIter(t)}}else return typeof e.iterator=="function"?e.iterator.bind(e):e.iterator}static getIterator(e){return Array.isArray(e)?u.mkIter(e):e.iterator()}static mkIter(e){return new Ae(e)}static extend(e){function t(){this[u.new].apply(this,arguments)}return Object.setPrototypeOf(t.prototype,e.prototype),t}static inherits(e,t){t==null&&(t=!1);function r(){t&&e&&r[u.init]&&r[u.init](),this[u.new].apply(this,arguments)}return t?r[u.init]=()=>{let i=e();i[u.init]&&i[u.init](),Object.setPrototypeOf(r.prototype,i.prototype),r[u.init]=void 0}:e&&e[u.init]?(t=!0,r[u.init]=()=>{e[u.init]&&e[u.init](),Object.setPrototypeOf(r.prototype,e.prototype),r[u.init]=void 0}):e&&Object.setPrototypeOf(r.prototype,e.prototype),r}static bind(e,t){if(t==null)return null;t.__id__==null&&(t.__id__=u.fid++);let r=null;return e.hx__closures__==null?e.hx__closures__={}:r=e.hx__closures__[t.__id__],r==null&&(r=t.bind(e),e.hx__closures__[t.__id__]=r),r}static get __name__(){return"genes.Register"}get __class__(){return u}};l.$global=typeof window!="undefined"?window:typeof global!="undefined"?global:typeof self!="undefined"?self:void 0;l.globals={};l.new=Symbol();l.init=Symbol();l.fid=0;var Ae=l.global("$hxClasses")["genes._Register.ArrayIterator"]=class We extends l.inherits(){[l.new](e){this.current=0,this.array=e}hasNext(){return this.current<this.array.length}next(){return this.array[this.current++]}static get __name__(){return"genes._Register.ArrayIterator"}get __class__(){return We}};Ae.prototype.array=null;Ae.prototype.current=null;var zt=l.$global,qe=l.global("$hxClasses")["haxe.ValueException"]=class Ke extends l.inherits(()=>A,!0){[l.new](e,t,r){super[l.new](String(e),t,r),this.value=e}unwrap(){return this.value}static get __name__(){return"haxe.ValueException"}static get __super__(){return A}get __class__(){return Ke}};qe.prototype.value=null;var Xt=l.$global,A=l.global("$hxClasses")["haxe.Exception"]=class be extends l.inherits(()=>Error,!0){[l.new](e,t,r){Error.call(this,e),this.message=e,this.__previousException=t,this.__nativeException=r!=null?r:this}unwrap(){return this.__nativeException}get_native(){return this.__nativeException}static caught(e){return e instanceof be?e:e instanceof Error?new be(e.message,null,e):new qe(e,null,e)}static thrown(e){return e instanceof be?e.get_native():e instanceof Error?e:new qe(e)}static get __name__(){return"haxe.Exception"}static get __super__(){return Error}get __class__(){return be}};A.prototype.native=null;A.prototype.__skipStack=null;A.prototype.__nativeException=null;A.prototype.__previousException=null;var tr=l.$global,I=l.global("$hxClasses").Std=class Qe{static string(e){return ve.__string_rec(e,"")}static parseInt(e){let t=parseInt(e);return isNaN(t)?null:t}static random(e){return e<=0?0:Math.floor(Math.random()*e)}static get __name__(){return"Std"}get __class__(){return Qe}};Object.defineProperty(String.prototype,"__class__",{value:String,enumerable:!1,writable:!0}),String.__name__=!0,Array.__name__=!0,Et={},Ct={},qt=Number,kt=Boolean,St={},Dt={};var Et,Ct,qt,kt,St,Dt;var lr=l.$global,ve=l.global("$hxClasses")["js.Boot"]=class J{static getClass(e){if(e==null)return null;if(e instanceof Array)return Array;{let t=e.__class__;if(t!=null)return t;let r=J.__nativeClassName(e);return r!=null?J.__resolveNativeClass(r):null}}static __string_rec(e,t){if(e==null)return"null";if(t.length>=5)return"<...>";let r=typeof e;switch(r=="function"&&(e.__name__||e.__ename__)&&(r="object"),r){case"function":return"<function>";case"object":if(e.__enum__){let c=l.global("$hxEnums")[e.__enum__].__constructs__[e._hx_index],f=c._hx_name;return c.__params__?(t=t+" ",f+"("+(function(_){var g;let y=[];{let p=0,d=c.__params__;for(;p<d.length;){let R=d[p];p=p+1,y.push(J.__string_rec(e[R],t))}}return g=y,g})(this).join(",")+")"):f}if(e instanceof Array){let m="[";t+=" ";let c=0,f=e.length;for(;c<f;){let _=c++;m+=(_>0?",":"")+J.__string_rec(e[_],t)}return m+="]",m}let i;try{i=e.toString}catch{return"???"}if(i!=null&&i!=Object.toString&&typeof i=="function"){let m=e.toString();if(m!="[object Object]")return m}let n=`{
2
+ `;t+=" ";let s=e.hasOwnProperty!=null,o=null;for(o in e)s&&!e.hasOwnProperty(o)||o=="prototype"||o=="__class__"||o=="__super__"||o=="__interfaces__"||o=="__properties__"||(n.length!=2&&(n+=`,
3
+ `),n+=t+o+" : "+J.__string_rec(e[o],t));return t=t.substring(1),n+=`
4
+ `+t+"}",n;break;case"string":return e;default:return String(e)}}static __interfLoop(e,t){if(e==null)return!1;if(e==t)return!0;let r=e.__interfaces__;if(r!=null&&(e.__super__==null||e.__super__.__interfaces__!=r)){let i=0,n=r.length;for(;i<n;){let s=i++,o=r[s];if(o==t||J.__interfLoop(o,t))return!0}}return J.__interfLoop(e.__super__,t)}static __instanceof(e,t){if(t==null)return!1;switch(t){case Array:return e instanceof Array;case"$hxCoreType__Bool":return typeof e=="boolean";case"$hxCoreType__Dynamic":return e!=null;case"$hxCoreType__Float":return typeof e=="number";case"$hxCoreType__Int":return typeof e=="number"?(e|0)===e:!1;case String:return typeof e=="string";default:if(e!=null){if(typeof t=="function"){if(J.__downcastCheck(e,t))return!0}else if(typeof t=="object"&&J.__isNativeObj(t)&&e instanceof t)return!0}else return!1;return t=="$hxCoreType__Class"&&e.__name__!=null||t=="$hxCoreType__Enum"&&e.__ename__!=null?!0:e.__enum__!=null?l.global("$hxEnums")[e.__enum__]==t:!1}}static __downcastCheck(e,t){return e instanceof t?!0:t.__isInterface__?J.__interfLoop(J.getClass(e),t):!1}static __cast(e,t){if(e==null||J.__instanceof(e,t))return e;throw A.thrown("Cannot cast "+I.string(e)+" to "+I.string(t))}static __nativeClassName(e){let t=J.__toStr.call(e).slice(8,-1);return t=="Object"||t=="Function"||t=="Math"||t=="JSON"?null:t}static __isNativeObj(e){return J.__nativeClassName(e)!=null}static __resolveNativeClass(e){return l.$global[e]}static get __name__(){return"js.Boot"}get __class__(){return J}};ve.__toStr={}.toString;var cr=l.$global,Fe=l.global("$hxClasses")["js.Browser"]=class Xe{static get supported(){return this.get_supported()}static get_supported(){return typeof window!="undefined"&&typeof window.location!="undefined"?typeof window.location.protocol=="string":!1}static createXMLHttpRequest(){if(typeof XMLHttpRequest!="undefined")return new XMLHttpRequest;if(typeof ActiveXObject!="undefined")return new"ActiveXObject"("Microsoft.XMLHTTP");throw A.thrown("Unable to create XMLHttpRequest object.")}static get __name__(){return"js.Browser"}get __class__(){return Xe}};var gr=l.$global,ee=l.global("$hxEnums")["haxe.io.Error"]={__ename__:"haxe.io.Error",Blocked:{_hx_name:"Blocked",_hx_index:0,__enum__:"haxe.io.Error"},Overflow:{_hx_name:"Overflow",_hx_index:1,__enum__:"haxe.io.Error"},OutsideBounds:{_hx_name:"OutsideBounds",_hx_index:2,__enum__:"haxe.io.Error"},Custom:Object.assign(u=>({_hx_index:3,__enum__:"haxe.io.Error",e:u}),{_hx_name:"Custom",__params__:["e"]})};ee.__constructs__=[ee.Blocked,ee.Overflow,ee.OutsideBounds,ee.Custom];ee.__empty_constructs__=[ee.Blocked,ee.Overflow,ee.OutsideBounds];var pr=l.$global,re=l.global("$hxEnums")["haxe.io.Encoding"]={__ename__:"haxe.io.Encoding",UTF8:{_hx_name:"UTF8",_hx_index:0,__enum__:"haxe.io.Encoding"},RawNative:{_hx_name:"RawNative",_hx_index:1,__enum__:"haxe.io.Encoding"}};re.__constructs__=[re.UTF8,re.RawNative];re.__empty_constructs__=[re.UTF8,re.RawNative];var xr=l.$global,fe=l.global("$hxClasses")["haxe.io.Bytes"]=class $e extends l.inherits(){[l.new](e){this.length=e.byteLength,this.b=new Uint8Array(e),this.b.bufferValue=e,e.hxBytes=this,e.bytes=this.b}getString(e,t,r){if(e<0||t<0||e+t>this.length)throw A.thrown(ee.OutsideBounds);r==null&&(r=re.UTF8);let i="",n=this.b,s=e,o=e+t;switch(r._hx_index){case 0:let m=e>0;for(;s<o;){let c=n[s++];if(c<128){if(c==0)break;i+=String.fromCodePoint(c)}else if(c<224){let f=(c&63)<<6|n[s++]&127;i+=String.fromCodePoint(f)}else if(c<240){let f=n[s++],_=(c&31)<<12|(f&127)<<6|n[s++]&127;i+=String.fromCodePoint(_)}else{let f=n[s++],_=n[s++],g=(c&15)<<18|(f&127)<<12|(_&127)<<6|n[s++]&127;i+=String.fromCodePoint(g)}}break;case 1:for(;s<o;){let c=n[s++]|n[s++]<<8;i+=String.fromCodePoint(c)}break}return i}static ofData(e){let t=e.hxBytes;return t!=null?t:new $e(e)}static get __name__(){return"haxe.io.Bytes"}get __class__(){return $e}};fe.prototype.length=null;fe.prototype.b=null;var Cr=l.$global,te=l.global("$hxClasses")["haxe.http.HttpBase"]=class Ye extends l.inherits(){[l.new](e){this.url=e,this.headers=[],this.params=[],this.emptyOnData=l.bind(this,this.onData)}get responseData(){return this.get_responseData()}setHeader(e,t){let r=0,i=this.headers.length;for(;r<i;){let n=r++;if(this.headers[n].name==e){this.headers[n]={name:e,value:t};return}}this.headers.push({name:e,value:t})}setPostData(e){this.postData=e,this.postBytes=null}onData(e){}onBytes(e){}onError(e){}onStatus(e){}hasOnData(){return l.bind(this,this.onData)!=this.emptyOnData}success(e){this.responseBytes=e,this.responseAsString=null,this.hasOnData()&&this.onData(this.get_responseData()),this.onBytes(this.responseBytes)}get_responseData(){return this.responseAsString==null&&this.responseBytes!=null&&(this.responseAsString=this.responseBytes.getString(0,this.responseBytes.length,re.UTF8)),this.responseAsString}static get __name__(){return"haxe.http.HttpBase"}get __class__(){return Ye}};te.prototype.url=null;te.prototype.responseBytes=null;te.prototype.responseAsString=null;te.prototype.postData=null;te.prototype.postBytes=null;te.prototype.headers=null;te.prototype.params=null;te.prototype.emptyOnData=null;var Sr=l.$global,ke=l.global("$hxClasses")["haxe.iterators.MapKeyValueIterator"]=class Ze extends l.inherits(){[l.new](e){this.map=e,this.keys=e.keys()}hasNext(){return this.keys.hasNext()}next(){let e=this.keys.next();return{value:this.map.get(e),key:e}}static get __name__(){return"haxe.iterators.MapKeyValueIterator"}get __class__(){return Ze}};ke.prototype.map=null;ke.prototype.keys=null;var Tr=l.$global,Oe=function(){};Oe.__isInterface__=!0;var Or=l.$global,Se=l.global("$hxClasses")["genes.util.EsMap"]=class we extends l.inherits(){[l.new](){this.inst=new Map}set(e,t){this.inst.set(e,t)}get(e){return this.inst.get(e)}remove(e){return this.inst.delete(e)}exists(e){return this.inst.has(e)}keys(){return we.adaptIterator(this.inst.keys())}iterator(){return we.adaptIterator(this.inst.values())}toString(){let e=[],t=we.adaptIterator(this.inst.keys());for(;t.hasNext();){let r=t.next();e.push(""+I.string(r)+" => "+I.string(this.inst.get(r)))}return"{"+e.join(", ")+"}"}clear(){this.inst.clear()}static adaptIterator(e){let t,r,i=function(){let n=e.next();t=n.value,r=n.done};return{hasNext:function(){return r==null&&i(),!r},next:function(){r==null&&i();let n=t;return i(),n}}}static get __name__(){return"genes.util.EsMap"}get __class__(){return we}};Se.prototype.inst=null;var Nr=l.$global,et=l.global("$hxClasses")["haxe.ds.StringMap"]=class Be extends l.inherits(Se){[l.new](){super[l.new]()}copy(){let e=new Be;return e.inst=new Map(this.inst),e}keyValueIterator(){return new ke(this)}static get __name__(){return"haxe.ds.StringMap"}static get __interfaces__(){return[Oe]}static get __super__(){return Se}get __class__(){return Be}};var Gr=l.$global,V=l.global("$hxClasses").HxOverrides=class tt{static cca(e,t){let r=e.charCodeAt(t);if(r==r)return r}static substr(e,t,r){if(r==null)r=e.length;else if(r<0)if(t==0)r=e.length+r;else return"";return e.substr(t,r)}static now(){return Date.now()}static get __name__(){return"HxOverrides"}get __class__(){return tt}};typeof performance!="undefined"&&typeof performance.now=="function"&&(V.now=performance.now.bind(performance));var Kr=l.$global,ue=l.global("$hxClasses").StringTools=class De{static isSpace(e,t){let r=V.cca(e,t);return r>8&&r<14?!0:r==32}static ltrim(e){let t=e.length,r=0;for(;r<t&&De.isSpace(e,r);)++r;return r>0?V.substr(e,r,t-r):e}static rtrim(e){let t=e.length,r=0;for(;r<t&&De.isSpace(e,t-r-1);)++r;return r>0?V.substr(e,0,t-r):e}static replace(e,t,r){return e.split(t).join(r)}static get __name__(){return"StringTools"}get __class__(){return De}};var Yr=l.$global,rt=l.global("$hxClasses").Lambda=class nt{static exists(e,t){let r=l.getIterator(e);for(;r.hasNext();){let i=r.next();if(t(i))return!0}return!1}static get __name__(){return"Lambda"}get __class__(){return nt}};var sn=l.$global,xe=l.global("$hxClasses").EReg=class it extends l.inherits(){[l.new](e,t){this.r=new RegExp(e,t.split("u").join(""))}match(e){return this.r.global&&(this.r.lastIndex=0),this.r.m=this.r.exec(e),this.r.s=e,this.r.m!=null}matched(e){if(this.r.m!=null&&e>=0&&e<this.r.m.length)return this.r.m[e];throw A.thrown("EReg::matched")}matchedPos(){if(this.r.m==null)throw A.thrown("No string matched");return{pos:this.r.m.index,len:this.r.m[0].length}}matchSub(e,t,r){if(r==null&&(r=-1),this.r.global){this.r.lastIndex=t,this.r.m=this.r.exec(r<0?e:V.substr(e,0,t+r));let i=this.r.m!=null;return i&&(this.r.s=e),i}else{let i=this.match(r<0?V.substr(e,t,null):V.substr(e,t,r));return i&&(this.r.s=e,this.r.m.index+=t),i}}map(e,t){let r=0,i="";do{if(r>=e.length)break;if(!this.matchSub(e,r)){i+=I.string(V.substr(e,r,null));break}let n=this.matchedPos();i+=I.string(V.substr(e,r,n.pos-r)),i+=I.string(t(this)),n.len==0?(i+=I.string(V.substr(e,n.pos,1)),r=n.pos+1):r=n.pos+n.len}while(this.r.global);return!this.r.global&&r>0&&r<e.length&&(i+=I.string(V.substr(e,r,null))),i}static get __name__(){return"EReg"}get __class__(){return it}};xe.prototype.r=null;var hn=l.$global,ce=l.global("$hxClasses")["haxe.http.HttpJs"]=class st extends l.inherits(te){[l.new](e){this.async=!0,this.withCredentials=!1,super[l.new](e)}request(e){this.responseAsString=null,this.responseBytes=null,this.responseHeaders=null;let t=this.req=Fe.createXMLHttpRequest(),r=this,i=function(f){if(t.readyState!=4)return;let _;try{_=t.status}catch{_=null}if(_==0&&Fe.get_supported()&&l.$global.location!=null){let g=l.$global.location.protocol.toLowerCase();new xe("^(?:about|app|app-storage|.+-extension|file|res|widget):$","").match(g)&&(_=t.response!=null?200:404)}if(_==null&&(_=null),_!=null&&r.onStatus(_),_!=null&&_>=200&&_<400){r.req=null;let g=t.getAllResponseHeaders().split(`\r
5
+ `),y=[],p=0,d=g;for(;p<d.length;){let b=d[p];++p,b!=""&&y.push(b)}g=y;let R=new et;r.responseHeaders=R;let C=0;for(;C<g.length;){let b=g[C];++C;let x=b.split(": "),P=x.shift(),S=x.length==1?x[0]:x.join(": ");S=ue.ltrim(ue.rtrim(S)),r.responseHeaders.inst.set(P,S)}r.success(fe.ofData(t.response))}else if(_==null||_==0&&t.response==null)r.req=null,r.onError("Failed to connect or resolve host");else if(_==null){r.req=null;let g=t.response!=null?fe.ofData(t.response):null;r.responseBytes=g,r.onError("Http Error #"+t.status)}else switch(_){case 12007:r.req=null,r.onError("Unknown host");break;case 12029:r.req=null,r.onError("Failed to connect to host");break;default:r.req=null;let g=t.response!=null?fe.ofData(t.response):null;r.responseBytes=g,r.onError("Http Error #"+t.status)}};this.async&&(t.onreadystatechange=i);let n,s=this.postData,o=this.postBytes;if(s==null)if(o==null)n=null;else{let f=o;n=new Blob([f.b.bufferValue])}else o==null?n=s:n=null;if(n!=null)e=!0;else{let f=0,_=this.params;for(;f<_.length;){let g=_[f];++f,n==null?n="":n=(n==null?"null":I.string(n))+"&";let y=g.name,p=(n==null?"null":I.string(n))+encodeURIComponent(y)+"=",d=g.value;n=p+encodeURIComponent(d)}}try{if(e)t.open("POST",this.url,this.async);else if(n!=null){let f=this.url.split("?").length<=1;t.open("GET",this.url+(f?"?":"&")+(n==null?"null":I.string(n)),this.async),n=null}else t.open("GET",this.url,this.async);t.responseType="arraybuffer"}catch(f){let _=A.caught(f).unwrap();this.req=null,this.onError(_.toString());return}t.withCredentials=this.withCredentials,!rt.exists(this.headers,function(f){return f.name=="Content-Type"})&&e&&this.postData==null&&t.setRequestHeader("Content-Type","application/x-www-form-urlencoded");let m=0,c=this.headers;for(;m<c.length;){let f=c[m];++m,t.setRequestHeader(f.name,f.value)}t.send(n),this.async||i(null)}static get __name__(){return"haxe.http.HttpJs"}static get __super__(){return te}get __class__(){return st}};ce.prototype.async=null;ce.prototype.withCredentials=null;ce.prototype.responseHeaders=null;ce.prototype.req=null;var vn=l.$global,He=l.global("$hxClasses").Type=class lt{static createInstance(e,t){let r=Function.prototype.bind.apply(e,[null].concat(t));return new r}static get __name__(){return"Type"}get __class__(){return lt}};var Rn=l.$global,E=l.global("$hxClasses").Reflect=class ot{static field(e,t){try{return e[t]}catch{return null}}static getProperty(e,t){let r;if(e==null)return null;{let i;return e.__properties__?(r=e.__properties__["get_"+t],i=r):i=!1,i?e[r]():e[t]}}static setProperty(e,t,r){let i,n;e.__properties__?(i=e.__properties__["set_"+t],n=i):n=!1,n?e[i](r):e[t]=r}static fields(e){let t=[];if(e!=null){let i=Object.prototype.hasOwnProperty;for(var r in e)r!="__id__"&&r!="hx__closures__"&&i.call(e,r)&&t.push(r)}return t}static compare(e,t){return e==t?0:e>t?1:-1}static get __name__(){return"Reflect"}get __class__(){return ot}};var Pn=l.$global,je=l.global("$hxClasses")["internal.http.FetchHttp"]=class at extends l.inherits(ce){[l.new](e){this.responseStatus=0,super[l.new](e)}request(e){let t=l.$global,r=t.fetch,i=t.Headers,n=t.URLSearchParams;if(r==null){this.onError("Fetch API not found.");return}let s=He.createInstance(i,[]),o=0,m=this.headers;for(;o<m.length;){let d=m[o];++o,s.append(d.name,d.value)}let c=e?"POST":"GET",f=null;if(e)if(this.postData!=null)f=this.postData;else{f=He.createInstance(n,[]);let d=0,R=this.params;for(;d<R.length;){let C=R[d];++d,f.append(C.name,C.value)}}let _={method:c,headers:s,body:f},g=this,y=r(this.url,_).then(function(d){if(g.responseStatus=d.status,g.onStatus(d.status),d.ok)return d.text();throw A.thrown("HTTP Error: "+I.string(d.status))}).then(function(d){g.onData(d)}),p=E.field(y,"catch");p!=null&&p.apply(y,[function(d){g.onError(I.string(d))}])}static get __name__(){return"internal.http.FetchHttp"}static get __super__(){return ce}get __class__(){return at}};je.prototype.responseStatus=null;var $n=l.$global,Ue=l.global("$hxClasses")["internal.data.UUID"]=class ut{static randomHexChar(){return"0123456789abcdef".charAt(I.random(16))}static v4(){let e="",t=0;for(;t<36;)switch(t++){case 14:e+="4";break;case 19:e+=I.string("0123456789abcdef".charAt(8+I.random(4)));break;case 8:case 13:case 18:case 23:e+="-";break;default:e+=I.string("0123456789abcdef".charAt(I.random(16)))}return e}static get __name__(){return"internal.data.UUID"}get __class__(){return ut}};Ue.HEX="0123456789abcdef";var Hn=l.$global,ge=function(){};ge.__isInterface__=!0;var de=function(){};de.__isInterface__=!0;var _e=function(){};_e.__isInterface__=!0;var Wn=l.$global,a=l.global("$hxClasses")["internal.RecoBackendV2"]=class v extends l.inherits(){[l.new](){}static _requestUri(){return(v._safe_request?"https://":"http://")+v._req_domain+"/api/"+v._environment+"/recommendations/requests"}static noConsentBody(){return{device_id:"no-consent",user_group:"no-consent",version:"no-consent"}}static buildRequestBody(e){let t={lists:e,page_type:v._page_visit,channel:v._channel};if(v._consent>=2&&v._history.length>0&&(t.histories=v._buildHistories()),v._consent<2){let o=v.noConsentBody(),m=0,c=E.fields(o);for(;m<c.length;){let f=c[m];++m,t[f]=E.field(o,f)}}else v._user_id!=null&&(t.user_id=v._user_id),t.device_id=v._device_id;let r=0,i=v._others;for(;r<i.length;){let o=i[r];++r,t[o.key]=o.value}let n=E.field(t,"context_item"),s=E.field(t,"context_item_type");return n!=null&&I.string(n)!=""&&(s==null||I.string(s)=="")&&(t.context_item_type="article"),t}static _buildHistories(){return{pageviews:v._history}}static requestsToLists(e){let t=[],r="",i=[],n=0,s=[],o=function(g,y,p){r=g,i=y,n=0,s=p},m=function(g){let y=[];if(g==null)return y;let p=0;for(;p<g.length;){let d=g[p];++p,!(d==null||d.key==null||d.key=="")&&y.push({key:d.key,value:d.value})}return y},c=function(g,y){if(g==null&&y==null)return!0;if(g==null||y==null||g.length!=y.length)return!1;let p=new Array(g.length),d=0,R=g.length;for(;d<R;){let D=d++;p[D]=JSON.stringify(g[D])}let C=p,b=new Array(y.length),x=0,P=y.length;for(;x<P;){let D=x++;b[D]=JSON.stringify(y[D])}let S=b;C.sort(E.compare),S.sort(E.compare);let M=0,j=C.length;for(;M<j;){let D=M++;if(C[D]!=S[D])return!1}return!0},f=function(){let g={limit:n,list_name:r,list_size:n},y=0;for(;y<i.length;){let d=i[y];++y;let R=d.value;R instanceof Array||(R=[R]),g[d.key]=R}let p=0;for(;p<s.length;){let d=s[p];++p,g[d.key]=d.value}t.push(g)},_=0;for(;_<e.length;){let g=e[_];++_;let y=m(g.filters),p=g.others!=null?g.others:[];if(r==""){o(g.list,y,p),n+=1;continue}else(r!=g.list||!c(i,y)||!c(s,p))&&(f(),o(g.list,y,p));n+=1}return n!=0&&f(),t}static _requestRecos(e){let t=null,r=null,i=new Promise(function(p,d){t=p,r=d}),n=i;n._resolve=t,n._reject=r,n._isFinished=!1,n._result=null,n._error=null;let s=i,o=!1,m=new je(v._requestUri());m.setHeader("Content-Type","application/json");let c=v.buildRequestBody(e),f=JSON.stringify(c);m.setPostData(f);let _=function(p){if(o)return;o=!0;let d=s;d._isFinished||(d._error=p,d._isFinished=!0,d._reject(p))};m.onError=function(p){_("HTTP Request Error: "+p)},m.onStatus=function(p){(p<200||p>=300)&&_("HTTP Status Error: "+p)};try{m.request(!0)}catch(p){let d=A.caught(p).unwrap();return _("Failed to execute recommendation request: "+I.string(d)),s}let g=function(p){if(!o)try{let d=JSON.parse(p),R=pe.fromRequestData(d);o=!0;let C=s;C._isFinished||(C._result=R,C._error=null,C._isFinished=!0,C._resolve(R))}catch(d){let R=A.caught(d).unwrap();_("Failed to parse recommendation response: "+I.string(R))}},y=m.get_responseData();return y!=null?g(y):o||(m.onData=g),s}static getOrder(e,t,r){let i={list_name:e,limit:r.length,list_size:r.length},n={};E.setProperty(n,t,r),E.setProperty(i,"order",n);let s=null,o=null,m=new Promise(function(g,y){s=g,o=y}),c=m;c._resolve=s,c._reject=o,c._isFinished=!1,c._result=null,c._error=null;let f=m,_;return v.getRawRecommendations([i]).then(function(g){try{let y=[],p=g.lists();if(p!=null&&p.length>0){let R=p[0].items;if(R instanceof Array){let C=0,b=R;for(;C<b.length;){let x=b[C];++C;let P=x.get("categories");P!=null&&y.push(P)}}}let d=f;d._isFinished||(d._result=y,d._error=null,d._isFinished=!0,d._resolve(y))}catch(y){let p=A.caught(y).unwrap(),d="Failed to build order response: "+I.string(p),R=f;R._isFinished||(R._error=d,R._isFinished=!0,R._reject(d))}},function(g){let y=f;y._isFinished||(y._error=g,y._isFinished=!0,y._reject(g))}),f}static getRawRecommendations(e){return v._requestRecos(e)}static addHistories(e,t){if(t==null&&(t="article"),e==null||e.length==0)return;let r=t!=null&&t!=""?t:"article",i=0;for(;i<e.length;){let n=e[i];if(++i,typeof n=="string"){let _=I.string(n);_!=""&&v._history.push({id:_,item_type:r});continue}let s=n,o=E.field(s,"id");if(o==null)continue;let m=I.string(o);if(m=="")continue;let c=E.field(s,"item_type");(c==null||I.string(c)=="")&&(c=E.field(s,"itemType"));let f=c!=null&&I.string(c)!=""?I.string(c):r;v._history.push({id:m,item_type:f})}}static setOthers(e,t){let r=0,i=v._others;for(;r<i.length;){let n=i[r];if(++r,n.key==e){n.value=t;return}}v._others.push({key:e,value:t})}static setConsent(e){e>2&&(e=2),v._consent=e,e==2&&v.getDeviceId()=="no-consent"&&v.setDeviceId(Ue.v4())}static setChannel(e){v._channel=e}static setPageVisit(e){v._page_visit=e}static setEnvironment(e){v._environment=e}static setDeviceId(e){v._device_id=e}static setUserId(e){v._user_id=e}static setRequestDomain(e){v._req_domain=e}static setSafeRequest(e){v._safe_request=e}static setContextItem(e){v.setOthers("context_item",e)}static setContextItemType(e){v.setOthers("context_item_type",e)}static getRequestDomain(){return v._req_domain}static getSafeRequest(){return v._safe_request}static getEnvironment(){return v._environment}static getPageVisit(){return v._page_visit}static getUserId(){return v._user_id}static getDeviceId(){return v._device_id}static getConsent(){return v._consent}static getChannel(){return v._channel}static getOthers(e){let t=0,r=v._others;for(;t<r.length;){let i=r[t];if(++t,e==i.key)return i.value}return null}static getContextItem(){return v.getOthers("context_item")}static getContextItemType(){return v.getOthers("context_item_type")}static get __name__(){return"internal.RecoBackendV2"}get __class__(){return v}};a._environment=null;a._device_id="no-consent";a._user_id=null;a._consent=0;a._req_domain="europe-west1.froomle.com";a._page_visit=null;a._channel="www-desktop";a._safe_request=!0;a._history=[];a._others=[];var pe=l.global("$hxClasses")["internal._RecommendationsInternal"]=class Le extends l.inherits(){[l.new](e,t,r,i,n){this.request_id=t,this.user_group=r,this.device_id=e,this.user_id=i,this._lists=n}items(){let e=[],t=0,r=this._lists;for(;t<r.length;){let i=r[t];++t;let n=0,s=i.items;for(;n<s.length;){let o=s[n];++n,e.push(o)}}return e}lists(){return this._lists}getItemsByListName(e){let t=0,r=this._lists;for(;t<r.length;){let i=r[t];if(++t,i.list_name==e)return i}return null}toJson(){let e={request_id:this.request_id,user_group:this.user_group,user_id:this.user_id,device_id:this.device_id,lists:[]},t=0,r=this._lists;for(;t<r.length;){let i=r[t];++t;let n={limit:i.limit,list_key:i.list_key,list_name:i.list_name,list_size:i.list_size,items:[]},s=0,o=i.items;for(;s<o.length;){let m=o[s];++s,n.items.push(ve.__cast(m,ne).getData())}e.lists.push(n)}return JSON.stringify(e)}static fromRequestData(e){let t=E.getProperty(e,"lists"),r=[],i=0;for(;i<t.length;){let n=t[i];++i;let s=E.getProperty(n,"items"),o=[],m=0;for(;m<s.length;){let f=s[m];++m,E.setProperty(f,"request_id",E.getProperty(e,"request_id")),E.setProperty(f,"user_group",E.getProperty(e,"user_group")),o.push(new ne(f))}let c=new me({limit:E.getProperty(n,"limit"),list_key:E.getProperty(n,"list_key"),list_name:E.getProperty(n,"list_name"),list_size:E.getProperty(n,"list_size"),items:o,request_id:E.getProperty(e,"request_id")});r.push(c)}return new Le(E.getProperty(e,"device_id"),E.getProperty(e,"request_id"),E.getProperty(e,"user_group"),E.getProperty(e,"user_id"),r)}static get __name__(){return"internal._RecommendationsInternal"}static get __interfaces__(){return[ge]}get __class__(){return Le}};pe.prototype.request_id=null;pe.prototype.user_group=null;pe.prototype.user_id=null;pe.prototype.device_id=null;pe.prototype._lists=null;var me=l.global("$hxClasses")["internal._RecommendationsListInternal"]=class ct extends l.inherits(){[l.new](e){this.items=e.items,this.limit=e.limit,this.list_key=e.list_key,this.list_name=e.list_name,this.list_size=e.list_size,this.request_id=e.request_id}static get __name__(){return"internal._RecommendationsListInternal"}static get __interfaces__(){return[de]}get __class__(){return ct}};me.prototype.limit=null;me.prototype.list_key=null;me.prototype.list_name=null;me.prototype.list_size=null;me.prototype.items=null;me.prototype.request_id=null;var ne=l.global("$hxClasses")["internal._RecommendationItemInternal"]=class mt extends l.inherits(){[l.new](e){this.Id=E.getProperty(e,"item_id"),this.RequestId=E.getProperty(e,"request_id"),this.UserGroup=E.getProperty(e,"user_group"),this._data=e}getData(){return this._data}get(e){return this._data[e]}toJson(){return JSON.stringify(this._data)}static get __name__(){return"internal._RecommendationItemInternal"}static get __interfaces__(){return[_e]}get __class__(){return mt}};ne.prototype.Id=null;ne.prototype.RequestId=null;ne.prototype.UserGroup=null;ne.prototype._data=null;var Xn=l.$global,Ne=function(){};Ne.__isInterface__=!0;var ti=l.$global,Re=l.global("$hxClasses")["internal.js.JSFroomleDomTree"]=class Pe extends l.inherits(){[l.new](){}getRoot(){return this.root}createElement(e){return this.root.ownerDocument.createElement(e)}toString(){return this.root.ownerDocument.documentElement.outerHTML}static fromHTML(e){let r=new DOMParser().parseFromString(e,"text/html"),i=new Pe;return i.root=r.documentElement,i}static fromDocument(e){let t=new Pe;return t.root=e.documentElement,t}static get __name__(){return"internal.js.JSFroomleDomTree"}static get __interfaces__(){return[Ne]}get __class__(){return Pe}};Re.prototype.root=null;var mi=l.$global,ae=l.global("$hxClasses")["internal.domHandler.DomDomDom"]=class ie extends l.inherits(){[l.new](){}static _fillRecoTargets(e){let t=null,r=null,i=new Promise(function(h,w){t=h,r=w}),n=i;n._resolve=t,n._reject=r,n._isFinished=!1,n._result=null,n._error=null;let s=i;if(e==null){let h=s;return h._isFinished||(h._result=!1,h._error=null,h._isFinished=!0,h._resolve(!1)),s}let o=[],m=new Array,c=e.querySelectorAll("*"),f=0,_=c.length;for(;f<_;){let h=f++,w=c.item(h);w instanceof HTMLElement&&m.push(w)}let g=m;g.push(e);let y=0;for(;y<g.length;){let h=g[y];++y;let w=0,k=new Array,q=0,T=h.attributes;for(;q<T.length;){let U=T[q];++q,k.push({name:U.name,value:U.value})}let $=k;for(;w<$.length;){let U=$[w];++w,U.name=="data-froomle-reco"&&o.push(h)}}let p=[],d=0;for(;d<o.length;){let h=o[d];++d;let w=h.getAttribute("data-froomle-request-id"),k=h.getAttribute("data-froomle-id"),q=w!=null&&w!="",T=k!=null&&k!="";!q&&!T&&p.push(h)}if(p.length<1){let h=null,w=null,k=new Promise(function(T,$){h=T,w=$}),q=k;return q._resolve=h,q._reject=w,q._isFinished=!1,q._result=null,q._error=null,k}let R=[],C=[],b="",x=[],P=[],S=[],M=function(h,w){if(h.length!=w.length)return!1;let k=new Array(h.length),q=0,T=h.length;for(;q<T;){let O=q++;k[O]=JSON.stringify(h[O])}let $=k,U=new Array(w.length),z=0,X=w.length;for(;z<X;){let O=z++;U[O]=JSON.stringify(w[O])}let Q=U;$.sort(E.compare),Q.sort(E.compare);let W=0,G=$.length;for(;W<G;){let O=W++;if($[O]!=Q[O])return!1}return!0},j=function(){let h={list_name:b,list_size:P.length,limit:P.length},w=0;for(;w<x.length;){let q=x[w];if(++w,q!=null&&q.key!=null&&q.key!=""){let T=q.value;T instanceof Array||(T=[T]),E.setProperty(h,q.key,T)}}let k=0;for(;k<S.length;){let q=S[k];++k,E.setProperty(h,q.key,q.value)}R.push(h),C.push(P)},D=function(h,w,k,q){b=h,x=w,P=[q],S=k},K=0;for(;K<p.length;){let h=p[K];++K;let w=function(U){let z=[],X=0,Q=new Array,W=0,G=U.attributes;for(;W<G.length;){let L=G[W];++W,Q.push({name:L.name,value:L.value})}let O=Q;for(;X<O.length;){let L=O[X];if(++X,L.name.startsWith("data-froomle-reco-filter-")){let Z=V.substr(L.name,25,null),le=L.value;z.push({key:Z,value:le})}}return z},k=function(U){let z=[],X=0,Q=new Array,W=0,G=U.attributes;for(;W<G.length;){let L=G[W];++W,Q.push({name:L.name,value:L.value})}let O=Q;for(;X<O.length;){let L=O[X];if(++X,L.name.startsWith("data-froomle-variable-")){let Z=V.substr(L.name,22,null),le=L.value;z.push({key:Z,value:le})}}return z},q=h.getAttribute("data-froomle-reco"),T=w(h),$=k(h);if(b==""){D(q,T,$,h);continue}else if(q==b&&M(x,T)&&M(S,$)){P.push(h);continue}else{j(),D(q,T,$,h);continue}}b!=""&&j();let F;if(a.getPageVisit()==null){let h=s;return h._isFinished||(h._result=!1,h._error=null,h._isFinished=!0,h._resolve(!1)),s}else if(a.getEnvironment()==null){let h=s;return h._isFinished||(h._result=!1,h._error=null,h._isFinished=!0,h._resolve(!1)),s}else try{F=a.getRawRecommendations(R)}catch{let w=s;return w._isFinished||(w._result=!1,w._error=null,w._isFinished=!0,w._resolve(!1)),s}return F.then(function(h){let w=h.lists(),k=w.length,q=0,T=k;for(;q<T;){let U=q++,z=w[U],X=z.items.length!=C[U].length,Q=z.items.length,W=0,G=Q;for(;W<G;){let O=W++,L=z.items[O],Z=C[U][O];ie._fillParameters(Z,L,h.request_id)}}let $=s;$._isFinished||($._result=!0,$._error=null,$._isFinished=!0,$._resolve(!0))}),s}static getAttrByPath(e,t,r){r==null&&(r="fgh");try{t=new xe("\\\\[(\\\\w+)\\\\]","g").map(t,function(c){return"."+c.matched(1)}),t=ue.replace(t,"[","."),t=ue.replace(t,"]",""),V.cca(t,0)==46&&(t=V.substr(t,1,null));let n=t.split("."),s=e.get(n[0]),o=1,m=n.length;for(;o<m;){let c=o++;if(s==null)return null;s instanceof Array&&I.parseInt(n[c])!=null?s=s[I.parseInt(n[c])]:s=E.field(s,n[c])}return s}catch{return r}}static _buildHistories(e){let t=[],r=new Array,i=e.querySelectorAll("[data-froomle-id]"),n=0,s=i.length;for(;n<s;){let c=n++,f=i.item(c);f instanceof HTMLElement&&r.push(f)}let o=r,m=0;for(;m<o.length;){let c=o[m];++m,t.push(c.getAttribute("data-froomle-id"))}a.addHistories(t)}static fillParam(e,t,r,i,n){n==null&&(n="");try{let s=ie.getAttrByPath(i,r,n);if(t=="inner"){e.textContent=s;let o=e.textContent}else e.setAttribute(t,s)}catch{}}static _fillParameters(e,t,r){e.setAttribute("data-froomle-id",t.get("item_id")),e.setAttribute("data-froomle-request-id",r);let i=t.get("item_type");i!=null&&I.string(i)!=""&&e.setAttribute("data-froomle-item-type",I.string(i)),t.UserGroup!=null&&t.UserGroup!=""&&e.setAttribute("data-froomle-user-group",t.UserGroup);let n=new Array,s=e.querySelectorAll("*"),o=0,m=s.length;for(;o<m;){let _=o++,g=s.item(_);g instanceof HTMLElement&&n.push(g)}let c=n,f=0;for(;f<c.length;){let _=c[f];++f;let g=0,y=new Array,p=0,d=_.attributes;for(;p<d.length;){let C=d[p];++p,y.push({name:C.name,value:C.value})}let R=y;for(;g<R.length;){let C=R[g];if(++g,C.name.startsWith("data-froomle-param-")){let b=ue.replace(C.name,"data-froomle-param-",""),x=C.value;ie.fillParam(_,b,x,t)}}}}static _orderElements(e){let t=function(b,x,P){let S=[],M=new Array,j=0,D=b.childNodes;for(;j<D.length;){let k=D[j];++j,M.push(k)}let K=M,F=0;for(;F<K.length;){let k=K[F];++F;try{if(k.getAttribute("data-froomle-ordervalue")!=null){S.push(k);let T=e.createElement("span");T.setAttribute("data-froomle-tmp-node","tmp"),b.replaceChild(T,k)}}catch{}}let h=[],w=0;for(;w<S.length;){let k=S[w];++w,h.push(k.getAttribute("data-froomle-ordervalue"))}return{el:b,key:x,values:h,orderChildren:S,list_name:P}},r=null,i=null,n=new Promise(function(b,x){r=b,i=x}),s=n;s._resolve=r,s._reject=i,s._isFinished=!1,s._result=null,s._error=null;let o=n,m=e.getRoot(),c=new Array,f=m.querySelectorAll("*"),_=0,g=f.length;for(;_<g;){let b=_++,x=f.item(b);x instanceof HTMLElement&&c.push(x)}let y=c,p=[],d=0;for(;d<y.length;){let b=y[d];++d;let x=0,P=new Array,S=0,M=b.attributes;for(;S<M.length;){let D=M[S];++S,P.push({name:D.name,value:D.value})}let j=P;for(;x<j.length;){let D=j[x];++x,D.name.startsWith("data-froomle-order-")&&p.push(t(b,D.name.substring(19),D.value))}}if(p.length<1){let b=o;return b._isFinished||(b._result=!1,b._error=null,b._isFinished=!0,b._resolve(!1)),o}let R=[],C=0;for(;C<p.length;){let b=p[C];++C;let x={list_name:b.list_name,limit:b.values.length,list_size:b.values.length},P={};E.setProperty(P,b.key,b.values),E.setProperty(x,"order",P),R.push(x)}if(a.getPageVisit()==null){let b=o;return b._isFinished||(b._result=!1,b._error=null,b._isFinished=!0,b._resolve(!1)),o}else if(a.getEnvironment()==null){let b=o;return b._isFinished||(b._result=!1,b._error=null,b._isFinished=!0,b._resolve(!1)),o}try{a.getRawRecommendations(R).then(function(b){let x=b.lists(),P=x.length,S=0,M=P;for(;S<M;){let D=S++,K=x[D],F=p[D];F.el.setAttribute("data-froomle-request-id",b.request_id);let h=new Array,w=0,k=K.items;for(;w<k.length;){let G=k[w];++w;let O=G.get(F.key),L=G.get(F.key),Z=F.values.length,le=0,he=Z;for(;le<he;){let oe=le++,ye=F.values[oe];if(O==ye){let Vt=F.orderChildren.length,It=F.orderChildren[oe];h.push(It),F.orderChildren.splice(oe,1),F.values.splice(oe,1);break}}}let q=h.length,T=F.el,$=new Array,U=0,z=T.childNodes;for(;U<z.length;){let G=z[U];++U,$.push(G)}let X=$.length,Q=0,W=X;for(;Q<W;){let G=Q++,O=F.el,L=new Array,Z=0,le=O.childNodes;for(;Z<le.length;){let ye=le[Z];++Z,L.push(ye)}let he=L[G],oe;if(he instanceof HTMLElement?oe=he.hasAttribute("data-froomle-tmp-node"):oe=!1,oe){F.el.replaceChild(h[0],he),h.splice(0,1);let ye=h.length;if(h.length==0)break}}}let j=o;j._isFinished||(j._result=!0,j._error=null,j._isFinished=!0,j._resolve(!0))})}catch{let x=o;x._isFinished||(x._result=!1,x._error=null,x._isFinished=!0,x._resolve(!1))}return o}static domInit(e){let t=null,r=null,i=new Promise(function(o,m){t=o,r=m}),n=i;n._resolve=t,n._reject=r,n._isFinished=!1,n._result=null,n._error=null;let s=i;return ie._orderElements(e).then(function(o){ie._buildHistories(e.getRoot()),ie._fillRecoTargets(e.getRoot()).then(function(m){let c=s;c._isFinished||(c._result=!0,c._error=null,c._isFinished=!0,c._resolve(!0))})}),s}static fillElementRecos(e){ie._fillRecoTargets(e)}static runFromHtml(e){if(e=="")return"";let t;try{let i=new DOMParser().parseFromString(e,"text/html"),n=new Re;n.root=i.documentElement,t=n}catch{return e}return ie.domInit(t),t.toString()}static get __name__(){return"internal.domHandler.DomDomDom"}get __class__(){return ie}};var pi=l.$global,N=l.global("$hxClasses").FroomleSdk=class se{static register(){se.registered||se._env_set&&se._page_visit_set&&(se.registered=!0)}static buildScriptTag(){let e='<script src="https://cdn.jsdelivr.net/npm/@froomle/frontend-sdk@0.0.11/dist/froomle.global.js" data-froomle-env="'+a.getEnvironment()+'" ',t=a.getPageVisit();t!=null&&(e+='data-froomle-page-visit="'+t+'" ');let r=a.getContextItem();if(r!=null){e+='data-froomle-context-item="'+r+'" ';let c=a.getContextItemType();(c==null||c=="")&&(c="article"),e+='data-froomle-context-item-type="'+c+'" '}let i=a.getDeviceId();i!=null&&(e+='data-froomle-device-id="'+i+'" ');let n=a.getUserId();n!=null&&(e+='data-froomle-user-id="'+n+'" ');let s=a.getConsent();s>0&&(e+='data-froomle-consent="'+s+'" ');let o=a.getRequestDomain();o!=null&&(e+='data-froomle-request-domain="'+o+'" ');let m=a.getChannel();return m!=null&&(e+='data-froomle-channel="'+m+'" '),e+="></script>",e}static setEnvironment(e){a.setEnvironment(e),se._env_set=!0,se.register()}static setDeviceId(e){a.setDeviceId(e)}static setUserId(e){a.setUserId(e)}static setConsent(e){a.setConsent(e)}static setPageVisit(e){a.setPageVisit(e),se._page_visit_set=!0,se.register()}static setChannel(e){a.setChannel(e)}static setRequestDomain(e){a.setRequestDomain(e)}static setSafeRequest(e){a.setSafeRequest(e)}static setContextItem(e){a.setContextItem(e)}static setContextItemType(e){a.setContextItemType(e)}static setCustomVariable(e,t){a.setOthers(e,t)}static getUserId(){return a.getUserId()}static getDeviceId(){return a.getDeviceId()}static getEnvironment(){return a.getEnvironment()}static getSafeRequest(){return a.getSafeRequest()}static getPageVisit(){return a.getPageVisit()}static getConsent(){return a.getConsent()}static getRecommendations(e){return a.getRawRecommendations(e)}static getChannel(){return a.getChannel()}static getVersion(){return"0.0.11"}static runFromHtml(e){return ae.runFromHtml(e)}static get __name__(){return"FroomleSdk"}get __class__(){return se}};N._env_set=!1;N._page_visit_set=!1;N.registered=!1;var bi=l.$global;function ft(){return(a.getSafeRequest()?"https://":"http://")+a.getRequestDomain()+"/api/"+a.getEnvironment()+"/events"}function Te(){return a.getConsent()>=1}function gt(){return a.getConsent()<2?"no-consent":a.getDeviceId()}function dt(){let u=a.getChannel();if(u)return u}function Pt(u){let e=(u==null?void 0:u.getAttribute("data-froomle-id"))||(u==null?void 0:u.getAttribute("data-froomle-action-item"));if(e)return e}function Tt(u){let e=(u==null?void 0:u.getAttribute("data-froomle-item-type"))||(u==null?void 0:u.getAttribute("data-froomle-action-item-type"));if(e)return e}function _t(u){var r;let e=u==null?void 0:u.getAttribute("data-froomle-user-group");return e||(typeof document=="undefined"?void 0:((r=document.querySelector("[data-froomle-user-group]"))==null?void 0:r.getAttribute("data-froomle-user-group"))||void 0)}function pt(u,e,t="impression",r){if(!Te())return;let i=dt()||"www-desktop",n={event_type:t,page_type:a.getPageVisit(),action_item:u,action_item_type:e,channel:i,device_id:gt()},s=_t();if(s&&(n.user_group=s),r)for(let o in r)n[o]=r[o];try{fetch(ft(),{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify({events:[n]})})}catch{}}var B=class B{static queueIfNotPresent(e){B.impressionQueue.includes(e)||B.impressionQueue.push(e)}static generateBody(){let e=[];for(let t of B.impressionQueue){let r=Pt(t);if(!r)continue;let i=Tt(t)||"article",n=dt()||"www-desktop",s={event_type:"impression",page_type:a.getPageVisit(),action_item:r,action_item_type:i,channel:n,device_id:gt()},o=_t(t);o&&(s.user_group=o),a.getConsent()>=2&&a.getUserId()&&(s.user_id=a.getUserId());let m=t.getAttribute("data-froomle-reco"),c=t.getAttribute("data-froomle-request-id");m&&c&&(s.list_name=m,s.request_id=c),e.push(s)}return B.impressionQueue=[],JSON.stringify({events:e})}static sendImpressions(){console.log(B.impressionQueue),B.impressionQueue.length!==0&&Te()&&fetch(ft(),{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json"},body:B.generateBody()})}static getViewPortRect(){let e=window.innerWidth||document.documentElement.clientWidth,t=window.innerHeight||document.documentElement.clientHeight;return{left:0,top:0,x:0,y:0,toJSON(){},right:e,bottom:t,width:e,height:t}}static intersectsWithViewPortRect(e){let t=e.getBoundingClientRect(),r=B.getViewPortRect();return t.right>r.left&&t.left<r.right&&t.bottom>r.top&&t.top<r.bottom}static addIntersectionImpressionListener(e){B.observer.observe(e)}static processDocument(){if(Te()){console.log("\u{1F680} Processing document for impressions");for(let e of document.querySelectorAll("[data-froomle-id]"))B.intersectsWithViewPortRect(e)?B.queueIfNotPresent(e):B.addIntersectionImpressionListener(e);B.sendImpressions()}}static processElement(e){if(!Te()||!(e instanceof Element))return;let t=[];e.matches("[data-froomle-id]")&&t.push(e);for(let r of e.querySelectorAll("[data-froomle-id]"))t.push(r);if(t.length!==0){for(let r of t)B.intersectsWithViewPortRect(r)?B.queueIfNotPresent(r):B.addIntersectionImpressionListener(r);B.sendImpressions()}}};B.impressionQueue=[],B.observer=null;var Y=B;typeof document!="undefined"&&(Y.observer=new IntersectionObserver((u,e)=>{u.forEach(t=>{t.isIntersecting&&(Y.impressionQueue.push(t.target),Y.observer.unobserve(t.target))}),Y.impressionQueue.length>0&&Y.sendImpressions()}));var Ie=class u{static canTrackEvents(){return a.getConsent()>=1}static readDeviceId(){return a.getConsent()<2?"no-consent":a.getDeviceId()}static readChannel(){let e=a.getChannel();if(e)return e}static readUserGroup(){var t;return typeof document=="undefined"?void 0:((t=document.querySelector("[data-froomle-user-group]"))==null?void 0:t.getAttribute("data-froomle-user-group"))||void 0}static uri(){return(a.getSafeRequest()?"https://":"http://")+a.getRequestDomain()+"/api/"+a.getEnvironment()+"/events"}static generateBody(){let e=u.readChannel()||"www-desktop",t={event_type:"page_visit",page_type:a.getPageVisit(),channel:e,device_id:u.readDeviceId()},r=u.readUserGroup();return r&&(t.user_group=r),a.getConsent()>=2&&a.getUserId()&&(t.user_id=a.getUserId()),JSON.stringify({events:[t]})}static sendPageVisit(){a.getPageVisit()&&(a.getContextItem()||u.canTrackEvents()&&fetch(u.uri(),{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json"},body:u.generateBody()}))}};var Ee=class u{static canTrackEvents(){return a.getConsent()>=1}static readDeviceId(){return a.getConsent()<2?"no-consent":a.getDeviceId()}static readChannel(){let e=a.getChannel();if(e)return e}static readActionItemType(){let e=a.getContextItemType();if(e)return e}static readUserGroup(){var t;return typeof document=="undefined"?void 0:((t=document.querySelector("[data-froomle-user-group]"))==null?void 0:t.getAttribute("data-froomle-user-group"))||void 0}static uri(){return(a.getSafeRequest()?"https://":"http://")+a.getRequestDomain()+"/api/"+a.getEnvironment()+"/events"}static generateBody(){let e=u.readActionItemType()||"article",t=u.readChannel()||"www-desktop",r={event_type:"detail_pageview",page_type:a.getPageVisit(),action_item:a.getContextItem(),action_item_type:e,channel:t,device_id:u.readDeviceId()},i=u.readUserGroup();return i&&(r.user_group=i),a.getConsent()>=2&&a.getUserId()&&(r.user_id=a.getUserId()),JSON.stringify({events:[r]})}static sendPageView(){a.getContextItem()&&a.getPageVisit()&&u.canTrackEvents()&&fetch(u.uri(),{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json"},body:u.generateBody()})}};var H=class H{static readAttributeFromChain(e,t){let r=e;for(;r;){for(let i of t){let n=r.getAttribute(i);if(n)return n}r=r.parentElement}}static canTrackEvents(){return a.getConsent()>=1}static readDeviceId(){return a.getConsent()<2?"no-consent":a.getDeviceId()}static readChannel(){let e=a.getChannel();if(e)return e}static readActionItem(e){return H.readAttributeFromChain(e,["data-froomle-id","data-froomle-action-item"])}static readActionItemType(e){return H.readAttributeFromChain(e,["data-froomle-item-type","data-froomle-action-item-type"])}static readUserGroup(e){var i;let t=H.readAttributeFromChain(e,["data-froomle-user-group"]);return t||(typeof document=="undefined"?void 0:((i=document.querySelector("[data-froomle-user-group]"))==null?void 0:i.getAttribute("data-froomle-user-group"))||void 0)}static registerClickables(){H.listenerRegistered||(H.listenerRegistered=!0,document.addEventListener("click",e=>{if(!H.canTrackEvents())return;let t=e instanceof MouseEvent?e:null,r=e.target,i=r instanceof Element?r:r instanceof Node?r.parentElement:null;if(!i)return;let n=i.closest("a");if(!n)return;let s=n.closest("[data-froomle-id]");if(!s)return;let o=n.closest("[data-froomle-reco]"),m=(o?H.readActionItem(o):void 0)||H.readActionItem(s);if(!m)return;let c=(o?H.readActionItemType(o):void 0)||H.readActionItemType(s)||"article",f=H.readChannel()||"www-desktop",_=n instanceof HTMLAnchorElement?n.href:null,g=n.getAttribute("href"),y=typeof g=="string"&&g.trim().startsWith("#"),p=!!_&&!y&&e.cancelable&&!e.defaultPrevented&&!n.hasAttribute("download")&&(!n.target||n.target==="_self")&&!!t&&t.button===0&&!t.metaKey&&!t.ctrlKey&&!t.shiftKey&&!t.altKey,d=y&&e.cancelable&&!e.defaultPrevented;(p||d)&&e.preventDefault();let R={event_type:"click_on_recommendation",page_type:a.getPageVisit(),action_item:m,action_item_type:c,channel:f,device_id:H.readDeviceId()},C=(o?H.readUserGroup(o):void 0)||H.readUserGroup(s);C&&(R.user_group=C);let b=(o?H.readAttributeFromChain(o,["data-froomle-reco"]):void 0)||H.readAttributeFromChain(s,["data-froomle-reco"]),x=(o?H.readAttributeFromChain(o,["data-froomle-request-id"]):void 0)||H.readAttributeFromChain(s,["data-froomle-request-id"]);b&&x&&(R.list_name=b,R.request_id=x),a.getConsent()>=2&&a.getUserId()&&(R.user_id=a.getUserId());let S=(a.getSafeRequest()?"https://":"http://")+a.getRequestDomain()+"/api/"+a.getEnvironment()+"/events",M=JSON.stringify({events:[R]}),j=new Blob([M],{type:"application/json"}),D=K=>fetch(S,{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json"},body:M,...K?{keepalive:!0}:{}});if(p&&_){let K=!1,F=()=>{K||(K=!0,window.location.assign(_))},h=window.setTimeout(F,200);D(!0).catch(()=>{typeof navigator!="undefined"&&typeof navigator.sendBeacon=="function"&&navigator.sendBeacon(S,j)}).finally(()=>{window.clearTimeout(h),F()});return}D(!1).catch(()=>{typeof navigator!="undefined"&&typeof navigator.sendBeacon=="function"&&navigator.sendBeacon(S,j)})},!0))}};H.listenerRegistered=!1;var Ce=H;var At=Re,ht=N.setEnvironment,yt=N.setPageVisit,bt=N.setRequestDomain,vt=N.setSafeRequest,wt=typeof N.setChannel=="function"?N.setChannel:a.setChannel,xt=N.setContextItem,Rt=N.setContextItemType,Ft=a.addHistories;function $t(u,e){N.setCustomVariable(u,e)}function Me(u){N.setUserId(u),document.cookie=`froomle_user_id=${u}; max-age=${3600*24*365*20}; path=/; samesite=lax`}function Ge(u){N.setDeviceId(u),document.cookie=`froomle_device_id=${u}; max-age=${3600*24*365*20}; path=/; samesite=lax`}function Je(u){N.setConsent(u),document.cookie=`froomle_consent=${u}; max-age=${3600*24*365*20}; path=/; samesite=lax`,document.cookie=`froomle_device_id=${N.getDeviceId()}; max-age=${3600*24*365*20}; path=/; samesite=lax`}typeof window!="undefined"&&(window.setFroomleConsent=Je);function Ve(u){let e=document.cookie.split("; ");for(let t of e){let[r,i]=t.split("=");if(r===u)return decodeURIComponent(i)}return null}function Ot(u){return N.getRecommendations(u)}if(!globalThis.froomleInitialized&&(globalThis.froomleInitialized=!0,typeof document!="undefined")){let u=document.currentScript;if(u){let t=u.getAttribute("data-froomle-device-id"),r=u.getAttribute("data-froomle-user-id"),i=u.getAttribute("data-froomle-env"),n=u.getAttribute("data-froomle-page-visit"),s=u.getAttribute("data-froomle-request-domain"),o=u.getAttribute("data-froomle-context-item"),m=u.getAttribute("data-froomle-context-item-type"),c=u.getAttribute("data-froomle-safe-request"),f=u.getAttribute("data-froomle-channel");if(ht(i),n&&yt(n),o&&(xt(o),Rt(m||"article")),t)Ge(t);else{let _=Ve("froomle_device_id");_&&Ge(_)}if(r)Me(r);else{let _=Ve("froomle_user_id");_&&Me(_)}s&&bt(s),c&&vt(c!=="false"),f&&wt(f)}let e=Ve("froomle_consent");if(e){let t=Number(e);Number.isNaN(t)||Je(t)}document.addEventListener("DOMContentLoaded",()=>{console.log("froomle loads dom"),ae.domInit(At.fromDocument(document)).then(i=>{Ce.registerClickables(),Y.processDocument(),Ie.sendPageVisit(),Ee.sendPageView()});function t(i){return i.matches("[data-froomle-reco]")||i.querySelector("[data-froomle-reco]")!==null}new MutationObserver(i=>{for(let n of i)if(n.type==="childList"&&n.addedNodes.forEach(s=>{s instanceof Element&&(t(s)&&ae.fillElementRecos(s),Y.processElement(s))}),n.type==="attributes"&&n.target instanceof Element)if(n.attributeName==="data-froomle-reco"){let s=n.target.getAttribute("data-froomle-request-id");(!s||s==="")&&ae.fillElementRecos(n.target)}else if(n.attributeName==="data-froomle-request-id"){let s=n.target.getAttribute("data-froomle-request-id"),o=n.target.getAttribute("data-froomle-id");n.target.getAttribute("data-froomle-reco")&&(!s||s==="")&&(!o||o==="")&&ae.fillElementRecos(n.target)}else n.attributeName==="data-froomle-id"&&Y.processElement(n.target)}).observe(document.body,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["data-froomle-reco","data-froomle-request-id","data-froomle-id"]})})}function Bt(){let u,e;return{promise:new Promise((r,i)=>{u=r,e=i}),resolve:u,reject:e}}var ze=[];function Ht(){var u;return typeof document=="undefined"?"":((u=document.querySelector("[data-froomle-user-group]"))==null?void 0:u.getAttribute("data-froomle-user-group"))||""}function jt(u,e){var n;let t=u,i=((n=t==null?void 0:t.UserGroup)!=null?n:typeof(t==null?void 0:t.get)=="function"?t.get("user_group"):void 0)||e;if(i&&(t.UserGroup=i,typeof(t==null?void 0:t.getData)=="function")){let s=t.getData();s&&(!s.user_group||s.user_group==="")&&(s.user_group=i)}}async function Ut(){let u=ze.splice(0,ze.length);if(u.length!==0)try{let e=u.map(s=>s.req),t=a.requestsToLists(e),r=await a.getRawRecommendations(t),i=r.user_group||"";typeof document!="undefined"&&i&&document.documentElement.setAttribute("data-froomle-user-group",i);let n=r.lists().reduce((s,o)=>[...s,...o.items],[]);n.forEach(s=>jt(s,i)),u.forEach((s,o)=>{n[o]?s.deferred.resolve(n[o]):s.deferred.reject(new Error("No recommendation available"))})}catch(e){throw u.forEach(t=>{t.deferred.reject(e)}),e}}function Lt(u){let e,t,i={promise:new Promise((n,s)=>{e=n,t=s}),resolve:e,reject:t};return ze.push({deferred:i,req:u}),i}function Nt(u){let t=Lt(u).promise,r=Bt(),i=function(s,o){return t.then(m=>(n.completeTarget=m,s?s(m):m),m=>o?o(m):Promise.reject(m))},n=new Proxy(new ne({item_id:"",request_id:"",user_group:""}),{get(s,o,m){if(o==="then")return i;if(o==="__froomleList")return u.list;if(o==="get"){let _=Reflect.get(s,o,m);return function(...g){return _.apply(this,g)}}if(typeof o!="string")return Reflect.get(s,o,m);let c=Reflect.get(s,o,m);if(c!=null&&c!=="")return c;let f=s.get(o);return f!=null&&f!==""?f:""},set(s,o,m,c){if(o==="completeTarget"){if(Object.assign(s,m),!s.UserGroup){let f=Ht();if(f){s.UserGroup=f;let _=s.getData();_&&!_.user_group&&(_.user_group=f)}}return!0}return Reflect.set(s,o,m,c)},has(s,o){return s.get(o)!==void 0}});return n}export{ge as a,de as b,_e as c,a as d,pt as e,Y as f,Ie as g,Ee as h,Ce as i,ht as j,yt as k,bt as l,vt as m,wt as n,xt as o,Rt as p,Ft as q,$t as r,Me as s,Ge as t,Je as u,Ot as v,Ut as w,Nt as x};
@@ -1,5 +1,5 @@
1
- "use strict";var FroomleFrontendSdk=(()=>{var $e=Object.defineProperty;var Rt=Object.getOwnPropertyDescriptor;var Ct=Object.getOwnPropertyNames;var St=Object.prototype.hasOwnProperty;var kt=(a,e)=>{for(var t in e)$e(a,t,{get:e[t],enumerable:!0})},qt=(a,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of Ct(e))!St.call(a,i)&&i!==t&&$e(a,i,{get:()=>e[i],enumerable:!(r=Rt(e,i))||r.enumerable});return a};var Dt=a=>qt($e({},"__esModule",{value:!0}),a);var Ut={};kt(Ut,{FroomleDomTree:()=>dt,RecoBackendV2:()=>o,RecommendationItem:()=>fe,RecommendationList:()=>_e,Recommendations:()=>ge,_RecommendationItemInternal:()=>se,addHistories:()=>Lt,getRecommendations:()=>Nt,sendEvent:()=>pt,setChannel:()=>wt,setConsent:()=>Ge,setContextItem:()=>xt,setContextItemType:()=>It,setCustomVariable:()=>Vt,setDeviceId:()=>Je,setEnvironment:()=>ht,setPageVisit:()=>yt,setRequestDomain:()=>bt,setSafeRequest:()=>vt,setUserId:()=>Me});var s=class a{static global(e){return a.globals[e]?a.globals[e]:a.globals[e]={}}static createStatic(e,t,r){let i=null;Object.defineProperty(e,t,{enumerable:!0,get:function(){return r!=null&&(i=r(),r=null),i},set:function(n){r!=null&&(i=r(),r=null),i=n}})}static iterator(e){if(Array.isArray(e)){let t=e;return function(){return a.mkIter(t)}}else return typeof e.iterator=="function"?e.iterator.bind(e):e.iterator}static getIterator(e){return Array.isArray(e)?a.mkIter(e):e.iterator()}static mkIter(e){return new Pe(e)}static extend(e){function t(){this[a.new].apply(this,arguments)}return Object.setPrototypeOf(t.prototype,e.prototype),t}static inherits(e,t){t==null&&(t=!1);function r(){t&&e&&r[a.init]&&r[a.init](),this[a.new].apply(this,arguments)}return t?r[a.init]=()=>{let i=e();i[a.init]&&i[a.init](),Object.setPrototypeOf(r.prototype,i.prototype),r[a.init]=void 0}:e&&e[a.init]?(t=!0,r[a.init]=()=>{e[a.init]&&e[a.init](),Object.setPrototypeOf(r.prototype,e.prototype),r[a.init]=void 0}):e&&Object.setPrototypeOf(r.prototype,e.prototype),r}static bind(e,t){if(t==null)return null;t.__id__==null&&(t.__id__=a.fid++);let r=null;return e.hx__closures__==null?e.hx__closures__={}:r=e.hx__closures__[t.__id__],r==null&&(r=t.bind(e),e.hx__closures__[t.__id__]=r),r}static get __name__(){return"genes.Register"}get __class__(){return a}};s.$global=typeof window!="undefined"?window:typeof global!="undefined"?global:typeof self!="undefined"?self:void 0;s.globals={};s.new=Symbol();s.init=Symbol();s.fid=0;var Pe=s.global("$hxClasses")["genes._Register.ArrayIterator"]=class ze extends s.inherits(){[s.new](e){this.current=0,this.array=e}hasNext(){return this.current<this.array.length}next(){return this.array[this.current++]}static get __name__(){return"genes._Register.ArrayIterator"}get __class__(){return ze}};Pe.prototype.array=null;Pe.prototype.current=null;var Wt=s.$global,Ce=s.global("$hxClasses")["haxe.ValueException"]=class We extends s.inherits(()=>q,!0){[s.new](e,t,r){super[s.new](String(e),t,r),this.value=e}unwrap(){return this.value}static get __name__(){return"haxe.ValueException"}static get __super__(){return q}get __class__(){return We}};Ce.prototype.value=null;var Yt=s.$global,q=s.global("$hxClasses")["haxe.Exception"]=class ye extends s.inherits(()=>Error,!0){[s.new](e,t,r){Error.call(this,e),this.message=e,this.__previousException=t,this.__nativeException=r!=null?r:this}unwrap(){return this.__nativeException}get_native(){return this.__nativeException}static caught(e){return e instanceof ye?e:e instanceof Error?new ye(e.message,null,e):new Ce(e,null,e)}static thrown(e){return e instanceof ye?e.get_native():e instanceof Error?e:new Ce(e)}static get __name__(){return"haxe.Exception"}static get __super__(){return Error}get __class__(){return ye}};q.prototype.native=null;q.prototype.__skipStack=null;q.prototype.__nativeException=null;q.prototype.__previousException=null;var rr=s.$global,E=s.global("$hxClasses").Std=class Ke{static string(e){return be.__string_rec(e,"")}static parseInt(e){let t=parseInt(e);return isNaN(t)?null:t}static random(e){return e<=0?0:Math.floor(Math.random()*e)}static get __name__(){return"Std"}get __class__(){return Ke}};Object.defineProperty(String.prototype,"__class__",{value:String,enumerable:!1,writable:!0}),String.__name__=!0,Array.__name__=!0,At={},$t={},Pt=Number,Tt=Boolean,Ft={},Ot={};var At,$t,Pt,Tt,Ft,Ot;var or=s.$global,be=s.global("$hxClasses")["js.Boot"]=class J{static getClass(e){if(e==null)return null;if(e instanceof Array)return Array;{let t=e.__class__;if(t!=null)return t;let r=J.__nativeClassName(e);return r!=null?J.__resolveNativeClass(r):null}}static __string_rec(e,t){if(e==null)return"null";if(t.length>=5)return"<...>";let r=typeof e;switch(r=="function"&&(e.__name__||e.__ename__)&&(r="object"),r){case"function":return"<function>";case"object":if(e.__enum__){let m=s.global("$hxEnums")[e.__enum__].__constructs__[e._hx_index],_=m._hx_name;return m.__params__?(t=t+" ",_+"("+(function(f){var c;let y=[];{let b=0,d=m.__params__;for(;b<d.length;){let k=d[b];b=b+1,y.push(J.__string_rec(e[k],t))}}return c=y,c})(this).join(",")+")"):_}if(e instanceof Array){let g="[";t+=" ";let m=0,_=e.length;for(;m<_;){let f=m++;g+=(f>0?",":"")+J.__string_rec(e[f],t)}return g+="]",g}let i;try{i=e.toString}catch{return"???"}if(i!=null&&i!=Object.toString&&typeof i=="function"){let g=e.toString();if(g!="[object Object]")return g}let n=`{
2
- `;t+=" ";let l=e.hasOwnProperty!=null,u=null;for(u in e)l&&!e.hasOwnProperty(u)||u=="prototype"||u=="__class__"||u=="__super__"||u=="__interfaces__"||u=="__properties__"||(n.length!=2&&(n+=`,
3
- `),n+=t+u+" : "+J.__string_rec(e[u],t));return t=t.substring(1),n+=`
4
- `+t+"}",n;break;case"string":return e;default:return String(e)}}static __interfLoop(e,t){if(e==null)return!1;if(e==t)return!0;let r=e.__interfaces__;if(r!=null&&(e.__super__==null||e.__super__.__interfaces__!=r)){let i=0,n=r.length;for(;i<n;){let l=i++,u=r[l];if(u==t||J.__interfLoop(u,t))return!0}}return J.__interfLoop(e.__super__,t)}static __instanceof(e,t){if(t==null)return!1;switch(t){case Array:return e instanceof Array;case"$hxCoreType__Bool":return typeof e=="boolean";case"$hxCoreType__Dynamic":return e!=null;case"$hxCoreType__Float":return typeof e=="number";case"$hxCoreType__Int":return typeof e=="number"?(e|0)===e:!1;case String:return typeof e=="string";default:if(e!=null){if(typeof t=="function"){if(J.__downcastCheck(e,t))return!0}else if(typeof t=="object"&&J.__isNativeObj(t)&&e instanceof t)return!0}else return!1;return t=="$hxCoreType__Class"&&e.__name__!=null||t=="$hxCoreType__Enum"&&e.__ename__!=null?!0:e.__enum__!=null?s.global("$hxEnums")[e.__enum__]==t:!1}}static __downcastCheck(e,t){return e instanceof t?!0:t.__isInterface__?J.__interfLoop(J.getClass(e),t):!1}static __cast(e,t){if(e==null||J.__instanceof(e,t))return e;throw q.thrown("Cannot cast "+E.string(e)+" to "+E.string(t))}static __nativeClassName(e){let t=J.__toStr.call(e).slice(8,-1);return t=="Object"||t=="Function"||t=="Math"||t=="JSON"?null:t}static __isNativeObj(e){return J.__nativeClassName(e)!=null}static __resolveNativeClass(e){return s.$global[e]}static get __name__(){return"js.Boot"}get __class__(){return J}};be.__toStr={}.toString;var mr=s.$global,Te=s.global("$hxClasses")["js.Browser"]=class Qe{static get supported(){return this.get_supported()}static get_supported(){return typeof window!="undefined"&&typeof window.location!="undefined"?typeof window.location.protocol=="string":!1}static createXMLHttpRequest(){if(typeof XMLHttpRequest!="undefined")return new XMLHttpRequest;if(typeof ActiveXObject!="undefined")return new"ActiveXObject"("Microsoft.XMLHTTP");throw q.thrown("Unable to create XMLHttpRequest object.")}static get __name__(){return"js.Browser"}get __class__(){return Qe}};var fr=s.$global,Y=s.global("$hxEnums")["haxe.io.Error"]={__ename__:"haxe.io.Error",Blocked:{_hx_name:"Blocked",_hx_index:0,__enum__:"haxe.io.Error"},Overflow:{_hx_name:"Overflow",_hx_index:1,__enum__:"haxe.io.Error"},OutsideBounds:{_hx_name:"OutsideBounds",_hx_index:2,__enum__:"haxe.io.Error"},Custom:Object.assign(a=>({_hx_index:3,__enum__:"haxe.io.Error",e:a}),{_hx_name:"Custom",__params__:["e"]})};Y.__constructs__=[Y.Blocked,Y.Overflow,Y.OutsideBounds,Y.Custom];Y.__empty_constructs__=[Y.Blocked,Y.Overflow,Y.OutsideBounds];var hr=s.$global,te=s.global("$hxEnums")["haxe.io.Encoding"]={__ename__:"haxe.io.Encoding",UTF8:{_hx_name:"UTF8",_hx_index:0,__enum__:"haxe.io.Encoding"},RawNative:{_hx_name:"RawNative",_hx_index:1,__enum__:"haxe.io.Encoding"}};te.__constructs__=[te.UTF8,te.RawNative];te.__empty_constructs__=[te.UTF8,te.RawNative];var Ir=s.$global,me=s.global("$hxClasses")["haxe.io.Bytes"]=class Fe extends s.inherits(){[s.new](e){this.length=e.byteLength,this.b=new Uint8Array(e),this.b.bufferValue=e,e.hxBytes=this,e.bytes=this.b}getString(e,t,r){if(e<0||t<0||e+t>this.length)throw q.thrown(Y.OutsideBounds);r==null&&(r=te.UTF8);let i="",n=this.b,l=e,u=e+t;switch(r._hx_index){case 0:let g=e>0;for(;l<u;){let m=n[l++];if(m<128){if(m==0)break;i+=String.fromCodePoint(m)}else if(m<224){let _=(m&63)<<6|n[l++]&127;i+=String.fromCodePoint(_)}else if(m<240){let _=n[l++],f=(m&31)<<12|(_&127)<<6|n[l++]&127;i+=String.fromCodePoint(f)}else{let _=n[l++],f=n[l++],c=(m&15)<<18|(_&127)<<12|(f&127)<<6|n[l++]&127;i+=String.fromCodePoint(c)}}break;case 1:for(;l<u;){let m=n[l++]|n[l++]<<8;i+=String.fromCodePoint(m)}break}return i}static ofData(e){let t=e.hxBytes;return t!=null?t:new Fe(e)}static get __name__(){return"haxe.io.Bytes"}get __class__(){return Fe}};me.prototype.length=null;me.prototype.b=null;var Sr=s.$global,Z=s.global("$hxClasses")["haxe.http.HttpBase"]=class Xe extends s.inherits(){[s.new](e){this.url=e,this.headers=[],this.params=[],this.emptyOnData=s.bind(this,this.onData)}get responseData(){return this.get_responseData()}setHeader(e,t){let r=0,i=this.headers.length;for(;r<i;){let n=r++;if(this.headers[n].name==e){this.headers[n]={name:e,value:t};return}}this.headers.push({name:e,value:t})}setPostData(e){this.postData=e,this.postBytes=null}onData(e){}onBytes(e){}onError(e){}onStatus(e){}hasOnData(){return s.bind(this,this.onData)!=this.emptyOnData}success(e){this.responseBytes=e,this.responseAsString=null,this.hasOnData()&&this.onData(this.get_responseData()),this.onBytes(this.responseBytes)}get_responseData(){return this.responseAsString==null&&this.responseBytes!=null&&(this.responseAsString=this.responseBytes.getString(0,this.responseBytes.length,te.UTF8)),this.responseAsString}static get __name__(){return"haxe.http.HttpBase"}get __class__(){return Xe}};Z.prototype.url=null;Z.prototype.responseBytes=null;Z.prototype.responseAsString=null;Z.prototype.postData=null;Z.prototype.postBytes=null;Z.prototype.headers=null;Z.prototype.params=null;Z.prototype.emptyOnData=null;var Dr=s.$global,Se=s.global("$hxClasses")["haxe.iterators.MapKeyValueIterator"]=class Ye extends s.inherits(){[s.new](e){this.map=e,this.keys=e.keys()}hasNext(){return this.keys.hasNext()}next(){let e=this.keys.next();return{value:this.map.get(e),key:e}}static get __name__(){return"haxe.iterators.MapKeyValueIterator"}get __class__(){return Ye}};Se.prototype.map=null;Se.prototype.keys=null;var Pr=s.$global,Oe=function(){};Oe.__isInterface__=!0;var Br=s.$global,ke=s.global("$hxClasses")["genes.util.EsMap"]=class ve extends s.inherits(){[s.new](){this.inst=new Map}set(e,t){this.inst.set(e,t)}get(e){return this.inst.get(e)}remove(e){return this.inst.delete(e)}exists(e){return this.inst.has(e)}keys(){return ve.adaptIterator(this.inst.keys())}iterator(){return ve.adaptIterator(this.inst.values())}toString(){let e=[],t=ve.adaptIterator(this.inst.keys());for(;t.hasNext();){let r=t.next();e.push(""+E.string(r)+" => "+E.string(this.inst.get(r)))}return"{"+e.join(", ")+"}"}clear(){this.inst.clear()}static adaptIterator(e){let t,r,i=function(){let n=e.next();t=n.value,r=n.done};return{hasNext:function(){return r==null&&i(),!r},next:function(){r==null&&i();let n=t;return i(),n}}}static get __name__(){return"genes.util.EsMap"}get __class__(){return ve}};ke.prototype.inst=null;var jr=s.$global,Ze=s.global("$hxClasses")["haxe.ds.StringMap"]=class Be extends s.inherits(ke){[s.new](){super[s.new]()}copy(){let e=new Be;return e.inst=new Map(this.inst),e}keyValueIterator(){return new Se(this)}static get __name__(){return"haxe.ds.StringMap"}static get __interfaces__(){return[Oe]}static get __super__(){return ke}get __class__(){return Be}};var Gr=s.$global,j=s.global("$hxClasses").HxOverrides=class et{static cca(e,t){let r=e.charCodeAt(t);if(r==r)return r}static substr(e,t,r){if(r==null)r=e.length;else if(r<0)if(t==0)r=e.length+r;else return"";return e.substr(t,r)}static now(){return Date.now()}static get __name__(){return"HxOverrides"}get __class__(){return et}};typeof performance!="undefined"&&typeof performance.now=="function"&&(j.now=performance.now.bind(performance));var Qr=s.$global,ae=s.global("$hxClasses").StringTools=class qe{static isSpace(e,t){let r=j.cca(e,t);return r>8&&r<14?!0:r==32}static ltrim(e){let t=e.length,r=0;for(;r<t&&qe.isSpace(e,r);)++r;return r>0?j.substr(e,r,t-r):e}static rtrim(e){let t=e.length,r=0;for(;r<t&&qe.isSpace(e,t-r-1);)++r;return r>0?j.substr(e,0,t-r):e}static replace(e,t,r){return e.split(t).join(r)}static get __name__(){return"StringTools"}get __class__(){return qe}};var Zr=s.$global,tt=s.global("$hxClasses").Lambda=class rt{static exists(e,t){let r=s.getIterator(e);for(;r.hasNext();){let i=r.next();if(t(i))return!0}return!1}static get __name__(){return"Lambda"}get __class__(){return rt}};var ln=s.$global,we=s.global("$hxClasses").EReg=class nt extends s.inherits(){[s.new](e,t){this.r=new RegExp(e,t.split("u").join(""))}match(e){return this.r.global&&(this.r.lastIndex=0),this.r.m=this.r.exec(e),this.r.s=e,this.r.m!=null}matched(e){if(this.r.m!=null&&e>=0&&e<this.r.m.length)return this.r.m[e];throw q.thrown("EReg::matched")}matchedPos(){if(this.r.m==null)throw q.thrown("No string matched");return{pos:this.r.m.index,len:this.r.m[0].length}}matchSub(e,t,r){if(r==null&&(r=-1),this.r.global){this.r.lastIndex=t,this.r.m=this.r.exec(r<0?e:j.substr(e,0,t+r));let i=this.r.m!=null;return i&&(this.r.s=e),i}else{let i=this.match(r<0?j.substr(e,t,null):j.substr(e,t,r));return i&&(this.r.s=e,this.r.m.index+=t),i}}map(e,t){let r=0,i="";do{if(r>=e.length)break;if(!this.matchSub(e,r)){i+=E.string(j.substr(e,r,null));break}let n=this.matchedPos();i+=E.string(j.substr(e,r,n.pos-r)),i+=E.string(t(this)),n.len==0?(i+=E.string(j.substr(e,n.pos,1)),r=n.pos+1):r=n.pos+n.len}while(this.r.global);return!this.r.global&&r>0&&r<e.length&&(i+=E.string(j.substr(e,r,null))),i}static get __name__(){return"EReg"}get __class__(){return nt}};we.prototype.r=null;var yn=s.$global,ue=s.global("$hxClasses")["haxe.http.HttpJs"]=class it extends s.inherits(Z){[s.new](e){this.async=!0,this.withCredentials=!1,super[s.new](e)}request(e){this.responseAsString=null,this.responseBytes=null,this.responseHeaders=null;let t=this.req=Te.createXMLHttpRequest(),r=this,i=function(_){if(t.readyState!=4)return;let f;try{f=t.status}catch{f=null}if(f==0&&Te.get_supported()&&s.$global.location!=null){let c=s.$global.location.protocol.toLowerCase();new we("^(?:about|app|app-storage|.+-extension|file|res|widget):$","").match(c)&&(f=t.response!=null?200:404)}if(f==null&&(f=null),f!=null&&r.onStatus(f),f!=null&&f>=200&&f<400){r.req=null;let c=t.getAllResponseHeaders().split(`\r
5
- `),y=[],b=0,d=c;for(;b<d.length;){let x=d[b];++b,x!=""&&y.push(x)}c=y;let k=new Ze;r.responseHeaders=k;let p=0;for(;p<c.length;){let x=c[p];++p;let S=x.split(": "),D=S.shift(),N=S.length==1?S[0]:S.join(": ");N=ae.ltrim(ae.rtrim(N)),r.responseHeaders.inst.set(D,N)}r.success(me.ofData(t.response))}else if(f==null||f==0&&t.response==null)r.req=null,r.onError("Failed to connect or resolve host");else if(f==null){r.req=null;let c=t.response!=null?me.ofData(t.response):null;r.responseBytes=c,r.onError("Http Error #"+t.status)}else switch(f){case 12007:r.req=null,r.onError("Unknown host");break;case 12029:r.req=null,r.onError("Failed to connect to host");break;default:r.req=null;let c=t.response!=null?me.ofData(t.response):null;r.responseBytes=c,r.onError("Http Error #"+t.status)}};this.async&&(t.onreadystatechange=i);let n,l=this.postData,u=this.postBytes;if(l==null)if(u==null)n=null;else{let _=u;n=new Blob([_.b.bufferValue])}else u==null?n=l:n=null;if(n!=null)e=!0;else{let _=0,f=this.params;for(;_<f.length;){let c=f[_];++_,n==null?n="":n=(n==null?"null":E.string(n))+"&";let y=c.name,b=(n==null?"null":E.string(n))+encodeURIComponent(y)+"=",d=c.value;n=b+encodeURIComponent(d)}}try{if(e)t.open("POST",this.url,this.async);else if(n!=null){let _=this.url.split("?").length<=1;t.open("GET",this.url+(_?"?":"&")+(n==null?"null":E.string(n)),this.async),n=null}else t.open("GET",this.url,this.async);t.responseType="arraybuffer"}catch(_){let f=q.caught(_).unwrap();this.req=null,this.onError(f.toString());return}t.withCredentials=this.withCredentials,!tt.exists(this.headers,function(_){return _.name=="Content-Type"})&&e&&this.postData==null&&t.setRequestHeader("Content-Type","application/x-www-form-urlencoded");let g=0,m=this.headers;for(;g<m.length;){let _=m[g];++g,t.setRequestHeader(_.name,_.value)}t.send(n),this.async||i(null)}static get __name__(){return"haxe.http.HttpJs"}static get __super__(){return Z}get __class__(){return it}};ue.prototype.async=null;ue.prototype.withCredentials=null;ue.prototype.responseHeaders=null;ue.prototype.req=null;var wn=s.$global,He=s.global("$hxClasses").Type=class st{static createInstance(e,t){let r=Function.prototype.bind.apply(e,[null].concat(t));return new r}static get __name__(){return"Type"}get __class__(){return st}};var En=s.$global,I=s.global("$hxClasses").Reflect=class lt{static field(e,t){try{return e[t]}catch{return null}}static getProperty(e,t){let r;if(e==null)return null;{let i;return e.__properties__?(r=e.__properties__["get_"+t],i=r):i=!1,i?e[r]():e[t]}}static setProperty(e,t,r){let i,n;e.__properties__?(i=e.__properties__["set_"+t],n=i):n=!1,n?e[i](r):e[t]=r}static fields(e){let t=[];if(e!=null){let i=Object.prototype.hasOwnProperty;for(var r in e)r!="__id__"&&r!="hx__closures__"&&i.call(e,r)&&t.push(r)}return t}static compare(e,t){return e==t?0:e>t?1:-1}static get __name__(){return"Reflect"}get __class__(){return lt}};var $n=s.$global,Ve=s.global("$hxClasses")["internal.http.FetchHttp"]=class ot extends s.inherits(ue){[s.new](e){this.responseStatus=0,super[s.new](e)}request(e){let t=s.$global,r=t.fetch,i=t.Headers,n=t.URLSearchParams;if(r==null){this.onError("Fetch API not found.");return}let l=He.createInstance(i,[]),u=0,g=this.headers;for(;u<g.length;){let d=g[u];++u,l.append(d.name,d.value)}let m=e?"POST":"GET",_=null;if(e)if(this.postData!=null)_=this.postData;else{_=He.createInstance(n,[]);let d=0,k=this.params;for(;d<k.length;){let p=k[d];++d,_.append(p.name,p.value)}}let f={method:m,headers:l,body:_},c=this,y=r(this.url,f).then(function(d){if(c.responseStatus=d.status,c.onStatus(d.status),d.ok)return d.text();throw q.thrown("HTTP Error: "+E.string(d.status))}).then(function(d){c.onData(d)}),b=I.field(y,"catch");b!=null&&b.apply(y,[function(d){c.onError(E.string(d))}])}static get __name__(){return"internal.http.FetchHttp"}static get __super__(){return ue}get __class__(){return ot}};Ve.prototype.responseStatus=null;var On=s.$global,Le=s.global("$hxClasses")["internal.data.UUID"]=class at{static randomHexChar(){return"0123456789abcdef".charAt(E.random(16))}static v4(){let e="",t=0;for(;t<36;)switch(t++){case 14:e+="4";break;case 19:e+=E.string("0123456789abcdef".charAt(8+E.random(4)));break;case 8:case 13:case 18:case 23:e+="-";break;default:e+=E.string("0123456789abcdef".charAt(E.random(16)))}return e}static get __name__(){return"internal.data.UUID"}get __class__(){return at}};Le.HEX="0123456789abcdef";var Vn=s.$global,ge=function(){};ge.__isInterface__=!0;var _e=function(){};_e.__isInterface__=!0;var fe=function(){};fe.__isInterface__=!0;var Kn=s.$global,o=s.global("$hxClasses")["internal.RecoBackendV2"]=class v extends s.inherits(){[s.new](){}static _requestUri(){return(v._safe_request?"https://":"http://")+v._req_domain+"/api/"+v._environment+"/recommendations/requests"}static noConsentBody(){return{device_id:"no-consent",user_group:"no-consent",version:"no-consent"}}static buildRequestBody(e){let t={lists:e,page_type:v._page_visit,channel:v._channel};if(v._consent>=2&&v._history.length>0&&(t.histories=v._buildHistories()),v._consent<2){let u=v.noConsentBody(),g=0,m=I.fields(u);for(;g<m.length;){let _=m[g];++g,t[_]=I.field(u,_)}}else v._user_id!=null&&(t.user_id=v._user_id),t.device_id=v._device_id;let r=0,i=v._others;for(;r<i.length;){let u=i[r];++r,t[u.key]=u.value}let n=I.field(t,"context_item"),l=I.field(t,"context_item_type");return n!=null&&E.string(n)!=""&&(l==null||E.string(l)=="")&&(t.context_item_type="article"),t}static _buildHistories(){return{pageviews:v._history}}static requestsToLists(e){let t=[],r="",i=[],n=0,l=[],u=function(c,y,b){r=c,i=y,n=0,l=b},g=function(c){let y=[];if(c==null)return y;let b=0;for(;b<c.length;){let d=c[b];++b,!(d==null||d.key==null||d.key=="")&&y.push({key:d.key,value:d.value})}return y},m=function(c,y){if(c==null&&y==null)return!0;if(c==null||y==null||c.length!=y.length)return!1;let b=new Array(c.length),d=0,k=c.length;for(;d<k;){let O=d++;b[O]=JSON.stringify(c[O])}let p=b,x=new Array(y.length),S=0,D=y.length;for(;S<D;){let O=S++;x[O]=JSON.stringify(y[O])}let N=x;p.sort(I.compare),N.sort(I.compare);let T=0,F=p.length;for(;T<F;){let O=T++;if(p[O]!=N[O])return!1}return!0},_=function(){let c={limit:n,list_name:r,list_size:n},y=0;for(;y<i.length;){let d=i[y];++y;let k=d.value;k instanceof Array||(k=[k]),c[d.key]=k}let b=0;for(;b<l.length;){let d=l[b];++b,c[d.key]=d.value}t.push(c)},f=0;for(;f<e.length;){let c=e[f];++f;let y=g(c.filters),b=c.others!=null?c.others:[];if(r==""){u(c.list,y,b),n+=1;continue}else(r!=c.list||!m(i,y)||!m(l,b))&&(_(),u(c.list,y,b));n+=1}return n!=0&&_(),t}static _requestRecos(e){let t=null,r=new Promise(function(c,y){t=c}),i=r;i._resolve=t,i._isFinished=!1,i._result=null;let n=r,l=null,u=new Ve(v._requestUri());u.setHeader("Content-Type","application/json");let g=v.buildRequestBody(e),m=JSON.stringify(g);u.setPostData(m),u.onError=function(c){throw q.thrown("HTTP Request Error: "+c)};try{u.request(!0)}catch(c){let y=q.caught(c).unwrap();throw q.thrown("Failed to execute synchronous request: "+E.string(y)+m)}let _=function(c){let y=JSON.parse(c),b=pe.fromRequestData(y),d=n;d._isFinished||(d._result=b,d._isFinished=!0,d._resolve(b))},f=u.get_responseData();return f!=null?_(f):u.onData=_,n}static getOrder(e,t,r){let i={list_name:e,limit:r.length,list_size:r.length},n={};I.setProperty(n,t,r),I.setProperty(i,"order",n);let l=null,u=new Promise(function(f,c){l=f}),g=u;g._resolve=l,g._isFinished=!1,g._result=null;let m=u,_;return v.getRawRecommendations([i]).then(function(f){let c=[],y=f.lists()[0].items;if(y instanceof Array){let d=0,k=y;for(;d<k.length;){let p=k[d];++d;let x=p.get("categories");x!=null&&c.push(x)}}let b=m;b._isFinished||(b._result=c,b._isFinished=!0,b._resolve(c))}),m}static getRawRecommendations(e){return v._requestRecos(e)}static addHistories(e,t){if(t==null&&(t="article"),e==null||e.length==0)return;let r=t!=null&&t!=""?t:"article",i=0;for(;i<e.length;){let n=e[i];if(++i,typeof n=="string"){let f=E.string(n);f!=""&&v._history.push({id:f,item_type:r});continue}let l=n,u=I.field(l,"id");if(u==null)continue;let g=E.string(u);if(g=="")continue;let m=I.field(l,"item_type");(m==null||E.string(m)=="")&&(m=I.field(l,"itemType"));let _=m!=null&&E.string(m)!=""?E.string(m):r;v._history.push({id:g,item_type:_})}}static setOthers(e,t){let r=0,i=v._others;for(;r<i.length;){let n=i[r];if(++r,n.key==e){n.value=t;return}}v._others.push({key:e,value:t})}static setConsent(e){e>2&&(e=2),v._consent=e,e==2&&v.getDeviceId()=="no-consent"&&v.setDeviceId(Le.v4())}static setChannel(e){v._channel=e}static setPageVisit(e){v._page_visit=e}static setEnvironment(e){v._environment=e}static setDeviceId(e){v._device_id=e}static setUserId(e){v._user_id=e}static setRequestDomain(e){v._req_domain=e}static setSafeRequest(e){v._safe_request=e}static setContextItem(e){v.setOthers("context_item",e)}static setContextItemType(e){v.setOthers("context_item_type",e)}static getRequestDomain(){return v._req_domain}static getSafeRequest(){return v._safe_request}static getEnvironment(){return v._environment}static getPageVisit(){return v._page_visit}static getUserId(){return v._user_id}static getDeviceId(){return v._device_id}static getConsent(){return v._consent}static getChannel(){return v._channel}static getOthers(e){let t=0,r=v._others;for(;t<r.length;){let i=r[t];if(++t,e==i.key)return i.value}return null}static getContextItem(){return v.getOthers("context_item")}static getContextItemType(){return v.getOthers("context_item_type")}static get __name__(){return"internal.RecoBackendV2"}get __class__(){return v}};o._environment=null;o._device_id="no-consent";o._user_id=null;o._consent=0;o._req_domain="europe-west1.froomle.com";o._page_visit=null;o._channel="www-desktop";o._safe_request=!0;o._history=[];o._others=[];var pe=s.global("$hxClasses")["internal._RecommendationsInternal"]=class Ne extends s.inherits(){[s.new](e,t,r,i,n){this.request_id=t,this.user_group=r,this.device_id=e,this.user_id=i,this._lists=n}items(){let e=[],t=0,r=this._lists;for(;t<r.length;){let i=r[t];++t;let n=0,l=i.items;for(;n<l.length;){let u=l[n];++n,e.push(u)}}return e}lists(){return this._lists}getItemsByListName(e){let t=0,r=this._lists;for(;t<r.length;){let i=r[t];if(++t,i.list_name==e)return i}return null}toJson(){let e={request_id:this.request_id,user_group:this.user_group,user_id:this.user_id,device_id:this.device_id,lists:[]},t=0,r=this._lists;for(;t<r.length;){let i=r[t];++t;let n={limit:i.limit,list_key:i.list_key,list_name:i.list_name,list_size:i.list_size,items:[]},l=0,u=i.items;for(;l<u.length;){let g=u[l];++l,n.items.push(be.__cast(g,se).getData())}e.lists.push(n)}return JSON.stringify(e)}static fromRequestData(e){let t=I.getProperty(e,"lists"),r=[],i=0;for(;i<t.length;){let n=t[i];++i;let l=I.getProperty(n,"items"),u=[],g=0;for(;g<l.length;){let _=l[g];++g,I.setProperty(_,"request_id",I.getProperty(e,"request_id")),I.setProperty(_,"user_group",I.getProperty(e,"user_group")),u.push(new se(_))}let m=new ce({limit:I.getProperty(n,"limit"),list_key:I.getProperty(n,"list_key"),list_name:I.getProperty(n,"list_name"),list_size:I.getProperty(n,"list_size"),items:u,request_id:I.getProperty(e,"request_id")});r.push(m)}return new Ne(I.getProperty(e,"device_id"),I.getProperty(e,"request_id"),I.getProperty(e,"user_group"),I.getProperty(e,"user_id"),r)}static get __name__(){return"internal._RecommendationsInternal"}static get __interfaces__(){return[ge]}get __class__(){return Ne}};pe.prototype.request_id=null;pe.prototype.user_group=null;pe.prototype.user_id=null;pe.prototype.device_id=null;pe.prototype._lists=null;var ce=s.global("$hxClasses")["internal._RecommendationsListInternal"]=class ut extends s.inherits(){[s.new](e){this.items=e.items,this.limit=e.limit,this.list_key=e.list_key,this.list_name=e.list_name,this.list_size=e.list_size,this.request_id=e.request_id}static get __name__(){return"internal._RecommendationsListInternal"}static get __interfaces__(){return[_e]}get __class__(){return ut}};ce.prototype.limit=null;ce.prototype.list_key=null;ce.prototype.list_name=null;ce.prototype.list_size=null;ce.prototype.items=null;ce.prototype.request_id=null;var se=s.global("$hxClasses")["internal._RecommendationItemInternal"]=class ct extends s.inherits(){[s.new](e){this.Id=I.getProperty(e,"item_id"),this.RequestId=I.getProperty(e,"request_id"),this.UserGroup=I.getProperty(e,"user_group"),this._data=e}getData(){return this._data}get(e){return this._data[e]}toJson(){return JSON.stringify(this._data)}static get __name__(){return"internal._RecommendationItemInternal"}static get __interfaces__(){return[fe]}get __class__(){return ct}};se.prototype.Id=null;se.prototype.RequestId=null;se.prototype.UserGroup=null;se.prototype._data=null;var Yn=s.$global,Ue=function(){};Ue.__isInterface__=!0;var ri=s.$global,xe=s.global("$hxClasses")["internal.js.JSFroomleDomTree"]=class De extends s.inherits(){[s.new](){}getRoot(){return this.root}createElement(e){return this.root.ownerDocument.createElement(e)}toString(){return this.root.ownerDocument.documentElement.outerHTML}static fromHTML(e){let r=new DOMParser().parseFromString(e,"text/html"),i=new De;return i.root=r.documentElement,i}static fromDocument(e){let t=new De;return t.root=e.documentElement,t}static get __name__(){return"internal.js.JSFroomleDomTree"}static get __interfaces__(){return[Ue]}get __class__(){return De}};xe.prototype.root=null;var gi=s.$global,oe=s.global("$hxClasses")["internal.domHandler.DomDomDom"]=class re extends s.inherits(){[s.new](){}static _fillRecoTargets(e){let t=null,r=new Promise(function(h,w){t=h}),i=r;i._resolve=t,i._isFinished=!1,i._result=null;let n=r;if(e==null){let h=n;return h._isFinished||(h._result=!1,h._isFinished=!0,h._resolve(!1)),n}let l=[],u=new Array,g=e.querySelectorAll("*"),m=0,_=g.length;for(;m<_;){let h=m++,w=g.item(h);w instanceof HTMLElement&&u.push(w)}let f=u;f.push(e);let c=0;for(;c<f.length;){let h=f[c];++c;let w=0,R=new Array,C=0,A=h.attributes;for(;C<A.length;){let H=A[C];++C,R.push({name:H.name,value:H.value})}let U=R;for(;w<U.length;){let H=U[w];++w,H.name=="data-froomle-reco"&&l.push(h)}}let y=[],b=0;for(;b<l.length;){let h=l[b];++b;let w=h.getAttribute("data-froomle-request-id"),R=h.getAttribute("data-froomle-id"),C=w!=null&&w!="",A=R!=null&&R!="";!C&&!A&&y.push(h)}if(y.length<1){let h=null,w=new Promise(function(C,A){h=C}),R=w;return R._resolve=h,R._isFinished=!1,R._result=null,w}let d=[],k=[],p="",x=[],S=[],D=[],N=function(h,w){if(h.length!=w.length)return!1;let R=new Array(h.length),C=0,A=h.length;for(;C<A;){let $=C++;R[$]=JSON.stringify(h[$])}let U=R,H=new Array(w.length),G=0,K=w.length;for(;G<K;){let $=G++;H[$]=JSON.stringify(w[$])}let W=H;U.sort(I.compare),W.sort(I.compare);let z=0,M=U.length;for(;z<M;){let $=z++;if(U[$]!=W[$])return!1}return!0},T=function(){let h={list_name:p,list_size:S.length,limit:S.length},w=0;for(;w<x.length;){let C=x[w];if(++w,C!=null&&C.key!=null&&C.key!=""){let A=C.value;A instanceof Array||(A=[A]),I.setProperty(h,C.key,A)}}let R=0;for(;R<D.length;){let C=D[R];++R,I.setProperty(h,C.key,C.value)}d.push(h),k.push(S)},F=function(h,w,R,C){p=h,x=w,S=[C],D=R},O=0;for(;O<y.length;){let h=y[O];++O;let w=function(H){let G=[],K=0,W=new Array,z=0,M=H.attributes;for(;z<M.length;){let V=M[z];++z,W.push({name:V.name,value:V.value})}let $=W;for(;K<$.length;){let V=$[K];if(++K,V.name.startsWith("data-froomle-reco-filter-")){let X=j.substr(V.name,25,null),ie=V.value;G.push({key:X,value:ie})}}return G},R=function(H){let G=[],K=0,W=new Array,z=0,M=H.attributes;for(;z<M.length;){let V=M[z];++z,W.push({name:V.name,value:V.value})}let $=W;for(;K<$.length;){let V=$[K];if(++K,V.name.startsWith("data-froomle-variable-")){let X=j.substr(V.name,22,null),ie=V.value;G.push({key:X,value:ie})}}return G},C=h.getAttribute("data-froomle-reco"),A=w(h),U=R(h);if(p==""){F(C,A,U,h);continue}else if(C==p&&N(x,A)&&N(D,U)){S.push(h);continue}else{T(),F(C,A,U,h);continue}}p!=""&&T();let B;if(o.getPageVisit()==null){let h=n;return h._isFinished||(h._result=!1,h._isFinished=!0,h._resolve(!1)),n}else if(o.getEnvironment()==null){let h=n;return h._isFinished||(h._result=!1,h._isFinished=!0,h._resolve(!1)),n}else try{B=o.getRawRecommendations(d)}catch{let w=n;return w._isFinished||(w._result=!1,w._isFinished=!0,w._resolve(!1)),n}return B.then(function(h){let w=h.lists(),R=w.length,C=0,A=R;for(;C<A;){let H=C++,G=w[H],K=G.items.length!=k[H].length,W=G.items.length,z=0,M=W;for(;z<M;){let $=z++,V=G.items[$],X=k[H][$];re._fillParameters(X,V,h.request_id)}}let U=n;U._isFinished||(U._result=!0,U._isFinished=!0,U._resolve(!0))}),n}static getAttrByPath(e,t,r){r==null&&(r="fgh");try{t=new we("\\\\[(\\\\w+)\\\\]","g").map(t,function(m){return"."+m.matched(1)}),t=ae.replace(t,"[","."),t=ae.replace(t,"]",""),j.cca(t,0)==46&&(t=j.substr(t,1,null));let n=t.split("."),l=e.get(n[0]),u=1,g=n.length;for(;u<g;){let m=u++;if(l==null)return null;l instanceof Array&&E.parseInt(n[m])!=null?l=l[E.parseInt(n[m])]:l=I.field(l,n[m])}return l}catch{return r}}static _buildHistories(e){let t=[],r=new Array,i=e.querySelectorAll("[data-froomle-id]"),n=0,l=i.length;for(;n<l;){let m=n++,_=i.item(m);_ instanceof HTMLElement&&r.push(_)}let u=r,g=0;for(;g<u.length;){let m=u[g];++g,t.push(m.getAttribute("data-froomle-id"))}o.addHistories(t)}static fillParam(e,t,r,i,n){n==null&&(n="");try{let l=re.getAttrByPath(i,r,n);if(t=="inner"){e.textContent=l;let u=e.textContent}else e.setAttribute(t,l)}catch{}}static _fillParameters(e,t,r){e.setAttribute("data-froomle-id",t.get("item_id")),e.setAttribute("data-froomle-request-id",r);let i=t.get("item_type");i!=null&&E.string(i)!=""&&e.setAttribute("data-froomle-item-type",E.string(i)),t.UserGroup!=null&&t.UserGroup!=""&&e.setAttribute("data-froomle-user-group",t.UserGroup);let n=new Array,l=e.querySelectorAll("*"),u=0,g=l.length;for(;u<g;){let f=u++,c=l.item(f);c instanceof HTMLElement&&n.push(c)}let m=n,_=0;for(;_<m.length;){let f=m[_];++_;let c=0,y=new Array,b=0,d=f.attributes;for(;b<d.length;){let p=d[b];++b,y.push({name:p.name,value:p.value})}let k=y;for(;c<k.length;){let p=k[c];if(++c,p.name.startsWith("data-froomle-param-")){let x=ae.replace(p.name,"data-froomle-param-",""),S=p.value;re.fillParam(f,x,S,t)}}}}static _orderElements(e){let t=function(p,x,S){let D=[],N=new Array,T=0,F=p.childNodes;for(;T<F.length;){let R=F[T];++T,N.push(R)}let O=N,B=0;for(;B<O.length;){let R=O[B];++B;try{if(R.getAttribute("data-froomle-ordervalue")!=null){D.push(R);let A=e.createElement("span");A.setAttribute("data-froomle-tmp-node","tmp"),p.replaceChild(A,R)}}catch{}}let h=[],w=0;for(;w<D.length;){let R=D[w];++w,h.push(R.getAttribute("data-froomle-ordervalue"))}return{el:p,key:x,values:h,orderChildren:D,list_name:S}},r=null,i=new Promise(function(p,x){r=p}),n=i;n._resolve=r,n._isFinished=!1,n._result=null;let l=i,u=e.getRoot(),g=new Array,m=u.querySelectorAll("*"),_=0,f=m.length;for(;_<f;){let p=_++,x=m.item(p);x instanceof HTMLElement&&g.push(x)}let c=g,y=[],b=0;for(;b<c.length;){let p=c[b];++b;let x=0,S=new Array,D=0,N=p.attributes;for(;D<N.length;){let F=N[D];++D,S.push({name:F.name,value:F.value})}let T=S;for(;x<T.length;){let F=T[x];++x,F.name.startsWith("data-froomle-order-")&&y.push(t(p,F.name.substring(19),F.value))}}if(y.length<1){let p=l;return p._isFinished||(p._result=!1,p._isFinished=!0,p._resolve(!1)),l}let d=[],k=0;for(;k<y.length;){let p=y[k];++k;let x={list_name:p.list_name,limit:p.values.length,list_size:p.values.length},S={};I.setProperty(S,p.key,p.values),I.setProperty(x,"order",S),d.push(x)}if(o.getPageVisit()==null){let p=l;return p._isFinished||(p._result=!1,p._isFinished=!0,p._resolve(!1)),l}else if(o.getEnvironment()==null){let p=l;return p._isFinished||(p._result=!1,p._isFinished=!0,p._resolve(!1)),l}try{o.getRawRecommendations(d).then(function(p){let x=p.lists(),S=x.length,D=0,N=S;for(;D<N;){let F=D++,O=x[F],B=y[F];B.el.setAttribute("data-froomle-request-id",p.request_id);let h=new Array,w=0,R=O.items;for(;w<R.length;){let M=R[w];++w;let $=M.get(B.key),V=M.get(B.key),X=B.values.length,ie=0,de=X;for(;ie<de;){let le=ie++,he=B.values[le];if($==he){let jt=B.orderChildren.length,Et=B.orderChildren[le];h.push(Et),B.orderChildren.splice(le,1),B.values.splice(le,1);break}}}let C=h.length,A=B.el,U=new Array,H=0,G=A.childNodes;for(;H<G.length;){let M=G[H];++H,U.push(M)}let K=U.length,W=0,z=K;for(;W<z;){let M=W++,$=B.el,V=new Array,X=0,ie=$.childNodes;for(;X<ie.length;){let he=ie[X];++X,V.push(he)}let de=V[M],le;if(de instanceof HTMLElement?le=de.hasAttribute("data-froomle-tmp-node"):le=!1,le){B.el.replaceChild(h[0],de),h.splice(0,1);let he=h.length;if(h.length==0)break}}}let T=l;T._isFinished||(T._result=!0,T._isFinished=!0,T._resolve(!0))})}catch{let x=l;x._isFinished||(x._result=!1,x._isFinished=!0,x._resolve(!1))}return l}static domInit(e){let t=null,r=new Promise(function(l,u){t=l}),i=r;i._resolve=t,i._isFinished=!1,i._result=null;let n=r;return re._orderElements(e).then(function(l){re._buildHistories(e.getRoot()),re._fillRecoTargets(e.getRoot()).then(function(u){let g=n;g._isFinished||(g._result=!0,g._isFinished=!0,g._resolve(!0))})}),n}static fillElementRecos(e){re._fillRecoTargets(e)}static runFromHtml(e){if(e=="")return"";let t;try{let i=new DOMParser().parseFromString(e,"text/html"),n=new xe;n.root=i.documentElement,t=n}catch{return e}return re.domInit(t),t.toString()}static get __name__(){return"internal.domHandler.DomDomDom"}get __class__(){return re}};var hi=s.$global,L=s.global("$hxClasses").FroomleSdk=class ne{static register(){ne.registered||ne._env_set&&ne._page_visit_set&&(ne.registered=!0)}static buildScriptTag(){let e='<script src="https://cdn.jsdelivr.net/npm/@froomle/frontend-sdk@0.0.11/dist/froomle.global.js" data-froomle-env="'+o.getEnvironment()+'" ',t=o.getPageVisit();t!=null&&(e+='data-froomle-page-visit="'+t+'" ');let r=o.getContextItem();if(r!=null){e+='data-froomle-context-item="'+r+'" ';let m=o.getContextItemType();(m==null||m=="")&&(m="article"),e+='data-froomle-context-item-type="'+m+'" '}let i=o.getDeviceId();i!=null&&(e+='data-froomle-device-id="'+i+'" ');let n=o.getUserId();n!=null&&(e+='data-froomle-user-id="'+n+'" ');let l=o.getConsent();l>0&&(e+='data-froomle-consent="'+l+'" ');let u=o.getRequestDomain();u!=null&&(e+='data-froomle-request-domain="'+u+'" ');let g=o.getChannel();return g!=null&&(e+='data-froomle-channel="'+g+'" '),e+="><\/script>",e}static setEnvironment(e){o.setEnvironment(e),ne._env_set=!0,ne.register()}static setDeviceId(e){o.setDeviceId(e)}static setUserId(e){o.setUserId(e)}static setConsent(e){o.setConsent(e)}static setPageVisit(e){o.setPageVisit(e),ne._page_visit_set=!0,ne.register()}static setChannel(e){o.setChannel(e)}static setRequestDomain(e){o.setRequestDomain(e)}static setSafeRequest(e){o.setSafeRequest(e)}static setContextItem(e){o.setContextItem(e)}static setContextItemType(e){o.setContextItemType(e)}static setCustomVariable(e,t){o.setOthers(e,t)}static getUserId(){return o.getUserId()}static getDeviceId(){return o.getDeviceId()}static getEnvironment(){return o.getEnvironment()}static getSafeRequest(){return o.getSafeRequest()}static getPageVisit(){return o.getPageVisit()}static getConsent(){return o.getConsent()}static getRecommendations(e){return o.getRawRecommendations(e)}static getChannel(){return o.getChannel()}static getVersion(){return"0.0.11"}static runFromHtml(e){return oe.runFromHtml(e)}static get __name__(){return"FroomleSdk"}get __class__(){return ne}};L._env_set=!1;L._page_visit_set=!1;L.registered=!1;var vi=s.$global;function mt(){return(o.getSafeRequest()?"https://":"http://")+o.getRequestDomain()+"/api/"+o.getEnvironment()+"/events"}function Ae(){return o.getConsent()>=1}function gt(){return o.getConsent()<2?"no-consent":o.getDeviceId()}function _t(){let a=o.getChannel();if(a)return a}function Bt(a){let e=(a==null?void 0:a.getAttribute("data-froomle-id"))||(a==null?void 0:a.getAttribute("data-froomle-action-item"));if(e)return e}function Ht(a){let e=(a==null?void 0:a.getAttribute("data-froomle-item-type"))||(a==null?void 0:a.getAttribute("data-froomle-action-item-type"));if(e)return e}function ft(a){var r;let e=a==null?void 0:a.getAttribute("data-froomle-user-group");return e||(typeof document=="undefined"?void 0:((r=document.querySelector("[data-froomle-user-group]"))==null?void 0:r.getAttribute("data-froomle-user-group"))||void 0)}function pt(a,e,t="impression",r){if(!Ae())return;let i=_t()||"www-desktop",n={event_type:t,page_type:o.getPageVisit(),action_item:a,action_item_type:e,channel:i,device_id:gt()},l=ft();if(l&&(n.user_group=l),r)for(let u in r)n[u]=r[u];try{fetch(mt(),{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify({events:[n]})})}catch{}}var P=class P{static queueIfNotPresent(e){P.impressionQueue.includes(e)||P.impressionQueue.push(e)}static generateBody(){let e=[];for(let t of P.impressionQueue){let r=Bt(t);if(!r)continue;let i=Ht(t)||"article",n=_t()||"www-desktop",l={event_type:"impression",page_type:o.getPageVisit(),action_item:r,action_item_type:i,channel:n,device_id:gt()},u=ft(t);u&&(l.user_group=u),o.getConsent()>=2&&o.getUserId()&&(l.user_id=o.getUserId());let g=t.getAttribute("data-froomle-reco"),m=t.getAttribute("data-froomle-request-id");g&&m&&(l.list_name=g,l.request_id=m),e.push(l)}return P.impressionQueue=[],JSON.stringify({events:e})}static sendImpressions(){console.log(P.impressionQueue),P.impressionQueue.length!==0&&Ae()&&fetch(mt(),{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json"},body:P.generateBody()})}static getViewPortRect(){let e=window.innerWidth||document.documentElement.clientWidth,t=window.innerHeight||document.documentElement.clientHeight;return{left:0,top:0,x:0,y:0,toJSON(){},right:e,bottom:t,width:e,height:t}}static intersectsWithViewPortRect(e){let t=e.getBoundingClientRect(),r=P.getViewPortRect();return t.right>r.left&&t.left<r.right&&t.bottom>r.top&&t.top<r.bottom}static addIntersectionImpressionListener(e){P.observer.observe(e)}static processDocument(){if(Ae()){console.log("\u{1F680} Processing document for impressions");for(let e of document.querySelectorAll("[data-froomle-id]"))P.intersectsWithViewPortRect(e)?P.queueIfNotPresent(e):P.addIntersectionImpressionListener(e);P.sendImpressions()}}static processElement(e){if(!Ae()||!(e instanceof Element))return;let t=[];e.matches("[data-froomle-id]")&&t.push(e);for(let r of e.querySelectorAll("[data-froomle-id]"))t.push(r);if(t.length!==0){for(let r of t)P.intersectsWithViewPortRect(r)?P.queueIfNotPresent(r):P.addIntersectionImpressionListener(r);P.sendImpressions()}}};P.impressionQueue=[],P.observer=null;var Q=P;typeof document!="undefined"&&(Q.observer=new IntersectionObserver((a,e)=>{a.forEach(t=>{t.isIntersecting&&(Q.impressionQueue.push(t.target),Q.observer.unobserve(t.target))}),Q.impressionQueue.length>0&&Q.sendImpressions()}));var Ie=class a{static canTrackEvents(){return o.getConsent()>=1}static readDeviceId(){return o.getConsent()<2?"no-consent":o.getDeviceId()}static readChannel(){let e=o.getChannel();if(e)return e}static readUserGroup(){var t;return typeof document=="undefined"?void 0:((t=document.querySelector("[data-froomle-user-group]"))==null?void 0:t.getAttribute("data-froomle-user-group"))||void 0}static uri(){return(o.getSafeRequest()?"https://":"http://")+o.getRequestDomain()+"/api/"+o.getEnvironment()+"/events"}static generateBody(){let e=a.readChannel()||"www-desktop",t={event_type:"page_visit",page_type:o.getPageVisit(),channel:e,device_id:a.readDeviceId()},r=a.readUserGroup();return r&&(t.user_group=r),o.getConsent()>=2&&o.getUserId()&&(t.user_id=o.getUserId()),JSON.stringify({events:[t]})}static sendPageVisit(){o.getPageVisit()&&(o.getContextItem()||a.canTrackEvents()&&fetch(a.uri(),{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json"},body:a.generateBody()}))}};var Ee=class a{static canTrackEvents(){return o.getConsent()>=1}static readDeviceId(){return o.getConsent()<2?"no-consent":o.getDeviceId()}static readChannel(){let e=o.getChannel();if(e)return e}static readActionItemType(){let e=o.getContextItemType();if(e)return e}static readUserGroup(){var t;return typeof document=="undefined"?void 0:((t=document.querySelector("[data-froomle-user-group]"))==null?void 0:t.getAttribute("data-froomle-user-group"))||void 0}static uri(){return(o.getSafeRequest()?"https://":"http://")+o.getRequestDomain()+"/api/"+o.getEnvironment()+"/events"}static generateBody(){let e=a.readActionItemType()||"article",t=a.readChannel()||"www-desktop",r={event_type:"detail_pageview",page_type:o.getPageVisit(),action_item:o.getContextItem(),action_item_type:e,channel:t,device_id:a.readDeviceId()},i=a.readUserGroup();return i&&(r.user_group=i),o.getConsent()>=2&&o.getUserId()&&(r.user_id=o.getUserId()),JSON.stringify({events:[r]})}static sendPageView(){o.getContextItem()&&o.getPageVisit()&&a.canTrackEvents()&&fetch(a.uri(),{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json"},body:a.generateBody()})}};var ee=class ee{static canTrackEvents(){return o.getConsent()>=1}static readDeviceId(){return o.getConsent()<2?"no-consent":o.getDeviceId()}static readChannel(){let e=o.getChannel();if(e)return e}static readActionItem(e){let t=e.getAttribute("data-froomle-id")||e.getAttribute("data-froomle-action-item");if(t)return t}static readActionItemType(e){let t=e.getAttribute("data-froomle-item-type")||e.getAttribute("data-froomle-action-item-type");if(t)return t}static readUserGroup(e){var i;let t=e.getAttribute("data-froomle-user-group");return t||(typeof document=="undefined"?void 0:((i=document.querySelector("[data-froomle-user-group]"))==null?void 0:i.getAttribute("data-froomle-user-group"))||void 0)}static registerClickables(){ee.listenerRegistered||(ee.listenerRegistered=!0,document.addEventListener("click",e=>{if(!ee.canTrackEvents())return;let t=e instanceof MouseEvent?e:null,r=e.target,i=r instanceof Element?r:r instanceof Node?r.parentElement:null;if(!i)return;let n=i.closest("a");if(!n)return;let l=n.closest("[data-froomle-id]");if(!l)return;let u=ee.readActionItem(l);if(!u)return;let g=ee.readActionItemType(l)||"article",m=ee.readChannel()||"www-desktop",_=n instanceof HTMLAnchorElement?n.href:null,f=!!_&&e.cancelable&&!e.defaultPrevented&&!n.hasAttribute("download")&&(!n.target||n.target==="_self")&&!!t&&t.button===0&&!t.metaKey&&!t.ctrlKey&&!t.shiftKey&&!t.altKey;f&&e.preventDefault();let c={event_type:"click_on_recommendation",page_type:o.getPageVisit(),action_item:u,action_item_type:g,channel:m,device_id:ee.readDeviceId()},y=ee.readUserGroup(l);y&&(c.user_group=y);let b=l.getAttribute("data-froomle-reco"),d=l.getAttribute("data-froomle-request-id");b&&d&&(c.list_name=b,c.request_id=d),o.getConsent()>=2&&o.getUserId()&&(c.user_id=o.getUserId());let p=(o.getSafeRequest()?"https://":"http://")+o.getRequestDomain()+"/api/"+o.getEnvironment()+"/events",x=JSON.stringify({events:[c]}),S=new Blob([x],{type:"application/json"}),D=()=>fetch(p,{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json"},body:x,keepalive:!0});if(f&&_){let T=!1,F=()=>{T||(T=!0,window.location.assign(_))},O=window.setTimeout(F,200);D().catch(()=>{typeof navigator!="undefined"&&typeof navigator.sendBeacon=="function"&&navigator.sendBeacon(p,S)}).finally(()=>{window.clearTimeout(O),F()});return}typeof navigator!="undefined"&&typeof navigator.sendBeacon=="function"&&navigator.sendBeacon(p,S)||D().catch(()=>{})},!0))}};ee.listenerRegistered=!1;var Re=ee;var dt=xe,ht=L.setEnvironment,yt=L.setPageVisit,bt=L.setRequestDomain,vt=L.setSafeRequest,wt=typeof L.setChannel=="function"?L.setChannel:o.setChannel,xt=L.setContextItem,It=L.setContextItemType,Vt=L.setCustomVariable,Lt=o.addHistories;function Me(a){L.setUserId(a),document.cookie=`froomle_user_id=${a}; max-age=${3600*24*365*20}; path=/; samesite=lax`}function Je(a){L.setDeviceId(a),document.cookie=`froomle_device_id=${a}; max-age=${3600*24*365*20}; path=/; samesite=lax`}function Ge(a){L.setConsent(a),document.cookie=`froomle_consent=${a}; max-age=${3600*24*365*20}; path=/; samesite=lax`,document.cookie=`froomle_device_id=${L.getDeviceId()}; max-age=${3600*24*365*20}; path=/; samesite=lax`}typeof window!="undefined"&&(window.setFroomleConsent=Ge);function je(a){let e=document.cookie.split("; ");for(let t of e){let[r,i]=t.split("=");if(r===a)return decodeURIComponent(i)}return null}var Nt=L.getRecommendations;if(!globalThis.froomleInitialized&&(globalThis.froomleInitialized=!0,typeof document!="undefined")){let a=document.currentScript;if(a){let t=a.getAttribute("data-froomle-device-id"),r=a.getAttribute("data-froomle-user-id"),i=a.getAttribute("data-froomle-env"),n=a.getAttribute("data-froomle-page-visit"),l=a.getAttribute("data-froomle-request-domain"),u=a.getAttribute("data-froomle-context-item"),g=a.getAttribute("data-froomle-context-item-type"),m=a.getAttribute("data-froomle-safe-request"),_=a.getAttribute("data-froomle-channel");if(ht(i),n&&yt(n),u&&(xt(u),It(g||"article")),t)Je(t);else{let f=je("froomle_device_id");f&&Je(f)}if(r)Me(r);else{let f=je("froomle_user_id");f&&Me(f)}l&&bt(l),m&&vt(m!=="false"),_&&wt(_)}let e=je("froomle_consent");e&&Ge(e),document.addEventListener("DOMContentLoaded",()=>{console.log("froomle loads dom"),oe.domInit(dt.fromDocument(document)).then(i=>{Re.registerClickables(),Q.processDocument(),Ie.sendPageVisit(),Ee.sendPageView()});function t(i){return i.matches("[data-froomle-reco]")||i.querySelector("[data-froomle-reco]")!==null}new MutationObserver(i=>{for(let n of i)if(n.type==="childList"&&n.addedNodes.forEach(l=>{l instanceof Element&&(t(l)&&oe.fillElementRecos(l),Q.processElement(l))}),n.type==="attributes"&&n.target instanceof Element)if(n.attributeName==="data-froomle-reco"){let l=n.target.getAttribute("data-froomle-request-id");(!l||l==="")&&oe.fillElementRecos(n.target)}else if(n.attributeName==="data-froomle-request-id"){let l=n.target.getAttribute("data-froomle-request-id"),u=n.target.getAttribute("data-froomle-id");n.target.getAttribute("data-froomle-reco")&&(!l||l==="")&&(!u||u==="")&&oe.fillElementRecos(n.target)}else n.attributeName==="data-froomle-id"&&Q.processElement(n.target)}).observe(document.body,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["data-froomle-reco","data-froomle-request-id","data-froomle-id"]})})}return Dt(Ut);})();
1
+ "use strict";var FroomleFrontendSdk=(()=>{var Pe=Object.defineProperty;var Ct=Object.getOwnPropertyDescriptor;var St=Object.getOwnPropertyNames;var kt=Object.prototype.hasOwnProperty;var qt=(u,e)=>{for(var t in e)Pe(u,t,{get:e[t],enumerable:!0})},At=(u,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of St(e))!kt.call(u,i)&&i!==t&&Pe(u,i,{get:()=>e[i],enumerable:!(r=Ct(e,i))||r.enumerable});return u};var Dt=u=>At(Pe({},"__esModule",{value:!0}),u);var Ut={};qt(Ut,{FroomleDomTree:()=>ht,RecoBackendV2:()=>o,RecommendationItem:()=>de,RecommendationList:()=>fe,Recommendations:()=>ge,_RecommendationItemInternal:()=>le,addHistories:()=>jt,getRecommendations:()=>Lt,sendEvent:()=>pt,setChannel:()=>xt,setConsent:()=>ze,setContextItem:()=>It,setContextItemType:()=>Et,setCustomVariable:()=>Vt,setDeviceId:()=>Ge,setEnvironment:()=>yt,setPageVisit:()=>bt,setRequestDomain:()=>vt,setSafeRequest:()=>wt,setUserId:()=>Je});var s=class u{static global(e){return u.globals[e]?u.globals[e]:u.globals[e]={}}static createStatic(e,t,r){let i=null;Object.defineProperty(e,t,{enumerable:!0,get:function(){return r!=null&&(i=r(),r=null),i},set:function(n){r!=null&&(i=r(),r=null),i=n}})}static iterator(e){if(Array.isArray(e)){let t=e;return function(){return u.mkIter(t)}}else return typeof e.iterator=="function"?e.iterator.bind(e):e.iterator}static getIterator(e){return Array.isArray(e)?u.mkIter(e):e.iterator()}static mkIter(e){return new $e(e)}static extend(e){function t(){this[u.new].apply(this,arguments)}return Object.setPrototypeOf(t.prototype,e.prototype),t}static inherits(e,t){t==null&&(t=!1);function r(){t&&e&&r[u.init]&&r[u.init](),this[u.new].apply(this,arguments)}return t?r[u.init]=()=>{let i=e();i[u.init]&&i[u.init](),Object.setPrototypeOf(r.prototype,i.prototype),r[u.init]=void 0}:e&&e[u.init]?(t=!0,r[u.init]=()=>{e[u.init]&&e[u.init](),Object.setPrototypeOf(r.prototype,e.prototype),r[u.init]=void 0}):e&&Object.setPrototypeOf(r.prototype,e.prototype),r}static bind(e,t){if(t==null)return null;t.__id__==null&&(t.__id__=u.fid++);let r=null;return e.hx__closures__==null?e.hx__closures__={}:r=e.hx__closures__[t.__id__],r==null&&(r=t.bind(e),e.hx__closures__[t.__id__]=r),r}static get __name__(){return"genes.Register"}get __class__(){return u}};s.$global=typeof window!="undefined"?window:typeof global!="undefined"?global:typeof self!="undefined"?self:void 0;s.globals={};s.new=Symbol();s.init=Symbol();s.fid=0;var $e=s.global("$hxClasses")["genes._Register.ArrayIterator"]=class We extends s.inherits(){[s.new](e){this.current=0,this.array=e}hasNext(){return this.current<this.array.length}next(){return this.array[this.current++]}static get __name__(){return"genes._Register.ArrayIterator"}get __class__(){return We}};$e.prototype.array=null;$e.prototype.current=null;var Kt=s.$global,Se=s.global("$hxClasses")["haxe.ValueException"]=class Ke extends s.inherits(()=>P,!0){[s.new](e,t,r){super[s.new](String(e),t,r),this.value=e}unwrap(){return this.value}static get __name__(){return"haxe.ValueException"}static get __super__(){return P}get __class__(){return Ke}};Se.prototype.value=null;var Zt=s.$global,P=s.global("$hxClasses")["haxe.Exception"]=class be extends s.inherits(()=>Error,!0){[s.new](e,t,r){Error.call(this,e),this.message=e,this.__previousException=t,this.__nativeException=r!=null?r:this}unwrap(){return this.__nativeException}get_native(){return this.__nativeException}static caught(e){return e instanceof be?e:e instanceof Error?new be(e.message,null,e):new Se(e,null,e)}static thrown(e){return e instanceof be?e.get_native():e instanceof Error?e:new Se(e)}static get __name__(){return"haxe.Exception"}static get __super__(){return Error}get __class__(){return be}};P.prototype.native=null;P.prototype.__skipStack=null;P.prototype.__nativeException=null;P.prototype.__previousException=null;var nr=s.$global,E=s.global("$hxClasses").Std=class Qe{static string(e){return ve.__string_rec(e,"")}static parseInt(e){let t=parseInt(e);return isNaN(t)?null:t}static random(e){return e<=0?0:Math.floor(Math.random()*e)}static get __name__(){return"Std"}get __class__(){return Qe}};Object.defineProperty(String.prototype,"__class__",{value:String,enumerable:!1,writable:!0}),String.__name__=!0,Array.__name__=!0,Ft={},Pt={},$t=Number,Tt=Boolean,Ot={},Bt={};var Ft,Pt,$t,Tt,Ot,Bt;var ar=s.$global,ve=s.global("$hxClasses")["js.Boot"]=class G{static getClass(e){if(e==null)return null;if(e instanceof Array)return Array;{let t=e.__class__;if(t!=null)return t;let r=G.__nativeClassName(e);return r!=null?G.__resolveNativeClass(r):null}}static __string_rec(e,t){if(e==null)return"null";if(t.length>=5)return"<...>";let r=typeof e;switch(r=="function"&&(e.__name__||e.__ename__)&&(r="object"),r){case"function":return"<function>";case"object":if(e.__enum__){let c=s.global("$hxEnums")[e.__enum__].__constructs__[e._hx_index],d=c._hx_name;return c.__params__?(t=t+" ",d+"("+(function(h){var m;let y=[];{let f=0,_=c.__params__;for(;f<_.length;){let I=_[f];f=f+1,y.push(G.__string_rec(e[I],t))}}return m=y,m})(this).join(",")+")"):d}if(e instanceof Array){let g="[";t+=" ";let c=0,d=e.length;for(;c<d;){let h=c++;g+=(h>0?",":"")+G.__string_rec(e[h],t)}return g+="]",g}let i;try{i=e.toString}catch{return"???"}if(i!=null&&i!=Object.toString&&typeof i=="function"){let g=e.toString();if(g!="[object Object]")return g}let n=`{
2
+ `;t+=" ";let l=e.hasOwnProperty!=null,a=null;for(a in e)l&&!e.hasOwnProperty(a)||a=="prototype"||a=="__class__"||a=="__super__"||a=="__interfaces__"||a=="__properties__"||(n.length!=2&&(n+=`,
3
+ `),n+=t+a+" : "+G.__string_rec(e[a],t));return t=t.substring(1),n+=`
4
+ `+t+"}",n;break;case"string":return e;default:return String(e)}}static __interfLoop(e,t){if(e==null)return!1;if(e==t)return!0;let r=e.__interfaces__;if(r!=null&&(e.__super__==null||e.__super__.__interfaces__!=r)){let i=0,n=r.length;for(;i<n;){let l=i++,a=r[l];if(a==t||G.__interfLoop(a,t))return!0}}return G.__interfLoop(e.__super__,t)}static __instanceof(e,t){if(t==null)return!1;switch(t){case Array:return e instanceof Array;case"$hxCoreType__Bool":return typeof e=="boolean";case"$hxCoreType__Dynamic":return e!=null;case"$hxCoreType__Float":return typeof e=="number";case"$hxCoreType__Int":return typeof e=="number"?(e|0)===e:!1;case String:return typeof e=="string";default:if(e!=null){if(typeof t=="function"){if(G.__downcastCheck(e,t))return!0}else if(typeof t=="object"&&G.__isNativeObj(t)&&e instanceof t)return!0}else return!1;return t=="$hxCoreType__Class"&&e.__name__!=null||t=="$hxCoreType__Enum"&&e.__ename__!=null?!0:e.__enum__!=null?s.global("$hxEnums")[e.__enum__]==t:!1}}static __downcastCheck(e,t){return e instanceof t?!0:t.__isInterface__?G.__interfLoop(G.getClass(e),t):!1}static __cast(e,t){if(e==null||G.__instanceof(e,t))return e;throw P.thrown("Cannot cast "+E.string(e)+" to "+E.string(t))}static __nativeClassName(e){let t=G.__toStr.call(e).slice(8,-1);return t=="Object"||t=="Function"||t=="Math"||t=="JSON"?null:t}static __isNativeObj(e){return G.__nativeClassName(e)!=null}static __resolveNativeClass(e){return s.$global[e]}static get __name__(){return"js.Boot"}get __class__(){return G}};ve.__toStr={}.toString;var _r=s.$global,Te=s.global("$hxClasses")["js.Browser"]=class Xe{static get supported(){return this.get_supported()}static get_supported(){return typeof window!="undefined"&&typeof window.location!="undefined"?typeof window.location.protocol=="string":!1}static createXMLHttpRequest(){if(typeof XMLHttpRequest!="undefined")return new XMLHttpRequest;if(typeof ActiveXObject!="undefined")return new"ActiveXObject"("Microsoft.XMLHTTP");throw P.thrown("Unable to create XMLHttpRequest object.")}static get __name__(){return"js.Browser"}get __class__(){return Xe}};var dr=s.$global,ee=s.global("$hxEnums")["haxe.io.Error"]={__ename__:"haxe.io.Error",Blocked:{_hx_name:"Blocked",_hx_index:0,__enum__:"haxe.io.Error"},Overflow:{_hx_name:"Overflow",_hx_index:1,__enum__:"haxe.io.Error"},OutsideBounds:{_hx_name:"OutsideBounds",_hx_index:2,__enum__:"haxe.io.Error"},Custom:Object.assign(u=>({_hx_index:3,__enum__:"haxe.io.Error",e:u}),{_hx_name:"Custom",__params__:["e"]})};ee.__constructs__=[ee.Blocked,ee.Overflow,ee.OutsideBounds,ee.Custom];ee.__empty_constructs__=[ee.Blocked,ee.Overflow,ee.OutsideBounds];var yr=s.$global,re=s.global("$hxEnums")["haxe.io.Encoding"]={__ename__:"haxe.io.Encoding",UTF8:{_hx_name:"UTF8",_hx_index:0,__enum__:"haxe.io.Encoding"},RawNative:{_hx_name:"RawNative",_hx_index:1,__enum__:"haxe.io.Encoding"}};re.__constructs__=[re.UTF8,re.RawNative];re.__empty_constructs__=[re.UTF8,re.RawNative];var Er=s.$global,_e=s.global("$hxClasses")["haxe.io.Bytes"]=class Oe extends s.inherits(){[s.new](e){this.length=e.byteLength,this.b=new Uint8Array(e),this.b.bufferValue=e,e.hxBytes=this,e.bytes=this.b}getString(e,t,r){if(e<0||t<0||e+t>this.length)throw P.thrown(ee.OutsideBounds);r==null&&(r=re.UTF8);let i="",n=this.b,l=e,a=e+t;switch(r._hx_index){case 0:let g=e>0;for(;l<a;){let c=n[l++];if(c<128){if(c==0)break;i+=String.fromCodePoint(c)}else if(c<224){let d=(c&63)<<6|n[l++]&127;i+=String.fromCodePoint(d)}else if(c<240){let d=n[l++],h=(c&31)<<12|(d&127)<<6|n[l++]&127;i+=String.fromCodePoint(h)}else{let d=n[l++],h=n[l++],m=(c&15)<<18|(d&127)<<12|(h&127)<<6|n[l++]&127;i+=String.fromCodePoint(m)}}break;case 1:for(;l<a;){let c=n[l++]|n[l++]<<8;i+=String.fromCodePoint(c)}break}return i}static ofData(e){let t=e.hxBytes;return t!=null?t:new Oe(e)}static get __name__(){return"haxe.io.Bytes"}get __class__(){return Oe}};_e.prototype.length=null;_e.prototype.b=null;var kr=s.$global,te=s.global("$hxClasses")["haxe.http.HttpBase"]=class Ye extends s.inherits(){[s.new](e){this.url=e,this.headers=[],this.params=[],this.emptyOnData=s.bind(this,this.onData)}get responseData(){return this.get_responseData()}setHeader(e,t){let r=0,i=this.headers.length;for(;r<i;){let n=r++;if(this.headers[n].name==e){this.headers[n]={name:e,value:t};return}}this.headers.push({name:e,value:t})}setPostData(e){this.postData=e,this.postBytes=null}onData(e){}onBytes(e){}onError(e){}onStatus(e){}hasOnData(){return s.bind(this,this.onData)!=this.emptyOnData}success(e){this.responseBytes=e,this.responseAsString=null,this.hasOnData()&&this.onData(this.get_responseData()),this.onBytes(this.responseBytes)}get_responseData(){return this.responseAsString==null&&this.responseBytes!=null&&(this.responseAsString=this.responseBytes.getString(0,this.responseBytes.length,re.UTF8)),this.responseAsString}static get __name__(){return"haxe.http.HttpBase"}get __class__(){return Ye}};te.prototype.url=null;te.prototype.responseBytes=null;te.prototype.responseAsString=null;te.prototype.postData=null;te.prototype.postBytes=null;te.prototype.headers=null;te.prototype.params=null;te.prototype.emptyOnData=null;var Dr=s.$global,ke=s.global("$hxClasses")["haxe.iterators.MapKeyValueIterator"]=class Ze extends s.inherits(){[s.new](e){this.map=e,this.keys=e.keys()}hasNext(){return this.keys.hasNext()}next(){let e=this.keys.next();return{value:this.map.get(e),key:e}}static get __name__(){return"haxe.iterators.MapKeyValueIterator"}get __class__(){return Ze}};ke.prototype.map=null;ke.prototype.keys=null;var $r=s.$global,Be=function(){};Be.__isInterface__=!0;var Hr=s.$global,qe=s.global("$hxClasses")["genes.util.EsMap"]=class we extends s.inherits(){[s.new](){this.inst=new Map}set(e,t){this.inst.set(e,t)}get(e){return this.inst.get(e)}remove(e){return this.inst.delete(e)}exists(e){return this.inst.has(e)}keys(){return we.adaptIterator(this.inst.keys())}iterator(){return we.adaptIterator(this.inst.values())}toString(){let e=[],t=we.adaptIterator(this.inst.keys());for(;t.hasNext();){let r=t.next();e.push(""+E.string(r)+" => "+E.string(this.inst.get(r)))}return"{"+e.join(", ")+"}"}clear(){this.inst.clear()}static adaptIterator(e){let t,r,i=function(){let n=e.next();t=n.value,r=n.done};return{hasNext:function(){return r==null&&i(),!r},next:function(){r==null&&i();let n=t;return i(),n}}}static get __name__(){return"genes.util.EsMap"}get __class__(){return we}};qe.prototype.inst=null;var Mr=s.$global,et=s.global("$hxClasses")["haxe.ds.StringMap"]=class He extends s.inherits(qe){[s.new](){super[s.new]()}copy(){let e=new He;return e.inst=new Map(this.inst),e}keyValueIterator(){return new ke(this)}static get __name__(){return"haxe.ds.StringMap"}static get __interfaces__(){return[Be]}static get __super__(){return qe}get __class__(){return He}};var zr=s.$global,U=s.global("$hxClasses").HxOverrides=class tt{static cca(e,t){let r=e.charCodeAt(t);if(r==r)return r}static substr(e,t,r){if(r==null)r=e.length;else if(r<0)if(t==0)r=e.length+r;else return"";return e.substr(t,r)}static now(){return Date.now()}static get __name__(){return"HxOverrides"}get __class__(){return tt}};typeof performance!="undefined"&&typeof performance.now=="function"&&(U.now=performance.now.bind(performance));var Xr=s.$global,ue=s.global("$hxClasses").StringTools=class Ae{static isSpace(e,t){let r=U.cca(e,t);return r>8&&r<14?!0:r==32}static ltrim(e){let t=e.length,r=0;for(;r<t&&Ae.isSpace(e,r);)++r;return r>0?U.substr(e,r,t-r):e}static rtrim(e){let t=e.length,r=0;for(;r<t&&Ae.isSpace(e,t-r-1);)++r;return r>0?U.substr(e,0,t-r):e}static replace(e,t,r){return e.split(t).join(r)}static get __name__(){return"StringTools"}get __class__(){return Ae}};var en=s.$global,rt=s.global("$hxClasses").Lambda=class nt{static exists(e,t){let r=s.getIterator(e);for(;r.hasNext();){let i=r.next();if(t(i))return!0}return!1}static get __name__(){return"Lambda"}get __class__(){return nt}};var on=s.$global,xe=s.global("$hxClasses").EReg=class it extends s.inherits(){[s.new](e,t){this.r=new RegExp(e,t.split("u").join(""))}match(e){return this.r.global&&(this.r.lastIndex=0),this.r.m=this.r.exec(e),this.r.s=e,this.r.m!=null}matched(e){if(this.r.m!=null&&e>=0&&e<this.r.m.length)return this.r.m[e];throw P.thrown("EReg::matched")}matchedPos(){if(this.r.m==null)throw P.thrown("No string matched");return{pos:this.r.m.index,len:this.r.m[0].length}}matchSub(e,t,r){if(r==null&&(r=-1),this.r.global){this.r.lastIndex=t,this.r.m=this.r.exec(r<0?e:U.substr(e,0,t+r));let i=this.r.m!=null;return i&&(this.r.s=e),i}else{let i=this.match(r<0?U.substr(e,t,null):U.substr(e,t,r));return i&&(this.r.s=e,this.r.m.index+=t),i}}map(e,t){let r=0,i="";do{if(r>=e.length)break;if(!this.matchSub(e,r)){i+=E.string(U.substr(e,r,null));break}let n=this.matchedPos();i+=E.string(U.substr(e,r,n.pos-r)),i+=E.string(t(this)),n.len==0?(i+=E.string(U.substr(e,n.pos,1)),r=n.pos+1):r=n.pos+n.len}while(this.r.global);return!this.r.global&&r>0&&r<e.length&&(i+=E.string(U.substr(e,r,null))),i}static get __name__(){return"EReg"}get __class__(){return it}};xe.prototype.r=null;var bn=s.$global,ce=s.global("$hxClasses")["haxe.http.HttpJs"]=class st extends s.inherits(te){[s.new](e){this.async=!0,this.withCredentials=!1,super[s.new](e)}request(e){this.responseAsString=null,this.responseBytes=null,this.responseHeaders=null;let t=this.req=Te.createXMLHttpRequest(),r=this,i=function(d){if(t.readyState!=4)return;let h;try{h=t.status}catch{h=null}if(h==0&&Te.get_supported()&&s.$global.location!=null){let m=s.$global.location.protocol.toLowerCase();new xe("^(?:about|app|app-storage|.+-extension|file|res|widget):$","").match(m)&&(h=t.response!=null?200:404)}if(h==null&&(h=null),h!=null&&r.onStatus(h),h!=null&&h>=200&&h<400){r.req=null;let m=t.getAllResponseHeaders().split(`\r
5
+ `),y=[],f=0,_=m;for(;f<_.length;){let b=_[f];++f,b!=""&&y.push(b)}m=y;let I=new et;r.responseHeaders=I;let C=0;for(;C<m.length;){let b=m[C];++C;let x=b.split(": "),D=x.shift(),q=x.length==1?x[0]:x.join(": ");q=ue.ltrim(ue.rtrim(q)),r.responseHeaders.inst.set(D,q)}r.success(_e.ofData(t.response))}else if(h==null||h==0&&t.response==null)r.req=null,r.onError("Failed to connect or resolve host");else if(h==null){r.req=null;let m=t.response!=null?_e.ofData(t.response):null;r.responseBytes=m,r.onError("Http Error #"+t.status)}else switch(h){case 12007:r.req=null,r.onError("Unknown host");break;case 12029:r.req=null,r.onError("Failed to connect to host");break;default:r.req=null;let m=t.response!=null?_e.ofData(t.response):null;r.responseBytes=m,r.onError("Http Error #"+t.status)}};this.async&&(t.onreadystatechange=i);let n,l=this.postData,a=this.postBytes;if(l==null)if(a==null)n=null;else{let d=a;n=new Blob([d.b.bufferValue])}else a==null?n=l:n=null;if(n!=null)e=!0;else{let d=0,h=this.params;for(;d<h.length;){let m=h[d];++d,n==null?n="":n=(n==null?"null":E.string(n))+"&";let y=m.name,f=(n==null?"null":E.string(n))+encodeURIComponent(y)+"=",_=m.value;n=f+encodeURIComponent(_)}}try{if(e)t.open("POST",this.url,this.async);else if(n!=null){let d=this.url.split("?").length<=1;t.open("GET",this.url+(d?"?":"&")+(n==null?"null":E.string(n)),this.async),n=null}else t.open("GET",this.url,this.async);t.responseType="arraybuffer"}catch(d){let h=P.caught(d).unwrap();this.req=null,this.onError(h.toString());return}t.withCredentials=this.withCredentials,!rt.exists(this.headers,function(d){return d.name=="Content-Type"})&&e&&this.postData==null&&t.setRequestHeader("Content-Type","application/x-www-form-urlencoded");let g=0,c=this.headers;for(;g<c.length;){let d=c[g];++g,t.setRequestHeader(d.name,d.value)}t.send(n),this.async||i(null)}static get __name__(){return"haxe.http.HttpJs"}static get __super__(){return te}get __class__(){return st}};ce.prototype.async=null;ce.prototype.withCredentials=null;ce.prototype.responseHeaders=null;ce.prototype.req=null;var xn=s.$global,Ne=s.global("$hxClasses").Type=class lt{static createInstance(e,t){let r=Function.prototype.bind.apply(e,[null].concat(t));return new r}static get __name__(){return"Type"}get __class__(){return lt}};var Rn=s.$global,R=s.global("$hxClasses").Reflect=class ot{static field(e,t){try{return e[t]}catch{return null}}static getProperty(e,t){let r;if(e==null)return null;{let i;return e.__properties__?(r=e.__properties__["get_"+t],i=r):i=!1,i?e[r]():e[t]}}static setProperty(e,t,r){let i,n;e.__properties__?(i=e.__properties__["set_"+t],n=i):n=!1,n?e[i](r):e[t]=r}static fields(e){let t=[];if(e!=null){let i=Object.prototype.hasOwnProperty;for(var r in e)r!="__id__"&&r!="hx__closures__"&&i.call(e,r)&&t.push(r)}return t}static compare(e,t){return e==t?0:e>t?1:-1}static get __name__(){return"Reflect"}get __class__(){return ot}};var Pn=s.$global,je=s.global("$hxClasses")["internal.http.FetchHttp"]=class at extends s.inherits(ce){[s.new](e){this.responseStatus=0,super[s.new](e)}request(e){let t=s.$global,r=t.fetch,i=t.Headers,n=t.URLSearchParams;if(r==null){this.onError("Fetch API not found.");return}let l=Ne.createInstance(i,[]),a=0,g=this.headers;for(;a<g.length;){let _=g[a];++a,l.append(_.name,_.value)}let c=e?"POST":"GET",d=null;if(e)if(this.postData!=null)d=this.postData;else{d=Ne.createInstance(n,[]);let _=0,I=this.params;for(;_<I.length;){let C=I[_];++_,d.append(C.name,C.value)}}let h={method:c,headers:l,body:d},m=this,y=r(this.url,h).then(function(_){if(m.responseStatus=_.status,m.onStatus(_.status),_.ok)return _.text();throw P.thrown("HTTP Error: "+E.string(_.status))}).then(function(_){m.onData(_)}),f=R.field(y,"catch");f!=null&&f.apply(y,[function(_){m.onError(E.string(_))}])}static get __name__(){return"internal.http.FetchHttp"}static get __super__(){return ce}get __class__(){return at}};je.prototype.responseStatus=null;var Bn=s.$global,Ve=s.global("$hxClasses")["internal.data.UUID"]=class ut{static randomHexChar(){return"0123456789abcdef".charAt(E.random(16))}static v4(){let e="",t=0;for(;t<36;)switch(t++){case 14:e+="4";break;case 19:e+=E.string("0123456789abcdef".charAt(8+E.random(4)));break;case 8:case 13:case 18:case 23:e+="-";break;default:e+=E.string("0123456789abcdef".charAt(E.random(16)))}return e}static get __name__(){return"internal.data.UUID"}get __class__(){return ut}};Ve.HEX="0123456789abcdef";var jn=s.$global,ge=function(){};ge.__isInterface__=!0;var fe=function(){};fe.__isInterface__=!0;var de=function(){};de.__isInterface__=!0;var Qn=s.$global,o=s.global("$hxClasses")["internal.RecoBackendV2"]=class v extends s.inherits(){[s.new](){}static _requestUri(){return(v._safe_request?"https://":"http://")+v._req_domain+"/api/"+v._environment+"/recommendations/requests"}static noConsentBody(){return{device_id:"no-consent",user_group:"no-consent",version:"no-consent"}}static buildRequestBody(e){let t={lists:e,page_type:v._page_visit,channel:v._channel};if(v._consent>=2&&v._history.length>0&&(t.histories=v._buildHistories()),v._consent<2){let a=v.noConsentBody(),g=0,c=R.fields(a);for(;g<c.length;){let d=c[g];++g,t[d]=R.field(a,d)}}else v._user_id!=null&&(t.user_id=v._user_id),t.device_id=v._device_id;let r=0,i=v._others;for(;r<i.length;){let a=i[r];++r,t[a.key]=a.value}let n=R.field(t,"context_item"),l=R.field(t,"context_item_type");return n!=null&&E.string(n)!=""&&(l==null||E.string(l)=="")&&(t.context_item_type="article"),t}static _buildHistories(){return{pageviews:v._history}}static requestsToLists(e){let t=[],r="",i=[],n=0,l=[],a=function(m,y,f){r=m,i=y,n=0,l=f},g=function(m){let y=[];if(m==null)return y;let f=0;for(;f<m.length;){let _=m[f];++f,!(_==null||_.key==null||_.key=="")&&y.push({key:_.key,value:_.value})}return y},c=function(m,y){if(m==null&&y==null)return!0;if(m==null||y==null||m.length!=y.length)return!1;let f=new Array(m.length),_=0,I=m.length;for(;_<I;){let A=_++;f[A]=JSON.stringify(m[A])}let C=f,b=new Array(y.length),x=0,D=y.length;for(;x<D;){let A=x++;b[A]=JSON.stringify(y[A])}let q=b;C.sort(R.compare),q.sort(R.compare);let M=0,N=C.length;for(;M<N;){let A=M++;if(C[A]!=q[A])return!1}return!0},d=function(){let m={limit:n,list_name:r,list_size:n},y=0;for(;y<i.length;){let _=i[y];++y;let I=_.value;I instanceof Array||(I=[I]),m[_.key]=I}let f=0;for(;f<l.length;){let _=l[f];++f,m[_.key]=_.value}t.push(m)},h=0;for(;h<e.length;){let m=e[h];++h;let y=g(m.filters),f=m.others!=null?m.others:[];if(r==""){a(m.list,y,f),n+=1;continue}else(r!=m.list||!c(i,y)||!c(l,f))&&(d(),a(m.list,y,f));n+=1}return n!=0&&d(),t}static _requestRecos(e){let t=null,r=null,i=new Promise(function(f,_){t=f,r=_}),n=i;n._resolve=t,n._reject=r,n._isFinished=!1,n._result=null,n._error=null;let l=i,a=!1,g=new je(v._requestUri());g.setHeader("Content-Type","application/json");let c=v.buildRequestBody(e),d=JSON.stringify(c);g.setPostData(d);let h=function(f){if(a)return;a=!0;let _=l;_._isFinished||(_._error=f,_._isFinished=!0,_._reject(f))};g.onError=function(f){h("HTTP Request Error: "+f)},g.onStatus=function(f){(f<200||f>=300)&&h("HTTP Status Error: "+f)};try{g.request(!0)}catch(f){let _=P.caught(f).unwrap();return h("Failed to execute recommendation request: "+E.string(_)),l}let m=function(f){if(!a)try{let _=JSON.parse(f),I=pe.fromRequestData(_);a=!0;let C=l;C._isFinished||(C._result=I,C._error=null,C._isFinished=!0,C._resolve(I))}catch(_){let I=P.caught(_).unwrap();h("Failed to parse recommendation response: "+E.string(I))}},y=g.get_responseData();return y!=null?m(y):a||(g.onData=m),l}static getOrder(e,t,r){let i={list_name:e,limit:r.length,list_size:r.length},n={};R.setProperty(n,t,r),R.setProperty(i,"order",n);let l=null,a=null,g=new Promise(function(m,y){l=m,a=y}),c=g;c._resolve=l,c._reject=a,c._isFinished=!1,c._result=null,c._error=null;let d=g,h;return v.getRawRecommendations([i]).then(function(m){try{let y=[],f=m.lists();if(f!=null&&f.length>0){let I=f[0].items;if(I instanceof Array){let C=0,b=I;for(;C<b.length;){let x=b[C];++C;let D=x.get("categories");D!=null&&y.push(D)}}}let _=d;_._isFinished||(_._result=y,_._error=null,_._isFinished=!0,_._resolve(y))}catch(y){let f=P.caught(y).unwrap(),_="Failed to build order response: "+E.string(f),I=d;I._isFinished||(I._error=_,I._isFinished=!0,I._reject(_))}},function(m){let y=d;y._isFinished||(y._error=m,y._isFinished=!0,y._reject(m))}),d}static getRawRecommendations(e){return v._requestRecos(e)}static addHistories(e,t){if(t==null&&(t="article"),e==null||e.length==0)return;let r=t!=null&&t!=""?t:"article",i=0;for(;i<e.length;){let n=e[i];if(++i,typeof n=="string"){let h=E.string(n);h!=""&&v._history.push({id:h,item_type:r});continue}let l=n,a=R.field(l,"id");if(a==null)continue;let g=E.string(a);if(g=="")continue;let c=R.field(l,"item_type");(c==null||E.string(c)=="")&&(c=R.field(l,"itemType"));let d=c!=null&&E.string(c)!=""?E.string(c):r;v._history.push({id:g,item_type:d})}}static setOthers(e,t){let r=0,i=v._others;for(;r<i.length;){let n=i[r];if(++r,n.key==e){n.value=t;return}}v._others.push({key:e,value:t})}static setConsent(e){e>2&&(e=2),v._consent=e,e==2&&v.getDeviceId()=="no-consent"&&v.setDeviceId(Ve.v4())}static setChannel(e){v._channel=e}static setPageVisit(e){v._page_visit=e}static setEnvironment(e){v._environment=e}static setDeviceId(e){v._device_id=e}static setUserId(e){v._user_id=e}static setRequestDomain(e){v._req_domain=e}static setSafeRequest(e){v._safe_request=e}static setContextItem(e){v.setOthers("context_item",e)}static setContextItemType(e){v.setOthers("context_item_type",e)}static getRequestDomain(){return v._req_domain}static getSafeRequest(){return v._safe_request}static getEnvironment(){return v._environment}static getPageVisit(){return v._page_visit}static getUserId(){return v._user_id}static getDeviceId(){return v._device_id}static getConsent(){return v._consent}static getChannel(){return v._channel}static getOthers(e){let t=0,r=v._others;for(;t<r.length;){let i=r[t];if(++t,e==i.key)return i.value}return null}static getContextItem(){return v.getOthers("context_item")}static getContextItemType(){return v.getOthers("context_item_type")}static get __name__(){return"internal.RecoBackendV2"}get __class__(){return v}};o._environment=null;o._device_id="no-consent";o._user_id=null;o._consent=0;o._req_domain="europe-west1.froomle.com";o._page_visit=null;o._channel="www-desktop";o._safe_request=!0;o._history=[];o._others=[];var pe=s.global("$hxClasses")["internal._RecommendationsInternal"]=class Le extends s.inherits(){[s.new](e,t,r,i,n){this.request_id=t,this.user_group=r,this.device_id=e,this.user_id=i,this._lists=n}items(){let e=[],t=0,r=this._lists;for(;t<r.length;){let i=r[t];++t;let n=0,l=i.items;for(;n<l.length;){let a=l[n];++n,e.push(a)}}return e}lists(){return this._lists}getItemsByListName(e){let t=0,r=this._lists;for(;t<r.length;){let i=r[t];if(++t,i.list_name==e)return i}return null}toJson(){let e={request_id:this.request_id,user_group:this.user_group,user_id:this.user_id,device_id:this.device_id,lists:[]},t=0,r=this._lists;for(;t<r.length;){let i=r[t];++t;let n={limit:i.limit,list_key:i.list_key,list_name:i.list_name,list_size:i.list_size,items:[]},l=0,a=i.items;for(;l<a.length;){let g=a[l];++l,n.items.push(ve.__cast(g,le).getData())}e.lists.push(n)}return JSON.stringify(e)}static fromRequestData(e){let t=R.getProperty(e,"lists"),r=[],i=0;for(;i<t.length;){let n=t[i];++i;let l=R.getProperty(n,"items"),a=[],g=0;for(;g<l.length;){let d=l[g];++g,R.setProperty(d,"request_id",R.getProperty(e,"request_id")),R.setProperty(d,"user_group",R.getProperty(e,"user_group")),a.push(new le(d))}let c=new me({limit:R.getProperty(n,"limit"),list_key:R.getProperty(n,"list_key"),list_name:R.getProperty(n,"list_name"),list_size:R.getProperty(n,"list_size"),items:a,request_id:R.getProperty(e,"request_id")});r.push(c)}return new Le(R.getProperty(e,"device_id"),R.getProperty(e,"request_id"),R.getProperty(e,"user_group"),R.getProperty(e,"user_id"),r)}static get __name__(){return"internal._RecommendationsInternal"}static get __interfaces__(){return[ge]}get __class__(){return Le}};pe.prototype.request_id=null;pe.prototype.user_group=null;pe.prototype.user_id=null;pe.prototype.device_id=null;pe.prototype._lists=null;var me=s.global("$hxClasses")["internal._RecommendationsListInternal"]=class ct extends s.inherits(){[s.new](e){this.items=e.items,this.limit=e.limit,this.list_key=e.list_key,this.list_name=e.list_name,this.list_size=e.list_size,this.request_id=e.request_id}static get __name__(){return"internal._RecommendationsListInternal"}static get __interfaces__(){return[fe]}get __class__(){return ct}};me.prototype.limit=null;me.prototype.list_key=null;me.prototype.list_name=null;me.prototype.list_size=null;me.prototype.items=null;me.prototype.request_id=null;var le=s.global("$hxClasses")["internal._RecommendationItemInternal"]=class mt extends s.inherits(){[s.new](e){this.Id=R.getProperty(e,"item_id"),this.RequestId=R.getProperty(e,"request_id"),this.UserGroup=R.getProperty(e,"user_group"),this._data=e}getData(){return this._data}get(e){return this._data[e]}toJson(){return JSON.stringify(this._data)}static get __name__(){return"internal._RecommendationItemInternal"}static get __interfaces__(){return[de]}get __class__(){return mt}};le.prototype.Id=null;le.prototype.RequestId=null;le.prototype.UserGroup=null;le.prototype._data=null;var Zn=s.$global,Ue=function(){};Ue.__isInterface__=!0;var ni=s.$global,Ie=s.global("$hxClasses")["internal.js.JSFroomleDomTree"]=class De extends s.inherits(){[s.new](){}getRoot(){return this.root}createElement(e){return this.root.ownerDocument.createElement(e)}toString(){return this.root.ownerDocument.documentElement.outerHTML}static fromHTML(e){let r=new DOMParser().parseFromString(e,"text/html"),i=new De;return i.root=r.documentElement,i}static fromDocument(e){let t=new De;return t.root=e.documentElement,t}static get __name__(){return"internal.js.JSFroomleDomTree"}static get __interfaces__(){return[Ue]}get __class__(){return De}};Ie.prototype.root=null;var gi=s.$global,ae=s.global("$hxClasses")["internal.domHandler.DomDomDom"]=class ne extends s.inherits(){[s.new](){}static _fillRecoTargets(e){let t=null,r=null,i=new Promise(function(p,w){t=p,r=w}),n=i;n._resolve=t,n._reject=r,n._isFinished=!1,n._result=null,n._error=null;let l=i;if(e==null){let p=l;return p._isFinished||(p._result=!1,p._error=null,p._isFinished=!0,p._resolve(!1)),l}let a=[],g=new Array,c=e.querySelectorAll("*"),d=0,h=c.length;for(;d<h;){let p=d++,w=c.item(p);w instanceof HTMLElement&&g.push(w)}let m=g;m.push(e);let y=0;for(;y<m.length;){let p=m[y];++y;let w=0,k=new Array,S=0,F=p.attributes;for(;S<F.length;){let j=F[S];++S,k.push({name:j.name,value:j.value})}let T=k;for(;w<T.length;){let j=T[w];++w,j.name=="data-froomle-reco"&&a.push(p)}}let f=[],_=0;for(;_<a.length;){let p=a[_];++_;let w=p.getAttribute("data-froomle-request-id"),k=p.getAttribute("data-froomle-id"),S=w!=null&&w!="",F=k!=null&&k!="";!S&&!F&&f.push(p)}if(f.length<1){let p=null,w=null,k=new Promise(function(F,T){p=F,w=T}),S=k;return S._resolve=p,S._reject=w,S._isFinished=!1,S._result=null,S._error=null,k}let I=[],C=[],b="",x=[],D=[],q=[],M=function(p,w){if(p.length!=w.length)return!1;let k=new Array(p.length),S=0,F=p.length;for(;S<F;){let O=S++;k[O]=JSON.stringify(p[O])}let T=k,j=new Array(w.length),z=0,X=w.length;for(;z<X;){let O=z++;j[O]=JSON.stringify(w[O])}let Q=j;T.sort(R.compare),Q.sort(R.compare);let W=0,J=T.length;for(;W<J;){let O=W++;if(T[O]!=Q[O])return!1}return!0},N=function(){let p={list_name:b,list_size:D.length,limit:D.length},w=0;for(;w<x.length;){let S=x[w];if(++w,S!=null&&S.key!=null&&S.key!=""){let F=S.value;F instanceof Array||(F=[F]),R.setProperty(p,S.key,F)}}let k=0;for(;k<q.length;){let S=q[k];++k,R.setProperty(p,S.key,S.value)}I.push(p),C.push(D)},A=function(p,w,k,S){b=p,x=w,D=[S],q=k},K=0;for(;K<f.length;){let p=f[K];++K;let w=function(j){let z=[],X=0,Q=new Array,W=0,J=j.attributes;for(;W<J.length;){let V=J[W];++W,Q.push({name:V.name,value:V.value})}let O=Q;for(;X<O.length;){let V=O[X];if(++X,V.name.startsWith("data-froomle-reco-filter-")){let Z=U.substr(V.name,25,null),se=V.value;z.push({key:Z,value:se})}}return z},k=function(j){let z=[],X=0,Q=new Array,W=0,J=j.attributes;for(;W<J.length;){let V=J[W];++W,Q.push({name:V.name,value:V.value})}let O=Q;for(;X<O.length;){let V=O[X];if(++X,V.name.startsWith("data-froomle-variable-")){let Z=U.substr(V.name,22,null),se=V.value;z.push({key:Z,value:se})}}return z},S=p.getAttribute("data-froomle-reco"),F=w(p),T=k(p);if(b==""){A(S,F,T,p);continue}else if(S==b&&M(x,F)&&M(q,T)){D.push(p);continue}else{N(),A(S,F,T,p);continue}}b!=""&&N();let $;if(o.getPageVisit()==null){let p=l;return p._isFinished||(p._result=!1,p._error=null,p._isFinished=!0,p._resolve(!1)),l}else if(o.getEnvironment()==null){let p=l;return p._isFinished||(p._result=!1,p._error=null,p._isFinished=!0,p._resolve(!1)),l}else try{$=o.getRawRecommendations(I)}catch{let w=l;return w._isFinished||(w._result=!1,w._error=null,w._isFinished=!0,w._resolve(!1)),l}return $.then(function(p){let w=p.lists(),k=w.length,S=0,F=k;for(;S<F;){let j=S++,z=w[j],X=z.items.length!=C[j].length,Q=z.items.length,W=0,J=Q;for(;W<J;){let O=W++,V=z.items[O],Z=C[j][O];ne._fillParameters(Z,V,p.request_id)}}let T=l;T._isFinished||(T._result=!0,T._error=null,T._isFinished=!0,T._resolve(!0))}),l}static getAttrByPath(e,t,r){r==null&&(r="fgh");try{t=new xe("\\\\[(\\\\w+)\\\\]","g").map(t,function(c){return"."+c.matched(1)}),t=ue.replace(t,"[","."),t=ue.replace(t,"]",""),U.cca(t,0)==46&&(t=U.substr(t,1,null));let n=t.split("."),l=e.get(n[0]),a=1,g=n.length;for(;a<g;){let c=a++;if(l==null)return null;l instanceof Array&&E.parseInt(n[c])!=null?l=l[E.parseInt(n[c])]:l=R.field(l,n[c])}return l}catch{return r}}static _buildHistories(e){let t=[],r=new Array,i=e.querySelectorAll("[data-froomle-id]"),n=0,l=i.length;for(;n<l;){let c=n++,d=i.item(c);d instanceof HTMLElement&&r.push(d)}let a=r,g=0;for(;g<a.length;){let c=a[g];++g,t.push(c.getAttribute("data-froomle-id"))}o.addHistories(t)}static fillParam(e,t,r,i,n){n==null&&(n="");try{let l=ne.getAttrByPath(i,r,n);if(t=="inner"){e.textContent=l;let a=e.textContent}else e.setAttribute(t,l)}catch{}}static _fillParameters(e,t,r){e.setAttribute("data-froomle-id",t.get("item_id")),e.setAttribute("data-froomle-request-id",r);let i=t.get("item_type");i!=null&&E.string(i)!=""&&e.setAttribute("data-froomle-item-type",E.string(i)),t.UserGroup!=null&&t.UserGroup!=""&&e.setAttribute("data-froomle-user-group",t.UserGroup);let n=new Array,l=e.querySelectorAll("*"),a=0,g=l.length;for(;a<g;){let h=a++,m=l.item(h);m instanceof HTMLElement&&n.push(m)}let c=n,d=0;for(;d<c.length;){let h=c[d];++d;let m=0,y=new Array,f=0,_=h.attributes;for(;f<_.length;){let C=_[f];++f,y.push({name:C.name,value:C.value})}let I=y;for(;m<I.length;){let C=I[m];if(++m,C.name.startsWith("data-froomle-param-")){let b=ue.replace(C.name,"data-froomle-param-",""),x=C.value;ne.fillParam(h,b,x,t)}}}}static _orderElements(e){let t=function(b,x,D){let q=[],M=new Array,N=0,A=b.childNodes;for(;N<A.length;){let k=A[N];++N,M.push(k)}let K=M,$=0;for(;$<K.length;){let k=K[$];++$;try{if(k.getAttribute("data-froomle-ordervalue")!=null){q.push(k);let F=e.createElement("span");F.setAttribute("data-froomle-tmp-node","tmp"),b.replaceChild(F,k)}}catch{}}let p=[],w=0;for(;w<q.length;){let k=q[w];++w,p.push(k.getAttribute("data-froomle-ordervalue"))}return{el:b,key:x,values:p,orderChildren:q,list_name:D}},r=null,i=null,n=new Promise(function(b,x){r=b,i=x}),l=n;l._resolve=r,l._reject=i,l._isFinished=!1,l._result=null,l._error=null;let a=n,g=e.getRoot(),c=new Array,d=g.querySelectorAll("*"),h=0,m=d.length;for(;h<m;){let b=h++,x=d.item(b);x instanceof HTMLElement&&c.push(x)}let y=c,f=[],_=0;for(;_<y.length;){let b=y[_];++_;let x=0,D=new Array,q=0,M=b.attributes;for(;q<M.length;){let A=M[q];++q,D.push({name:A.name,value:A.value})}let N=D;for(;x<N.length;){let A=N[x];++x,A.name.startsWith("data-froomle-order-")&&f.push(t(b,A.name.substring(19),A.value))}}if(f.length<1){let b=a;return b._isFinished||(b._result=!1,b._error=null,b._isFinished=!0,b._resolve(!1)),a}let I=[],C=0;for(;C<f.length;){let b=f[C];++C;let x={list_name:b.list_name,limit:b.values.length,list_size:b.values.length},D={};R.setProperty(D,b.key,b.values),R.setProperty(x,"order",D),I.push(x)}if(o.getPageVisit()==null){let b=a;return b._isFinished||(b._result=!1,b._error=null,b._isFinished=!0,b._resolve(!1)),a}else if(o.getEnvironment()==null){let b=a;return b._isFinished||(b._result=!1,b._error=null,b._isFinished=!0,b._resolve(!1)),a}try{o.getRawRecommendations(I).then(function(b){let x=b.lists(),D=x.length,q=0,M=D;for(;q<M;){let A=q++,K=x[A],$=f[A];$.el.setAttribute("data-froomle-request-id",b.request_id);let p=new Array,w=0,k=K.items;for(;w<k.length;){let J=k[w];++w;let O=J.get($.key),V=J.get($.key),Z=$.values.length,se=0,he=Z;for(;se<he;){let oe=se++,ye=$.values[oe];if(O==ye){let Mt=$.orderChildren.length,Rt=$.orderChildren[oe];p.push(Rt),$.orderChildren.splice(oe,1),$.values.splice(oe,1);break}}}let S=p.length,F=$.el,T=new Array,j=0,z=F.childNodes;for(;j<z.length;){let J=z[j];++j,T.push(J)}let X=T.length,Q=0,W=X;for(;Q<W;){let J=Q++,O=$.el,V=new Array,Z=0,se=O.childNodes;for(;Z<se.length;){let ye=se[Z];++Z,V.push(ye)}let he=V[J],oe;if(he instanceof HTMLElement?oe=he.hasAttribute("data-froomle-tmp-node"):oe=!1,oe){$.el.replaceChild(p[0],he),p.splice(0,1);let ye=p.length;if(p.length==0)break}}}let N=a;N._isFinished||(N._result=!0,N._error=null,N._isFinished=!0,N._resolve(!0))})}catch{let x=a;x._isFinished||(x._result=!1,x._error=null,x._isFinished=!0,x._resolve(!1))}return a}static domInit(e){let t=null,r=null,i=new Promise(function(a,g){t=a,r=g}),n=i;n._resolve=t,n._reject=r,n._isFinished=!1,n._result=null,n._error=null;let l=i;return ne._orderElements(e).then(function(a){ne._buildHistories(e.getRoot()),ne._fillRecoTargets(e.getRoot()).then(function(g){let c=l;c._isFinished||(c._result=!0,c._error=null,c._isFinished=!0,c._resolve(!0))})}),l}static fillElementRecos(e){ne._fillRecoTargets(e)}static runFromHtml(e){if(e=="")return"";let t;try{let i=new DOMParser().parseFromString(e,"text/html"),n=new Ie;n.root=i.documentElement,t=n}catch{return e}return ne.domInit(t),t.toString()}static get __name__(){return"internal.domHandler.DomDomDom"}get __class__(){return ne}};var yi=s.$global,L=s.global("$hxClasses").FroomleSdk=class ie{static register(){ie.registered||ie._env_set&&ie._page_visit_set&&(ie.registered=!0)}static buildScriptTag(){let e='<script src="https://cdn.jsdelivr.net/npm/@froomle/frontend-sdk@0.0.11/dist/froomle.global.js" data-froomle-env="'+o.getEnvironment()+'" ',t=o.getPageVisit();t!=null&&(e+='data-froomle-page-visit="'+t+'" ');let r=o.getContextItem();if(r!=null){e+='data-froomle-context-item="'+r+'" ';let c=o.getContextItemType();(c==null||c=="")&&(c="article"),e+='data-froomle-context-item-type="'+c+'" '}let i=o.getDeviceId();i!=null&&(e+='data-froomle-device-id="'+i+'" ');let n=o.getUserId();n!=null&&(e+='data-froomle-user-id="'+n+'" ');let l=o.getConsent();l>0&&(e+='data-froomle-consent="'+l+'" ');let a=o.getRequestDomain();a!=null&&(e+='data-froomle-request-domain="'+a+'" ');let g=o.getChannel();return g!=null&&(e+='data-froomle-channel="'+g+'" '),e+="><\/script>",e}static setEnvironment(e){o.setEnvironment(e),ie._env_set=!0,ie.register()}static setDeviceId(e){o.setDeviceId(e)}static setUserId(e){o.setUserId(e)}static setConsent(e){o.setConsent(e)}static setPageVisit(e){o.setPageVisit(e),ie._page_visit_set=!0,ie.register()}static setChannel(e){o.setChannel(e)}static setRequestDomain(e){o.setRequestDomain(e)}static setSafeRequest(e){o.setSafeRequest(e)}static setContextItem(e){o.setContextItem(e)}static setContextItemType(e){o.setContextItemType(e)}static setCustomVariable(e,t){o.setOthers(e,t)}static getUserId(){return o.getUserId()}static getDeviceId(){return o.getDeviceId()}static getEnvironment(){return o.getEnvironment()}static getSafeRequest(){return o.getSafeRequest()}static getPageVisit(){return o.getPageVisit()}static getConsent(){return o.getConsent()}static getRecommendations(e){return o.getRawRecommendations(e)}static getChannel(){return o.getChannel()}static getVersion(){return"0.0.11"}static runFromHtml(e){return ae.runFromHtml(e)}static get __name__(){return"FroomleSdk"}get __class__(){return ie}};L._env_set=!1;L._page_visit_set=!1;L.registered=!1;var wi=s.$global;function _t(){return(o.getSafeRequest()?"https://":"http://")+o.getRequestDomain()+"/api/"+o.getEnvironment()+"/events"}function Fe(){return o.getConsent()>=1}function gt(){return o.getConsent()<2?"no-consent":o.getDeviceId()}function ft(){let u=o.getChannel();if(u)return u}function Ht(u){let e=(u==null?void 0:u.getAttribute("data-froomle-id"))||(u==null?void 0:u.getAttribute("data-froomle-action-item"));if(e)return e}function Nt(u){let e=(u==null?void 0:u.getAttribute("data-froomle-item-type"))||(u==null?void 0:u.getAttribute("data-froomle-action-item-type"));if(e)return e}function dt(u){var r;let e=u==null?void 0:u.getAttribute("data-froomle-user-group");return e||(typeof document=="undefined"?void 0:((r=document.querySelector("[data-froomle-user-group]"))==null?void 0:r.getAttribute("data-froomle-user-group"))||void 0)}function pt(u,e,t="impression",r){if(!Fe())return;let i=ft()||"www-desktop",n={event_type:t,page_type:o.getPageVisit(),action_item:u,action_item_type:e,channel:i,device_id:gt()},l=dt();if(l&&(n.user_group=l),r)for(let a in r)n[a]=r[a];try{fetch(_t(),{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify({events:[n]})})}catch{}}var B=class B{static queueIfNotPresent(e){B.impressionQueue.includes(e)||B.impressionQueue.push(e)}static generateBody(){let e=[];for(let t of B.impressionQueue){let r=Ht(t);if(!r)continue;let i=Nt(t)||"article",n=ft()||"www-desktop",l={event_type:"impression",page_type:o.getPageVisit(),action_item:r,action_item_type:i,channel:n,device_id:gt()},a=dt(t);a&&(l.user_group=a),o.getConsent()>=2&&o.getUserId()&&(l.user_id=o.getUserId());let g=t.getAttribute("data-froomle-reco"),c=t.getAttribute("data-froomle-request-id");g&&c&&(l.list_name=g,l.request_id=c),e.push(l)}return B.impressionQueue=[],JSON.stringify({events:e})}static sendImpressions(){console.log(B.impressionQueue),B.impressionQueue.length!==0&&Fe()&&fetch(_t(),{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json"},body:B.generateBody()})}static getViewPortRect(){let e=window.innerWidth||document.documentElement.clientWidth,t=window.innerHeight||document.documentElement.clientHeight;return{left:0,top:0,x:0,y:0,toJSON(){},right:e,bottom:t,width:e,height:t}}static intersectsWithViewPortRect(e){let t=e.getBoundingClientRect(),r=B.getViewPortRect();return t.right>r.left&&t.left<r.right&&t.bottom>r.top&&t.top<r.bottom}static addIntersectionImpressionListener(e){B.observer.observe(e)}static processDocument(){if(Fe()){console.log("\u{1F680} Processing document for impressions");for(let e of document.querySelectorAll("[data-froomle-id]"))B.intersectsWithViewPortRect(e)?B.queueIfNotPresent(e):B.addIntersectionImpressionListener(e);B.sendImpressions()}}static processElement(e){if(!Fe()||!(e instanceof Element))return;let t=[];e.matches("[data-froomle-id]")&&t.push(e);for(let r of e.querySelectorAll("[data-froomle-id]"))t.push(r);if(t.length!==0){for(let r of t)B.intersectsWithViewPortRect(r)?B.queueIfNotPresent(r):B.addIntersectionImpressionListener(r);B.sendImpressions()}}};B.impressionQueue=[],B.observer=null;var Y=B;typeof document!="undefined"&&(Y.observer=new IntersectionObserver((u,e)=>{u.forEach(t=>{t.isIntersecting&&(Y.impressionQueue.push(t.target),Y.observer.unobserve(t.target))}),Y.impressionQueue.length>0&&Y.sendImpressions()}));var Ee=class u{static canTrackEvents(){return o.getConsent()>=1}static readDeviceId(){return o.getConsent()<2?"no-consent":o.getDeviceId()}static readChannel(){let e=o.getChannel();if(e)return e}static readUserGroup(){var t;return typeof document=="undefined"?void 0:((t=document.querySelector("[data-froomle-user-group]"))==null?void 0:t.getAttribute("data-froomle-user-group"))||void 0}static uri(){return(o.getSafeRequest()?"https://":"http://")+o.getRequestDomain()+"/api/"+o.getEnvironment()+"/events"}static generateBody(){let e=u.readChannel()||"www-desktop",t={event_type:"page_visit",page_type:o.getPageVisit(),channel:e,device_id:u.readDeviceId()},r=u.readUserGroup();return r&&(t.user_group=r),o.getConsent()>=2&&o.getUserId()&&(t.user_id=o.getUserId()),JSON.stringify({events:[t]})}static sendPageVisit(){o.getPageVisit()&&(o.getContextItem()||u.canTrackEvents()&&fetch(u.uri(),{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json"},body:u.generateBody()}))}};var Re=class u{static canTrackEvents(){return o.getConsent()>=1}static readDeviceId(){return o.getConsent()<2?"no-consent":o.getDeviceId()}static readChannel(){let e=o.getChannel();if(e)return e}static readActionItemType(){let e=o.getContextItemType();if(e)return e}static readUserGroup(){var t;return typeof document=="undefined"?void 0:((t=document.querySelector("[data-froomle-user-group]"))==null?void 0:t.getAttribute("data-froomle-user-group"))||void 0}static uri(){return(o.getSafeRequest()?"https://":"http://")+o.getRequestDomain()+"/api/"+o.getEnvironment()+"/events"}static generateBody(){let e=u.readActionItemType()||"article",t=u.readChannel()||"www-desktop",r={event_type:"detail_pageview",page_type:o.getPageVisit(),action_item:o.getContextItem(),action_item_type:e,channel:t,device_id:u.readDeviceId()},i=u.readUserGroup();return i&&(r.user_group=i),o.getConsent()>=2&&o.getUserId()&&(r.user_id=o.getUserId()),JSON.stringify({events:[r]})}static sendPageView(){o.getContextItem()&&o.getPageVisit()&&u.canTrackEvents()&&fetch(u.uri(),{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json"},body:u.generateBody()})}};var H=class H{static readAttributeFromChain(e,t){let r=e;for(;r;){for(let i of t){let n=r.getAttribute(i);if(n)return n}r=r.parentElement}}static canTrackEvents(){return o.getConsent()>=1}static readDeviceId(){return o.getConsent()<2?"no-consent":o.getDeviceId()}static readChannel(){let e=o.getChannel();if(e)return e}static readActionItem(e){return H.readAttributeFromChain(e,["data-froomle-id","data-froomle-action-item"])}static readActionItemType(e){return H.readAttributeFromChain(e,["data-froomle-item-type","data-froomle-action-item-type"])}static readUserGroup(e){var i;let t=H.readAttributeFromChain(e,["data-froomle-user-group"]);return t||(typeof document=="undefined"?void 0:((i=document.querySelector("[data-froomle-user-group]"))==null?void 0:i.getAttribute("data-froomle-user-group"))||void 0)}static registerClickables(){H.listenerRegistered||(H.listenerRegistered=!0,document.addEventListener("click",e=>{if(!H.canTrackEvents())return;let t=e instanceof MouseEvent?e:null,r=e.target,i=r instanceof Element?r:r instanceof Node?r.parentElement:null;if(!i)return;let n=i.closest("a");if(!n)return;let l=n.closest("[data-froomle-id]");if(!l)return;let a=n.closest("[data-froomle-reco]"),g=(a?H.readActionItem(a):void 0)||H.readActionItem(l);if(!g)return;let c=(a?H.readActionItemType(a):void 0)||H.readActionItemType(l)||"article",d=H.readChannel()||"www-desktop",h=n instanceof HTMLAnchorElement?n.href:null,m=n.getAttribute("href"),y=typeof m=="string"&&m.trim().startsWith("#"),f=!!h&&!y&&e.cancelable&&!e.defaultPrevented&&!n.hasAttribute("download")&&(!n.target||n.target==="_self")&&!!t&&t.button===0&&!t.metaKey&&!t.ctrlKey&&!t.shiftKey&&!t.altKey,_=y&&e.cancelable&&!e.defaultPrevented;(f||_)&&e.preventDefault();let I={event_type:"click_on_recommendation",page_type:o.getPageVisit(),action_item:g,action_item_type:c,channel:d,device_id:H.readDeviceId()},C=(a?H.readUserGroup(a):void 0)||H.readUserGroup(l);C&&(I.user_group=C);let b=(a?H.readAttributeFromChain(a,["data-froomle-reco"]):void 0)||H.readAttributeFromChain(l,["data-froomle-reco"]),x=(a?H.readAttributeFromChain(a,["data-froomle-request-id"]):void 0)||H.readAttributeFromChain(l,["data-froomle-request-id"]);b&&x&&(I.list_name=b,I.request_id=x),o.getConsent()>=2&&o.getUserId()&&(I.user_id=o.getUserId());let q=(o.getSafeRequest()?"https://":"http://")+o.getRequestDomain()+"/api/"+o.getEnvironment()+"/events",M=JSON.stringify({events:[I]}),N=new Blob([M],{type:"application/json"}),A=K=>fetch(q,{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json"},body:M,...K?{keepalive:!0}:{}});if(f&&h){let K=!1,$=()=>{K||(K=!0,window.location.assign(h))},p=window.setTimeout($,200);A(!0).catch(()=>{typeof navigator!="undefined"&&typeof navigator.sendBeacon=="function"&&navigator.sendBeacon(q,N)}).finally(()=>{window.clearTimeout(p),$()});return}A(!1).catch(()=>{typeof navigator!="undefined"&&typeof navigator.sendBeacon=="function"&&navigator.sendBeacon(q,N)})},!0))}};H.listenerRegistered=!1;var Ce=H;var ht=Ie,yt=L.setEnvironment,bt=L.setPageVisit,vt=L.setRequestDomain,wt=L.setSafeRequest,xt=typeof L.setChannel=="function"?L.setChannel:o.setChannel,It=L.setContextItem,Et=L.setContextItemType,jt=o.addHistories;function Vt(u,e){L.setCustomVariable(u,e)}function Je(u){L.setUserId(u),document.cookie=`froomle_user_id=${u}; max-age=${3600*24*365*20}; path=/; samesite=lax`}function Ge(u){L.setDeviceId(u),document.cookie=`froomle_device_id=${u}; max-age=${3600*24*365*20}; path=/; samesite=lax`}function ze(u){L.setConsent(u),document.cookie=`froomle_consent=${u}; max-age=${3600*24*365*20}; path=/; samesite=lax`,document.cookie=`froomle_device_id=${L.getDeviceId()}; max-age=${3600*24*365*20}; path=/; samesite=lax`}typeof window!="undefined"&&(window.setFroomleConsent=ze);function Me(u){let e=document.cookie.split("; ");for(let t of e){let[r,i]=t.split("=");if(r===u)return decodeURIComponent(i)}return null}function Lt(u){return L.getRecommendations(u)}if(!globalThis.froomleInitialized&&(globalThis.froomleInitialized=!0,typeof document!="undefined")){let u=document.currentScript;if(u){let t=u.getAttribute("data-froomle-device-id"),r=u.getAttribute("data-froomle-user-id"),i=u.getAttribute("data-froomle-env"),n=u.getAttribute("data-froomle-page-visit"),l=u.getAttribute("data-froomle-request-domain"),a=u.getAttribute("data-froomle-context-item"),g=u.getAttribute("data-froomle-context-item-type"),c=u.getAttribute("data-froomle-safe-request"),d=u.getAttribute("data-froomle-channel");if(yt(i),n&&bt(n),a&&(It(a),Et(g||"article")),t)Ge(t);else{let h=Me("froomle_device_id");h&&Ge(h)}if(r)Je(r);else{let h=Me("froomle_user_id");h&&Je(h)}l&&vt(l),c&&wt(c!=="false"),d&&xt(d)}let e=Me("froomle_consent");if(e){let t=Number(e);Number.isNaN(t)||ze(t)}document.addEventListener("DOMContentLoaded",()=>{console.log("froomle loads dom"),ae.domInit(ht.fromDocument(document)).then(i=>{Ce.registerClickables(),Y.processDocument(),Ee.sendPageVisit(),Re.sendPageView()});function t(i){return i.matches("[data-froomle-reco]")||i.querySelector("[data-froomle-reco]")!==null}new MutationObserver(i=>{for(let n of i)if(n.type==="childList"&&n.addedNodes.forEach(l=>{l instanceof Element&&(t(l)&&ae.fillElementRecos(l),Y.processElement(l))}),n.type==="attributes"&&n.target instanceof Element)if(n.attributeName==="data-froomle-reco"){let l=n.target.getAttribute("data-froomle-request-id");(!l||l==="")&&ae.fillElementRecos(n.target)}else if(n.attributeName==="data-froomle-request-id"){let l=n.target.getAttribute("data-froomle-request-id"),a=n.target.getAttribute("data-froomle-id");n.target.getAttribute("data-froomle-reco")&&(!l||l==="")&&(!a||a==="")&&ae.fillElementRecos(n.target)}else n.attributeName==="data-froomle-id"&&Y.processElement(n.target)}).observe(document.body,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["data-froomle-reco","data-froomle-request-id","data-froomle-id"]})})}return Dt(Ut);})();
package/dist/index.d.ts CHANGED
@@ -136,19 +136,51 @@ declare function sendEvent(action_item: string, action_item_type: string, event_
136
136
  [key: string]: string | number | object;
137
137
  }): void;
138
138
 
139
+ type RecoListRequest = {
140
+ limit: number;
141
+ list_name: string;
142
+ list_size: number;
143
+ [key: string]: unknown;
144
+ };
145
+
139
146
  declare const setPageVisit: typeof FroomleSdk.setPageVisit;
140
147
  declare const setEnvironment: typeof FroomleSdk.setEnvironment;
141
- declare function setConsent(consent: any): void;
142
- declare function setUserId(userId: any): void;
143
- declare function setDeviceId(deviceId: any): void;
148
+ /**
149
+ * @param {number} consent
150
+ */
151
+ declare function setConsent(consent: number): void;
152
+ /**
153
+ * @param {string} userId
154
+ */
155
+ declare function setUserId(userId: string): void;
156
+ /**
157
+ * @param {string} deviceId
158
+ */
159
+ declare function setDeviceId(deviceId: string): void;
144
160
  declare const setRequestDomain: typeof FroomleSdk.setRequestDomain;
145
161
  declare const setSafeRequest: typeof FroomleSdk.setSafeRequest;
146
162
  declare const setChannel: typeof FroomleSdk.setChannel;
147
163
  declare const setContextItem: typeof FroomleSdk.setContextItem;
148
164
  declare const setContextItemType: typeof FroomleSdk.setContextItemType;
149
- declare const setCustomVariable: typeof FroomleSdk.setCustomVariable;
165
+ /**
166
+ * @typedef {{
167
+ * limit: number,
168
+ * list_name: string,
169
+ * list_size: number,
170
+ * [key: string]: unknown
171
+ * }} RecoListRequest
172
+ */
173
+ /**
174
+ * @param {string} key
175
+ * @param {unknown} value
176
+ */
177
+ declare function setCustomVariable(key: string, value: unknown): void;
150
178
 
151
- declare const getRecommendations: typeof FroomleSdk.getRecommendations;
179
+ /**
180
+ * @param {RecoListRequest[]} lists
181
+ * @returns {Promise<Recommendations>}
182
+ */
183
+ declare function getRecommendations(lists: RecoListRequest[]): Promise<Recommendations>;
152
184
 
153
185
  declare const addHistories: typeof RecoBackendV2.addHistories;
154
186
 
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- import{a,b,c,e as d,j as e,k as f,l as g,m as h,n as i,o as j,p as k,q as l,r as m,s as n,t as o,u as p,v as q,w as r,x as s}from"./chunk-R3QWQW4H.js";export{c as RecommendationItem,b as RecommendationList,a as Recommendations,m as addHistories,r as fulfillRecommendations,q as getRecommendations,s as proxyReco,d as sendEvent,i as setChannel,p as setConsent,j as setContextItem,k as setContextItemType,l as setCustomVariable,o as setDeviceId,e as setEnvironment,f as setPageVisit,g as setRequestDomain,h as setSafeRequest,n as setUserId};
1
+ import{a,b,c,e as d,j as e,k as f,l as g,m as h,n as i,o as j,p as k,q as l,r as m,s as n,t as o,u as p,v as q,w as r,x as s}from"./chunk-GJPFNIOF.js";export{c as RecommendationItem,b as RecommendationList,a as Recommendations,l as addHistories,r as fulfillRecommendations,q as getRecommendations,s as proxyReco,d as sendEvent,i as setChannel,p as setConsent,j as setContextItem,k as setContextItemType,m as setCustomVariable,o as setDeviceId,e as setEnvironment,f as setPageVisit,g as setRequestDomain,h as setSafeRequest,n as setUserId};
package/dist/react.js CHANGED
@@ -1 +1 @@
1
- import{d as a,f as I,g as x,h as F,i as v,w as C,x as P}from"./chunk-R3QWQW4H.js";import f,{createContext as A,useContext as V,useEffect as N,useRef as b,useState as _}from"react";import h from"react";function k({children:e,id:r}){let[n,t]=h.useState(!1);return n||(a.addHistories([r]),t(!0)),h.createElement(h.Fragment,null,e)}import d from"react";function y({children:e,value:r}){return d.createElement(d.Fragment,null,e)}y.displayName="FroomleOrderItem";function S({children:e,list:r,category:n}){let[t,i]=d.useState(null);return d.createElement(d.Fragment,null,(()=>{let u=d.Children.toArray(e),s=[],l=[],m=[[]];for(let o of u)if(console.log(o.type.displayName),d.isValidElement(o)&&o.type===y){let g=o.props.value;s.push(g),l.push(o),m.push([])}else m[m.length-1].push(o);if(t){let o=[];for(let g of t){let R=s.indexOf(g);R!==-1&&(o.push(l[R]),o.push(...m[R+1]))}return o}else return a.getOrder(r,n,s).then(o=>{i(o)}),u})())}function z(e){return N(()=>{C().then(r=>{v.registerClickables(),I.processDocument(),x.sendPageVisit(),F.sendPageView()})},[]),f.createElement(f.Fragment,null,e.children)}var O=A(null);function p(e,...r){for(let n of r){let t=e==null?void 0:e[n];if(t!=null&&t!==""&&t!=="undefined")return String(t)}if(typeof(e==null?void 0:e.get)=="function")for(let n of r){let t=e.get(n);if(t!=null&&t!==""&&t!=="undefined")return String(t)}}function q(){var r;if(typeof document=="undefined")return;let e=(r=document.querySelector("[data-froomle-user-group]"))==null?void 0:r.getAttribute("data-froomle-user-group");if(e!=null&&e!==""&&e!=="undefined")return String(e)}function J({reco:e,children:r,...n}){let t=b(null);return f.useEffect(()=>{let i=!1,c=e.__froomleList;return t.current&&c&&t.current.setAttribute("data-froomle-reco",c),Promise.resolve(e).then(u=>{if(i||!t.current)return;let s=p(u,"Id","item_id"),l=p(u,"ItemType","item_type"),m=p(u,"RequestId","request_id"),o=p(u,"UserGroup","user_group")||q();s&&t.current.setAttribute("data-froomle-id",s),l&&t.current.setAttribute("data-froomle-item-type",l),m&&t.current.setAttribute("data-froomle-request-id",m),o&&t.current.setAttribute("data-froomle-user-group",o)}),()=>{i=!0}},[e]),f.createElement(O.Provider,{value:e},f.createElement("div",{ref:t,...n},r))}var K=()=>{let e=V(O);if(e===null)throw new Error("useFroomleReco must be used within a FroomleRecoProvider");return e};function Q(e){let r=b(null),[n,t]=_(0);if(!r.current){let{list:i,filters:c,...u}=e;r.current=P({list:i,filters:c,others:Object.entries(u).map(([s,l])=>({key:s,value:l}))})}return N(()=>{let i=!0;return r.current.then(()=>{i&&t(1)}),()=>{i=!1}},[]),r.current}export{k as FroomleCustomItem,S as FroomleOrder,y as FroomleOrderItem,J as FroomleReco,z as FroomleSdkInit,Q as useCreateReco,K as useReco};
1
+ import{d as a,f as I,g as x,h as F,i as v,w as P,x as C}from"./chunk-GJPFNIOF.js";import f,{createContext as A,useContext as V,useEffect as N,useRef as b,useState as _}from"react";import h from"react";function k({children:e,id:r}){let[n,t]=h.useState(!1);return n||(a.addHistories([r]),t(!0)),h.createElement(h.Fragment,null,e)}import d from"react";function y({children:e,value:r}){return d.createElement(d.Fragment,null,e)}y.displayName="FroomleOrderItem";function S({children:e,list:r,category:n}){let[t,i]=d.useState(null);return d.createElement(d.Fragment,null,(()=>{let u=d.Children.toArray(e),s=[],l=[],m=[[]];for(let o of u)if(console.log(o.type.displayName),d.isValidElement(o)&&o.type===y){let g=o.props.value;s.push(g),l.push(o),m.push([])}else m[m.length-1].push(o);if(t){let o=[];for(let g of t){let R=s.indexOf(g);R!==-1&&(o.push(l[R]),o.push(...m[R+1]))}return o}else return a.getOrder(r,n,s).then(o=>{i(o)}),u})())}function z(e){return N(()=>{P().catch(()=>{}).finally(()=>{v.registerClickables(),I.processDocument(),x.sendPageVisit(),F.sendPageView()})},[]),f.createElement(f.Fragment,null,e.children)}var O=A(null);function p(e,...r){for(let n of r){let t=e==null?void 0:e[n];if(t!=null&&t!==""&&t!=="undefined")return String(t)}if(typeof(e==null?void 0:e.get)=="function")for(let n of r){let t=e.get(n);if(t!=null&&t!==""&&t!=="undefined")return String(t)}}function q(){var r;if(typeof document=="undefined")return;let e=(r=document.querySelector("[data-froomle-user-group]"))==null?void 0:r.getAttribute("data-froomle-user-group");if(e!=null&&e!==""&&e!=="undefined")return String(e)}function J({reco:e,children:r,...n}){let t=b(null);return f.useEffect(()=>{let i=!1,c=e.__froomleList;return t.current&&c&&t.current.setAttribute("data-froomle-reco",c),Promise.resolve(e).then(u=>{if(i||!t.current)return;let s=p(u,"Id","item_id"),l=p(u,"ItemType","item_type"),m=p(u,"RequestId","request_id"),o=p(u,"UserGroup","user_group")||q();s&&t.current.setAttribute("data-froomle-id",s),l&&t.current.setAttribute("data-froomle-item-type",l),m&&t.current.setAttribute("data-froomle-request-id",m),o&&t.current.setAttribute("data-froomle-user-group",o)}).catch(()=>{}),()=>{i=!0}},[e]),f.createElement(O.Provider,{value:e},f.createElement("div",{ref:t,...n},r))}var K=()=>{let e=V(O);if(e===null)throw new Error("useFroomleReco must be used within a FroomleRecoProvider");return e};function Q(e){let r=b(null),[n,t]=_(0);if(!r.current){let{list:i,filters:c,...u}=e;r.current=C({list:i,filters:c,others:Object.entries(u).map(([s,l])=>({key:s,value:l}))})}return N(()=>{let i=!0;return Promise.resolve(r.current).then(()=>{i&&t(1)}).catch(()=>{i&&t(1)}),()=>{i=!1}},[]),r.current}export{k as FroomleCustomItem,S as FroomleOrder,y as FroomleOrderItem,J as FroomleReco,z as FroomleSdkInit,Q as useCreateReco,K as useReco};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@froomle/frontend-sdk",
3
- "version": "0.0.17",
3
+ "version": "0.0.18",
4
4
  "description": "Froomle frontend SDK",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",
@@ -1,5 +0,0 @@
1
- var l=class u{static global(e){return u.globals[e]?u.globals[e]:u.globals[e]={}}static createStatic(e,t,r){let s=null;Object.defineProperty(e,t,{enumerable:!0,get:function(){return r!=null&&(s=r(),r=null),s},set:function(n){r!=null&&(s=r(),r=null),s=n}})}static iterator(e){if(Array.isArray(e)){let t=e;return function(){return u.mkIter(t)}}else return typeof e.iterator=="function"?e.iterator.bind(e):e.iterator}static getIterator(e){return Array.isArray(e)?u.mkIter(e):e.iterator()}static mkIter(e){return new Ae(e)}static extend(e){function t(){this[u.new].apply(this,arguments)}return Object.setPrototypeOf(t.prototype,e.prototype),t}static inherits(e,t){t==null&&(t=!1);function r(){t&&e&&r[u.init]&&r[u.init](),this[u.new].apply(this,arguments)}return t?r[u.init]=()=>{let s=e();s[u.init]&&s[u.init](),Object.setPrototypeOf(r.prototype,s.prototype),r[u.init]=void 0}:e&&e[u.init]?(t=!0,r[u.init]=()=>{e[u.init]&&e[u.init](),Object.setPrototypeOf(r.prototype,e.prototype),r[u.init]=void 0}):e&&Object.setPrototypeOf(r.prototype,e.prototype),r}static bind(e,t){if(t==null)return null;t.__id__==null&&(t.__id__=u.fid++);let r=null;return e.hx__closures__==null?e.hx__closures__={}:r=e.hx__closures__[t.__id__],r==null&&(r=t.bind(e),e.hx__closures__[t.__id__]=r),r}static get __name__(){return"genes.Register"}get __class__(){return u}};l.$global=typeof window!="undefined"?window:typeof global!="undefined"?global:typeof self!="undefined"?self:void 0;l.globals={};l.new=Symbol();l.init=Symbol();l.fid=0;var Ae=l.global("$hxClasses")["genes._Register.ArrayIterator"]=class ze extends l.inherits(){[l.new](e){this.current=0,this.array=e}hasNext(){return this.current<this.array.length}next(){return this.array[this.current++]}static get __name__(){return"genes._Register.ArrayIterator"}get __class__(){return ze}};Ae.prototype.array=null;Ae.prototype.current=null;var Jt=l.$global,Ce=l.global("$hxClasses")["haxe.ValueException"]=class We extends l.inherits(()=>S,!0){[l.new](e,t,r){super[l.new](String(e),t,r),this.value=e}unwrap(){return this.value}static get __name__(){return"haxe.ValueException"}static get __super__(){return S}get __class__(){return We}};Ce.prototype.value=null;var Qt=l.$global,S=l.global("$hxClasses")["haxe.Exception"]=class ye extends l.inherits(()=>Error,!0){[l.new](e,t,r){Error.call(this,e),this.message=e,this.__previousException=t,this.__nativeException=r!=null?r:this}unwrap(){return this.__nativeException}get_native(){return this.__nativeException}static caught(e){return e instanceof ye?e:e instanceof Error?new ye(e.message,null,e):new Ce(e,null,e)}static thrown(e){return e instanceof ye?e.get_native():e instanceof Error?e:new Ce(e)}static get __name__(){return"haxe.Exception"}static get __super__(){return Error}get __class__(){return ye}};S.prototype.native=null;S.prototype.__skipStack=null;S.prototype.__nativeException=null;S.prototype.__previousException=null;var er=l.$global,I=l.global("$hxClasses").Std=class Ke{static string(e){return be.__string_rec(e,"")}static parseInt(e){let t=parseInt(e);return isNaN(t)?null:t}static random(e){return e<=0?0:Math.floor(Math.random()*e)}static get __name__(){return"Std"}get __class__(){return Ke}};Object.defineProperty(String.prototype,"__class__",{value:String,enumerable:!1,writable:!0}),String.__name__=!0,Array.__name__=!0,It={},Et={},Ct=Number,kt=Boolean,qt={},St={};var It,Et,Ct,kt,qt,St;var ir=l.$global,be=l.global("$hxClasses")["js.Boot"]=class G{static getClass(e){if(e==null)return null;if(e instanceof Array)return Array;{let t=e.__class__;if(t!=null)return t;let r=G.__nativeClassName(e);return r!=null?G.__resolveNativeClass(r):null}}static __string_rec(e,t){if(e==null)return"null";if(t.length>=5)return"<...>";let r=typeof e;switch(r=="function"&&(e.__name__||e.__ename__)&&(r="object"),r){case"function":return"<function>";case"object":if(e.__enum__){let g=l.global("$hxEnums")[e.__enum__].__constructs__[e._hx_index],f=g._hx_name;return g.__params__?(t=t+" ",f+"("+(function(_){var c;let y=[];{let b=0,p=g.__params__;for(;b<p.length;){let q=p[b];b=b+1,y.push(G.__string_rec(e[q],t))}}return c=y,c})(this).join(",")+")"):f}if(e instanceof Array){let m="[";t+=" ";let g=0,f=e.length;for(;g<f;){let _=g++;m+=(_>0?",":"")+G.__string_rec(e[_],t)}return m+="]",m}let s;try{s=e.toString}catch{return"???"}if(s!=null&&s!=Object.toString&&typeof s=="function"){let m=e.toString();if(m!="[object Object]")return m}let n=`{
2
- `;t+=" ";let i=e.hasOwnProperty!=null,a=null;for(a in e)i&&!e.hasOwnProperty(a)||a=="prototype"||a=="__class__"||a=="__super__"||a=="__interfaces__"||a=="__properties__"||(n.length!=2&&(n+=`,
3
- `),n+=t+a+" : "+G.__string_rec(e[a],t));return t=t.substring(1),n+=`
4
- `+t+"}",n;break;case"string":return e;default:return String(e)}}static __interfLoop(e,t){if(e==null)return!1;if(e==t)return!0;let r=e.__interfaces__;if(r!=null&&(e.__super__==null||e.__super__.__interfaces__!=r)){let s=0,n=r.length;for(;s<n;){let i=s++,a=r[i];if(a==t||G.__interfLoop(a,t))return!0}}return G.__interfLoop(e.__super__,t)}static __instanceof(e,t){if(t==null)return!1;switch(t){case Array:return e instanceof Array;case"$hxCoreType__Bool":return typeof e=="boolean";case"$hxCoreType__Dynamic":return e!=null;case"$hxCoreType__Float":return typeof e=="number";case"$hxCoreType__Int":return typeof e=="number"?(e|0)===e:!1;case String:return typeof e=="string";default:if(e!=null){if(typeof t=="function"){if(G.__downcastCheck(e,t))return!0}else if(typeof t=="object"&&G.__isNativeObj(t)&&e instanceof t)return!0}else return!1;return t=="$hxCoreType__Class"&&e.__name__!=null||t=="$hxCoreType__Enum"&&e.__ename__!=null?!0:e.__enum__!=null?l.global("$hxEnums")[e.__enum__]==t:!1}}static __downcastCheck(e,t){return e instanceof t?!0:t.__isInterface__?G.__interfLoop(G.getClass(e),t):!1}static __cast(e,t){if(e==null||G.__instanceof(e,t))return e;throw S.thrown("Cannot cast "+I.string(e)+" to "+I.string(t))}static __nativeClassName(e){let t=G.__toStr.call(e).slice(8,-1);return t=="Object"||t=="Function"||t=="Math"||t=="JSON"?null:t}static __isNativeObj(e){return G.__nativeClassName(e)!=null}static __resolveNativeClass(e){return l.$global[e]}static get __name__(){return"js.Boot"}get __class__(){return G}};be.__toStr={}.toString;var ur=l.$global,$e=l.global("$hxClasses")["js.Browser"]=class Qe{static get supported(){return this.get_supported()}static get_supported(){return typeof window!="undefined"&&typeof window.location!="undefined"?typeof window.location.protocol=="string":!1}static createXMLHttpRequest(){if(typeof XMLHttpRequest!="undefined")return new XMLHttpRequest;if(typeof ActiveXObject!="undefined")return new"ActiveXObject"("Microsoft.XMLHTTP");throw S.thrown("Unable to create XMLHttpRequest object.")}static get __name__(){return"js.Browser"}get __class__(){return Qe}};var gr=l.$global,Y=l.global("$hxEnums")["haxe.io.Error"]={__ename__:"haxe.io.Error",Blocked:{_hx_name:"Blocked",_hx_index:0,__enum__:"haxe.io.Error"},Overflow:{_hx_name:"Overflow",_hx_index:1,__enum__:"haxe.io.Error"},OutsideBounds:{_hx_name:"OutsideBounds",_hx_index:2,__enum__:"haxe.io.Error"},Custom:Object.assign(u=>({_hx_index:3,__enum__:"haxe.io.Error",e:u}),{_hx_name:"Custom",__params__:["e"]})};Y.__constructs__=[Y.Blocked,Y.Overflow,Y.OutsideBounds,Y.Custom];Y.__empty_constructs__=[Y.Blocked,Y.Overflow,Y.OutsideBounds];var dr=l.$global,te=l.global("$hxEnums")["haxe.io.Encoding"]={__ename__:"haxe.io.Encoding",UTF8:{_hx_name:"UTF8",_hx_index:0,__enum__:"haxe.io.Encoding"},RawNative:{_hx_name:"RawNative",_hx_index:1,__enum__:"haxe.io.Encoding"}};te.__constructs__=[te.UTF8,te.RawNative];te.__empty_constructs__=[te.UTF8,te.RawNative];var wr=l.$global,me=l.global("$hxClasses")["haxe.io.Bytes"]=class Fe extends l.inherits(){[l.new](e){this.length=e.byteLength,this.b=new Uint8Array(e),this.b.bufferValue=e,e.hxBytes=this,e.bytes=this.b}getString(e,t,r){if(e<0||t<0||e+t>this.length)throw S.thrown(Y.OutsideBounds);r==null&&(r=te.UTF8);let s="",n=this.b,i=e,a=e+t;switch(r._hx_index){case 0:let m=e>0;for(;i<a;){let g=n[i++];if(g<128){if(g==0)break;s+=String.fromCodePoint(g)}else if(g<224){let f=(g&63)<<6|n[i++]&127;s+=String.fromCodePoint(f)}else if(g<240){let f=n[i++],_=(g&31)<<12|(f&127)<<6|n[i++]&127;s+=String.fromCodePoint(_)}else{let f=n[i++],_=n[i++],c=(g&15)<<18|(f&127)<<12|(_&127)<<6|n[i++]&127;s+=String.fromCodePoint(c)}}break;case 1:for(;i<a;){let g=n[i++]|n[i++]<<8;s+=String.fromCodePoint(g)}break}return s}static ofData(e){let t=e.hxBytes;return t!=null?t:new Fe(e)}static get __name__(){return"haxe.io.Bytes"}get __class__(){return Fe}};me.prototype.length=null;me.prototype.b=null;var Er=l.$global,Z=l.global("$hxClasses")["haxe.http.HttpBase"]=class Xe extends l.inherits(){[l.new](e){this.url=e,this.headers=[],this.params=[],this.emptyOnData=l.bind(this,this.onData)}get responseData(){return this.get_responseData()}setHeader(e,t){let r=0,s=this.headers.length;for(;r<s;){let n=r++;if(this.headers[n].name==e){this.headers[n]={name:e,value:t};return}}this.headers.push({name:e,value:t})}setPostData(e){this.postData=e,this.postBytes=null}onData(e){}onBytes(e){}onError(e){}onStatus(e){}hasOnData(){return l.bind(this,this.onData)!=this.emptyOnData}success(e){this.responseBytes=e,this.responseAsString=null,this.hasOnData()&&this.onData(this.get_responseData()),this.onBytes(this.responseBytes)}get_responseData(){return this.responseAsString==null&&this.responseBytes!=null&&(this.responseAsString=this.responseBytes.getString(0,this.responseBytes.length,te.UTF8)),this.responseAsString}static get __name__(){return"haxe.http.HttpBase"}get __class__(){return Xe}};Z.prototype.url=null;Z.prototype.responseBytes=null;Z.prototype.responseAsString=null;Z.prototype.postData=null;Z.prototype.postBytes=null;Z.prototype.headers=null;Z.prototype.params=null;Z.prototype.emptyOnData=null;var qr=l.$global,ke=l.global("$hxClasses")["haxe.iterators.MapKeyValueIterator"]=class Ye extends l.inherits(){[l.new](e){this.map=e,this.keys=e.keys()}hasNext(){return this.keys.hasNext()}next(){let e=this.keys.next();return{value:this.map.get(e),key:e}}static get __name__(){return"haxe.iterators.MapKeyValueIterator"}get __class__(){return Ye}};ke.prototype.map=null;ke.prototype.keys=null;var Pr=l.$global,Oe=function(){};Oe.__isInterface__=!0;var Fr=l.$global,qe=l.global("$hxClasses")["genes.util.EsMap"]=class ve extends l.inherits(){[l.new](){this.inst=new Map}set(e,t){this.inst.set(e,t)}get(e){return this.inst.get(e)}remove(e){return this.inst.delete(e)}exists(e){return this.inst.has(e)}keys(){return ve.adaptIterator(this.inst.keys())}iterator(){return ve.adaptIterator(this.inst.values())}toString(){let e=[],t=ve.adaptIterator(this.inst.keys());for(;t.hasNext();){let r=t.next();e.push(""+I.string(r)+" => "+I.string(this.inst.get(r)))}return"{"+e.join(", ")+"}"}clear(){this.inst.clear()}static adaptIterator(e){let t,r,s=function(){let n=e.next();t=n.value,r=n.done};return{hasNext:function(){return r==null&&s(),!r},next:function(){r==null&&s();let n=t;return s(),n}}}static get __name__(){return"genes.util.EsMap"}get __class__(){return ve}};qe.prototype.inst=null;var Vr=l.$global,Ze=l.global("$hxClasses")["haxe.ds.StringMap"]=class Be extends l.inherits(qe){[l.new](){super[l.new]()}copy(){let e=new Be;return e.inst=new Map(this.inst),e}keyValueIterator(){return new ke(this)}static get __name__(){return"haxe.ds.StringMap"}static get __interfaces__(){return[Oe]}static get __super__(){return qe}get __class__(){return Be}};var Mr=l.$global,N=l.global("$hxClasses").HxOverrides=class et{static cca(e,t){let r=e.charCodeAt(t);if(r==r)return r}static substr(e,t,r){if(r==null)r=e.length;else if(r<0)if(t==0)r=e.length+r;else return"";return e.substr(t,r)}static now(){return Date.now()}static get __name__(){return"HxOverrides"}get __class__(){return et}};typeof performance!="undefined"&&typeof performance.now=="function"&&(N.now=performance.now.bind(performance));var Wr=l.$global,ae=l.global("$hxClasses").StringTools=class Se{static isSpace(e,t){let r=N.cca(e,t);return r>8&&r<14?!0:r==32}static ltrim(e){let t=e.length,r=0;for(;r<t&&Se.isSpace(e,r);)++r;return r>0?N.substr(e,r,t-r):e}static rtrim(e){let t=e.length,r=0;for(;r<t&&Se.isSpace(e,t-r-1);)++r;return r>0?N.substr(e,0,t-r):e}static replace(e,t,r){return e.split(t).join(r)}static get __name__(){return"StringTools"}get __class__(){return Se}};var Xr=l.$global,tt=l.global("$hxClasses").Lambda=class rt{static exists(e,t){let r=l.getIterator(e);for(;r.hasNext();){let s=r.next();if(t(s))return!0}return!1}static get __name__(){return"Lambda"}get __class__(){return rt}};var nn=l.$global,we=l.global("$hxClasses").EReg=class nt extends l.inherits(){[l.new](e,t){this.r=new RegExp(e,t.split("u").join(""))}match(e){return this.r.global&&(this.r.lastIndex=0),this.r.m=this.r.exec(e),this.r.s=e,this.r.m!=null}matched(e){if(this.r.m!=null&&e>=0&&e<this.r.m.length)return this.r.m[e];throw S.thrown("EReg::matched")}matchedPos(){if(this.r.m==null)throw S.thrown("No string matched");return{pos:this.r.m.index,len:this.r.m[0].length}}matchSub(e,t,r){if(r==null&&(r=-1),this.r.global){this.r.lastIndex=t,this.r.m=this.r.exec(r<0?e:N.substr(e,0,t+r));let s=this.r.m!=null;return s&&(this.r.s=e),s}else{let s=this.match(r<0?N.substr(e,t,null):N.substr(e,t,r));return s&&(this.r.s=e,this.r.m.index+=t),s}}map(e,t){let r=0,s="";do{if(r>=e.length)break;if(!this.matchSub(e,r)){s+=I.string(N.substr(e,r,null));break}let n=this.matchedPos();s+=I.string(N.substr(e,r,n.pos-r)),s+=I.string(t(this)),n.len==0?(s+=I.string(N.substr(e,n.pos,1)),r=n.pos+1):r=n.pos+n.len}while(this.r.global);return!this.r.global&&r>0&&r<e.length&&(s+=I.string(N.substr(e,r,null))),s}static get __name__(){return"EReg"}get __class__(){return nt}};we.prototype.r=null;var pn=l.$global,ue=l.global("$hxClasses")["haxe.http.HttpJs"]=class st extends l.inherits(Z){[l.new](e){this.async=!0,this.withCredentials=!1,super[l.new](e)}request(e){this.responseAsString=null,this.responseBytes=null,this.responseHeaders=null;let t=this.req=$e.createXMLHttpRequest(),r=this,s=function(f){if(t.readyState!=4)return;let _;try{_=t.status}catch{_=null}if(_==0&&$e.get_supported()&&l.$global.location!=null){let c=l.$global.location.protocol.toLowerCase();new we("^(?:about|app|app-storage|.+-extension|file|res|widget):$","").match(c)&&(_=t.response!=null?200:404)}if(_==null&&(_=null),_!=null&&r.onStatus(_),_!=null&&_>=200&&_<400){r.req=null;let c=t.getAllResponseHeaders().split(`\r
5
- `),y=[],b=0,p=c;for(;b<p.length;){let x=p[b];++b,x!=""&&y.push(x)}c=y;let q=new Ze;r.responseHeaders=q;let d=0;for(;d<c.length;){let x=c[d];++d;let k=x.split(": "),D=k.shift(),V=k.length==1?k[0]:k.join(": ");V=ae.ltrim(ae.rtrim(V)),r.responseHeaders.inst.set(D,V)}r.success(me.ofData(t.response))}else if(_==null||_==0&&t.response==null)r.req=null,r.onError("Failed to connect or resolve host");else if(_==null){r.req=null;let c=t.response!=null?me.ofData(t.response):null;r.responseBytes=c,r.onError("Http Error #"+t.status)}else switch(_){case 12007:r.req=null,r.onError("Unknown host");break;case 12029:r.req=null,r.onError("Failed to connect to host");break;default:r.req=null;let c=t.response!=null?me.ofData(t.response):null;r.responseBytes=c,r.onError("Http Error #"+t.status)}};this.async&&(t.onreadystatechange=s);let n,i=this.postData,a=this.postBytes;if(i==null)if(a==null)n=null;else{let f=a;n=new Blob([f.b.bufferValue])}else a==null?n=i:n=null;if(n!=null)e=!0;else{let f=0,_=this.params;for(;f<_.length;){let c=_[f];++f,n==null?n="":n=(n==null?"null":I.string(n))+"&";let y=c.name,b=(n==null?"null":I.string(n))+encodeURIComponent(y)+"=",p=c.value;n=b+encodeURIComponent(p)}}try{if(e)t.open("POST",this.url,this.async);else if(n!=null){let f=this.url.split("?").length<=1;t.open("GET",this.url+(f?"?":"&")+(n==null?"null":I.string(n)),this.async),n=null}else t.open("GET",this.url,this.async);t.responseType="arraybuffer"}catch(f){let _=S.caught(f).unwrap();this.req=null,this.onError(_.toString());return}t.withCredentials=this.withCredentials,!tt.exists(this.headers,function(f){return f.name=="Content-Type"})&&e&&this.postData==null&&t.setRequestHeader("Content-Type","application/x-www-form-urlencoded");let m=0,g=this.headers;for(;m<g.length;){let f=g[m];++m,t.setRequestHeader(f.name,f.value)}t.send(n),this.async||s(null)}static get __name__(){return"haxe.http.HttpJs"}static get __super__(){return Z}get __class__(){return st}};ue.prototype.async=null;ue.prototype.withCredentials=null;ue.prototype.responseHeaders=null;ue.prototype.req=null;var bn=l.$global,He=l.global("$hxClasses").Type=class it{static createInstance(e,t){let r=Function.prototype.bind.apply(e,[null].concat(t));return new r}static get __name__(){return"Type"}get __class__(){return it}};var xn=l.$global,R=l.global("$hxClasses").Reflect=class lt{static field(e,t){try{return e[t]}catch{return null}}static getProperty(e,t){let r;if(e==null)return null;{let s;return e.__properties__?(r=e.__properties__["get_"+t],s=r):s=!1,s?e[r]():e[t]}}static setProperty(e,t,r){let s,n;e.__properties__?(s=e.__properties__["set_"+t],n=s):n=!1,n?e[s](r):e[t]=r}static fields(e){let t=[];if(e!=null){let s=Object.prototype.hasOwnProperty;for(var r in e)r!="__id__"&&r!="hx__closures__"&&s.call(e,r)&&t.push(r)}return t}static compare(e,t){return e==t?0:e>t?1:-1}static get __name__(){return"Reflect"}get __class__(){return lt}};var Dn=l.$global,Ue=l.global("$hxClasses")["internal.http.FetchHttp"]=class ot extends l.inherits(ue){[l.new](e){this.responseStatus=0,super[l.new](e)}request(e){let t=l.$global,r=t.fetch,s=t.Headers,n=t.URLSearchParams;if(r==null){this.onError("Fetch API not found.");return}let i=He.createInstance(s,[]),a=0,m=this.headers;for(;a<m.length;){let p=m[a];++a,i.append(p.name,p.value)}let g=e?"POST":"GET",f=null;if(e)if(this.postData!=null)f=this.postData;else{f=He.createInstance(n,[]);let p=0,q=this.params;for(;p<q.length;){let d=q[p];++p,f.append(d.name,d.value)}}let _={method:g,headers:i,body:f},c=this,y=r(this.url,_).then(function(p){if(c.responseStatus=p.status,c.onStatus(p.status),p.ok)return p.text();throw S.thrown("HTTP Error: "+I.string(p.status))}).then(function(p){c.onData(p)}),b=R.field(y,"catch");b!=null&&b.apply(y,[function(p){c.onError(I.string(p))}])}static get __name__(){return"internal.http.FetchHttp"}static get __super__(){return ue}get __class__(){return ot}};Ue.prototype.responseStatus=null;var $n=l.$global,Le=l.global("$hxClasses")["internal.data.UUID"]=class at{static randomHexChar(){return"0123456789abcdef".charAt(I.random(16))}static v4(){let e="",t=0;for(;t<36;)switch(t++){case 14:e+="4";break;case 19:e+=I.string("0123456789abcdef".charAt(8+I.random(4)));break;case 8:case 13:case 18:case 23:e+="-";break;default:e+=I.string("0123456789abcdef".charAt(I.random(16)))}return e}static get __name__(){return"internal.data.UUID"}get __class__(){return at}};Le.HEX="0123456789abcdef";var Bn=l.$global,ge=function(){};ge.__isInterface__=!0;var fe=function(){};fe.__isInterface__=!0;var _e=function(){};_e.__isInterface__=!0;var zn=l.$global,o=l.global("$hxClasses")["internal.RecoBackendV2"]=class v extends l.inherits(){[l.new](){}static _requestUri(){return(v._safe_request?"https://":"http://")+v._req_domain+"/api/"+v._environment+"/recommendations/requests"}static noConsentBody(){return{device_id:"no-consent",user_group:"no-consent",version:"no-consent"}}static buildRequestBody(e){let t={lists:e,page_type:v._page_visit,channel:v._channel};if(v._consent>=2&&v._history.length>0&&(t.histories=v._buildHistories()),v._consent<2){let a=v.noConsentBody(),m=0,g=R.fields(a);for(;m<g.length;){let f=g[m];++m,t[f]=R.field(a,f)}}else v._user_id!=null&&(t.user_id=v._user_id),t.device_id=v._device_id;let r=0,s=v._others;for(;r<s.length;){let a=s[r];++r,t[a.key]=a.value}let n=R.field(t,"context_item"),i=R.field(t,"context_item_type");return n!=null&&I.string(n)!=""&&(i==null||I.string(i)=="")&&(t.context_item_type="article"),t}static _buildHistories(){return{pageviews:v._history}}static requestsToLists(e){let t=[],r="",s=[],n=0,i=[],a=function(c,y,b){r=c,s=y,n=0,i=b},m=function(c){let y=[];if(c==null)return y;let b=0;for(;b<c.length;){let p=c[b];++b,!(p==null||p.key==null||p.key=="")&&y.push({key:p.key,value:p.value})}return y},g=function(c,y){if(c==null&&y==null)return!0;if(c==null||y==null||c.length!=y.length)return!1;let b=new Array(c.length),p=0,q=c.length;for(;p<q;){let O=p++;b[O]=JSON.stringify(c[O])}let d=b,x=new Array(y.length),k=0,D=y.length;for(;k<D;){let O=k++;x[O]=JSON.stringify(y[O])}let V=x;d.sort(R.compare),V.sort(R.compare);let $=0,F=d.length;for(;$<F;){let O=$++;if(d[O]!=V[O])return!1}return!0},f=function(){let c={limit:n,list_name:r,list_size:n},y=0;for(;y<s.length;){let p=s[y];++y;let q=p.value;q instanceof Array||(q=[q]),c[p.key]=q}let b=0;for(;b<i.length;){let p=i[b];++b,c[p.key]=p.value}t.push(c)},_=0;for(;_<e.length;){let c=e[_];++_;let y=m(c.filters),b=c.others!=null?c.others:[];if(r==""){a(c.list,y,b),n+=1;continue}else(r!=c.list||!g(s,y)||!g(i,b))&&(f(),a(c.list,y,b));n+=1}return n!=0&&f(),t}static _requestRecos(e){let t=null,r=new Promise(function(c,y){t=c}),s=r;s._resolve=t,s._isFinished=!1,s._result=null;let n=r,i=null,a=new Ue(v._requestUri());a.setHeader("Content-Type","application/json");let m=v.buildRequestBody(e),g=JSON.stringify(m);a.setPostData(g),a.onError=function(c){throw S.thrown("HTTP Request Error: "+c)};try{a.request(!0)}catch(c){let y=S.caught(c).unwrap();throw S.thrown("Failed to execute synchronous request: "+I.string(y)+g)}let f=function(c){let y=JSON.parse(c),b=de.fromRequestData(y),p=n;p._isFinished||(p._result=b,p._isFinished=!0,p._resolve(b))},_=a.get_responseData();return _!=null?f(_):a.onData=f,n}static getOrder(e,t,r){let s={list_name:e,limit:r.length,list_size:r.length},n={};R.setProperty(n,t,r),R.setProperty(s,"order",n);let i=null,a=new Promise(function(_,c){i=_}),m=a;m._resolve=i,m._isFinished=!1,m._result=null;let g=a,f;return v.getRawRecommendations([s]).then(function(_){let c=[],y=_.lists()[0].items;if(y instanceof Array){let p=0,q=y;for(;p<q.length;){let d=q[p];++p;let x=d.get("categories");x!=null&&c.push(x)}}let b=g;b._isFinished||(b._result=c,b._isFinished=!0,b._resolve(c))}),g}static getRawRecommendations(e){return v._requestRecos(e)}static addHistories(e,t){if(t==null&&(t="article"),e==null||e.length==0)return;let r=t!=null&&t!=""?t:"article",s=0;for(;s<e.length;){let n=e[s];if(++s,typeof n=="string"){let _=I.string(n);_!=""&&v._history.push({id:_,item_type:r});continue}let i=n,a=R.field(i,"id");if(a==null)continue;let m=I.string(a);if(m=="")continue;let g=R.field(i,"item_type");(g==null||I.string(g)=="")&&(g=R.field(i,"itemType"));let f=g!=null&&I.string(g)!=""?I.string(g):r;v._history.push({id:m,item_type:f})}}static setOthers(e,t){let r=0,s=v._others;for(;r<s.length;){let n=s[r];if(++r,n.key==e){n.value=t;return}}v._others.push({key:e,value:t})}static setConsent(e){e>2&&(e=2),v._consent=e,e==2&&v.getDeviceId()=="no-consent"&&v.setDeviceId(Le.v4())}static setChannel(e){v._channel=e}static setPageVisit(e){v._page_visit=e}static setEnvironment(e){v._environment=e}static setDeviceId(e){v._device_id=e}static setUserId(e){v._user_id=e}static setRequestDomain(e){v._req_domain=e}static setSafeRequest(e){v._safe_request=e}static setContextItem(e){v.setOthers("context_item",e)}static setContextItemType(e){v.setOthers("context_item_type",e)}static getRequestDomain(){return v._req_domain}static getSafeRequest(){return v._safe_request}static getEnvironment(){return v._environment}static getPageVisit(){return v._page_visit}static getUserId(){return v._user_id}static getDeviceId(){return v._device_id}static getConsent(){return v._consent}static getChannel(){return v._channel}static getOthers(e){let t=0,r=v._others;for(;t<r.length;){let s=r[t];if(++t,e==s.key)return s.value}return null}static getContextItem(){return v.getOthers("context_item")}static getContextItemType(){return v.getOthers("context_item_type")}static get __name__(){return"internal.RecoBackendV2"}get __class__(){return v}};o._environment=null;o._device_id="no-consent";o._user_id=null;o._consent=0;o._req_domain="europe-west1.froomle.com";o._page_visit=null;o._channel="www-desktop";o._safe_request=!0;o._history=[];o._others=[];var de=l.global("$hxClasses")["internal._RecommendationsInternal"]=class Ve extends l.inherits(){[l.new](e,t,r,s,n){this.request_id=t,this.user_group=r,this.device_id=e,this.user_id=s,this._lists=n}items(){let e=[],t=0,r=this._lists;for(;t<r.length;){let s=r[t];++t;let n=0,i=s.items;for(;n<i.length;){let a=i[n];++n,e.push(a)}}return e}lists(){return this._lists}getItemsByListName(e){let t=0,r=this._lists;for(;t<r.length;){let s=r[t];if(++t,s.list_name==e)return s}return null}toJson(){let e={request_id:this.request_id,user_group:this.user_group,user_id:this.user_id,device_id:this.device_id,lists:[]},t=0,r=this._lists;for(;t<r.length;){let s=r[t];++t;let n={limit:s.limit,list_key:s.list_key,list_name:s.list_name,list_size:s.list_size,items:[]},i=0,a=s.items;for(;i<a.length;){let m=a[i];++i,n.items.push(be.__cast(m,re).getData())}e.lists.push(n)}return JSON.stringify(e)}static fromRequestData(e){let t=R.getProperty(e,"lists"),r=[],s=0;for(;s<t.length;){let n=t[s];++s;let i=R.getProperty(n,"items"),a=[],m=0;for(;m<i.length;){let f=i[m];++m,R.setProperty(f,"request_id",R.getProperty(e,"request_id")),R.setProperty(f,"user_group",R.getProperty(e,"user_group")),a.push(new re(f))}let g=new ce({limit:R.getProperty(n,"limit"),list_key:R.getProperty(n,"list_key"),list_name:R.getProperty(n,"list_name"),list_size:R.getProperty(n,"list_size"),items:a,request_id:R.getProperty(e,"request_id")});r.push(g)}return new Ve(R.getProperty(e,"device_id"),R.getProperty(e,"request_id"),R.getProperty(e,"user_group"),R.getProperty(e,"user_id"),r)}static get __name__(){return"internal._RecommendationsInternal"}static get __interfaces__(){return[ge]}get __class__(){return Ve}};de.prototype.request_id=null;de.prototype.user_group=null;de.prototype.user_id=null;de.prototype.device_id=null;de.prototype._lists=null;var ce=l.global("$hxClasses")["internal._RecommendationsListInternal"]=class ut extends l.inherits(){[l.new](e){this.items=e.items,this.limit=e.limit,this.list_key=e.list_key,this.list_name=e.list_name,this.list_size=e.list_size,this.request_id=e.request_id}static get __name__(){return"internal._RecommendationsListInternal"}static get __interfaces__(){return[fe]}get __class__(){return ut}};ce.prototype.limit=null;ce.prototype.list_key=null;ce.prototype.list_name=null;ce.prototype.list_size=null;ce.prototype.items=null;ce.prototype.request_id=null;var re=l.global("$hxClasses")["internal._RecommendationItemInternal"]=class ct extends l.inherits(){[l.new](e){this.Id=R.getProperty(e,"item_id"),this.RequestId=R.getProperty(e,"request_id"),this.UserGroup=R.getProperty(e,"user_group"),this._data=e}getData(){return this._data}get(e){return this._data[e]}toJson(){return JSON.stringify(this._data)}static get __name__(){return"internal._RecommendationItemInternal"}static get __interfaces__(){return[_e]}get __class__(){return ct}};re.prototype.Id=null;re.prototype.RequestId=null;re.prototype.UserGroup=null;re.prototype._data=null;var Qn=l.$global,je=function(){};je.__isInterface__=!0;var es=l.$global,xe=l.global("$hxClasses")["internal.js.JSFroomleDomTree"]=class De extends l.inherits(){[l.new](){}getRoot(){return this.root}createElement(e){return this.root.ownerDocument.createElement(e)}toString(){return this.root.ownerDocument.documentElement.outerHTML}static fromHTML(e){let r=new DOMParser().parseFromString(e,"text/html"),s=new De;return s.root=r.documentElement,s}static fromDocument(e){let t=new De;return t.root=e.documentElement,t}static get __name__(){return"internal.js.JSFroomleDomTree"}static get __interfaces__(){return[je]}get __class__(){return De}};xe.prototype.root=null;var cs=l.$global,oe=l.global("$hxClasses")["internal.domHandler.DomDomDom"]=class ne extends l.inherits(){[l.new](){}static _fillRecoTargets(e){let t=null,r=new Promise(function(h,w){t=h}),s=r;s._resolve=t,s._isFinished=!1,s._result=null;let n=r;if(e==null){let h=n;return h._isFinished||(h._result=!1,h._isFinished=!0,h._resolve(!1)),n}let i=[],a=new Array,m=e.querySelectorAll("*"),g=0,f=m.length;for(;g<f;){let h=g++,w=m.item(h);w instanceof HTMLElement&&a.push(w)}let _=a;_.push(e);let c=0;for(;c<_.length;){let h=_[c];++c;let w=0,E=new Array,C=0,P=h.attributes;for(;C<P.length;){let H=P[C];++C,E.push({name:H.name,value:H.value})}let j=E;for(;w<j.length;){let H=j[w];++w,H.name=="data-froomle-reco"&&i.push(h)}}let y=[],b=0;for(;b<i.length;){let h=i[b];++b;let w=h.getAttribute("data-froomle-request-id"),E=h.getAttribute("data-froomle-id"),C=w!=null&&w!="",P=E!=null&&E!="";!C&&!P&&y.push(h)}if(y.length<1){let h=null,w=new Promise(function(C,P){h=C}),E=w;return E._resolve=h,E._isFinished=!1,E._result=null,w}let p=[],q=[],d="",x=[],k=[],D=[],V=function(h,w){if(h.length!=w.length)return!1;let E=new Array(h.length),C=0,P=h.length;for(;C<P;){let T=C++;E[T]=JSON.stringify(h[T])}let j=E,H=new Array(w.length),J=0,K=w.length;for(;J<K;){let T=J++;H[T]=JSON.stringify(w[T])}let W=H;j.sort(R.compare),W.sort(R.compare);let z=0,M=j.length;for(;z<M;){let T=z++;if(j[T]!=W[T])return!1}return!0},$=function(){let h={list_name:d,list_size:k.length,limit:k.length},w=0;for(;w<x.length;){let C=x[w];if(++w,C!=null&&C.key!=null&&C.key!=""){let P=C.value;P instanceof Array||(P=[P]),R.setProperty(h,C.key,P)}}let E=0;for(;E<D.length;){let C=D[E];++E,R.setProperty(h,C.key,C.value)}p.push(h),q.push(k)},F=function(h,w,E,C){d=h,x=w,k=[C],D=E},O=0;for(;O<y.length;){let h=y[O];++O;let w=function(H){let J=[],K=0,W=new Array,z=0,M=H.attributes;for(;z<M.length;){let U=M[z];++z,W.push({name:U.name,value:U.value})}let T=W;for(;K<T.length;){let U=T[K];if(++K,U.name.startsWith("data-froomle-reco-filter-")){let X=N.substr(U.name,25,null),ie=U.value;J.push({key:X,value:ie})}}return J},E=function(H){let J=[],K=0,W=new Array,z=0,M=H.attributes;for(;z<M.length;){let U=M[z];++z,W.push({name:U.name,value:U.value})}let T=W;for(;K<T.length;){let U=T[K];if(++K,U.name.startsWith("data-froomle-variable-")){let X=N.substr(U.name,22,null),ie=U.value;J.push({key:X,value:ie})}}return J},C=h.getAttribute("data-froomle-reco"),P=w(h),j=E(h);if(d==""){F(C,P,j,h);continue}else if(C==d&&V(x,P)&&V(D,j)){k.push(h);continue}else{$(),F(C,P,j,h);continue}}d!=""&&$();let B;if(o.getPageVisit()==null){let h=n;return h._isFinished||(h._result=!1,h._isFinished=!0,h._resolve(!1)),n}else if(o.getEnvironment()==null){let h=n;return h._isFinished||(h._result=!1,h._isFinished=!0,h._resolve(!1)),n}else try{B=o.getRawRecommendations(p)}catch{let w=n;return w._isFinished||(w._result=!1,w._isFinished=!0,w._resolve(!1)),n}return B.then(function(h){let w=h.lists(),E=w.length,C=0,P=E;for(;C<P;){let H=C++,J=w[H],K=J.items.length!=q[H].length,W=J.items.length,z=0,M=W;for(;z<M;){let T=z++,U=J.items[T],X=q[H][T];ne._fillParameters(X,U,h.request_id)}}let j=n;j._isFinished||(j._result=!0,j._isFinished=!0,j._resolve(!0))}),n}static getAttrByPath(e,t,r){r==null&&(r="fgh");try{t=new we("\\\\[(\\\\w+)\\\\]","g").map(t,function(g){return"."+g.matched(1)}),t=ae.replace(t,"[","."),t=ae.replace(t,"]",""),N.cca(t,0)==46&&(t=N.substr(t,1,null));let n=t.split("."),i=e.get(n[0]),a=1,m=n.length;for(;a<m;){let g=a++;if(i==null)return null;i instanceof Array&&I.parseInt(n[g])!=null?i=i[I.parseInt(n[g])]:i=R.field(i,n[g])}return i}catch{return r}}static _buildHistories(e){let t=[],r=new Array,s=e.querySelectorAll("[data-froomle-id]"),n=0,i=s.length;for(;n<i;){let g=n++,f=s.item(g);f instanceof HTMLElement&&r.push(f)}let a=r,m=0;for(;m<a.length;){let g=a[m];++m,t.push(g.getAttribute("data-froomle-id"))}o.addHistories(t)}static fillParam(e,t,r,s,n){n==null&&(n="");try{let i=ne.getAttrByPath(s,r,n);if(t=="inner"){e.textContent=i;let a=e.textContent}else e.setAttribute(t,i)}catch{}}static _fillParameters(e,t,r){e.setAttribute("data-froomle-id",t.get("item_id")),e.setAttribute("data-froomle-request-id",r);let s=t.get("item_type");s!=null&&I.string(s)!=""&&e.setAttribute("data-froomle-item-type",I.string(s)),t.UserGroup!=null&&t.UserGroup!=""&&e.setAttribute("data-froomle-user-group",t.UserGroup);let n=new Array,i=e.querySelectorAll("*"),a=0,m=i.length;for(;a<m;){let _=a++,c=i.item(_);c instanceof HTMLElement&&n.push(c)}let g=n,f=0;for(;f<g.length;){let _=g[f];++f;let c=0,y=new Array,b=0,p=_.attributes;for(;b<p.length;){let d=p[b];++b,y.push({name:d.name,value:d.value})}let q=y;for(;c<q.length;){let d=q[c];if(++c,d.name.startsWith("data-froomle-param-")){let x=ae.replace(d.name,"data-froomle-param-",""),k=d.value;ne.fillParam(_,x,k,t)}}}}static _orderElements(e){let t=function(d,x,k){let D=[],V=new Array,$=0,F=d.childNodes;for(;$<F.length;){let E=F[$];++$,V.push(E)}let O=V,B=0;for(;B<O.length;){let E=O[B];++B;try{if(E.getAttribute("data-froomle-ordervalue")!=null){D.push(E);let P=e.createElement("span");P.setAttribute("data-froomle-tmp-node","tmp"),d.replaceChild(P,E)}}catch{}}let h=[],w=0;for(;w<D.length;){let E=D[w];++w,h.push(E.getAttribute("data-froomle-ordervalue"))}return{el:d,key:x,values:h,orderChildren:D,list_name:k}},r=null,s=new Promise(function(d,x){r=d}),n=s;n._resolve=r,n._isFinished=!1,n._result=null;let i=s,a=e.getRoot(),m=new Array,g=a.querySelectorAll("*"),f=0,_=g.length;for(;f<_;){let d=f++,x=g.item(d);x instanceof HTMLElement&&m.push(x)}let c=m,y=[],b=0;for(;b<c.length;){let d=c[b];++b;let x=0,k=new Array,D=0,V=d.attributes;for(;D<V.length;){let F=V[D];++D,k.push({name:F.name,value:F.value})}let $=k;for(;x<$.length;){let F=$[x];++x,F.name.startsWith("data-froomle-order-")&&y.push(t(d,F.name.substring(19),F.value))}}if(y.length<1){let d=i;return d._isFinished||(d._result=!1,d._isFinished=!0,d._resolve(!1)),i}let p=[],q=0;for(;q<y.length;){let d=y[q];++q;let x={list_name:d.list_name,limit:d.values.length,list_size:d.values.length},k={};R.setProperty(k,d.key,d.values),R.setProperty(x,"order",k),p.push(x)}if(o.getPageVisit()==null){let d=i;return d._isFinished||(d._result=!1,d._isFinished=!0,d._resolve(!1)),i}else if(o.getEnvironment()==null){let d=i;return d._isFinished||(d._result=!1,d._isFinished=!0,d._resolve(!1)),i}try{o.getRawRecommendations(p).then(function(d){let x=d.lists(),k=x.length,D=0,V=k;for(;D<V;){let F=D++,O=x[F],B=y[F];B.el.setAttribute("data-froomle-request-id",d.request_id);let h=new Array,w=0,E=O.items;for(;w<E.length;){let M=E[w];++w;let T=M.get(B.key),U=M.get(B.key),X=B.values.length,ie=0,pe=X;for(;ie<pe;){let le=ie++,he=B.values[le];if(T==he){let jt=B.orderChildren.length,Rt=B.orderChildren[le];h.push(Rt),B.orderChildren.splice(le,1),B.values.splice(le,1);break}}}let C=h.length,P=B.el,j=new Array,H=0,J=P.childNodes;for(;H<J.length;){let M=J[H];++H,j.push(M)}let K=j.length,W=0,z=K;for(;W<z;){let M=W++,T=B.el,U=new Array,X=0,ie=T.childNodes;for(;X<ie.length;){let he=ie[X];++X,U.push(he)}let pe=U[M],le;if(pe instanceof HTMLElement?le=pe.hasAttribute("data-froomle-tmp-node"):le=!1,le){B.el.replaceChild(h[0],pe),h.splice(0,1);let he=h.length;if(h.length==0)break}}}let $=i;$._isFinished||($._result=!0,$._isFinished=!0,$._resolve(!0))})}catch{let x=i;x._isFinished||(x._result=!1,x._isFinished=!0,x._resolve(!1))}return i}static domInit(e){let t=null,r=new Promise(function(i,a){t=i}),s=r;s._resolve=t,s._isFinished=!1,s._result=null;let n=r;return ne._orderElements(e).then(function(i){ne._buildHistories(e.getRoot()),ne._fillRecoTargets(e.getRoot()).then(function(a){let m=n;m._isFinished||(m._result=!0,m._isFinished=!0,m._resolve(!0))})}),n}static fillElementRecos(e){ne._fillRecoTargets(e)}static runFromHtml(e){if(e=="")return"";let t;try{let s=new DOMParser().parseFromString(e,"text/html"),n=new xe;n.root=s.documentElement,t=n}catch{return e}return ne.domInit(t),t.toString()}static get __name__(){return"internal.domHandler.DomDomDom"}get __class__(){return ne}};var ds=l.$global,L=l.global("$hxClasses").FroomleSdk=class se{static register(){se.registered||se._env_set&&se._page_visit_set&&(se.registered=!0)}static buildScriptTag(){let e='<script src="https://cdn.jsdelivr.net/npm/@froomle/frontend-sdk@0.0.11/dist/froomle.global.js" data-froomle-env="'+o.getEnvironment()+'" ',t=o.getPageVisit();t!=null&&(e+='data-froomle-page-visit="'+t+'" ');let r=o.getContextItem();if(r!=null){e+='data-froomle-context-item="'+r+'" ';let g=o.getContextItemType();(g==null||g=="")&&(g="article"),e+='data-froomle-context-item-type="'+g+'" '}let s=o.getDeviceId();s!=null&&(e+='data-froomle-device-id="'+s+'" ');let n=o.getUserId();n!=null&&(e+='data-froomle-user-id="'+n+'" ');let i=o.getConsent();i>0&&(e+='data-froomle-consent="'+i+'" ');let a=o.getRequestDomain();a!=null&&(e+='data-froomle-request-domain="'+a+'" ');let m=o.getChannel();return m!=null&&(e+='data-froomle-channel="'+m+'" '),e+="></script>",e}static setEnvironment(e){o.setEnvironment(e),se._env_set=!0,se.register()}static setDeviceId(e){o.setDeviceId(e)}static setUserId(e){o.setUserId(e)}static setConsent(e){o.setConsent(e)}static setPageVisit(e){o.setPageVisit(e),se._page_visit_set=!0,se.register()}static setChannel(e){o.setChannel(e)}static setRequestDomain(e){o.setRequestDomain(e)}static setSafeRequest(e){o.setSafeRequest(e)}static setContextItem(e){o.setContextItem(e)}static setContextItemType(e){o.setContextItemType(e)}static setCustomVariable(e,t){o.setOthers(e,t)}static getUserId(){return o.getUserId()}static getDeviceId(){return o.getDeviceId()}static getEnvironment(){return o.getEnvironment()}static getSafeRequest(){return o.getSafeRequest()}static getPageVisit(){return o.getPageVisit()}static getConsent(){return o.getConsent()}static getRecommendations(e){return o.getRawRecommendations(e)}static getChannel(){return o.getChannel()}static getVersion(){return"0.0.11"}static runFromHtml(e){return oe.runFromHtml(e)}static get __name__(){return"FroomleSdk"}get __class__(){return se}};L._env_set=!1;L._page_visit_set=!1;L.registered=!1;var ys=l.$global;function mt(){return(o.getSafeRequest()?"https://":"http://")+o.getRequestDomain()+"/api/"+o.getEnvironment()+"/events"}function Pe(){return o.getConsent()>=1}function gt(){return o.getConsent()<2?"no-consent":o.getDeviceId()}function ft(){let u=o.getChannel();if(u)return u}function Dt(u){let e=(u==null?void 0:u.getAttribute("data-froomle-id"))||(u==null?void 0:u.getAttribute("data-froomle-action-item"));if(e)return e}function Pt(u){let e=(u==null?void 0:u.getAttribute("data-froomle-item-type"))||(u==null?void 0:u.getAttribute("data-froomle-action-item-type"));if(e)return e}function _t(u){var r;let e=u==null?void 0:u.getAttribute("data-froomle-user-group");return e||(typeof document=="undefined"?void 0:((r=document.querySelector("[data-froomle-user-group]"))==null?void 0:r.getAttribute("data-froomle-user-group"))||void 0)}function dt(u,e,t="impression",r){if(!Pe())return;let s=ft()||"www-desktop",n={event_type:t,page_type:o.getPageVisit(),action_item:u,action_item_type:e,channel:s,device_id:gt()},i=_t();if(i&&(n.user_group=i),r)for(let a in r)n[a]=r[a];try{fetch(mt(),{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify({events:[n]})})}catch{}}var A=class A{static queueIfNotPresent(e){A.impressionQueue.includes(e)||A.impressionQueue.push(e)}static generateBody(){let e=[];for(let t of A.impressionQueue){let r=Dt(t);if(!r)continue;let s=Pt(t)||"article",n=ft()||"www-desktop",i={event_type:"impression",page_type:o.getPageVisit(),action_item:r,action_item_type:s,channel:n,device_id:gt()},a=_t(t);a&&(i.user_group=a),o.getConsent()>=2&&o.getUserId()&&(i.user_id=o.getUserId());let m=t.getAttribute("data-froomle-reco"),g=t.getAttribute("data-froomle-request-id");m&&g&&(i.list_name=m,i.request_id=g),e.push(i)}return A.impressionQueue=[],JSON.stringify({events:e})}static sendImpressions(){console.log(A.impressionQueue),A.impressionQueue.length!==0&&Pe()&&fetch(mt(),{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json"},body:A.generateBody()})}static getViewPortRect(){let e=window.innerWidth||document.documentElement.clientWidth,t=window.innerHeight||document.documentElement.clientHeight;return{left:0,top:0,x:0,y:0,toJSON(){},right:e,bottom:t,width:e,height:t}}static intersectsWithViewPortRect(e){let t=e.getBoundingClientRect(),r=A.getViewPortRect();return t.right>r.left&&t.left<r.right&&t.bottom>r.top&&t.top<r.bottom}static addIntersectionImpressionListener(e){A.observer.observe(e)}static processDocument(){if(Pe()){console.log("\u{1F680} Processing document for impressions");for(let e of document.querySelectorAll("[data-froomle-id]"))A.intersectsWithViewPortRect(e)?A.queueIfNotPresent(e):A.addIntersectionImpressionListener(e);A.sendImpressions()}}static processElement(e){if(!Pe()||!(e instanceof Element))return;let t=[];e.matches("[data-froomle-id]")&&t.push(e);for(let r of e.querySelectorAll("[data-froomle-id]"))t.push(r);if(t.length!==0){for(let r of t)A.intersectsWithViewPortRect(r)?A.queueIfNotPresent(r):A.addIntersectionImpressionListener(r);A.sendImpressions()}}};A.impressionQueue=[],A.observer=null;var Q=A;typeof document!="undefined"&&(Q.observer=new IntersectionObserver((u,e)=>{u.forEach(t=>{t.isIntersecting&&(Q.impressionQueue.push(t.target),Q.observer.unobserve(t.target))}),Q.impressionQueue.length>0&&Q.sendImpressions()}));var Re=class u{static canTrackEvents(){return o.getConsent()>=1}static readDeviceId(){return o.getConsent()<2?"no-consent":o.getDeviceId()}static readChannel(){let e=o.getChannel();if(e)return e}static readUserGroup(){var t;return typeof document=="undefined"?void 0:((t=document.querySelector("[data-froomle-user-group]"))==null?void 0:t.getAttribute("data-froomle-user-group"))||void 0}static uri(){return(o.getSafeRequest()?"https://":"http://")+o.getRequestDomain()+"/api/"+o.getEnvironment()+"/events"}static generateBody(){let e=u.readChannel()||"www-desktop",t={event_type:"page_visit",page_type:o.getPageVisit(),channel:e,device_id:u.readDeviceId()},r=u.readUserGroup();return r&&(t.user_group=r),o.getConsent()>=2&&o.getUserId()&&(t.user_id=o.getUserId()),JSON.stringify({events:[t]})}static sendPageVisit(){o.getPageVisit()&&(o.getContextItem()||u.canTrackEvents()&&fetch(u.uri(),{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json"},body:u.generateBody()}))}};var Ie=class u{static canTrackEvents(){return o.getConsent()>=1}static readDeviceId(){return o.getConsent()<2?"no-consent":o.getDeviceId()}static readChannel(){let e=o.getChannel();if(e)return e}static readActionItemType(){let e=o.getContextItemType();if(e)return e}static readUserGroup(){var t;return typeof document=="undefined"?void 0:((t=document.querySelector("[data-froomle-user-group]"))==null?void 0:t.getAttribute("data-froomle-user-group"))||void 0}static uri(){return(o.getSafeRequest()?"https://":"http://")+o.getRequestDomain()+"/api/"+o.getEnvironment()+"/events"}static generateBody(){let e=u.readActionItemType()||"article",t=u.readChannel()||"www-desktop",r={event_type:"detail_pageview",page_type:o.getPageVisit(),action_item:o.getContextItem(),action_item_type:e,channel:t,device_id:u.readDeviceId()},s=u.readUserGroup();return s&&(r.user_group=s),o.getConsent()>=2&&o.getUserId()&&(r.user_id=o.getUserId()),JSON.stringify({events:[r]})}static sendPageView(){o.getContextItem()&&o.getPageVisit()&&u.canTrackEvents()&&fetch(u.uri(),{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json"},body:u.generateBody()})}};var ee=class ee{static canTrackEvents(){return o.getConsent()>=1}static readDeviceId(){return o.getConsent()<2?"no-consent":o.getDeviceId()}static readChannel(){let e=o.getChannel();if(e)return e}static readActionItem(e){let t=e.getAttribute("data-froomle-id")||e.getAttribute("data-froomle-action-item");if(t)return t}static readActionItemType(e){let t=e.getAttribute("data-froomle-item-type")||e.getAttribute("data-froomle-action-item-type");if(t)return t}static readUserGroup(e){var s;let t=e.getAttribute("data-froomle-user-group");return t||(typeof document=="undefined"?void 0:((s=document.querySelector("[data-froomle-user-group]"))==null?void 0:s.getAttribute("data-froomle-user-group"))||void 0)}static registerClickables(){ee.listenerRegistered||(ee.listenerRegistered=!0,document.addEventListener("click",e=>{if(!ee.canTrackEvents())return;let t=e instanceof MouseEvent?e:null,r=e.target,s=r instanceof Element?r:r instanceof Node?r.parentElement:null;if(!s)return;let n=s.closest("a");if(!n)return;let i=n.closest("[data-froomle-id]");if(!i)return;let a=ee.readActionItem(i);if(!a)return;let m=ee.readActionItemType(i)||"article",g=ee.readChannel()||"www-desktop",f=n instanceof HTMLAnchorElement?n.href:null,_=!!f&&e.cancelable&&!e.defaultPrevented&&!n.hasAttribute("download")&&(!n.target||n.target==="_self")&&!!t&&t.button===0&&!t.metaKey&&!t.ctrlKey&&!t.shiftKey&&!t.altKey;_&&e.preventDefault();let c={event_type:"click_on_recommendation",page_type:o.getPageVisit(),action_item:a,action_item_type:m,channel:g,device_id:ee.readDeviceId()},y=ee.readUserGroup(i);y&&(c.user_group=y);let b=i.getAttribute("data-froomle-reco"),p=i.getAttribute("data-froomle-request-id");b&&p&&(c.list_name=b,c.request_id=p),o.getConsent()>=2&&o.getUserId()&&(c.user_id=o.getUserId());let d=(o.getSafeRequest()?"https://":"http://")+o.getRequestDomain()+"/api/"+o.getEnvironment()+"/events",x=JSON.stringify({events:[c]}),k=new Blob([x],{type:"application/json"}),D=()=>fetch(d,{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json"},body:x,keepalive:!0});if(_&&f){let $=!1,F=()=>{$||($=!0,window.location.assign(f))},O=window.setTimeout(F,200);D().catch(()=>{typeof navigator!="undefined"&&typeof navigator.sendBeacon=="function"&&navigator.sendBeacon(d,k)}).finally(()=>{window.clearTimeout(O),F()});return}typeof navigator!="undefined"&&typeof navigator.sendBeacon=="function"&&navigator.sendBeacon(d,k)||D().catch(()=>{})},!0))}};ee.listenerRegistered=!1;var Ee=ee;var Tt=xe,pt=L.setEnvironment,ht=L.setPageVisit,yt=L.setRequestDomain,bt=L.setSafeRequest,vt=typeof L.setChannel=="function"?L.setChannel:o.setChannel,wt=L.setContextItem,xt=L.setContextItemType,At=L.setCustomVariable,$t=o.addHistories;function Me(u){L.setUserId(u),document.cookie=`froomle_user_id=${u}; max-age=${3600*24*365*20}; path=/; samesite=lax`}function Ge(u){L.setDeviceId(u),document.cookie=`froomle_device_id=${u}; max-age=${3600*24*365*20}; path=/; samesite=lax`}function Je(u){L.setConsent(u),document.cookie=`froomle_consent=${u}; max-age=${3600*24*365*20}; path=/; samesite=lax`,document.cookie=`froomle_device_id=${L.getDeviceId()}; max-age=${3600*24*365*20}; path=/; samesite=lax`}typeof window!="undefined"&&(window.setFroomleConsent=Je);function Ne(u){let e=document.cookie.split("; ");for(let t of e){let[r,s]=t.split("=");if(r===u)return decodeURIComponent(s)}return null}var Ft=L.getRecommendations;if(!globalThis.froomleInitialized&&(globalThis.froomleInitialized=!0,typeof document!="undefined")){let u=document.currentScript;if(u){let t=u.getAttribute("data-froomle-device-id"),r=u.getAttribute("data-froomle-user-id"),s=u.getAttribute("data-froomle-env"),n=u.getAttribute("data-froomle-page-visit"),i=u.getAttribute("data-froomle-request-domain"),a=u.getAttribute("data-froomle-context-item"),m=u.getAttribute("data-froomle-context-item-type"),g=u.getAttribute("data-froomle-safe-request"),f=u.getAttribute("data-froomle-channel");if(pt(s),n&&ht(n),a&&(wt(a),xt(m||"article")),t)Ge(t);else{let _=Ne("froomle_device_id");_&&Ge(_)}if(r)Me(r);else{let _=Ne("froomle_user_id");_&&Me(_)}i&&yt(i),g&&bt(g!=="false"),f&&vt(f)}let e=Ne("froomle_consent");e&&Je(e),document.addEventListener("DOMContentLoaded",()=>{console.log("froomle loads dom"),oe.domInit(Tt.fromDocument(document)).then(s=>{Ee.registerClickables(),Q.processDocument(),Re.sendPageVisit(),Ie.sendPageView()});function t(s){return s.matches("[data-froomle-reco]")||s.querySelector("[data-froomle-reco]")!==null}new MutationObserver(s=>{for(let n of s)if(n.type==="childList"&&n.addedNodes.forEach(i=>{i instanceof Element&&(t(i)&&oe.fillElementRecos(i),Q.processElement(i))}),n.type==="attributes"&&n.target instanceof Element)if(n.attributeName==="data-froomle-reco"){let i=n.target.getAttribute("data-froomle-request-id");(!i||i==="")&&oe.fillElementRecos(n.target)}else if(n.attributeName==="data-froomle-request-id"){let i=n.target.getAttribute("data-froomle-request-id"),a=n.target.getAttribute("data-froomle-id");n.target.getAttribute("data-froomle-reco")&&(!i||i==="")&&(!a||a==="")&&oe.fillElementRecos(n.target)}else n.attributeName==="data-froomle-id"&&Q.processElement(n.target)}).observe(document.body,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["data-froomle-reco","data-froomle-request-id","data-froomle-id"]})})}function Ot(){let u,e;return{promise:new Promise((r,s)=>{u=r,e=s}),resolve:u,reject:e}}var Te=[];function Bt(){var u;return typeof document=="undefined"?"":((u=document.querySelector("[data-froomle-user-group]"))==null?void 0:u.getAttribute("data-froomle-user-group"))||""}function Ht(u,e){var n;let t=u,s=((n=t==null?void 0:t.UserGroup)!=null?n:typeof(t==null?void 0:t.get)=="function"?t.get("user_group"):void 0)||e;if(s&&(t.UserGroup=s,typeof(t==null?void 0:t.getData)=="function")){let i=t.getData();i&&(!i.user_group||i.user_group==="")&&(i.user_group=s)}}async function Ut(){let u=Te.map(n=>n.req),e=o.requestsToLists(u),t=await o.getRawRecommendations(e),r=t.user_group||"";typeof document!="undefined"&&r&&document.documentElement.setAttribute("data-froomle-user-group",r);let s=t.lists().reduce((n,i)=>[...n,...i.items],[]);s.forEach(n=>Ht(n,r)),Te.forEach((n,i)=>{s[i]?n.deferred.resolve(s[i]):n.deferred.reject(new Error("No recommendation available"))}),Te.length=0}function Lt(u){let e,t,s={promise:new Promise((n,i)=>{e=n,t=i}),resolve:e,reject:t};return Te.push({deferred:s,req:u}),s}function Vt(u){let t=Lt(u).promise,r=Ot(),s=function(i,a){return t.then(m=>(n.completeTarget=m,i?i(m):m),m=>a?a(m):Promise.reject(m))},n=new Proxy(new re({item_id:"",request_id:"",user_group:""}),{get(i,a,m){if(a==="then")return s;if(a==="__froomleList")return u.list;if(a==="get"){let _=Reflect.get(i,a,m);return function(...c){return _.apply(this,c)}}if(typeof a!="string")return Reflect.get(i,a,m);let g=Reflect.get(i,a,m);if(g!=null&&g!=="")return g;let f=i.get(a);return f!=null&&f!==""?f:""},set(i,a,m,g){if(a==="completeTarget"){if(Object.assign(i,m),!i.UserGroup){let f=Bt();if(f){i.UserGroup=f;let _=i.getData();_&&!_.user_group&&(_.user_group=f)}}return!0}return Reflect.set(i,a,m,g)},has(i,a){return i.get(a)!==void 0}});return n}export{ge as a,fe as b,_e as c,o as d,dt as e,Q as f,Re as g,Ie as h,Ee as i,pt as j,ht as k,yt as l,bt as m,vt as n,wt as o,xt as p,At as q,$t as r,Me as s,Ge as t,Je as u,Ft as v,Ut as w,Vt as x};