@olenbetong/appframe-core 2.14.0 → 2.15.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -26,7 +26,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
26
26
  }
27
27
 
28
28
  //#endregion
29
- //#region \0@oxc-project+runtime@0.149.0/helpers/esm/typeof.js
29
+ //#region \0@oxc-project+runtime@0.151.0/helpers/esm/typeof.js
30
30
  function _typeof(o) {
31
31
  "@babel/helpers - typeof";
32
32
  return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(o) {
@@ -37,7 +37,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
37
37
  }
38
38
 
39
39
  //#endregion
40
- //#region \0@oxc-project+runtime@0.149.0/helpers/esm/toPrimitive.js
40
+ //#region \0@oxc-project+runtime@0.151.0/helpers/esm/toPrimitive.js
41
41
  function toPrimitive(t, r) {
42
42
  if ("object" != _typeof(t) || !t) return t;
43
43
  var e = t[Symbol.toPrimitive];
@@ -50,14 +50,14 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
50
50
  }
51
51
 
52
52
  //#endregion
53
- //#region \0@oxc-project+runtime@0.149.0/helpers/esm/toPropertyKey.js
53
+ //#region \0@oxc-project+runtime@0.151.0/helpers/esm/toPropertyKey.js
54
54
  function toPropertyKey(t) {
55
55
  var i = toPrimitive(t, "string");
56
56
  return "symbol" == _typeof(i) ? i : i + "";
57
57
  }
58
58
 
59
59
  //#endregion
60
- //#region \0@oxc-project+runtime@0.149.0/helpers/esm/defineProperty.js
60
+ //#region \0@oxc-project+runtime@0.151.0/helpers/esm/defineProperty.js
61
61
  function _defineProperty(e, r, t) {
62
62
  return (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {
63
63
  value: t,
@@ -267,6 +267,30 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
267
267
  function getSessionId() {
268
268
  return crypto.randomUUID?.();
269
269
  }
270
+ /** The version in the first URL served under `/lib/@olenbetong/<name>/<version>/`. */
271
+ function libVersion(name, urls) {
272
+ let pattern = new RegExp(`/lib/@olenbetong/${name}/([^/]+)/`);
273
+ for (let url of urls) {
274
+ let match = typeof url === "string" ? pattern.exec(url) : null;
275
+ if (match) return match[1];
276
+ }
277
+ }
278
+ /**
279
+ * The synergi-chrome and synergi-platform versions the page loads on the 2026 site templates,
280
+ * read from the chrome's script tag and the platform import map rather than from the chrome
281
+ * itself, so they are known even when the chrome failed to start. Empty on other pages.
282
+ */
283
+ function getPlatformVersions() {
284
+ let versions = {};
285
+ try {
286
+ let importMap = document.querySelector("script[type=\"importmap\"]");
287
+ let platform = importMap ? libVersion("synergi-platform", Object.values(JSON.parse(importMap.textContent ?? "{}").imports ?? {})) : void 0;
288
+ if (platform) versions["synergi-platform"] = platform;
289
+ } catch {}
290
+ let chrome = libVersion("synergi-chrome", Array.from(document.scripts, (script) => script.src)) ?? window.ob?.chrome?.version;
291
+ if (chrome) versions["synergi-chrome"] = chrome;
292
+ return versions;
293
+ }
270
294
  let sessionStart = Date.now();
271
295
  let sessionId = getSessionId();
272
296
  let deviceId = "";
@@ -275,7 +299,8 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
275
299
  let startSession = () => logActivity("AfSessionInit", {
276
300
  "appframe-core": window.af?.common?.version,
277
301
  "appframe-data": window.af?.data?.version,
278
- "app-version": window.af?.article?.version
302
+ "app-version": window.af?.article?.version,
303
+ ...getPlatformVersions()
279
304
  });
280
305
  document.addEventListener("DOMContentLoaded", () => {
281
306
  deviceId = localStorage.getItem("_afDeviceId");
@@ -948,6 +973,19 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
948
973
  return filter;
949
974
  }
950
975
  /**
976
+ * Returns the `and` group alone when it is the only item of an `or` group.
977
+ *
978
+ * The server parses filter strings into the standard layout, which wraps even
979
+ * a plain list of conditions in an `or` group of one `and` group. That extra
980
+ * level means nothing, so the builder shows the `and` group on its own, as the
981
+ * Windows filter editor does.
982
+ */
983
+ function unwrapSingleAndGroup(filter) {
984
+ if (filter.mode !== "or" || filter.items.length !== 1) return filter;
985
+ let [only] = filter.items;
986
+ return isGroup(only) && only.mode === "and" ? only : filter;
987
+ }
988
+ /**
951
989
  * True when the filter contains no expressions. An empty filter must not be
952
990
  * saved or applied.
953
991
  */
@@ -1874,10 +1912,12 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
1874
1912
  async function openReport(options) {
1875
1913
  let blob = await renderReport(options);
1876
1914
  let url = URL.createObjectURL(blob.type ? blob : new Blob([blob], { type: getReportMediaType(options.format) }));
1877
- if (!window.open(url, "_blank", "noopener")) {
1915
+ let opened = window.open(url, "_blank");
1916
+ if (!opened) {
1878
1917
  URL.revokeObjectURL(url);
1879
1918
  throw new Error("The report could not be opened. Allow pop-ups for this site and try again.");
1880
1919
  }
1920
+ opened.opener = null;
1881
1921
  window.setTimeout(() => URL.revokeObjectURL(url), 6e4);
1882
1922
  }
1883
1923
  /**
@@ -2109,7 +2149,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2109
2149
 
2110
2150
  //#endregion
2111
2151
  //#region src/index.ts
2112
- const version = "2.14.0";
2152
+ const version = "2.15.2";
2113
2153
 
2114
2154
  //#endregion
2115
2155
  exports.ConfirmButtons = ConfirmButtons;
@@ -2206,6 +2246,7 @@ exports.toReportParameter = toReportParameter;
2206
2246
  exports.toReportParameters = toReportParameters;
2207
2247
  exports.toSavedFilter = toSavedFilter;
2208
2248
  exports.toSavedFilters = toSavedFilters;
2249
+ exports.unwrapSingleAndGroup = unwrapSingleAndGroup;
2209
2250
  exports.updateNodeAtPath = updateNodeAtPath;
2210
2251
  exports.version = version;
2211
2252
  exports.waitForDialog = waitForDialog;
@@ -223,6 +223,30 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
223
223
  function getSessionId() {
224
224
  return crypto.randomUUID?.();
225
225
  }
226
+ /** The version in the first URL served under `/lib/@olenbetong/<name>/<version>/`. */
227
+ function libVersion(name, urls) {
228
+ let pattern = new RegExp(`/lib/@olenbetong/${name}/([^/]+)/`);
229
+ for (let url of urls) {
230
+ let match = typeof url === "string" ? pattern.exec(url) : null;
231
+ if (match) return match[1];
232
+ }
233
+ }
234
+ /**
235
+ * The synergi-chrome and synergi-platform versions the page loads on the 2026 site templates,
236
+ * read from the chrome's script tag and the platform import map rather than from the chrome
237
+ * itself, so they are known even when the chrome failed to start. Empty on other pages.
238
+ */
239
+ function getPlatformVersions() {
240
+ let versions = {};
241
+ try {
242
+ let importMap = document.querySelector("script[type=\"importmap\"]");
243
+ let platform = importMap ? libVersion("synergi-platform", Object.values(JSON.parse(importMap.textContent ?? "{}").imports ?? {})) : void 0;
244
+ if (platform) versions["synergi-platform"] = platform;
245
+ } catch {}
246
+ let chrome = libVersion("synergi-chrome", Array.from(document.scripts, (script) => script.src)) ?? window.ob?.chrome?.version;
247
+ if (chrome) versions["synergi-chrome"] = chrome;
248
+ return versions;
249
+ }
226
250
  let sessionStart = Date.now();
227
251
  let sessionId = getSessionId();
228
252
  let deviceId = "";
@@ -231,7 +255,8 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
231
255
  let startSession = () => logActivity("AfSessionInit", {
232
256
  "appframe-core": window.af?.common?.version,
233
257
  "appframe-data": window.af?.data?.version,
234
- "app-version": window.af?.article?.version
258
+ "app-version": window.af?.article?.version,
259
+ ...getPlatformVersions()
235
260
  });
236
261
  document.addEventListener("DOMContentLoaded", () => {
237
262
  deviceId = localStorage.getItem("_afDeviceId");
@@ -902,6 +927,19 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
902
927
  return filter;
903
928
  }
904
929
  /**
930
+ * Returns the `and` group alone when it is the only item of an `or` group.
931
+ *
932
+ * The server parses filter strings into the standard layout, which wraps even
933
+ * a plain list of conditions in an `or` group of one `and` group. That extra
934
+ * level means nothing, so the builder shows the `and` group on its own, as the
935
+ * Windows filter editor does.
936
+ */
937
+ function unwrapSingleAndGroup(filter) {
938
+ if (filter.mode !== "or" || filter.items.length !== 1) return filter;
939
+ let [only] = filter.items;
940
+ return isGroup(only) && only.mode === "and" ? only : filter;
941
+ }
942
+ /**
905
943
  * True when the filter contains no expressions. An empty filter must not be
906
944
  * saved or applied.
907
945
  */
@@ -1828,10 +1866,12 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
1828
1866
  async function openReport(options) {
1829
1867
  let blob = await renderReport(options);
1830
1868
  let url = URL.createObjectURL(blob.type ? blob : new Blob([blob], { type: getReportMediaType(options.format) }));
1831
- if (!window.open(url, "_blank", "noopener")) {
1869
+ let opened = window.open(url, "_blank");
1870
+ if (!opened) {
1832
1871
  URL.revokeObjectURL(url);
1833
1872
  throw new Error("The report could not be opened. Allow pop-ups for this site and try again.");
1834
1873
  }
1874
+ opened.opener = null;
1835
1875
  window.setTimeout(() => URL.revokeObjectURL(url), 6e4);
1836
1876
  }
1837
1877
  /**
@@ -2063,7 +2103,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2063
2103
 
2064
2104
  //#endregion
2065
2105
  //#region src/index.ts
2066
- const version = "2.14.0";
2106
+ const version = "2.15.2";
2067
2107
 
2068
2108
  //#endregion
2069
2109
  exports.ConfirmButtons = ConfirmButtons;
@@ -2160,6 +2200,7 @@ exports.toReportParameter = toReportParameter;
2160
2200
  exports.toReportParameters = toReportParameters;
2161
2201
  exports.toSavedFilter = toSavedFilter;
2162
2202
  exports.toSavedFilters = toSavedFilters;
2203
+ exports.unwrapSingleAndGroup = unwrapSingleAndGroup;
2163
2204
  exports.updateNodeAtPath = updateNodeAtPath;
2164
2205
  exports.version = version;
2165
2206
  exports.waitForDialog = waitForDialog;
@@ -1,5 +1,5 @@
1
- this.af=this.af||{},this.af.common=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});function t(e){return{all:e||=new Map,on:function(t,n){var r=e.get(t);r?r.push(n):e.set(t,[n])},off:function(t,n){var r=e.get(t);r&&(n?r.splice(r.indexOf(n)>>>0,1):e.set(t,[]))},emit:function(t,n){var r=e.get(t);r&&r.slice().map(function(e){e(n)}),(r=e.get(`*`))&&r.slice().map(function(e){e(t,n)})}}}var n=class{eventHandler=t();authenticated(){this.eventHandler.emit(`onAuthenticated`)}async expired(e,t){try{let n=new Promise(t=>{let n=()=>{this.eventHandler.off(`onAuthenticated`,n),e?.(),t()};this.eventHandler.on(`onAuthenticated`,n)}),r=document.querySelector(`dialog.session-expired-dialog`);if(r)await n;else{r=document.createElement(`dialog`),r.className=`session-expired-dialog`,r.style.display=`flex`,r.style.padding=`0`,r.style.left=`50%`,r.style.transform=`translateX(-50%)`;let e=`/login?ReturnUrl=%2fapi/sessionexpired/remove`;t===`RequireTwoFactor`?e=`/login?RequireTwoFactor=1&ReturnUrl=%2fapi/sessionexpired/remove`:await fetch(`/logout`,{method:`POST`}),r.innerHTML=`<iframe sandbox="allow-same-origin allow-scripts allow-modals allow-top-navigation-by-user-activation allow-forms" src="${e}" style="border:0;width:min(500px,100vw);height:min(700px, 100vh);"></iframe>`,document.body.append(r),r.showModal(),await n,r.remove()}}catch{window.location.href=`/login?ReturnUrl=${encodeURIComponent(window.location.pathname)}${encodeURIComponent(window.location.search)}`}}attachEvent(e,t){return this.eventHandler.on(e,t)}detachEvent(e,t){return this.eventHandler.off(e,t)}},r=class extends n{amDesignator=`a.m.`;dayNames=[`sunday`,`monday`,`tuesday`,`wednesday`,`thursday`,`friday`,`saturday`];dayNamesShort=[`sun`,`mon`,`tue`,`wed`,`thu`,`fri`,`sat`];decimalSeparator=`.`;domain=`OB`;email;formats;groupSeparator=null;integratedSecurity=!1;isDeveloper=!1;login=``;loginType;monthNames=[`january`,`february`,`march`,`april`,`may`,`june`,`july`,`august`,`september`,`october`,`november`,`december`,``];monthNamesShort=[`jan`,`feb`,`mar`,`apr`,`may`,`jun`,`jul`,`augt`,`sep`,`oct`,`nov`,`dec`,``];name;pmDesignator=`p.m.`;shortDateFormat=`dd.MM.yyyy`;culture=`en-GB`;uiculture=`en-GB`;constructor(e){super(),this.formats={},Object.assign(this,e)}};let i=window.af?.article?.id??window.window?.location.pathname.substring(1).split(`/`)[0];async function a(e,t={},n=0){try{let r=await fetch(`/api/logging/log-activity`,{method:`POST`,body:JSON.stringify({article:i,timeElapsed:n,action:e,parameters:{...t,_session:m()}}),headers:{"Content-Type":`application/json`,Accept:`application/json`}});if(!r.ok){if(r.headers.get(`Content-Type`)?.includes(`application/json`)){let e=await r.json();console.error(e.error)}else console.error(`${r.status} ${r.statusText}`)}}catch{}}function o(e,t={}){let n=performance.now();return(r={})=>a(e,{...t,...r},performance.now()-n)}async function s(e){let t=performance.now();return[await e(),performance.now()-t]}async function c(e){try{if(!e)return;let t=typeof e==`string`?{error:e}:typeof e==`object`?`message`in e?{error:e.message,stack:e.stack??null}:{error:e.toString()}:{error:`Unspecified error`};console.error(e);let n=await fetch(`/data/Logger/LogError`,{method:`POST`,body:JSON.stringify(t),headers:{"Content-Type":`application/json; charset=utf-8`}});if(n.ok)return await n.json();console.error(Error(`Failed to log error`))}catch{}}function l(){return crypto.randomUUID?.()}let u=Date.now(),d=l(),f=``,p=``;if(`document`in window){let e=()=>a(`AfSessionInit`,{"appframe-core":window.af?.common?.version,"appframe-data":window.af?.data?.version,"app-version":window.af?.article?.version});document.addEventListener(`DOMContentLoaded`,()=>{f=localStorage.getItem(`_afDeviceId`),p=sessionStorage.getItem(`_afSessionId`),f||(f=l(),localStorage.setItem(`_afDeviceId`,f)),p||(p=d,sessionStorage.setItem(`_afSessionId`,p)),e()}),document.addEventListener(`visibilitychange`,function(){document.visibilityState===`hidden`?navigator.sendBeacon(`/api/logging/log-activity`,JSON.stringify({article:i,action:`AfSessionEnd`,parameters:{_session:m()}})):e()})}function m(){return{browserSessionId:p,sessionStart:u,sessionLength:Date.now()-u,sessionId:d,deviceId:f}}window.window?.addEventListener(`error`,e=>{typeof e==`object`&&`error`in e?c(e.error):typeof e==`object`&&`message`in e&&c(e)});function ee(e){return[af?.article?.id||``,`common`,e].join(`.`)}var te=new class{isPersisted=()=>!0;getLocalStorageKey(e,t){return t?[`common`,e].join(`.`):ee(e)}get(e,t,n){let r=this.getLocalStorageKey(e,n),i=localStorage.getItem(r);return i===null?t:JSON.parse(i)}set(e,t,n){localStorage.setItem(this.getLocalStorageKey(e,n),JSON.stringify(t))}remove(e,t){let n=this.getLocalStorageKey(e,t);return localStorage.getItem(n)!==null&&(localStorage.removeItem(n),!0)}clear(){let e=ee(``);for(let t in localStorage)t.slice(0,e.length)===e&&localStorage.removeItem(t)}};function ne(e){return e?re(e).substring(0,10):null}function h(e,t=2){return String(e).padStart(t,`0`)}function re(e){return e?`${e.getFullYear()}-${h(e.getMonth()+1)}-${h(e.getDate())}T${h(e.getHours())}:${h(e.getMinutes())}:${h(e.getSeconds())}.${h(e.getMilliseconds(),3)}`:null}function ie(e){return e?e.toISOString().substring(0,16):``}function ae(e,t){return new Promise((n,r)=>{try{let r=URL.createObjectURL(e),i=document.body,a=document.createElement(`a`);a.setAttribute(`download`,t),a.href=r,i.append(a),a.click(),i.removeChild(a),setTimeout(()=>{URL.revokeObjectURL(r),n()},250)}catch(e){r(e)}})}function g(e,t){if(e)return;let n=typeof t==`function`?t():t;throw Error(n??`Invariant failed`)}async function oe(e,{fileName:t,signal:n,onProgress:r}){let i=0;r?.({status:`requested`});try{let n=await fetch(e);if(!n.ok||!n.body){if(n.headers.get(`content-type`)?.includes(`application/json`)){let e=await n.json();g(!e.error,e.error)}throw Error(`${n.status} ${n.statusText}`)}try{let e=n.body.getReader(),t=new ReadableStream({start:t=>{function n(){return e.read().then(e=>{if(e.done){t.close();return}return i+=e.value.length,r?.({bytesReceived:i,status:`downloading`}),t.enqueue(e.value),n()})}return n()}});n=new Response(t)}catch{}let a=await n.blob();r?.({bytesReceived:i,status:`downloaded`}),await ae(a,t),r?.({bytesReceived:i,status:`completed`})}catch(e){n?.aborted?r?.({status:`cancelled`}):r?.({error:e.message,status:`error`})}}let se=/^function(?:\s+([a-zA-Z$_][a-zA-Z0-9$_]*))?\s*\(((?:(?:\s*[a-zA-Z$_][a-zA-Z0-9$_]*)(?:\s*,\s*[a-zA-Z$_][a-zA-Z0-9$_]*)*)?)\s*\)\s*\{((?:.|\n|\r)*)\}$/,ce=/^(?:\(([^)]*)\)|([a-zA-Z$_][a-zA-Z0-9$_]*))\s*=>\s*\{([\s\S]*)\}$/,le=/^(?:\(([^)]*)\)|([a-zA-Z$_][a-zA-Z0-9$_]*))\s*=>\s*([\s\S]+)$/,_=e=>e.split(`,`).map(e=>e.trim()).filter(Boolean);function v(e){let t=e.toString(),n=t.match(ce);if(n){let t=_(n[1]??n[2]??``);return{name:e.name,args:t,body:n[3]}}let r=t.match(le);if(r){let t=_(r[1]??r[2]??``);return{name:e.name,args:t,body:r[3]}}let i=t.match(se);return g(i,`Unable to parse function!`),{name:e.name??i[1],args:_(i[2]),body:i[3]}}function ue(){}ue.prototype=Object.create(null);function de(e,t){if(typeof e==`object`){if(typeof t==`string`)return de(e,t.split(`.`));if(Array.isArray(t)){let n=e;for(let e=0;e<t.length;e++)n=n[t[e]]=n[t[e]]||new ue;return n}}}function fe(e,t,n={}){if(Array.isArray(t))for(let n of t){let{name:t}=v(n);g(t,`Unable to detect name of function! Name it, or only supply one function and include name in first parameter.`),fe(e,n)}else{let r,i;if(typeof t==`function`&&(r=v(t).name),typeof e==`string`){let t=e.split(`.`);r||(r=t[t.length-1],t=t.slice(0,t.length-1)),i=de(window,t)}else r&&(typeof e==`object`||typeof e==`function`)?i=e:g(!1,`Invalid typeof parameter 'name', or unable to parse pValue!`);Object.hasOwn(i,r)&&n?.overwrite!==!0?console.warn(`${[e,r].join(`.`)} is already defined!`):i[r]=t}}async function pe(e,t){try{let n=await fetch(`/api/user/localize/new/${encodeURIComponent(t)}`,{body:JSON.stringify({text:e}),headers:{Accept:`application/json; */*`,"Content-Type":`application/json`,"X-Requested-With":`XMLHttpRequest`},method:`POST`});if(n.ok)return await n.json()}catch{}return e}function me(e){let t=window.af;if(!t)return;if(e){let n=t.i18n?.[e];if(n)return{dictionary:n,harvestAs:e}}let n=t.article;if(n?.i18n)return{dictionary:n.i18n,harvestAs:n.id}}function y(e,t){if(typeof e==`string`&&e.trim().length===0)return e;if(e===void 0||e===``||e===null)return;let{project:n,wait:r}=typeof t==`object`?t:{wait:t},i=me(n);if(i===void 0)return e;let{dictionary:a,harvestAs:o}=i;if(!Object.hasOwn(a,e)){a[e]=e;let t=pe(e,o).then(t=>(a[e]=t,t));if(r)return t}return a[e]}function he(e){function t(t,n){return y(t,{project:e,wait:n})}function n(e,...n){let r=t(e.map((t,n)=>n===e.length-1?t:`${t}$${n}`).join(``));return n.forEach((e,t)=>{r=r.replace(`$${t}`,String(e))}),r}return{project:e,getLocalizedString:t,localize:n}}let ge=[`isnull`,`isnotnull`,`istrue`,`isfalse`,`isblank`,`isnotblank`],_e=[`between`,`notbetween`,`datebetween`,`datenotbetween`],ve=[`inlist`,`notinlist`];function b(e){return ge.includes(e)?`none`:_e.includes(e)?`pair`:ve.includes(e)?`list`:`single`}let ye={equals:`Equal to`,notequals:`Not equal to`,greaterthan:`Greater than`,greaterthanorequal:`Greater than or equal to`,lessthan:`Less than`,lessthanorequal:`Less than or equal to`,beginswith:`Begins with`,notbeginswith:`Does not begin with`,endswith:`Ends with`,notendswith:`Does not end with`,contains:`Contains`,notcontains:`Does not contain`,like:`Like`,notlike:`Not like`,isnull:`Is null`,isnotnull:`Is not null`,isblank:`Is empty`,isnotblank:`Is not empty`,istrue:`Is true`,isfalse:`Is false`,inlist:`In list`,notinlist:`Not in list`,between:`Between`,notbetween:`Not between`,dateequals:`Equal to`,notdatequals:`Not equal to`,dategreaterthan:`After`,dategreaterthanorequal:`On or after`,datelessthan:`Before`,datelessthanorequal:`Up to`,datebetween:`Between`,datenotbetween:`Not between`},be={greaterthan:`After`,greaterthanorequal:`On or after`,lessthan:`Before`,lessthanorequal:`Up to`};function xe(e,t){return y((t===`date`||t===`datetime`?be[e]:void 0)??ye[e]??e)}let x=[`equals`,`notequals`],S=[`inlist`,`notinlist`],C=[`between`,`notbetween`],w=[`greaterthan`,`greaterthanorequal`,`lessthan`,`lessthanorequal`],Se=[`contains`,`notcontains`,`beginswith`,`notbeginswith`,`endswith`,`notendswith`,`isblank`,`isnotblank`],Ce={date:[...x,...S,...C,...w],datetime:[...x,...S,...C,...w],number:[...x,...S,...C,...w],boolean:[`istrue`,`isfalse`],string:[...x,...Se,...S,...C,...w],uniqueidentifier:[...x,...Se,...S,...C,...w]},we={date:`equals`,datetime:`equals`,number:`equals`,boolean:`istrue`,string:`contains`,uniqueidentifier:`beginswith`};function Te(e){let t=[...Ce[e.type]??Ce.string];return e.nullable&&e.type!==`boolean`&&t.push(`isnull`,`isnotnull`),t}function Ee(e){return we[e.type]??`equals`}function T(e,t){if(b(t)===`none`)return`null`;switch(e.type){case`number`:return`number`;case`boolean`:return`boolean`;case`date`:case`datetime`:return`datetime`;case`uniqueidentifier`:return`uniqueidentifier`;default:return`string`}}let E=[`Yesterday`,`Today`,`Tomorrow`,`ThisWeek`,`ThisMonth`,`ThisYear`,`LastWeek`,`LastMonth`,`LastYear`,`NextWeek`,`NextMonth`,`NextYear`],De={CurrentUser:`Current user`,Yesterday:`Yesterday`,Today:`Today`,Tomorrow:`Tomorrow`,ThisWeek:`This week`,ThisMonth:`This month`,ThisYear:`This year`,LastWeek:`Last week`,LastMonth:`Last month`,LastYear:`Last year`,NextWeek:`Next week`,NextMonth:`Next month`,NextYear:`Next year`,UserYesterday:`Yesterday`,UserToday:`Today`,UserTomorrow:`Tomorrow`,UserThisWeek:`This week`,UserThisMonth:`This month`,UserThisYear:`This year`,UserLastWeek:`Last week`,UserLastMonth:`Last month`,UserLastYear:`Last year`,UserNextWeek:`Next week`,UserNextMonth:`Next month`,UserNextYear:`Next year`};function D(e){return y(De[e]??e)}function Oe(e){return e.type===`date`||e.type===`datetime`?[...E]:e.type===`string`?[`CurrentUser`]:[]}let ke={not:`notequals`,tweens:`notbetween`,notdate:`notdatequals`,notdateequals:`notdatequals`};function O(e){let t=e.toLowerCase().replace(/[\s,]/g,``);return ke[t]??t}function k(){return A(`and`)}function A(e=`and`){return{type:`group`,mode:e,items:[]}}function j(e){return e.type===`group`}function M(e){return e.type===`expression`}function Ae(e){return e?M(e)?{type:`group`,mode:`and`,items:[e]}:e:k()}function je(e){return N(e)===0}function N(e){return e?M(e)?1:e.items.reduce((e,t)=>e+N(t),0):0}function Me(e){if(!e)return null;if(M(e))return P(e)?{type:`group`,mode:`and`,items:[e]}:null;let t=e.items.map(e=>j(e)?Me(e):P(e)?e:null).filter(e=>e!==null);return t.length===0?null:{...e,items:t}}function P(e){if(j(e))return e.items.some(P);if(!e.column||!e.operator)return!1;let t=b(O(e.operator));return t===`none`?!0:e.value===null||e.value===void 0||e.value===``?!1:t===`pair`?Array.isArray(e.value)&&e.value.length===2&&e.value.every(e=>e!==``&&e!=null):t!==`list`||Array.isArray(e.value)&&e.value.length>0}function Ne(e,t){let n=t??Ee(e);return{type:`expression`,column:e.name,operator:n,value:Pe(n),valueType:T(e,n)}}function Pe(e){switch(b(e)){case`none`:return null;case`pair`:return[``,``];case`list`:return[];default:return``}}function Fe(e,t,n){let r=b(O(e.operator)),i=b(t),a=e.value;i!==r&&(a=Pe(t));let o=e.valueType===`special`&&i===r?`special`:T(n,t);return{...e,operator:t,value:a,valueType:o}}function Ie(e,t){let n=e;for(let e of t){if(!n||!j(n))return null;n=n.items[e]}return n??null}function F(e,t,n){if(t.length===0)return n(e)??e;if(!j(e))return e;let[r,...i]=t,a=e.items[r];if(!a)return e;let o=[...e.items];if(i.length===0){let e=n(a);e===null?o.splice(r,1):o[r]=e}else o[r]=F(a,i,n);return{...e,items:o}}function Le(e,t,n){return F(e,t,e=>j(e)?{...e,items:[...e.items,n]}:e)}function Re(e,t){return t.length===0?k():F(e,t,()=>null)}function ze(e,t,n){return F(e,t,e=>j(e)?{...e,mode:n}:e)}function Be(e,t=[]){let n=Ie(e,t);return Le(e,t,A(n&&j(n)&&n.mode===`and`?`or`:`and`))}async function Ve(e,t){let n=await fetch(`/api/filter/convert`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(e),signal:t});if(!n.ok)throw Error(`Failed to convert filter: ${n.status} ${n.statusText}`);let r=await n.json();return{...r,filterObject:r.filterObject?Ae(r.filterObject):null}}function He(e,t={}){return e?Ue(e,new Map((t.fields??[]).map(e=>[e.name.toLowerCase(),e])),0):``}function Ue(e,t,n){if(M(e))return We(e,t);let r=e.items.map(e=>Ue(e,t,n+1)).filter(e=>e!==``);if(r.length===0)return``;if(r.length===1)return r[0];let i=e.mode===`or`?` OR `:` AND `,a=r.join(i);return n===0?a:`(${a})`}function We(e,t){if(!e.column||!e.operator)return``;let n=t.get(e.column.toLowerCase()),r=n?.caption??e.column,i=O(e.operator),a=xe(i,n?.type),o=b(i);return o===`none`?`[${r}] ${a}`:`[${r}] ${a} ${Ge(e,o)}`}function Ge(e,t){let{value:n,valueType:r}=e;if(r===`special`&&typeof n==`string`)return D(n);if(Array.isArray(n)){let e=n.map(e=>Ke(e,r));return t===`pair`?e.join(` - `):`(${e.join(`, `)})`}return Ke(n,r)}function Ke(e,t){return e==null?``:e instanceof Date?e.toISOString().slice(0,10):typeof e==`number`||typeof e==`boolean`||t===`number`||t===`boolean`?String(e):`'${String(e)}'`}let qe=[`string`,`number`,`boolean`,`date`,`datetime`,`uniqueidentifier`];function Je(e){let t=e?.trim().toLowerCase();return qe.find(e=>e===t)??`string`}function Ye(e){return e===!0||e===1}function Xe(e){return{name:e.FieldName??``,type:Je(e.DataType),nullable:Ye(e.Nullable),excludeFromFilter:Ye(e.ExcludeFromFilter),valueListRecordSource:e.ValueListRecordSource||void 0}}function Ze(e){return e.map(Xe).filter(e=>e.name!==``&&!e.excludeFromFilter).sort((e,t)=>e.name.localeCompare(t.name))}function Qe(e){return!e||M(e)||e.mode!==`or`?!1:e.items.every(e=>j(e)&&e.mode===`and`&&e.items.every(M))}function $e(e){if(!e)return{type:`group`,mode:`or`,items:[{type:`group`,mode:`and`,items:[]}]};if(M(e))return{type:`group`,mode:`or`,items:[{type:`group`,mode:`and`,items:[e]}]};if(e.mode===`or`){let t=e.items.map(e=>{let t=[];return I(e,t),{type:`group`,mode:`and`,items:t}});return{type:`group`,mode:`or`,items:t.length>0?t:[{type:`group`,mode:`and`,items:[]}]}}let t=[];return I(e,t),{type:`group`,mode:`or`,items:[{type:`group`,mode:`and`,items:t}]}}function I(e,t){if(M(e)){t.push(e);return}for(let n of e.items)I(n,t)}function et(e){return{filterId:e.FilterID??-1,primKey:e.PrimKey??``,name:e.FilterName??``,criteria:e.FilterCriteria??``,dbObjectId:e.DBObjectID??``,accessLevel:tt(e.AccessLevel),createdByUser:L(e.CreatedByUser),createdBy:e.CreatedBy??``,domain:e.Domain??null,crossDomain:L(e.CrossDomain),isPersonallyShared:L(e.IsPersonallyShared),hideCriteria:L(e.HideFilterCriteria),headerText:e.OptionalHeaderText||null,comment:e.OptionalComment||null,parameters:e.Parameters||null,reportTitle:e.ReportTitle||null,created:nt(e.Created),updated:nt(e.Updated)}}function tt(e){return e===`Manager`||e===`Editor`?e:`Reader`}function L(e){return typeof e==`string`?e.toLowerCase()===`true`:!!e}function nt(e){if(!e)return null;if(e instanceof Date)return e;let t=new Date(e);return Number.isNaN(t.getTime())?null:t}function rt(e){return e.filter(e=>(e.FilterID??-1)!==-1).map(et).sort((e,t)=>e.name.localeCompare(t.name))}function it(e){let t=[],n=[];for(let r of e)r.createdByUser?t.push(r):n.push(r);return{mine:t,shared:n}}function at(e,t){if(t!=null)return e.find(e=>e.filterId===t)}function ot(e){return e.accessLevel===`Editor`||e.accessLevel===`Manager`}function st(e){return e.accessLevel===`Manager`}function R(e){return e.createdByUser}let ct=R,lt=R,ut={xs:64,sm:128,md:256,lg:512,xl:void 0};function dt(e,t,n,r=`xs`){if(e&&typeof e==`object`)return dt(e.primKey,e.login,e.hash,e.size);if(!e||!n)return``;let i=ut[r];return`/api/data/blob/EmployeesLookup/${e}/Image/${encodeURIComponent(t??``)}${t?`.`:``}${encodeURIComponent(n)}.jpg${i?`?width=${i}`:``}`}function ft(e,...t){g(Array.isArray(e)&&e.length===t.length+1,`Method 'localize' must be used as a tag function`);let n=y(e.map((t,n)=>n===e.length-1?t:`${t}$${n}`).join(``));return t.forEach((e,t)=>{n=n.replace(`$${t}`,e)}),n}let pt={amp:`&`,lt:`<`,gt:`>`,quot:`"`,apos:`'`};function z(e){return e.replace(/&(#x?[0-9a-f]+|[a-z]+);/gi,(e,t)=>t.startsWith(`#x`)||t.startsWith(`#X`)?String.fromCodePoint(Number.parseInt(t.slice(2),16)):t.startsWith(`#`)?String.fromCodePoint(Number.parseInt(t.slice(1),10)):pt[t.toLowerCase()]??e)}function B(e){return e.replace(/&/g,`&amp;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`).replace(/"/g,`&quot;`).replace(/'/g,`&apos;`)}function V(e,t){let n=RegExp(`<${t}(?:\\s[^>]*)?>([\\s\\S]*?)</${t}>`).exec(e);if(!n)return null;let r=z(n[1]).trim();return r===``?null:r}function mt(e,t){return[...e.matchAll(RegExp(`<${t}(?:\\s[^>]*)?>([\\s\\S]*?)</${t}>`,`g`))].map(e=>z(e[1]).trim())}let ht={Byte:`number`,Decimal:`number`,Double:`number`,Int16:`number`,Int32:`number`,Int64:`number`,Single:`number`,Boolean:`boolean`,DateTime:`date`};function gt(e){let t=/<SelectColumns>([\s\S]*?)<\/SelectColumns>/.exec(e)?.[1]??``,n=[];for(let e of t.matchAll(/<afSelectColumn>([\s\S]*?)<\/afSelectColumn>/g)){let t=V(e[1],`Name`);t&&n.push({name:t,type:ht[V(e[1],`DataType`)??``]??`string`})}return n}function H(e){if(!e||!e.includes(`<afRecordSource`))return null;let t=V(e,`ViewName`);if(!t)return null;let n=V(e,`MaxRecords`);return{viewName:t,columns:gt(e),whereClause:V(e,`WhereClause`),filterString:V(e,`FilterString`),maxRecords:n===null||n===`0`?null:Number(n)}}let _t=[`String`,`Integer`,`Double`,`Date`,`Boolean`],vt=/^[a-z]stp_/i;function U(e){return typeof e==`string`&&vt.test(e.trim())}function yt(e){return e?e.split(/\r\n|\r|\n/).map(e=>e.trim()).filter(e=>e!==``):[]}function bt(e){return _t.find(t=>t.toLowerCase()===e?.trim().toLowerCase())??`String`}function xt(e,t,n){if(t)return`lookup`;if(n)return`select`;switch(e){case`Integer`:case`Double`:return`number`;case`Date`:return`date`;case`Boolean`:return`boolean`;default:return`text`}}function St(e){let t=e.Name??``,n=bt(e.DataType),r=yt(e.Items),i=H(e.RecordSource),a=e.ValueMember??null;i&&!a&&(a=i.columns[0]?.name??null);let o=i?.columns.find(e=>e.name!==a)?.name??null,s=!!(i&&a);return{name:t,label:e.Label?.trim()||t,description:e.Description?.trim()||null,type:n,editor:xt(n,s,r.length>0),defaultValue:e.DefaultValue??null,items:r,recordSource:s?i:null,valueMember:s?a:null,displayMember:s?o:null,sortOrder:e.SortOrder??0,lookupWidth:e.LookupWidth??null,lookupHeight:e.LookupHeight??null}}function Ct(e){return e.filter(e=>e.Name).map(St).sort((e,t)=>e.sortOrder-t.sortOrder||e.label.localeCompare(t.label))}function W(e,t){if(t==null||t===``)return e.type!==`Boolean`&&null;switch(e.type){case`Boolean`:return typeof t==`boolean`?t:/^(true|1|ja|yes)$/i.test(String(t));case`Integer`:{let e=Number.parseInt(String(t),10);return Number.isNaN(e)?null:e}case`Double`:{let e=Number(String(t).replace(`,`,`.`));return Number.isNaN(e)?null:e}default:return String(t)}}function wt(e){let t={};for(let n of e)t[n.name]=U(n.defaultValue)?W(n,null):W(n,n.defaultValue);return t}function Tt(e,t){return t==null?``:typeof t==`boolean`?t?`True`:`False`:String(t)}function Et(e,t){return`<Parameters Version="1">\n${e.map(e=>{let n=Tt(e,t[e.name]??null);return` <Parameter Name="${B(e.name)}" Type="${e.type}">${B(n)}</Parameter>`}).join(`
2
- `)}\n</Parameters>`}function Dt(e){if(!e)return{};let t={};for(let n of e.matchAll(/<Parameter\s+([^>]*?)\/?>(?:([\s\S]*?)<\/Parameter>)?/g)){let e=/Name\s*=\s*"([^"]*)"/.exec(n[1])?.[1];e&&(t[e]=V(n[0],`Parameter`)??``)}return t}function Ot(e,t){let n=Dt(t),r=wt(e);for(let t of e)t.name in n&&(r[t.name]=W(t,n[t.name]));return r}async function kt(e,t,n){if(!t.defaultValue||!U(t.defaultValue))return null;let r=await fetch(`/api/reporting/filters/${encodeURIComponent(e)}/GetParameterDefaultValue`,{body:JSON.stringify({parameterName:t.name}),credentials:`same-origin`,headers:{"Content-Type":`application/json`,"X-Requested-With":`XMLHttpRequest`},method:`POST`,signal:n});if(!r.ok)throw Error(`${r.status} ${r.statusText}`);return jt(await r.json())}async function At(e,t,n,r){let i=t.filter(e=>U(e.defaultValue??``));if(i.length===0)return n;let a=await Promise.all(i.map(async t=>{try{return[t.name,await kt(e,t,r)]}catch{return[t.name,null]}})),o={...n};for(let[e,t]of a)t!==null&&(o[e]=t);return o}function jt(e){let t=(Array.isArray(e)?e:Object.values(e).find(e=>Array.isArray(e)))?.[0];return t==null?null:Array.isArray(t)?t[0]??null:typeof t==`object`?Object.values(t)[0]??null:t}let Mt={CSV:`csv`,HTML:`html`,IMAGE:`xbm`,MHT:`mht`,PDF:`pdf`,RTF:`rtf`,TEXT:`txt`,XLS:`xls`,XLSX:`xlsx`},Nt={CSV:`text/csv`,HTML:`text/html`,IMAGE:`image/x-xbitmap`,MHT:`message/rfc822`,PDF:`application/pdf`,RTF:`text/enriched`,TEXT:`text/plain`,XLS:`application/vnd.ms-excel`,XLSX:`application/vnd.openxmlformats-officedocument.spreadsheetml.sheet`};function Pt(e){return Mt[e]}function G(e){return Nt[e]}let Ft=/[\\/:*?"<>|.#&+%\u0000-\u001f]/g;function K(e){let t=(e.fileName??e.reportId).trim().replace(Ft,`-`).replace(/-{2,}/g,`-`).replace(/^-|-$/g,``).trim();return`${t===``?e.reportId:t}.${Pt(e.format)}`}function It(e){let t=window.location?.href;return t?new URL(e,t).toString():e}function q(e){let{domain:t,filter:n,headerText:r,hideFilterString:i,parameters:a,reportId:o,signal:s,timezone:c}=e,l=K(e),u=`/api/report/${encodeURIComponent(o)}/${encodeURIComponent(l)}`,d=new URLSearchParams,f=zt(a),p=f.length>0||!!r||i===!0;if(t&&d.set(`Domain`,t),d.set(`timezone`,String(c??-new Date().getTimezoneOffset()/60)),!p)return n&&d.set(`Filter`,n),new Request(It(`${u}?${d}`),{credentials:`same-origin`,signal:s});let m={filter:n??``,parameters:f};return r&&(m.optionalheader=r),i===!0&&(m.showfiltercriteria=`true`),new Request(It(`${u}?${d}`),{body:JSON.stringify(m),credentials:`same-origin`,headers:{"Content-Type":`application/json`,"X-Requested-With":`XMLHttpRequest`},method:`POST`,signal:s})}async function J(e){let t=await fetch(q(e));if((t.headers.get(`content-type`)??``).includes(`application/json`)){let e=await t.json();throw Error(e.error??`Failed to render report`)}if(!t.ok)throw Error(`${t.status} ${t.statusText}`);return t.blob()}function Lt(e){return oe(q(e),{fileName:K(e),onProgress:e.onProgress,signal:e.signal})}async function Y(e){let t=await J(e),n=URL.createObjectURL(t.type?t:new Blob([t],{type:G(e.format)}));if(!window.open(n,`_blank`,`noopener`))throw URL.revokeObjectURL(n),Error(`The report could not be opened. Allow pop-ups for this site and try again.`);window.setTimeout(()=>URL.revokeObjectURL(n),6e4)}async function Rt(e){let t=window.document;if(!t?.body)return Y(e);let n=await J(e),r=URL.createObjectURL(n.type?n:new Blob([n],{type:G(e.format)})),i=t.createElement(`iframe`);i.setAttribute(`aria-hidden`,`true`),i.style.cssText=`position:fixed;inset-block-start:0;inset-inline-start:0;inline-size:1px;block-size:1px;border:0;visibility:hidden`;let a=()=>{i.remove(),URL.revokeObjectURL(r)};try{await new Promise((e,n)=>{i.addEventListener(`load`,()=>e(),{once:!0}),i.addEventListener(`error`,()=>n(Error(`The report could not be loaded for printing`)),{once:!0}),i.src=r,t.body.append(i)}),i.contentWindow?.focus(),i.contentWindow?.print()}catch{return a(),Y(e)}window.setTimeout(a,6e4)}function zt(e){return e?Object.entries(e).filter(([,e])=>e!=null&&e!==``).map(([e,t])=>({name:e,value:typeof t==`boolean`?String(t):t})):[]}function X(e){return e===!0||e===1}function Bt(e){let t=[];return X(e.FormatPDF)&&t.push(`PDF`),X(e.FormatCSV)&&t.push(`XLSX`,`XLS`,`CSV`),X(e.FormatHTML)&&t.push(`HTML`),X(e.FormatRTF)&&t.push(`RTF`),X(e.FormatMHT)&&t.push(`MHT`),X(e.FormatTEXT)&&t.push(`TEXT`),X(e.FormatIMAGE)&&t.push(`IMAGE`),t}function Vt(e){let t=H(e.RecordSource);return{reportId:e.ReportID??``,shortId:e.ShortID??null,title:e.Title?.trim()||null,description:e.Description?.trim()||null,viewName:t?.viewName??null,initialFilter:t?.filterString??null,hasTitle:X(e.HasTitle),hasHeader:X(e.HasHeader),formats:Bt(e),timeout:e.Timeout??null}}function Z(){if(document.querySelector(`#AlertDialogTemplate`))return;let e=document.createElement(`template`);e.id=`AlertDialogTemplate`,e.innerHTML=`
1
+ this.af=this.af||{},this.af.common=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});function t(e){return{all:e||=/* @__PURE__ */ new Map,on:function(t,n){var r=e.get(t);r?r.push(n):e.set(t,[n])},off:function(t,n){var r=e.get(t);r&&(n?r.splice(r.indexOf(n)>>>0,1):e.set(t,[]))},emit:function(t,n){var r=e.get(t);r&&r.slice().map(function(e){e(n)}),(r=e.get(`*`))&&r.slice().map(function(e){e(t,n)})}}}var n=class{eventHandler=t();authenticated(){this.eventHandler.emit(`onAuthenticated`)}async expired(e,t){try{let n=new Promise(t=>{let n=()=>{this.eventHandler.off(`onAuthenticated`,n),e?.(),t()};this.eventHandler.on(`onAuthenticated`,n)}),r=document.querySelector(`dialog.session-expired-dialog`);if(r)await n;else{r=document.createElement(`dialog`),r.className=`session-expired-dialog`,r.style.display=`flex`,r.style.padding=`0`,r.style.left=`50%`,r.style.transform=`translateX(-50%)`;let e=`/login?ReturnUrl=%2fapi/sessionexpired/remove`;t===`RequireTwoFactor`?e=`/login?RequireTwoFactor=1&ReturnUrl=%2fapi/sessionexpired/remove`:await fetch(`/logout`,{method:`POST`}),r.innerHTML=`<iframe sandbox="allow-same-origin allow-scripts allow-modals allow-top-navigation-by-user-activation allow-forms" src="${e}" style="border:0;width:min(500px,100vw);height:min(700px, 100vh);"></iframe>`,document.body.append(r),r.showModal(),await n,r.remove()}}catch{window.location.href=`/login?ReturnUrl=${encodeURIComponent(window.location.pathname)}${encodeURIComponent(window.location.search)}`}}attachEvent(e,t){return this.eventHandler.on(e,t)}detachEvent(e,t){return this.eventHandler.off(e,t)}},r=class extends n{amDesignator=`a.m.`;dayNames=[`sunday`,`monday`,`tuesday`,`wednesday`,`thursday`,`friday`,`saturday`];dayNamesShort=[`sun`,`mon`,`tue`,`wed`,`thu`,`fri`,`sat`];decimalSeparator=`.`;domain=`OB`;email;formats;groupSeparator=null;integratedSecurity=!1;isDeveloper=!1;login=``;loginType;monthNames=[`january`,`february`,`march`,`april`,`may`,`june`,`july`,`august`,`september`,`october`,`november`,`december`,``];monthNamesShort=[`jan`,`feb`,`mar`,`apr`,`may`,`jun`,`jul`,`augt`,`sep`,`oct`,`nov`,`dec`,``];name;pmDesignator=`p.m.`;shortDateFormat=`dd.MM.yyyy`;culture=`en-GB`;uiculture=`en-GB`;constructor(e){super(),this.formats={},Object.assign(this,e)}};let i=window.af?.article?.id??window.window?.location.pathname.substring(1).split(`/`)[0];async function a(e,t={},n=0){try{let r=await fetch(`/api/logging/log-activity`,{method:`POST`,body:JSON.stringify({article:i,timeElapsed:n,action:e,parameters:{...t,_session:g()}}),headers:{"Content-Type":`application/json`,Accept:`application/json`}});if(!r.ok){if(r.headers.get(`Content-Type`)?.includes(`application/json`)){let e=await r.json();console.error(e.error)}else console.error(`${r.status} ${r.statusText}`)}}catch{}}function o(e,t={}){let n=performance.now();return(r={})=>a(e,{...t,...r},performance.now()-n)}async function s(e){let t=performance.now();return[await e(),performance.now()-t]}async function c(e){try{if(!e)return;let t=typeof e==`string`?{error:e}:typeof e==`object`?`message`in e?{error:e.message,stack:e.stack??null}:{error:e.toString()}:{error:`Unspecified error`};console.error(e);let n=await fetch(`/data/Logger/LogError`,{method:`POST`,body:JSON.stringify(t),headers:{"Content-Type":`application/json; charset=utf-8`}});if(n.ok)return await n.json();console.error(Error(`Failed to log error`))}catch{}}function l(){return crypto.randomUUID?.()}function u(e,t){let n=RegExp(`/lib/@olenbetong/${e}/([^/]+)/`);for(let e of t){let t=typeof e==`string`?n.exec(e):null;if(t)return t[1]}}function d(){let e={};try{let t=document.querySelector(`script[type="importmap"]`),n=t?u(`synergi-platform`,Object.values(JSON.parse(t.textContent??`{}`).imports??{})):void 0;n&&(e[`synergi-platform`]=n)}catch{}let t=u(`synergi-chrome`,Array.from(document.scripts,e=>e.src))??window.ob?.chrome?.version;return t&&(e[`synergi-chrome`]=t),e}let f=Date.now(),p=l(),m=``,h=``;if(`document`in window){let e=()=>a(`AfSessionInit`,{"appframe-core":window.af?.common?.version,"appframe-data":window.af?.data?.version,"app-version":window.af?.article?.version,...d()});document.addEventListener(`DOMContentLoaded`,()=>{m=localStorage.getItem(`_afDeviceId`),h=sessionStorage.getItem(`_afSessionId`),m||(m=l(),localStorage.setItem(`_afDeviceId`,m)),h||(h=p,sessionStorage.setItem(`_afSessionId`,h)),e()}),document.addEventListener(`visibilitychange`,function(){document.visibilityState===`hidden`?navigator.sendBeacon(`/api/logging/log-activity`,JSON.stringify({article:i,action:`AfSessionEnd`,parameters:{_session:g()}})):e()})}function g(){return{browserSessionId:h,sessionStart:f,sessionLength:Date.now()-f,sessionId:p,deviceId:m}}window.window?.addEventListener(`error`,e=>{typeof e==`object`&&`error`in e?c(e.error):typeof e==`object`&&`message`in e&&c(e)});function ee(e){return[af?.article?.id||``,`common`,e].join(`.`)}var te=new class{isPersisted=()=>!0;getLocalStorageKey(e,t){return t?[`common`,e].join(`.`):ee(e)}get(e,t,n){let r=this.getLocalStorageKey(e,n),i=localStorage.getItem(r);return i===null?t:JSON.parse(i)}set(e,t,n){localStorage.setItem(this.getLocalStorageKey(e,n),JSON.stringify(t))}remove(e,t){let n=this.getLocalStorageKey(e,t);return localStorage.getItem(n)!==null&&(localStorage.removeItem(n),!0)}clear(){let e=ee(``);for(let t in localStorage)t.slice(0,e.length)===e&&localStorage.removeItem(t)}};function ne(e){return e?re(e).substring(0,10):null}function _(e,t=2){return String(e).padStart(t,`0`)}function re(e){return e?`${e.getFullYear()}-${_(e.getMonth()+1)}-${_(e.getDate())}T${_(e.getHours())}:${_(e.getMinutes())}:${_(e.getSeconds())}.${_(e.getMilliseconds(),3)}`:null}function ie(e){return e?e.toISOString().substring(0,16):``}function ae(e,t){return new Promise((n,r)=>{try{let r=URL.createObjectURL(e),i=document.body,a=document.createElement(`a`);a.setAttribute(`download`,t),a.href=r,i.append(a),a.click(),i.removeChild(a),setTimeout(()=>{URL.revokeObjectURL(r),n()},250)}catch(e){r(e)}})}function v(e,t){if(e)return;let n=typeof t==`function`?t():t;throw Error(n??`Invariant failed`)}async function oe(e,{fileName:t,signal:n,onProgress:r}){let i=0;r?.({status:`requested`});try{let n=await fetch(e);if(!n.ok||!n.body){if(n.headers.get(`content-type`)?.includes(`application/json`)){let e=await n.json();v(!e.error,e.error)}throw Error(`${n.status} ${n.statusText}`)}try{let e=n.body.getReader(),t=new ReadableStream({start:t=>{function n(){return e.read().then(e=>{if(e.done){t.close();return}return i+=e.value.length,r?.({bytesReceived:i,status:`downloading`}),t.enqueue(e.value),n()})}return n()}});n=new Response(t)}catch{}let a=await n.blob();r?.({bytesReceived:i,status:`downloaded`}),await ae(a,t),r?.({bytesReceived:i,status:`completed`})}catch(e){n?.aborted?r?.({status:`cancelled`}):r?.({error:e.message,status:`error`})}}let se=/^function(?:\s+([a-zA-Z$_][a-zA-Z0-9$_]*))?\s*\(((?:(?:\s*[a-zA-Z$_][a-zA-Z0-9$_]*)(?:\s*,\s*[a-zA-Z$_][a-zA-Z0-9$_]*)*)?)\s*\)\s*\{((?:.|\n|\r)*)\}$/,ce=/^(?:\(([^)]*)\)|([a-zA-Z$_][a-zA-Z0-9$_]*))\s*=>\s*\{([\s\S]*)\}$/,le=/^(?:\(([^)]*)\)|([a-zA-Z$_][a-zA-Z0-9$_]*))\s*=>\s*([\s\S]+)$/,y=e=>e.split(`,`).map(e=>e.trim()).filter(Boolean);function ue(e){let t=e.toString(),n=t.match(ce);if(n){let t=y(n[1]??n[2]??``);return{name:e.name,args:t,body:n[3]}}let r=t.match(le);if(r){let t=y(r[1]??r[2]??``);return{name:e.name,args:t,body:r[3]}}let i=t.match(se);return v(i,`Unable to parse function!`),{name:e.name??i[1],args:y(i[2]),body:i[3]}}function de(){}de.prototype=Object.create(null);function fe(e,t){if(typeof e==`object`){if(typeof t==`string`)return fe(e,t.split(`.`));if(Array.isArray(t)){let n=e;for(let e=0;e<t.length;e++)n=n[t[e]]=n[t[e]]||new de;return n}}}function pe(e,t,n={}){if(Array.isArray(t))for(let n of t){let{name:t}=ue(n);v(t,`Unable to detect name of function! Name it, or only supply one function and include name in first parameter.`),pe(e,n)}else{let r,i;if(typeof t==`function`&&(r=ue(t).name),typeof e==`string`){let t=e.split(`.`);r||(r=t[t.length-1],t=t.slice(0,t.length-1)),i=fe(window,t)}else r&&(typeof e==`object`||typeof e==`function`)?i=e:v(!1,`Invalid typeof parameter 'name', or unable to parse pValue!`);Object.hasOwn(i,r)&&n?.overwrite!==!0?console.warn(`${[e,r].join(`.`)} is already defined!`):i[r]=t}}async function me(e,t){try{let n=await fetch(`/api/user/localize/new/${encodeURIComponent(t)}`,{body:JSON.stringify({text:e}),headers:{Accept:`application/json; */*`,"Content-Type":`application/json`,"X-Requested-With":`XMLHttpRequest`},method:`POST`});if(n.ok)return await n.json()}catch{}return e}function he(e){let t=window.af;if(!t)return;if(e){let n=t.i18n?.[e];if(n)return{dictionary:n,harvestAs:e}}let n=t.article;if(n?.i18n)return{dictionary:n.i18n,harvestAs:n.id}}function b(e,t){if(typeof e==`string`&&e.trim().length===0)return e;if(e===void 0||e===``||e===null)return;let{project:n,wait:r}=typeof t==`object`?t:{wait:t},i=he(n);if(i===void 0)return e;let{dictionary:a,harvestAs:o}=i;if(!Object.hasOwn(a,e)){a[e]=e;let t=me(e,o).then(t=>(a[e]=t,t));if(r)return t}return a[e]}function ge(e){function t(t,n){return b(t,{project:e,wait:n})}function n(e,...n){let r=t(e.map((t,n)=>n===e.length-1?t:`${t}$${n}`).join(``));return n.forEach((e,t)=>{r=r.replace(`$${t}`,String(e))}),r}return{project:e,getLocalizedString:t,localize:n}}let _e=[`isnull`,`isnotnull`,`istrue`,`isfalse`,`isblank`,`isnotblank`],ve=[`between`,`notbetween`,`datebetween`,`datenotbetween`],ye=[`inlist`,`notinlist`];function x(e){return _e.includes(e)?`none`:ve.includes(e)?`pair`:ye.includes(e)?`list`:`single`}let be={equals:`Equal to`,notequals:`Not equal to`,greaterthan:`Greater than`,greaterthanorequal:`Greater than or equal to`,lessthan:`Less than`,lessthanorequal:`Less than or equal to`,beginswith:`Begins with`,notbeginswith:`Does not begin with`,endswith:`Ends with`,notendswith:`Does not end with`,contains:`Contains`,notcontains:`Does not contain`,like:`Like`,notlike:`Not like`,isnull:`Is null`,isnotnull:`Is not null`,isblank:`Is empty`,isnotblank:`Is not empty`,istrue:`Is true`,isfalse:`Is false`,inlist:`In list`,notinlist:`Not in list`,between:`Between`,notbetween:`Not between`,dateequals:`Equal to`,notdatequals:`Not equal to`,dategreaterthan:`After`,dategreaterthanorequal:`On or after`,datelessthan:`Before`,datelessthanorequal:`Up to`,datebetween:`Between`,datenotbetween:`Not between`},xe={greaterthan:`After`,greaterthanorequal:`On or after`,lessthan:`Before`,lessthanorequal:`Up to`};function Se(e,t){return b((t===`date`||t===`datetime`?xe[e]:void 0)??be[e]??e)}let S=[`equals`,`notequals`],C=[`inlist`,`notinlist`],w=[`between`,`notbetween`],T=[`greaterthan`,`greaterthanorequal`,`lessthan`,`lessthanorequal`],Ce=[`contains`,`notcontains`,`beginswith`,`notbeginswith`,`endswith`,`notendswith`,`isblank`,`isnotblank`],we={date:[...S,...C,...w,...T],datetime:[...S,...C,...w,...T],number:[...S,...C,...w,...T],boolean:[`istrue`,`isfalse`],string:[...S,...Ce,...C,...w,...T],uniqueidentifier:[...S,...Ce,...C,...w,...T]},Te={date:`equals`,datetime:`equals`,number:`equals`,boolean:`istrue`,string:`contains`,uniqueidentifier:`beginswith`};function Ee(e){let t=[...we[e.type]??we.string];return e.nullable&&e.type!==`boolean`&&t.push(`isnull`,`isnotnull`),t}function De(e){return Te[e.type]??`equals`}function E(e,t){if(x(t)===`none`)return`null`;switch(e.type){case`number`:return`number`;case`boolean`:return`boolean`;case`date`:case`datetime`:return`datetime`;case`uniqueidentifier`:return`uniqueidentifier`;default:return`string`}}let Oe=[`Yesterday`,`Today`,`Tomorrow`,`ThisWeek`,`ThisMonth`,`ThisYear`,`LastWeek`,`LastMonth`,`LastYear`,`NextWeek`,`NextMonth`,`NextYear`],ke={CurrentUser:`Current user`,Yesterday:`Yesterday`,Today:`Today`,Tomorrow:`Tomorrow`,ThisWeek:`This week`,ThisMonth:`This month`,ThisYear:`This year`,LastWeek:`Last week`,LastMonth:`Last month`,LastYear:`Last year`,NextWeek:`Next week`,NextMonth:`Next month`,NextYear:`Next year`,UserYesterday:`Yesterday`,UserToday:`Today`,UserTomorrow:`Tomorrow`,UserThisWeek:`This week`,UserThisMonth:`This month`,UserThisYear:`This year`,UserLastWeek:`Last week`,UserLastMonth:`Last month`,UserLastYear:`Last year`,UserNextWeek:`Next week`,UserNextMonth:`Next month`,UserNextYear:`Next year`};function Ae(e){return b(ke[e]??e)}function je(e){return e.type===`date`||e.type===`datetime`?[...Oe]:e.type===`string`?[`CurrentUser`]:[]}let Me={not:`notequals`,tweens:`notbetween`,notdate:`notdatequals`,notdateequals:`notdatequals`};function D(e){let t=e.toLowerCase().replace(/[\s,]/g,``);return Me[t]??t}function O(){return k(`and`)}function k(e=`and`){return{type:`group`,mode:e,items:[]}}function A(e){return e.type===`group`}function j(e){return e.type===`expression`}function Ne(e){return e?j(e)?{type:`group`,mode:`and`,items:[e]}:e:O()}function Pe(e){if(e.mode!==`or`||e.items.length!==1)return e;let[t]=e.items;return A(t)&&t.mode===`and`?t:e}function Fe(e){return M(e)===0}function M(e){return e?j(e)?1:e.items.reduce((e,t)=>e+M(t),0):0}function Ie(e){if(!e)return null;if(j(e))return N(e)?{type:`group`,mode:`and`,items:[e]}:null;let t=e.items.map(e=>A(e)?Ie(e):N(e)?e:null).filter(e=>e!==null);return t.length===0?null:{...e,items:t}}function N(e){if(A(e))return e.items.some(N);if(!e.column||!e.operator)return!1;let t=x(D(e.operator));return t===`none`?!0:e.value===null||e.value===void 0||e.value===``?!1:t===`pair`?Array.isArray(e.value)&&e.value.length===2&&e.value.every(e=>e!==``&&e!=null):t!==`list`||Array.isArray(e.value)&&e.value.length>0}function Le(e,t){let n=t??De(e);return{type:`expression`,column:e.name,operator:n,value:Re(n),valueType:E(e,n)}}function Re(e){switch(x(e)){case`none`:return null;case`pair`:return[``,``];case`list`:return[];default:return``}}function ze(e,t,n){let r=x(D(e.operator)),i=x(t),a=e.value;i!==r&&(a=Re(t));let o=e.valueType===`special`&&i===r?`special`:E(n,t);return{...e,operator:t,value:a,valueType:o}}function Be(e,t){let n=e;for(let e of t){if(!n||!A(n))return null;n=n.items[e]}return n??null}function P(e,t,n){if(t.length===0)return n(e)??e;if(!A(e))return e;let[r,...i]=t,a=e.items[r];if(!a)return e;let o=[...e.items];if(i.length===0){let e=n(a);e===null?o.splice(r,1):o[r]=e}else o[r]=P(a,i,n);return{...e,items:o}}function Ve(e,t,n){return P(e,t,e=>A(e)?{...e,items:[...e.items,n]}:e)}function He(e,t){return t.length===0?O():P(e,t,()=>null)}function Ue(e,t,n){return P(e,t,e=>A(e)?{...e,mode:n}:e)}function We(e,t=[]){let n=Be(e,t);return Ve(e,t,k(n&&A(n)&&n.mode===`and`?`or`:`and`))}async function Ge(e,t){let n=await fetch(`/api/filter/convert`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(e),signal:t});if(!n.ok)throw Error(`Failed to convert filter: ${n.status} ${n.statusText}`);let r=await n.json();return{...r,filterObject:r.filterObject?Ne(r.filterObject):null}}function Ke(e,t={}){return e?qe(e,new Map((t.fields??[]).map(e=>[e.name.toLowerCase(),e])),0):``}function qe(e,t,n){if(j(e))return Je(e,t);let r=e.items.map(e=>qe(e,t,n+1)).filter(e=>e!==``);if(r.length===0)return``;if(r.length===1)return r[0];let i=e.mode===`or`?` OR `:` AND `,a=r.join(i);return n===0?a:`(${a})`}function Je(e,t){if(!e.column||!e.operator)return``;let n=t.get(e.column.toLowerCase()),r=n?.caption??e.column,i=D(e.operator),a=Se(i,n?.type),o=x(i);return o===`none`?`[${r}] ${a}`:`[${r}] ${a} ${Ye(e,o)}`}function Ye(e,t){let{value:n,valueType:r}=e;if(r===`special`&&typeof n==`string`)return Ae(n);if(Array.isArray(n)){let e=n.map(e=>Xe(e,r));return t===`pair`?e.join(` - `):`(${e.join(`, `)})`}return Xe(n,r)}function Xe(e,t){return e==null?``:e instanceof Date?e.toISOString().slice(0,10):typeof e==`number`||typeof e==`boolean`||t===`number`||t===`boolean`?String(e):`'${String(e)}'`}let Ze=[`string`,`number`,`boolean`,`date`,`datetime`,`uniqueidentifier`];function Qe(e){let t=e?.trim().toLowerCase();return Ze.find(e=>e===t)??`string`}function $e(e){return e===!0||e===1}function et(e){return{name:e.FieldName??``,type:Qe(e.DataType),nullable:$e(e.Nullable),excludeFromFilter:$e(e.ExcludeFromFilter),valueListRecordSource:e.ValueListRecordSource||void 0}}function tt(e){return e.map(et).filter(e=>e.name!==``&&!e.excludeFromFilter).sort((e,t)=>e.name.localeCompare(t.name))}function nt(e){return!e||j(e)||e.mode!==`or`?!1:e.items.every(e=>A(e)&&e.mode===`and`&&e.items.every(j))}function rt(e){if(!e)return{type:`group`,mode:`or`,items:[{type:`group`,mode:`and`,items:[]}]};if(j(e))return{type:`group`,mode:`or`,items:[{type:`group`,mode:`and`,items:[e]}]};if(e.mode===`or`){let t=e.items.map(e=>{let t=[];return F(e,t),{type:`group`,mode:`and`,items:t}});return{type:`group`,mode:`or`,items:t.length>0?t:[{type:`group`,mode:`and`,items:[]}]}}let t=[];return F(e,t),{type:`group`,mode:`or`,items:[{type:`group`,mode:`and`,items:t}]}}function F(e,t){if(j(e)){t.push(e);return}for(let n of e.items)F(n,t)}function it(e){return{filterId:e.FilterID??-1,primKey:e.PrimKey??``,name:e.FilterName??``,criteria:e.FilterCriteria??``,dbObjectId:e.DBObjectID??``,accessLevel:at(e.AccessLevel),createdByUser:I(e.CreatedByUser),createdBy:e.CreatedBy??``,domain:e.Domain??null,crossDomain:I(e.CrossDomain),isPersonallyShared:I(e.IsPersonallyShared),hideCriteria:I(e.HideFilterCriteria),headerText:e.OptionalHeaderText||null,comment:e.OptionalComment||null,parameters:e.Parameters||null,reportTitle:e.ReportTitle||null,created:ot(e.Created),updated:ot(e.Updated)}}function at(e){return e===`Manager`||e===`Editor`?e:`Reader`}function I(e){return typeof e==`string`?e.toLowerCase()===`true`:!!e}function ot(e){if(!e)return null;if(e instanceof Date)return e;let t=new Date(e);return Number.isNaN(t.getTime())?null:t}function st(e){return e.filter(e=>(e.FilterID??-1)!==-1).map(it).sort((e,t)=>e.name.localeCompare(t.name))}function ct(e){let t=[],n=[];for(let r of e)r.createdByUser?t.push(r):n.push(r);return{mine:t,shared:n}}function lt(e,t){if(t!=null)return e.find(e=>e.filterId===t)}function ut(e){return e.accessLevel===`Editor`||e.accessLevel===`Manager`}function dt(e){return e.accessLevel===`Manager`}function L(e){return e.createdByUser}let ft=L,pt=L,mt={xs:64,sm:128,md:256,lg:512,xl:void 0};function ht(e,t,n,r=`xs`){if(e&&typeof e==`object`)return ht(e.primKey,e.login,e.hash,e.size);if(!e||!n)return``;let i=mt[r];return`/api/data/blob/EmployeesLookup/${e}/Image/${encodeURIComponent(t??``)}${t?`.`:``}${encodeURIComponent(n)}.jpg${i?`?width=${i}`:``}`}function gt(e,...t){v(Array.isArray(e)&&e.length===t.length+1,`Method 'localize' must be used as a tag function`);let n=b(e.map((t,n)=>n===e.length-1?t:`${t}$${n}`).join(``));return t.forEach((e,t)=>{n=n.replace(`$${t}`,e)}),n}let _t={amp:`&`,lt:`<`,gt:`>`,quot:`"`,apos:`'`};function R(e){return e.replace(/&(#x?[0-9a-f]+|[a-z]+);/gi,(e,t)=>t.startsWith(`#x`)||t.startsWith(`#X`)?String.fromCodePoint(Number.parseInt(t.slice(2),16)):t.startsWith(`#`)?String.fromCodePoint(Number.parseInt(t.slice(1),10)):_t[t.toLowerCase()]??e)}function z(e){return e.replace(/&/g,`&amp;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`).replace(/"/g,`&quot;`).replace(/'/g,`&apos;`)}function B(e,t){let n=RegExp(`<${t}(?:\\s[^>]*)?>([\\s\\S]*?)</${t}>`).exec(e);if(!n)return null;let r=R(n[1]).trim();return r===``?null:r}function vt(e,t){return[...e.matchAll(RegExp(`<${t}(?:\\s[^>]*)?>([\\s\\S]*?)</${t}>`,`g`))].map(e=>R(e[1]).trim())}let yt={Byte:`number`,Decimal:`number`,Double:`number`,Int16:`number`,Int32:`number`,Int64:`number`,Single:`number`,Boolean:`boolean`,DateTime:`date`};function bt(e){let t=/<SelectColumns>([\s\S]*?)<\/SelectColumns>/.exec(e)?.[1]??``,n=[];for(let e of t.matchAll(/<afSelectColumn>([\s\S]*?)<\/afSelectColumn>/g)){let t=B(e[1],`Name`);t&&n.push({name:t,type:yt[B(e[1],`DataType`)??``]??`string`})}return n}function V(e){if(!e||!e.includes(`<afRecordSource`))return null;let t=B(e,`ViewName`);if(!t)return null;let n=B(e,`MaxRecords`);return{viewName:t,columns:bt(e),whereClause:B(e,`WhereClause`),filterString:B(e,`FilterString`),maxRecords:n===null||n===`0`?null:Number(n)}}let xt=[`String`,`Integer`,`Double`,`Date`,`Boolean`],St=/^[a-z]stp_/i;function H(e){return typeof e==`string`&&St.test(e.trim())}function Ct(e){return e?e.split(/\r\n|\r|\n/).map(e=>e.trim()).filter(e=>e!==``):[]}function wt(e){return xt.find(t=>t.toLowerCase()===e?.trim().toLowerCase())??`String`}function Tt(e,t,n){if(t)return`lookup`;if(n)return`select`;switch(e){case`Integer`:case`Double`:return`number`;case`Date`:return`date`;case`Boolean`:return`boolean`;default:return`text`}}function Et(e){let t=e.Name??``,n=wt(e.DataType),r=Ct(e.Items),i=V(e.RecordSource),a=e.ValueMember??null;i&&!a&&(a=i.columns[0]?.name??null);let o=i?.columns.find(e=>e.name!==a)?.name??null,s=!!(i&&a);return{name:t,label:e.Label?.trim()||t,description:e.Description?.trim()||null,type:n,editor:Tt(n,s,r.length>0),defaultValue:e.DefaultValue??null,items:r,recordSource:s?i:null,valueMember:s?a:null,displayMember:s?o:null,sortOrder:e.SortOrder??0,lookupWidth:e.LookupWidth??null,lookupHeight:e.LookupHeight??null}}function Dt(e){return e.filter(e=>e.Name).map(Et).sort((e,t)=>e.sortOrder-t.sortOrder||e.label.localeCompare(t.label))}function U(e,t){if(t==null||t===``)return e.type!==`Boolean`&&null;switch(e.type){case`Boolean`:return typeof t==`boolean`?t:/^(true|1|ja|yes)$/i.test(String(t));case`Integer`:{let e=Number.parseInt(String(t),10);return Number.isNaN(e)?null:e}case`Double`:{let e=Number(String(t).replace(`,`,`.`));return Number.isNaN(e)?null:e}default:return String(t)}}function Ot(e){let t={};for(let n of e)t[n.name]=H(n.defaultValue)?U(n,null):U(n,n.defaultValue);return t}function kt(e,t){return t==null?``:typeof t==`boolean`?t?`True`:`False`:String(t)}function At(e,t){return`<Parameters Version="1">\n${e.map(e=>{let n=kt(e,t[e.name]??null);return` <Parameter Name="${z(e.name)}" Type="${e.type}">${z(n)}</Parameter>`}).join(`
2
+ `)}\n</Parameters>`}function jt(e){if(!e)return{};let t={};for(let n of e.matchAll(/<Parameter\s+([^>]*?)\/?>(?:([\s\S]*?)<\/Parameter>)?/g)){let e=/Name\s*=\s*"([^"]*)"/.exec(n[1])?.[1];e&&(t[e]=B(n[0],`Parameter`)??``)}return t}function Mt(e,t){let n=jt(t),r=Ot(e);for(let t of e)t.name in n&&(r[t.name]=U(t,n[t.name]));return r}async function Nt(e,t,n){if(!t.defaultValue||!H(t.defaultValue))return null;let r=await fetch(`/api/reporting/filters/${encodeURIComponent(e)}/GetParameterDefaultValue`,{body:JSON.stringify({parameterName:t.name}),credentials:`same-origin`,headers:{"Content-Type":`application/json`,"X-Requested-With":`XMLHttpRequest`},method:`POST`,signal:n});if(!r.ok)throw Error(`${r.status} ${r.statusText}`);return Ft(await r.json())}async function Pt(e,t,n,r){let i=t.filter(e=>H(e.defaultValue??``));if(i.length===0)return n;let a=await Promise.all(i.map(async t=>{try{return[t.name,await Nt(e,t,r)]}catch{return[t.name,null]}})),o={...n};for(let[e,t]of a)t!==null&&(o[e]=t);return o}function Ft(e){let t=(Array.isArray(e)?e:Object.values(e).find(e=>Array.isArray(e)))?.[0];return t==null?null:Array.isArray(t)?t[0]??null:typeof t==`object`?Object.values(t)[0]??null:t}let It={CSV:`csv`,HTML:`html`,IMAGE:`xbm`,MHT:`mht`,PDF:`pdf`,RTF:`rtf`,TEXT:`txt`,XLS:`xls`,XLSX:`xlsx`},Lt={CSV:`text/csv`,HTML:`text/html`,IMAGE:`image/x-xbitmap`,MHT:`message/rfc822`,PDF:`application/pdf`,RTF:`text/enriched`,TEXT:`text/plain`,XLS:`application/vnd.ms-excel`,XLSX:`application/vnd.openxmlformats-officedocument.spreadsheetml.sheet`};function Rt(e){return It[e]}function W(e){return Lt[e]}let zt=/[\\/:*?"<>|.#&+%\u0000-\u001f]/g;function G(e){let t=(e.fileName??e.reportId).trim().replace(zt,`-`).replace(/-{2,}/g,`-`).replace(/^-|-$/g,``).trim();return`${t===``?e.reportId:t}.${Rt(e.format)}`}function K(e){let t=window.location?.href;return t?new URL(e,t).toString():e}function q(e){let{domain:t,filter:n,headerText:r,hideFilterString:i,parameters:a,reportId:o,signal:s,timezone:c}=e,l=G(e),u=`/api/report/${encodeURIComponent(o)}/${encodeURIComponent(l)}`,d=new URLSearchParams,f=Ht(a),p=f.length>0||!!r||i===!0;if(t&&d.set(`Domain`,t),d.set(`timezone`,String(c??-(/* @__PURE__ */ new Date()).getTimezoneOffset()/60)),!p)return n&&d.set(`Filter`,n),new Request(K(`${u}?${d}`),{credentials:`same-origin`,signal:s});let m={filter:n??``,parameters:f};return r&&(m.optionalheader=r),i===!0&&(m.showfiltercriteria=`true`),new Request(K(`${u}?${d}`),{body:JSON.stringify(m),credentials:`same-origin`,headers:{"Content-Type":`application/json`,"X-Requested-With":`XMLHttpRequest`},method:`POST`,signal:s})}async function J(e){let t=await fetch(q(e));if((t.headers.get(`content-type`)??``).includes(`application/json`)){let e=await t.json();throw Error(e.error??`Failed to render report`)}if(!t.ok)throw Error(`${t.status} ${t.statusText}`);return t.blob()}function Bt(e){return oe(q(e),{fileName:G(e),onProgress:e.onProgress,signal:e.signal})}async function Y(e){let t=await J(e),n=URL.createObjectURL(t.type?t:new Blob([t],{type:W(e.format)})),r=window.open(n,`_blank`);if(!r)throw URL.revokeObjectURL(n),Error(`The report could not be opened. Allow pop-ups for this site and try again.`);r.opener=null,window.setTimeout(()=>URL.revokeObjectURL(n),6e4)}async function Vt(e){let t=window.document;if(!t?.body)return Y(e);let n=await J(e),r=URL.createObjectURL(n.type?n:new Blob([n],{type:W(e.format)})),i=t.createElement(`iframe`);i.setAttribute(`aria-hidden`,`true`),i.style.cssText=`position:fixed;inset-block-start:0;inset-inline-start:0;inline-size:1px;block-size:1px;border:0;visibility:hidden`;let a=()=>{i.remove(),URL.revokeObjectURL(r)};try{await new Promise((e,n)=>{i.addEventListener(`load`,()=>e(),{once:!0}),i.addEventListener(`error`,()=>n(/* @__PURE__ */ Error(`The report could not be loaded for printing`)),{once:!0}),i.src=r,t.body.append(i)}),i.contentWindow?.focus(),i.contentWindow?.print()}catch{return a(),Y(e)}window.setTimeout(a,6e4)}function Ht(e){return e?Object.entries(e).filter(([,e])=>e!=null&&e!==``).map(([e,t])=>({name:e,value:typeof t==`boolean`?String(t):t})):[]}function X(e){return e===!0||e===1}function Ut(e){let t=[];return X(e.FormatPDF)&&t.push(`PDF`),X(e.FormatCSV)&&t.push(`XLSX`,`XLS`,`CSV`),X(e.FormatHTML)&&t.push(`HTML`),X(e.FormatRTF)&&t.push(`RTF`),X(e.FormatMHT)&&t.push(`MHT`),X(e.FormatTEXT)&&t.push(`TEXT`),X(e.FormatIMAGE)&&t.push(`IMAGE`),t}function Wt(e){let t=V(e.RecordSource);return{reportId:e.ReportID??``,shortId:e.ShortID??null,title:e.Title?.trim()||null,description:e.Description?.trim()||null,viewName:t?.viewName??null,initialFilter:t?.filterString??null,hasTitle:X(e.HasTitle),hasHeader:X(e.HasHeader),formats:Ut(e),timeout:e.Timeout??null}}function Gt(){if(document.querySelector(`#AlertDialogTemplate`))return;let e=document.createElement(`template`);e.id=`AlertDialogTemplate`,e.innerHTML=`
3
3
  <dialog class="alert-dialog">
4
4
  <form method="dialog">
5
5
  <article></article>
@@ -8,5 +8,5 @@ this.af=this.af||{},this.af.common=(function(e){Object.defineProperty(e,Symbol.t
8
8
  </footer>
9
9
  </form>
10
10
  </dialog>
11
- `,document.body.append(e)}window.document&&(document.body?Z():document.addEventListener(`DOMContentLoaded`,Z,{once:!0}));function Ht(e,t=`No`){return new Promise(n=>{let r=new AbortController;e.addEventListener(`close`,()=>{n(e.returnValue),r.abort()},{signal:r.signal}),e.addEventListener(`cancel`,()=>{n(t),r.abort()},{signal:r.signal})})}let Q=new Map;async function $({buttons:e,content:t,className:n,id:r,title:i}){if(r&&Q.has(r))return await Q.get(r);let a=document.querySelector(`#AlertDialogTemplate`);if(!a)throw Error(`No alert dialog template found`);let o=a.content.firstElementChild?.cloneNode(!0),s=o?.querySelector(`article`),c=o?.querySelector(`footer menu`);if(!o||!s||!c)throw Error(`Invalid alert dialog template`);if(n)for(let e of n.split(/\s+/))o?.classList.add(e);if(i){let e=document.createElement(`header`);e.append(i),s.parentNode?.insertBefore(e,s)}s.appendChild(typeof t==`string`?document.createTextNode(t):t);for(let{label:t,value:n,primary:r}of e){let e=document.createElement(`li`),i=document.createElement(`button`);i.value=n,r&&i.classList.add(`primary`),i.textContent=t,e.appendChild(i),c.appendChild(i)}document.body.appendChild(o),o.showModal();let l=Ht(o).then(e=>(r&&Q.has(r)&&Q.delete(r),o&&document.body.removeChild(o),e));return r&&Q.set(r,l),await l}let Ut=function(e){return e[e.YesNo=0]=`YesNo`,e[e.OkCancel=1]=`OkCancel`,e}({});async function Wt(e,t={}){let{buttons:n=0,title:r}=t;return await $({content:e,buttons:n===1?[{label:y(`OK`),value:`yes`,primary:!0},{label:y(`Cancel`),value:`no`}]:[{label:y(`Yes`),value:`yes`,primary:!0},{label:y(`No`),value:`no`}],className:`alert-dialog-confirm`,title:r})===`yes`}async function Gt(e,t={}){await $({content:e,className:`alert-dialog-alert`,buttons:[{label:y(`OK`),value:`ok`,primary:!0}],...t})}function Kt(e){return`${e??window.af?.article?.id??window.window?.location.pathname.substring(1).split(`/`)[0]}.${window.af?.userSession.login??`anonymous`}`}function qt(e,t){if(!window.af?.userSession)return null;let n=Kt(t),r=JSON.parse(localStorage.getItem(n)||`{}`);return e?r[e]||null:r}function Jt(e,t,n){if(!window.af?.userSession)return;let r=Kt(n),i=JSON.parse(localStorage.getItem(r)||`{}`);t===void 0?i=e:i[e]=t,localStorage.setItem(r,JSON.stringify(i))}return e.ConfirmButtons=Ut,e.NO_FILTER_ID=-1,e.RELATIVE_DATE_VALUES=E,e.SessionHandler=n,e.UserSession=r,e.addGroupAtPath=Be,e.alert=Gt,e.canDeleteSavedFilter=ct,e.canEditSavedFilter=ot,e.canRenameSavedFilter=R,e.canSetCrossDomain=lt,e.canShareSavedFilter=st,e.changeOperator=Fe,e.coerceParameterValue=W,e.coerceToStandardLayout=$e,e.confirm=Wt,e.convertFilter=Ve,e.countExpressions=N,e.createEmptyFilter=k,e.createEmptyGroup=A,e.createExpression=Ne,e.createLocalizer=he,e.decodeXml=z,e.describeFilter=He,e.downloadBlob=ae,e.downloadReport=Lt,e.downloadRequest=oe,e.encodeXml=B,e.expose=fe,e.fetchParameterDefault=kt,e.findSavedFilter=at,e.getDefaultOperator=Ee,e.getDefaultParameterValues=wt,e.getDynamicValueLabel=D,e.getDynamicValuesForField=Oe,e.getLocalizedString=y,e.getNodeAtPath=Ie,e.getOperatorArity=b,e.getOperatorLabel=xe,e.getOperatorsForField=Te,e.getReportExtension=Pt,e.getReportFileName=K,e.getReportFormats=Bt,e.getReportMediaType=G,e.getReportRequest=q,e.getSessionData=m,e.getSettings=qt,e.getUserImage=dt,e.getValueType=T,e.insertNodeAtPath=Le,e.invariant=g,e.isCompleteExpression=P,e.isEmptyFilter=je,e.isExpression=M,e.isGroup=j,e.isProcedureDefault=U,e.isStandardLayout=Qe,e.localStorage=te,e.localize=ft,e.logActivity=a,e.logError=c,e.mitt=t,e.normalizeOperator=O,e.openAlertDialog=$,e.openReport=Y,e.parseParameterItems=yt,e.parseParameters=Dt,e.parseRecordSource=H,e.partitionSavedFilters=it,e.printReport=Rt,e.pruneFilter=Me,e.readElement=V,e.readElements=mt,e.removeNodeAtPath=Re,e.renderReport=J,e.resolveParameterDefaults=At,e.restoreParameterValues=Ot,e.saveSettings=Jt,e.serializeParameters=Et,e.setGroupMode=ze,e.startActivity=o,e.time=s,e.toFieldMetadata=Xe,e.toFieldMetadataList=Ze,e.toFilterFieldType=Je,e.toFilterTree=Ae,e.toLocalDateTime=ie,e.toLocalISODate=ne,e.toLocalISODateTime=re,e.toReport=Vt,e.toReportParameter=St,e.toReportParameters=Ct,e.toSavedFilter=et,e.toSavedFilters=rt,e.updateNodeAtPath=F,e.version=`2.14.0`,e.waitForDialog=Ht,e})({});
11
+ `,document.body.append(e)}window.document&&(document.body?Gt():document.addEventListener(`DOMContentLoaded`,Gt,{once:!0}));function Kt(e,t=`No`){return new Promise(n=>{let r=new AbortController;e.addEventListener(`close`,()=>{n(e.returnValue),r.abort()},{signal:r.signal}),e.addEventListener(`cancel`,()=>{n(t),r.abort()},{signal:r.signal})})}let Z=/* @__PURE__ */ new Map;async function Q({buttons:e,content:t,className:n,id:r,title:i}){if(r&&Z.has(r))return await Z.get(r);let a=document.querySelector(`#AlertDialogTemplate`);if(!a)throw Error(`No alert dialog template found`);let o=a.content.firstElementChild?.cloneNode(!0),s=o?.querySelector(`article`),c=o?.querySelector(`footer menu`);if(!o||!s||!c)throw Error(`Invalid alert dialog template`);if(n)for(let e of n.split(/\s+/))o?.classList.add(e);if(i){let e=document.createElement(`header`);e.append(i),s.parentNode?.insertBefore(e,s)}s.appendChild(typeof t==`string`?document.createTextNode(t):t);for(let{label:t,value:n,primary:r}of e){let e=document.createElement(`li`),i=document.createElement(`button`);i.value=n,r&&i.classList.add(`primary`),i.textContent=t,e.appendChild(i),c.appendChild(i)}document.body.appendChild(o),o.showModal();let l=Kt(o).then(e=>(r&&Z.has(r)&&Z.delete(r),o&&document.body.removeChild(o),e));return r&&Z.set(r,l),await l}let qt=/* @__PURE__ */ function(e){return e[e.YesNo=0]=`YesNo`,e[e.OkCancel=1]=`OkCancel`,e}({});async function Jt(e,t={}){let{buttons:n=0,title:r}=t;return await Q({content:e,buttons:n===1?[{label:b(`OK`),value:`yes`,primary:!0},{label:b(`Cancel`),value:`no`}]:[{label:b(`Yes`),value:`yes`,primary:!0},{label:b(`No`),value:`no`}],className:`alert-dialog-confirm`,title:r})===`yes`}async function Yt(e,t={}){await Q({content:e,className:`alert-dialog-alert`,buttons:[{label:b(`OK`),value:`ok`,primary:!0}],...t})}function $(e){return`${e??window.af?.article?.id??window.window?.location.pathname.substring(1).split(`/`)[0]}.${window.af?.userSession.login??`anonymous`}`}function Xt(e,t){if(!window.af?.userSession)return null;let n=$(t),r=JSON.parse(localStorage.getItem(n)||`{}`);return e?r[e]||null:r}function Zt(e,t,n){if(!window.af?.userSession)return;let r=$(n),i=JSON.parse(localStorage.getItem(r)||`{}`);t===void 0?i=e:i[e]=t,localStorage.setItem(r,JSON.stringify(i))}return e.ConfirmButtons=qt,e.NO_FILTER_ID=-1,e.RELATIVE_DATE_VALUES=Oe,e.SessionHandler=n,e.UserSession=r,e.addGroupAtPath=We,e.alert=Yt,e.canDeleteSavedFilter=ft,e.canEditSavedFilter=ut,e.canRenameSavedFilter=L,e.canSetCrossDomain=pt,e.canShareSavedFilter=dt,e.changeOperator=ze,e.coerceParameterValue=U,e.coerceToStandardLayout=rt,e.confirm=Jt,e.convertFilter=Ge,e.countExpressions=M,e.createEmptyFilter=O,e.createEmptyGroup=k,e.createExpression=Le,e.createLocalizer=ge,e.decodeXml=R,e.describeFilter=Ke,e.downloadBlob=ae,e.downloadReport=Bt,e.downloadRequest=oe,e.encodeXml=z,e.expose=pe,e.fetchParameterDefault=Nt,e.findSavedFilter=lt,e.getDefaultOperator=De,e.getDefaultParameterValues=Ot,e.getDynamicValueLabel=Ae,e.getDynamicValuesForField=je,e.getLocalizedString=b,e.getNodeAtPath=Be,e.getOperatorArity=x,e.getOperatorLabel=Se,e.getOperatorsForField=Ee,e.getReportExtension=Rt,e.getReportFileName=G,e.getReportFormats=Ut,e.getReportMediaType=W,e.getReportRequest=q,e.getSessionData=g,e.getSettings=Xt,e.getUserImage=ht,e.getValueType=E,e.insertNodeAtPath=Ve,e.invariant=v,e.isCompleteExpression=N,e.isEmptyFilter=Fe,e.isExpression=j,e.isGroup=A,e.isProcedureDefault=H,e.isStandardLayout=nt,e.localStorage=te,e.localize=gt,e.logActivity=a,e.logError=c,e.mitt=t,e.normalizeOperator=D,e.openAlertDialog=Q,e.openReport=Y,e.parseParameterItems=Ct,e.parseParameters=jt,e.parseRecordSource=V,e.partitionSavedFilters=ct,e.printReport=Vt,e.pruneFilter=Ie,e.readElement=B,e.readElements=vt,e.removeNodeAtPath=He,e.renderReport=J,e.resolveParameterDefaults=Pt,e.restoreParameterValues=Mt,e.saveSettings=Zt,e.serializeParameters=At,e.setGroupMode=Ue,e.startActivity=o,e.time=s,e.toFieldMetadata=et,e.toFieldMetadataList=tt,e.toFilterFieldType=Qe,e.toFilterTree=Ne,e.toLocalDateTime=ie,e.toLocalISODate=ne,e.toLocalISODateTime=re,e.toReport=Wt,e.toReportParameter=Et,e.toReportParameters=Dt,e.toSavedFilter=it,e.toSavedFilters=st,e.unwrapSingleAndGroup=Pe,e.updateNodeAtPath=P,e.version=`2.15.2`,e.waitForDialog=Kt,e})({});
12
12
  //# sourceMappingURL=af.common.legacy.min.js.map