@olenbetong/appframe-core 2.16.0 → 2.16.1

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.
@@ -21,7 +21,7 @@ function mitt_default(n) {
21
21
  };
22
22
  }
23
23
 
24
- // \0@oxc-project+runtime@0.155.0/helpers/esm/typeof.js
24
+ // \0@oxc-project+runtime@0.157.0/helpers/esm/typeof.js
25
25
  function _typeof(o) {
26
26
  "@babel/helpers - typeof";
27
27
  return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(o) {
@@ -31,25 +31,25 @@ function _typeof(o) {
31
31
  }, _typeof(o);
32
32
  }
33
33
 
34
- // \0@oxc-project+runtime@0.155.0/helpers/esm/toPrimitive.js
35
- function toPrimitive(t, r) {
34
+ // \0@oxc-project+runtime@0.157.0/helpers/esm/toPrimitive.js
35
+ function toPrimitive(t, e) {
36
36
  if ("object" != _typeof(t) || !t) return t;
37
- var e = t[Symbol.toPrimitive];
38
- if (void 0 !== e) {
39
- var i = e.call(t, r || "default");
37
+ var r;
38
+ if ("undefined" != typeof Symbol && void 0 !== (r = t[Symbol.toPrimitive])) {
39
+ var i = r.call(t, e || "default");
40
40
  if ("object" != _typeof(i)) return i;
41
41
  throw new TypeError("@@toPrimitive must return a primitive value.");
42
42
  }
43
- return ("string" === r ? String : Number)(t);
43
+ return ("string" === e ? String : Number)(t);
44
44
  }
45
45
 
46
- // \0@oxc-project+runtime@0.155.0/helpers/esm/toPropertyKey.js
46
+ // \0@oxc-project+runtime@0.157.0/helpers/esm/toPropertyKey.js
47
47
  function toPropertyKey(t) {
48
48
  var i = toPrimitive(t, "string");
49
49
  return "symbol" == _typeof(i) ? i : i + "";
50
50
  }
51
51
 
52
- // \0@oxc-project+runtime@0.155.0/helpers/esm/defineProperty.js
52
+ // \0@oxc-project+runtime@0.157.0/helpers/esm/defineProperty.js
53
53
  function _defineProperty(e, r, t) {
54
54
  return (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {
55
55
  value: t,
@@ -1592,14 +1592,26 @@ function readSelectColumns(xml) {
1592
1592
  return columns;
1593
1593
  }
1594
1594
  /**
1595
+ * The record source a document holds. Parameter lookups store one `<afRecordSource>`; a report
1596
+ * stores its record sources as `<ArrayOfAfReportRecordSource>` with one `<afReportRecordSource>`
1597
+ * per data source, of which the one with the ID `Master` feeds the report (else the first).
1598
+ */
1599
+ function pickRecordSource(document) {
1600
+ if (!document) return null;
1601
+ let sources = [...document.matchAll(/<(afRecordSource|afReportRecordSource)(?:\s[^>]*)?>([\s\S]*?)<\/\1>/g)].map((match) => match[2]);
1602
+ if (sources.length === 0) return null;
1603
+ return sources.find((source) => readElement(source, "ID") === "Master") ?? sources[0];
1604
+ }
1605
+ /**
1595
1606
  * Reads the parts of an `afRecordSource` a web client can act on: the view, the
1596
1607
  * selected columns and the design-time filter.
1597
1608
  *
1598
1609
  * Returns `null` for anything that is not a record source, so a missing or
1599
1610
  * empty `RecordSource` column simply means "no lookup".
1600
1611
  */
1601
- function parseRecordSource(xml) {
1602
- if (!xml || !xml.includes("<afRecordSource")) return null;
1612
+ function parseRecordSource(document) {
1613
+ let xml = pickRecordSource(document);
1614
+ if (!xml) return null;
1603
1615
  let viewName = readElement(xml, "ViewName");
1604
1616
  if (!viewName) return null;
1605
1617
  let maxRecords = readElement(xml, "MaxRecords");
@@ -2207,6 +2219,6 @@ function saveSettings(setting, value, article) {
2207
2219
  }
2208
2220
 
2209
2221
  // src/index.ts
2210
- const version = "2.15.2";
2222
+ const version = "2.16.1";
2211
2223
 
2212
2224
  export { ConfirmButtons, NO_FILTER_ID, PERIOD_OPERATORS, RELATIVE_DATE_VALUES, SessionHandler, UserSession, addGroupAtPath, alert, canDeleteSavedFilter, canEditSavedFilter, canRenameSavedFilter, canSetCrossDomain, canShareSavedFilter, changeOperator, coerceParameterValue, coerceToStandardLayout, confirm, convertFilter, countExpressions, createEmptyFilter, createEmptyGroup, createExpression, createLocalizer, decodeXml, describeFilter, downloadBlob, downloadReport, downloadRequest, encodeXml, expose, fetchParameterDefault, findSavedFilter, getColumnsForField, getDefaultOperator, getDefaultParameterValues, getDynamicValueLabel, getDynamicValuesForField, getLocalizedString, getNodeAtPath, getOperatorArity, getOperatorLabel, getOperatorsForField, getReportExtension, getReportFileName, getReportFormats, getReportMediaType, getReportRequest, getSessionData, getSettings, getUserImage, getValueType, insertNodeAtPath, invariant, isCompleteExpression, isEmptyFilter, isExpression, isGroup, isProcedureDefault, isRangeEnd, isStandardLayout, localStorage_default as localStorage, localize, logActivity, logError, mitt_default as mitt, needsFilterString, normalizeOperator, openAlertDialog, openReport, parseParameterItems, parseParameters, parseRecordSource, partitionSavedFilters, printReport, pruneFilter, readElement, readElements, removeNodeAtPath, renderReport, resolveParameterDefaults, restoreParameterValues, saveSettings, serializeParameters, setGroupMode, startActivity, supportsColumnValue, time, toFieldMetadata, toFieldMetadataList, toFilterFieldType, toFilterTree, toLocalDateTime, toLocalISODate, toLocalISODateTime, toReport, toReportParameter, toReportParameters, toSavedFilter, toSavedFilters, unwrapSingleAndGroup, updateNodeAtPath, version, waitForDialog };
@@ -1550,14 +1550,26 @@ function readSelectColumns(xml) {
1550
1550
  return columns;
1551
1551
  }
1552
1552
  /**
1553
+ * The record source a document holds. Parameter lookups store one `<afRecordSource>`; a report
1554
+ * stores its record sources as `<ArrayOfAfReportRecordSource>` with one `<afReportRecordSource>`
1555
+ * per data source, of which the one with the ID `Master` feeds the report (else the first).
1556
+ */
1557
+ function pickRecordSource(document) {
1558
+ if (!document) return null;
1559
+ let sources = [...document.matchAll(/<(afRecordSource|afReportRecordSource)(?:\s[^>]*)?>([\s\S]*?)<\/\1>/g)].map((match) => match[2]);
1560
+ if (sources.length === 0) return null;
1561
+ return sources.find((source) => readElement(source, "ID") === "Master") ?? sources[0];
1562
+ }
1563
+ /**
1553
1564
  * Reads the parts of an `afRecordSource` a web client can act on: the view, the
1554
1565
  * selected columns and the design-time filter.
1555
1566
  *
1556
1567
  * Returns `null` for anything that is not a record source, so a missing or
1557
1568
  * empty `RecordSource` column simply means "no lookup".
1558
1569
  */
1559
- function parseRecordSource(xml) {
1560
- if (!xml || !xml.includes("<afRecordSource")) return null;
1570
+ function parseRecordSource(document) {
1571
+ let xml = pickRecordSource(document);
1572
+ if (!xml) return null;
1561
1573
  let viewName = readElement(xml, "ViewName");
1562
1574
  if (!viewName) return null;
1563
1575
  let maxRecords = readElement(xml, "MaxRecords");
@@ -2165,6 +2177,6 @@ function saveSettings(setting, value, article) {
2165
2177
  }
2166
2178
 
2167
2179
  // src/index.ts
2168
- const version = "2.15.2";
2180
+ const version = "2.16.1";
2169
2181
 
2170
2182
  export { ConfirmButtons, NO_FILTER_ID, PERIOD_OPERATORS, RELATIVE_DATE_VALUES, SessionHandler, UserSession, addGroupAtPath, alert, canDeleteSavedFilter, canEditSavedFilter, canRenameSavedFilter, canSetCrossDomain, canShareSavedFilter, changeOperator, coerceParameterValue, coerceToStandardLayout, confirm, convertFilter, countExpressions, createEmptyFilter, createEmptyGroup, createExpression, createLocalizer, decodeXml, describeFilter, downloadBlob, downloadReport, downloadRequest, encodeXml, expose, fetchParameterDefault, findSavedFilter, getColumnsForField, getDefaultOperator, getDefaultParameterValues, getDynamicValueLabel, getDynamicValuesForField, getLocalizedString, getNodeAtPath, getOperatorArity, getOperatorLabel, getOperatorsForField, getReportExtension, getReportFileName, getReportFormats, getReportMediaType, getReportRequest, getSessionData, getSettings, getUserImage, getValueType, insertNodeAtPath, invariant, isCompleteExpression, isEmptyFilter, isExpression, isGroup, isProcedureDefault, isRangeEnd, isStandardLayout, localStorage_default as localStorage, localize, logActivity, logError, mitt_default as mitt, needsFilterString, normalizeOperator, openAlertDialog, openReport, parseParameterItems, parseParameters, parseRecordSource, partitionSavedFilters, printReport, pruneFilter, readElement, readElements, removeNodeAtPath, renderReport, resolveParameterDefaults, restoreParameterValues, saveSettings, serializeParameters, setGroupMode, startActivity, supportsColumnValue, time, toFieldMetadata, toFieldMetadataList, toFilterFieldType, toFilterTree, toLocalDateTime, toLocalISODate, toLocalISODateTime, toReport, toReportParameter, toReportParameters, toSavedFilter, toSavedFilters, unwrapSingleAndGroup, updateNodeAtPath, version, waitForDialog };
@@ -1,5 +1,5 @@
1
- function e(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 t=class{eventHandler=e();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)}},n=class extends t{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)}};const r=window.af?.article?.id??window.window?.location.pathname.substring(1).split(`/`)[0];async function i(e,t={},n=0){try{let i=await fetch(`/api/logging/log-activity`,{method:`POST`,body:JSON.stringify({article:r,timeElapsed:n,action:e,parameters:{...t,_session:h()}}),headers:{"Content-Type":`application/json`,Accept:`application/json`}});if(!i.ok){if(i.headers.get(`Content-Type`)?.includes(`application/json`)){let e=await i.json();console.error(e.error)}else console.error(`${i.status} ${i.statusText}`)}}catch{}}function a(e,t={}){let n=performance.now();return(r={})=>i(e,{...t,...r},performance.now()-n)}async function o(e){let t=performance.now();return[await e(),performance.now()-t]}async function s(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 c(){return crypto.randomUUID?.()}function l(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 u(){let e={};try{let t=document.querySelector(`script[type="importmap"]`),n=t?l(`synergi-platform`,Object.values(JSON.parse(t.textContent??`{}`).imports??{})):void 0;n&&(e[`synergi-platform`]=n)}catch{}let t=l(`synergi-chrome`,Array.from(document.scripts,e=>e.src))??window.ob?.chrome?.version;return t&&(e[`synergi-chrome`]=t),e}let d=Date.now(),f=c(),p=``,m=``;if(`document`in window){let e=()=>i(`AfSessionInit`,{"appframe-core":window.af?.common?.version,"appframe-data":window.af?.data?.version,"app-version":window.af?.article?.version,...u()});document.addEventListener(`DOMContentLoaded`,()=>{p=localStorage.getItem(`_afDeviceId`),m=sessionStorage.getItem(`_afSessionId`),p||(p=c(),localStorage.setItem(`_afDeviceId`,p)),m||(m=f,sessionStorage.setItem(`_afSessionId`,m)),e()}),document.addEventListener(`visibilitychange`,function(){document.visibilityState===`hidden`?navigator.sendBeacon(`/api/logging/log-activity`,JSON.stringify({article:r,action:`AfSessionEnd`,parameters:{_session:h()}})):e()})}function h(){return{browserSessionId:m,sessionStart:d,sessionLength:Date.now()-d,sessionId:f,deviceId:p}}window.window?.addEventListener(`error`,e=>{typeof e==`object`&&`error`in e?s(e.error):typeof e==`object`&&`message`in e&&s(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 g(e,t=2){return String(e).padStart(t,`0`)}function re(e){return e?`${e.getFullYear()}-${g(e.getMonth()+1)}-${g(e.getDate())}T${g(e.getHours())}:${g(e.getMinutes())}:${g(e.getSeconds())}.${g(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 _(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();_(!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();else 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`})}}const 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]+)$/,v=e=>e.split(`,`).map(e=>e.trim()).filter(Boolean);function ue(e){let t=e.toString(),n=t.match(ce);if(n){let t=v(n[1]??n[2]??``);return{name:e.name,args:t,body:n[3]}}let r=t.match(le);if(r){let t=v(r[1]??r[2]??``);return{name:e.name,args:t,body:r[3]}}let i=t.match(se);return _(i,`Unable to parse function!`),{name:e.name??i[1],args:v(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);_(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:_(!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 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=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 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}}const _e=[`isnull`,`isnotnull`,`istrue`,`isfalse`,`isblank`,`isnotblank`],b=[`isbeyondthisyear`,`islaterthisyear`,`islaterthismonth`,`isnextweek`,`islaterthisweek`,`istomorrow`,`istoday`,`isyesterday`,`isearlierthisweek`,`islastweek`,`isearlierthismonth`,`isearlierthisyear`,`ispriorthisyear`],ve=[`between`,`notbetween`,`datebetween`,`datenotbetween`],ye=[`inlist`,`notinlist`];function x(e){return _e.includes(e)||b.includes(e)?`none`:ve.includes(e)?`pair`:ye.includes(e)?`list`:`single`}const 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`,isbeyondthisyear:`Is beyond this year`,islaterthisyear:`Is later this year`,islaterthismonth:`Is later this month`,isnextweek:`Is next week`,islaterthisweek:`Is later this week`,istomorrow:`Is tomorrow`,istoday:`Is today`,isyesterday:`Is yesterday`,isearlierthisweek:`Is earlier this week`,islastweek:`Is last week`,isearlierthismonth:`Is earlier this month`,isearlierthisyear:`Is earlier this year`,ispriorthisyear:`Is prior to this year`},xe={greaterthan:`After`,greaterthanorequal:`On or after`,lessthan:`Before`,lessthanorequal:`Up to`};function Se(e,t){return y((t===`date`||t===`datetime`?xe[e]:void 0)??be[e]??e)}const 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,...b],datetime:[...S,...C,...w,...T,...b],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`}}const Oe=[`Yesterday`,`Today`,`Now`,`Tomorrow`,`DayAfterTomorrow`,`TwoWeeksAway`,`ThisWeek`,`ThisMonth`,`ThisYear`,`LastWeek`,`LastMonth`,`LastYear`,`NextWeek`,`NextMonth`,`NextYear`],ke={CurrentUser:`Current user`,Yesterday:`Yesterday`,Today:`Today`,Now:`Now`,Tomorrow:`Tomorrow`,DayAfterTomorrow:`Day after tomorrow`,TwoWeeksAway:`Two weeks away`,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 y(ke[e]??e)}function je(e){return e.type===`date`||e.type===`datetime`?[...Oe]:e.type===`string`?[`CurrentUser`]:[]}const Me=[...S,...w,...T];function Ne(e){return Me.includes(e)}function Pe(e){return e===`datetime`?`date`:e}function Fe(e,t){if(e.type===`boolean`)return[];let n=Pe(e.type);return t.filter(t=>t.name!==e.name&&!t.excludeFromFilter&&Pe(t.type)===n)}const Ie={not:`notequals`,tweens:`notbetween`,notdate:`notdatequals`,notdateequals:`notdatequals`};function D(e){let t=e.toLowerCase().replace(/[\s,]/g,``);return Ie[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 Le(e){return e?j(e)?{type:`group`,mode:`and`,items:[e]}:e:O()}function Re(e){if(e.mode!==`or`||e.items.length!==1)return e;let[t]=e.items;return A(t)&&t.mode===`and`?t:e}function ze(e){return M(e)===0}function M(e){return e?j(e)?1:e.items.reduce((e,t)=>e+M(t),0):0}function Be(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)?Be(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=>{let t=P(e)?e.value:e;return t!==``&&t!=null}):t!==`list`||Array.isArray(e.value)&&e.value.length>0}function P(e){return typeof e==`object`&&!!e&&!(e instanceof Date)&&`valueType`in e}const Ve=/* @__PURE__ */ new Set([`Now`,`DayAfterTomorrow`,`TwoWeeksAway`]);function He(e,t){return e===`column`||e===`special`&&typeof t==`string`&&Ve.has(t)}function Ue(e){return e?A(e)?e.items.some(Ue):b.includes(D(e.operator))||He(e.valueType,e.value)?!0:Array.isArray(e.value)&&e.value.some(e=>P(e)):!1}function We(e,t){let n=t??De(e);return{type:`expression`,column:e.name,operator:n,value:Ge(n),valueType:E(e,n)}}function Ge(e){switch(x(e)){case`none`:return null;case`pair`:return[``,``];case`list`:return[];default:return``}}function Ke(e,t,n){let r=x(D(e.operator)),i=x(t),a=e.value,o=e.valueType===`column`||Array.isArray(a)&&a.some(e=>P(e)&&e.valueType===`column`);(i!==r||o&&!Ne(t))&&(a=Ge(t));let s=(e.valueType===`special`||e.valueType===`column`)&&a===e.value?e.valueType:E(n,t);return{...e,operator:t,value:a,valueType:s}}function qe(e,t){let n=e;for(let e of t){if(!n||!A(n))return null;n=n.items[e]}return n??null}function F(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]=F(a,i,n);return{...e,items:o}}function Je(e,t,n){return F(e,t,e=>A(e)?{...e,items:[...e.items,n]}:e)}function Ye(e,t){return t.length===0?O():F(e,t,()=>null)}function Xe(e,t,n){return F(e,t,e=>A(e)?{...e,mode:n}:e)}function Ze(e,t=[]){let n=qe(e,t);return Je(e,t,k(n&&A(n)&&n.mode===`and`?`or`:`and`))}async function Qe(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?Le(r.filterObject):null}}function $e(e,t={}){return e?et(e,new Map((t.fields??[]).map(e=>[e.name.toLowerCase(),e])),0):``}function et(e,t,n){if(j(e))return tt(e,t);let r=e.items.map(e=>et(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 tt(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} ${nt(e,o,t)}`}function nt(e,t,n){let{value:r,valueType:i}=e;if(Array.isArray(r)){let e=r.map(e=>P(e)?I(e.value,e.valueType,n):I(e,i,n));return t===`pair`?e.join(` - `):`(${e.join(`, `)})`}return I(r,i,n)}function I(e,t,n){return t===`special`&&typeof e==`string`?Ae(e):t===`column`&&typeof e==`string`?`[${n.get(e.toLowerCase())?.caption??e}]`:e==null?``:e instanceof Date?e.toISOString().slice(0,10):typeof e==`number`||typeof e==`boolean`||t===`number`||t===`boolean`?String(e):`'${String(e)}'`}const rt=[`string`,`number`,`boolean`,`date`,`datetime`,`uniqueidentifier`];function it(e){let t=e?.trim().toLowerCase();return rt.find(e=>e===t)??`string`}function at(e){return e===!0||e===1}function ot(e){return{name:e.FieldName??``,type:it(e.DataType),nullable:at(e.Nullable),excludeFromFilter:at(e.ExcludeFromFilter),valueListRecordSource:e.ValueListRecordSource||void 0}}function st(e){return e.map(ot).filter(e=>e.name!==``&&!e.excludeFromFilter).sort((e,t)=>e.name.localeCompare(t.name))}function ct(e){return!e||j(e)||e.mode!==`or`?!1:e.items.every(e=>A(e)&&e.mode===`and`&&e.items.every(j))}function lt(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 L(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 L(e,t),{type:`group`,mode:`or`,items:[{type:`group`,mode:`and`,items:t}]}}function L(e,t){if(j(e))t.push(e);else for(let n of e.items)L(n,t)}const ut=-1;function dt(e){return{filterId:e.FilterID??-1,primKey:e.PrimKey??``,name:e.FilterName??``,criteria:e.FilterCriteria??``,dbObjectId:e.DBObjectID??``,accessLevel:ft(e.AccessLevel),createdByUser:R(e.CreatedByUser),createdBy:e.CreatedBy??``,domain:e.Domain??null,crossDomain:R(e.CrossDomain),isPersonallyShared:R(e.IsPersonallyShared),hideCriteria:R(e.HideFilterCriteria),headerText:e.OptionalHeaderText||null,comment:e.OptionalComment||null,parameters:e.Parameters||null,reportTitle:e.ReportTitle||null,created:pt(e.Created),updated:pt(e.Updated)}}function ft(e){return e===`Manager`||e===`Editor`?e:`Reader`}function R(e){return typeof e==`string`?e.toLowerCase()===`true`:!!e}function pt(e){if(!e)return null;if(e instanceof Date)return e;let t=new Date(e);return Number.isNaN(t.getTime())?null:t}function mt(e){return e.filter(e=>(e.FilterID??-1)!==-1).map(dt).sort((e,t)=>e.name.localeCompare(t.name))}function ht(e){let t=[],n=[];for(let r of e)r.createdByUser?t.push(r):n.push(r);return{mine:t,shared:n}}function gt(e,t){if(t!=null)return e.find(e=>e.filterId===t)}function _t(e){return e.accessLevel===`Editor`||e.accessLevel===`Manager`}function vt(e){return e.accessLevel===`Manager`}function z(e){return e.createdByUser}const yt=z,bt=z,xt={xs:64,sm:128,md:256,lg:512,xl:void 0};function St(e,t,n,r=`xs`){if(e&&typeof e==`object`)return St(e.primKey,e.login,e.hash,e.size);if(!e||!n)return``;let i=xt[r];return`/api/data/blob/EmployeesLookup/${e}/Image/${encodeURIComponent(t??``)}${t?`.`:``}${encodeURIComponent(n)}.jpg${i?`?width=${i}`:``}`}function Ct(e,...t){_(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}const wt={amp:`&`,lt:`<`,gt:`>`,quot:`"`,apos:`'`};function B(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)):wt[t.toLowerCase()]??e)}function V(e){return e.replace(/&/g,`&amp;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`).replace(/"/g,`&quot;`).replace(/'/g,`&apos;`)}function H(e,t){let n=RegExp(`<${t}(?:\\s[^>]*)?>([\\s\\S]*?)</${t}>`).exec(e);if(!n)return null;let r=B(n[1]).trim();return r===``?null:r}function Tt(e,t){return[...e.matchAll(RegExp(`<${t}(?:\\s[^>]*)?>([\\s\\S]*?)</${t}>`,`g`))].map(e=>B(e[1]).trim())}const Et={Byte:`number`,Decimal:`number`,Double:`number`,Int16:`number`,Int32:`number`,Int64:`number`,Single:`number`,Boolean:`boolean`,DateTime:`date`};function Dt(e){let t=/<SelectColumns>([\s\S]*?)<\/SelectColumns>/.exec(e)?.[1]??``,n=[];for(let e of t.matchAll(/<afSelectColumn>([\s\S]*?)<\/afSelectColumn>/g)){let t=H(e[1],`Name`);t&&n.push({name:t,type:Et[H(e[1],`DataType`)??``]??`string`})}return n}function U(e){if(!e||!e.includes(`<afRecordSource`))return null;let t=H(e,`ViewName`);if(!t)return null;let n=H(e,`MaxRecords`);return{viewName:t,columns:Dt(e),whereClause:H(e,`WhereClause`),filterString:H(e,`FilterString`),maxRecords:n===null||n===`0`?null:Number(n)}}const Ot=[`String`,`Integer`,`Double`,`Date`,`Boolean`],kt=/^[a-z]stp_/i;function W(e){return typeof e==`string`&&kt.test(e.trim())}function At(e){return e?e.split(/\r\n|\r|\n/).map(e=>e.trim()).filter(e=>e!==``):[]}function jt(e){return Ot.find(t=>t.toLowerCase()===e?.trim().toLowerCase())??`String`}function Mt(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 Nt(e){let t=e.Name??``,n=jt(e.DataType),r=At(e.Items),i=U(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:Mt(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 Pt(e){return e.filter(e=>e.Name).map(Nt).sort((e,t)=>e.sortOrder-t.sortOrder||e.label.localeCompare(t.label))}function G(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 Ft(e){let t={};for(let n of e)t[n.name]=W(n.defaultValue)?G(n,null):G(n,n.defaultValue);return t}function It(e,t){return t==null?``:typeof t==`boolean`?t?`True`:`False`:String(t)}function Lt(e,t){return`<Parameters Version="1">\n${e.map(e=>{let n=It(e,t[e.name]??null);return` <Parameter Name="${V(e.name)}" Type="${e.type}">${V(n)}</Parameter>`}).join(`
2
- `)}\n</Parameters>`}function Rt(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]=H(n[0],`Parameter`)??``)}return t}function zt(e,t){let n=Rt(t),r=Ft(e);for(let t of e)t.name in n&&(r[t.name]=G(t,n[t.name]));return r}async function Bt(e,t,n){if(!t.defaultValue||!W(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 Ht(await r.json())}async function Vt(e,t,n,r){let i=t.filter(e=>W(e.defaultValue??``));if(i.length===0)return n;let a=await Promise.all(i.map(async t=>{try{return[t.name,await Bt(e,t,r)]}catch{return[t.name,null]}})),o={...n};for(let[e,t]of a)t!==null&&(o[e]=t);return o}function Ht(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}const Ut={CSV:`csv`,HTML:`html`,IMAGE:`xbm`,MHT:`mht`,PDF:`pdf`,RTF:`rtf`,TEXT:`txt`,XLS:`xls`,XLSX:`xlsx`},Wt={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 Gt(e){return Ut[e]}function K(e){return Wt[e]}const Kt=/[\\/:*?"<>|.#&+%\u0000-\u001f]/g;function q(e){let t=(e.fileName??e.reportId).trim().replace(Kt,`-`).replace(/-{2,}/g,`-`).replace(/^-|-$/g,``).trim();return`${t===``?e.reportId:t}.${Gt(e.format)}`}function qt(e){let t=window.location?.href;return t?new URL(e,t).toString():e}function J(e){let{domain:t,filter:n,headerText:r,hideFilterString:i,parameters:a,reportId:o,signal:s,timezone:c}=e,l=q(e),u=`/api/report/${encodeURIComponent(o)}/${encodeURIComponent(l)}`,d=new URLSearchParams,f=Xt(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(qt(`${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(qt(`${u}?${d}`),{body:JSON.stringify(m),credentials:`same-origin`,headers:{"Content-Type":`application/json`,"X-Requested-With":`XMLHttpRequest`},method:`POST`,signal:s})}async function Y(e){let t=await fetch(J(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 Jt(e){return oe(J(e),{fileName:q(e),onProgress:e.onProgress,signal:e.signal})}async function X(e){let t=await Y(e),n=URL.createObjectURL(t.type?t:new Blob([t],{type:K(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 Yt(e){let t=window.document;if(!t?.body)return X(e);let n=await Y(e),r=URL.createObjectURL(n.type?n:new Blob([n],{type:K(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(),X(e)}window.setTimeout(a,6e4)}function Xt(e){return e?Object.entries(e).filter(([,e])=>e!=null&&e!==``).map(([e,t])=>({name:e,value:typeof t==`boolean`?String(t):t})):[]}function Z(e){return e===!0||e===1}function Zt(e){let t=[];return Z(e.FormatPDF)&&t.push(`PDF`),Z(e.FormatCSV)&&t.push(`XLSX`,`XLS`,`CSV`),Z(e.FormatHTML)&&t.push(`HTML`),Z(e.FormatRTF)&&t.push(`RTF`),Z(e.FormatMHT)&&t.push(`MHT`),Z(e.FormatTEXT)&&t.push(`TEXT`),Z(e.FormatIMAGE)&&t.push(`IMAGE`),t}function Qt(e){let t=U(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:Z(e.HasTitle),hasHeader:Z(e.HasHeader),formats:Zt(e),timeout:e.Timeout??null}}function $t(){if(document.querySelector(`#AlertDialogTemplate`))return;let e=document.createElement(`template`);e.id=`AlertDialogTemplate`,e.innerHTML=`
1
+ function e(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 t=class{eventHandler=e();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)}},n=class extends t{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)}};const r=window.af?.article?.id??window.window?.location.pathname.substring(1).split(`/`)[0];async function i(e,t={},n=0){try{let i=await fetch(`/api/logging/log-activity`,{method:`POST`,body:JSON.stringify({article:r,timeElapsed:n,action:e,parameters:{...t,_session:h()}}),headers:{"Content-Type":`application/json`,Accept:`application/json`}});if(!i.ok){if(i.headers.get(`Content-Type`)?.includes(`application/json`)){let e=await i.json();console.error(e.error)}else console.error(`${i.status} ${i.statusText}`)}}catch{}}function a(e,t={}){let n=performance.now();return(r={})=>i(e,{...t,...r},performance.now()-n)}async function o(e){let t=performance.now();return[await e(),performance.now()-t]}async function s(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 c(){return crypto.randomUUID?.()}function l(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 u(){let e={};try{let t=document.querySelector(`script[type="importmap"]`),n=t?l(`synergi-platform`,Object.values(JSON.parse(t.textContent??`{}`).imports??{})):void 0;n&&(e[`synergi-platform`]=n)}catch{}let t=l(`synergi-chrome`,Array.from(document.scripts,e=>e.src))??window.ob?.chrome?.version;return t&&(e[`synergi-chrome`]=t),e}let d=Date.now(),f=c(),p=``,m=``;if(`document`in window){let e=()=>i(`AfSessionInit`,{"appframe-core":window.af?.common?.version,"appframe-data":window.af?.data?.version,"app-version":window.af?.article?.version,...u()});document.addEventListener(`DOMContentLoaded`,()=>{p=localStorage.getItem(`_afDeviceId`),m=sessionStorage.getItem(`_afSessionId`),p||(p=c(),localStorage.setItem(`_afDeviceId`,p)),m||(m=f,sessionStorage.setItem(`_afSessionId`,m)),e()}),document.addEventListener(`visibilitychange`,function(){document.visibilityState===`hidden`?navigator.sendBeacon(`/api/logging/log-activity`,JSON.stringify({article:r,action:`AfSessionEnd`,parameters:{_session:h()}})):e()})}function h(){return{browserSessionId:m,sessionStart:d,sessionLength:Date.now()-d,sessionId:f,deviceId:p}}window.window?.addEventListener(`error`,e=>{typeof e==`object`&&`error`in e?s(e.error):typeof e==`object`&&`message`in e&&s(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 g(e,t=2){return String(e).padStart(t,`0`)}function re(e){return e?`${e.getFullYear()}-${g(e.getMonth()+1)}-${g(e.getDate())}T${g(e.getHours())}:${g(e.getMinutes())}:${g(e.getSeconds())}.${g(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 _(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();_(!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();else 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`})}}const 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]+)$/,v=e=>e.split(`,`).map(e=>e.trim()).filter(Boolean);function ue(e){let t=e.toString(),n=t.match(ce);if(n){let t=v(n[1]??n[2]??``);return{name:e.name,args:t,body:n[3]}}let r=t.match(le);if(r){let t=v(r[1]??r[2]??``);return{name:e.name,args:t,body:r[3]}}let i=t.match(se);return _(i,`Unable to parse function!`),{name:e.name??i[1],args:v(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);_(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:_(!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 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=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 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}}const _e=[`isnull`,`isnotnull`,`istrue`,`isfalse`,`isblank`,`isnotblank`],b=[`isbeyondthisyear`,`islaterthisyear`,`islaterthismonth`,`isnextweek`,`islaterthisweek`,`istomorrow`,`istoday`,`isyesterday`,`isearlierthisweek`,`islastweek`,`isearlierthismonth`,`isearlierthisyear`,`ispriorthisyear`],ve=[`between`,`notbetween`,`datebetween`,`datenotbetween`],ye=[`inlist`,`notinlist`];function x(e){return _e.includes(e)||b.includes(e)?`none`:ve.includes(e)?`pair`:ye.includes(e)?`list`:`single`}const 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`,isbeyondthisyear:`Is beyond this year`,islaterthisyear:`Is later this year`,islaterthismonth:`Is later this month`,isnextweek:`Is next week`,islaterthisweek:`Is later this week`,istomorrow:`Is tomorrow`,istoday:`Is today`,isyesterday:`Is yesterday`,isearlierthisweek:`Is earlier this week`,islastweek:`Is last week`,isearlierthismonth:`Is earlier this month`,isearlierthisyear:`Is earlier this year`,ispriorthisyear:`Is prior to this year`},xe={greaterthan:`After`,greaterthanorequal:`On or after`,lessthan:`Before`,lessthanorequal:`Up to`};function Se(e,t){return y((t===`date`||t===`datetime`?xe[e]:void 0)??be[e]??e)}const 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,...b],datetime:[...S,...C,...w,...T,...b],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`}}const Oe=[`Yesterday`,`Today`,`Now`,`Tomorrow`,`DayAfterTomorrow`,`TwoWeeksAway`,`ThisWeek`,`ThisMonth`,`ThisYear`,`LastWeek`,`LastMonth`,`LastYear`,`NextWeek`,`NextMonth`,`NextYear`],ke={CurrentUser:`Current user`,Yesterday:`Yesterday`,Today:`Today`,Now:`Now`,Tomorrow:`Tomorrow`,DayAfterTomorrow:`Day after tomorrow`,TwoWeeksAway:`Two weeks away`,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 y(ke[e]??e)}function je(e){return e.type===`date`||e.type===`datetime`?[...Oe]:e.type===`string`?[`CurrentUser`]:[]}const Me=[...S,...w,...T];function Ne(e){return Me.includes(e)}function Pe(e){return e===`datetime`?`date`:e}function Fe(e,t){if(e.type===`boolean`)return[];let n=Pe(e.type);return t.filter(t=>t.name!==e.name&&!t.excludeFromFilter&&Pe(t.type)===n)}const Ie={not:`notequals`,tweens:`notbetween`,notdate:`notdatequals`,notdateequals:`notdatequals`};function D(e){let t=e.toLowerCase().replace(/[\s,]/g,``);return Ie[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 Le(e){return e?j(e)?{type:`group`,mode:`and`,items:[e]}:e:O()}function Re(e){if(e.mode!==`or`||e.items.length!==1)return e;let[t]=e.items;return A(t)&&t.mode===`and`?t:e}function ze(e){return M(e)===0}function M(e){return e?j(e)?1:e.items.reduce((e,t)=>e+M(t),0):0}function Be(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)?Be(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=>{let t=P(e)?e.value:e;return t!==``&&t!=null}):t!==`list`||Array.isArray(e.value)&&e.value.length>0}function P(e){return typeof e==`object`&&!!e&&!(e instanceof Date)&&`valueType`in e}const Ve=/* @__PURE__ */ new Set([`Now`,`DayAfterTomorrow`,`TwoWeeksAway`]);function He(e,t){return e===`column`||e===`special`&&typeof t==`string`&&Ve.has(t)}function Ue(e){return e?A(e)?e.items.some(Ue):b.includes(D(e.operator))||He(e.valueType,e.value)?!0:Array.isArray(e.value)&&e.value.some(e=>P(e)):!1}function We(e,t){let n=t??De(e);return{type:`expression`,column:e.name,operator:n,value:Ge(n),valueType:E(e,n)}}function Ge(e){switch(x(e)){case`none`:return null;case`pair`:return[``,``];case`list`:return[];default:return``}}function Ke(e,t,n){let r=x(D(e.operator)),i=x(t),a=e.value,o=e.valueType===`column`||Array.isArray(a)&&a.some(e=>P(e)&&e.valueType===`column`);(i!==r||o&&!Ne(t))&&(a=Ge(t));let s=(e.valueType===`special`||e.valueType===`column`)&&a===e.value?e.valueType:E(n,t);return{...e,operator:t,value:a,valueType:s}}function qe(e,t){let n=e;for(let e of t){if(!n||!A(n))return null;n=n.items[e]}return n??null}function F(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]=F(a,i,n);return{...e,items:o}}function Je(e,t,n){return F(e,t,e=>A(e)?{...e,items:[...e.items,n]}:e)}function Ye(e,t){return t.length===0?O():F(e,t,()=>null)}function Xe(e,t,n){return F(e,t,e=>A(e)?{...e,mode:n}:e)}function Ze(e,t=[]){let n=qe(e,t);return Je(e,t,k(n&&A(n)&&n.mode===`and`?`or`:`and`))}async function Qe(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?Le(r.filterObject):null}}function $e(e,t={}){return e?et(e,new Map((t.fields??[]).map(e=>[e.name.toLowerCase(),e])),0):``}function et(e,t,n){if(j(e))return tt(e,t);let r=e.items.map(e=>et(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 tt(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} ${nt(e,o,t)}`}function nt(e,t,n){let{value:r,valueType:i}=e;if(Array.isArray(r)){let e=r.map(e=>P(e)?I(e.value,e.valueType,n):I(e,i,n));return t===`pair`?e.join(` - `):`(${e.join(`, `)})`}return I(r,i,n)}function I(e,t,n){return t===`special`&&typeof e==`string`?Ae(e):t===`column`&&typeof e==`string`?`[${n.get(e.toLowerCase())?.caption??e}]`:e==null?``:e instanceof Date?e.toISOString().slice(0,10):typeof e==`number`||typeof e==`boolean`||t===`number`||t===`boolean`?String(e):`'${String(e)}'`}const rt=[`string`,`number`,`boolean`,`date`,`datetime`,`uniqueidentifier`];function it(e){let t=e?.trim().toLowerCase();return rt.find(e=>e===t)??`string`}function at(e){return e===!0||e===1}function ot(e){return{name:e.FieldName??``,type:it(e.DataType),nullable:at(e.Nullable),excludeFromFilter:at(e.ExcludeFromFilter),valueListRecordSource:e.ValueListRecordSource||void 0}}function st(e){return e.map(ot).filter(e=>e.name!==``&&!e.excludeFromFilter).sort((e,t)=>e.name.localeCompare(t.name))}function ct(e){return!e||j(e)||e.mode!==`or`?!1:e.items.every(e=>A(e)&&e.mode===`and`&&e.items.every(j))}function lt(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 L(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 L(e,t),{type:`group`,mode:`or`,items:[{type:`group`,mode:`and`,items:t}]}}function L(e,t){if(j(e))t.push(e);else for(let n of e.items)L(n,t)}const ut=-1;function dt(e){return{filterId:e.FilterID??-1,primKey:e.PrimKey??``,name:e.FilterName??``,criteria:e.FilterCriteria??``,dbObjectId:e.DBObjectID??``,accessLevel:ft(e.AccessLevel),createdByUser:R(e.CreatedByUser),createdBy:e.CreatedBy??``,domain:e.Domain??null,crossDomain:R(e.CrossDomain),isPersonallyShared:R(e.IsPersonallyShared),hideCriteria:R(e.HideFilterCriteria),headerText:e.OptionalHeaderText||null,comment:e.OptionalComment||null,parameters:e.Parameters||null,reportTitle:e.ReportTitle||null,created:pt(e.Created),updated:pt(e.Updated)}}function ft(e){return e===`Manager`||e===`Editor`?e:`Reader`}function R(e){return typeof e==`string`?e.toLowerCase()===`true`:!!e}function pt(e){if(!e)return null;if(e instanceof Date)return e;let t=new Date(e);return Number.isNaN(t.getTime())?null:t}function mt(e){return e.filter(e=>(e.FilterID??-1)!==-1).map(dt).sort((e,t)=>e.name.localeCompare(t.name))}function ht(e){let t=[],n=[];for(let r of e)r.createdByUser?t.push(r):n.push(r);return{mine:t,shared:n}}function gt(e,t){if(t!=null)return e.find(e=>e.filterId===t)}function _t(e){return e.accessLevel===`Editor`||e.accessLevel===`Manager`}function vt(e){return e.accessLevel===`Manager`}function z(e){return e.createdByUser}const yt=z,bt=z,xt={xs:64,sm:128,md:256,lg:512,xl:void 0};function St(e,t,n,r=`xs`){if(e&&typeof e==`object`)return St(e.primKey,e.login,e.hash,e.size);if(!e||!n)return``;let i=xt[r];return`/api/data/blob/EmployeesLookup/${e}/Image/${encodeURIComponent(t??``)}${t?`.`:``}${encodeURIComponent(n)}.jpg${i?`?width=${i}`:``}`}function Ct(e,...t){_(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}const wt={amp:`&`,lt:`<`,gt:`>`,quot:`"`,apos:`'`};function B(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)):wt[t.toLowerCase()]??e)}function V(e){return e.replace(/&/g,`&amp;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`).replace(/"/g,`&quot;`).replace(/'/g,`&apos;`)}function H(e,t){let n=RegExp(`<${t}(?:\\s[^>]*)?>([\\s\\S]*?)</${t}>`).exec(e);if(!n)return null;let r=B(n[1]).trim();return r===``?null:r}function Tt(e,t){return[...e.matchAll(RegExp(`<${t}(?:\\s[^>]*)?>([\\s\\S]*?)</${t}>`,`g`))].map(e=>B(e[1]).trim())}const Et={Byte:`number`,Decimal:`number`,Double:`number`,Int16:`number`,Int32:`number`,Int64:`number`,Single:`number`,Boolean:`boolean`,DateTime:`date`};function Dt(e){let t=/<SelectColumns>([\s\S]*?)<\/SelectColumns>/.exec(e)?.[1]??``,n=[];for(let e of t.matchAll(/<afSelectColumn>([\s\S]*?)<\/afSelectColumn>/g)){let t=H(e[1],`Name`);t&&n.push({name:t,type:Et[H(e[1],`DataType`)??``]??`string`})}return n}function Ot(e){if(!e)return null;let t=[...e.matchAll(/<(afRecordSource|afReportRecordSource)(?:\s[^>]*)?>([\s\S]*?)<\/\1>/g)].map(e=>e[2]);return t.length===0?null:t.find(e=>H(e,`ID`)===`Master`)??t[0]}function U(e){let t=Ot(e);if(!t)return null;let n=H(t,`ViewName`);if(!n)return null;let r=H(t,`MaxRecords`);return{viewName:n,columns:Dt(t),whereClause:H(t,`WhereClause`),filterString:H(t,`FilterString`),maxRecords:r===null||r===`0`?null:Number(r)}}const kt=[`String`,`Integer`,`Double`,`Date`,`Boolean`],At=/^[a-z]stp_/i;function W(e){return typeof e==`string`&&At.test(e.trim())}function jt(e){return e?e.split(/\r\n|\r|\n/).map(e=>e.trim()).filter(e=>e!==``):[]}function Mt(e){return kt.find(t=>t.toLowerCase()===e?.trim().toLowerCase())??`String`}function Nt(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 Pt(e){let t=e.Name??``,n=Mt(e.DataType),r=jt(e.Items),i=U(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:Nt(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 Ft(e){return e.filter(e=>e.Name).map(Pt).sort((e,t)=>e.sortOrder-t.sortOrder||e.label.localeCompare(t.label))}function G(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 It(e){let t={};for(let n of e)t[n.name]=W(n.defaultValue)?G(n,null):G(n,n.defaultValue);return t}function Lt(e,t){return t==null?``:typeof t==`boolean`?t?`True`:`False`:String(t)}function Rt(e,t){return`<Parameters Version="1">\n${e.map(e=>{let n=Lt(e,t[e.name]??null);return` <Parameter Name="${V(e.name)}" Type="${e.type}">${V(n)}</Parameter>`}).join(`
2
+ `)}\n</Parameters>`}function zt(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]=H(n[0],`Parameter`)??``)}return t}function Bt(e,t){let n=zt(t),r=It(e);for(let t of e)t.name in n&&(r[t.name]=G(t,n[t.name]));return r}async function Vt(e,t,n){if(!t.defaultValue||!W(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 Ut(await r.json())}async function Ht(e,t,n,r){let i=t.filter(e=>W(e.defaultValue??``));if(i.length===0)return n;let a=await Promise.all(i.map(async t=>{try{return[t.name,await Vt(e,t,r)]}catch{return[t.name,null]}})),o={...n};for(let[e,t]of a)t!==null&&(o[e]=t);return o}function Ut(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}const Wt={CSV:`csv`,HTML:`html`,IMAGE:`xbm`,MHT:`mht`,PDF:`pdf`,RTF:`rtf`,TEXT:`txt`,XLS:`xls`,XLSX:`xlsx`},Gt={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 Kt(e){return Wt[e]}function K(e){return Gt[e]}const qt=/[\\/:*?"<>|.#&+%\u0000-\u001f]/g;function q(e){let t=(e.fileName??e.reportId).trim().replace(qt,`-`).replace(/-{2,}/g,`-`).replace(/^-|-$/g,``).trim();return`${t===``?e.reportId:t}.${Kt(e.format)}`}function Jt(e){let t=window.location?.href;return t?new URL(e,t).toString():e}function J(e){let{domain:t,filter:n,headerText:r,hideFilterString:i,parameters:a,reportId:o,signal:s,timezone:c}=e,l=q(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??-(/* @__PURE__ */ new Date()).getTimezoneOffset()/60)),!p)return n&&d.set(`Filter`,n),new Request(Jt(`${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(Jt(`${u}?${d}`),{body:JSON.stringify(m),credentials:`same-origin`,headers:{"Content-Type":`application/json`,"X-Requested-With":`XMLHttpRequest`},method:`POST`,signal:s})}async function Y(e){let t=await fetch(J(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 Yt(e){return oe(J(e),{fileName:q(e),onProgress:e.onProgress,signal:e.signal})}async function X(e){let t=await Y(e),n=URL.createObjectURL(t.type?t:new Blob([t],{type:K(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 Xt(e){let t=window.document;if(!t?.body)return X(e);let n=await Y(e),r=URL.createObjectURL(n.type?n:new Blob([n],{type:K(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(),X(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 Z(e){return e===!0||e===1}function Qt(e){let t=[];return Z(e.FormatPDF)&&t.push(`PDF`),Z(e.FormatCSV)&&t.push(`XLSX`,`XLS`,`CSV`),Z(e.FormatHTML)&&t.push(`HTML`),Z(e.FormatRTF)&&t.push(`RTF`),Z(e.FormatMHT)&&t.push(`MHT`),Z(e.FormatTEXT)&&t.push(`TEXT`),Z(e.FormatIMAGE)&&t.push(`IMAGE`),t}function $t(e){let t=U(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:Z(e.HasTitle),hasHeader:Z(e.HasHeader),formats:Qt(e),timeout:e.Timeout??null}}function en(){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 @@ function e(e){return{all:e||=/* @__PURE__ */ new Map,on:function(t,n){var r=e.ge
8
8
  </footer>
9
9
  </form>
10
10
  </dialog>
11
- `,document.body.append(e)}window.document&&(document.body?$t():document.addEventListener(`DOMContentLoaded`,$t,{once:!0}));function en(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})})}const Q=/* @__PURE__ */ 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=en(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 tn=/* @__PURE__ */ function(e){return e[e.YesNo=0]=`YesNo`,e[e.OkCancel=1]=`OkCancel`,e}({});async function nn(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 rn(e,t={}){await $({content:e,className:`alert-dialog-alert`,buttons:[{label:y(`OK`),value:`ok`,primary:!0}],...t})}function an(e){return`${e??window.af?.article?.id??window.window?.location.pathname.substring(1).split(`/`)[0]}.${window.af?.userSession.login??`anonymous`}`}function on(e,t){if(!window.af?.userSession)return null;let n=an(t),r=JSON.parse(localStorage.getItem(n)||`{}`);return e?r[e]||null:r}function sn(e,t,n){if(!window.af?.userSession)return;let r=an(n),i=JSON.parse(localStorage.getItem(r)||`{}`);t===void 0?i=e:i[e]=t,localStorage.setItem(r,JSON.stringify(i))}const cn=`2.15.2`;export{tn as ConfirmButtons,ut as NO_FILTER_ID,b as PERIOD_OPERATORS,Oe as RELATIVE_DATE_VALUES,t as SessionHandler,n as UserSession,Ze as addGroupAtPath,rn as alert,yt as canDeleteSavedFilter,_t as canEditSavedFilter,z as canRenameSavedFilter,bt as canSetCrossDomain,vt as canShareSavedFilter,Ke as changeOperator,G as coerceParameterValue,lt as coerceToStandardLayout,nn as confirm,Qe as convertFilter,M as countExpressions,O as createEmptyFilter,k as createEmptyGroup,We as createExpression,ge as createLocalizer,B as decodeXml,$e as describeFilter,ae as downloadBlob,Jt as downloadReport,oe as downloadRequest,V as encodeXml,pe as expose,Bt as fetchParameterDefault,gt as findSavedFilter,Fe as getColumnsForField,De as getDefaultOperator,Ft as getDefaultParameterValues,Ae as getDynamicValueLabel,je as getDynamicValuesForField,y as getLocalizedString,qe as getNodeAtPath,x as getOperatorArity,Se as getOperatorLabel,Ee as getOperatorsForField,Gt as getReportExtension,q as getReportFileName,Zt as getReportFormats,K as getReportMediaType,J as getReportRequest,h as getSessionData,on as getSettings,St as getUserImage,E as getValueType,Je as insertNodeAtPath,_ as invariant,N as isCompleteExpression,ze as isEmptyFilter,j as isExpression,A as isGroup,W as isProcedureDefault,P as isRangeEnd,ct as isStandardLayout,te as localStorage,Ct as localize,i as logActivity,s as logError,e as mitt,Ue as needsFilterString,D as normalizeOperator,$ as openAlertDialog,X as openReport,At as parseParameterItems,Rt as parseParameters,U as parseRecordSource,ht as partitionSavedFilters,Yt as printReport,Be as pruneFilter,H as readElement,Tt as readElements,Ye as removeNodeAtPath,Y as renderReport,Vt as resolveParameterDefaults,zt as restoreParameterValues,sn as saveSettings,Lt as serializeParameters,Xe as setGroupMode,a as startActivity,Ne as supportsColumnValue,o as time,ot as toFieldMetadata,st as toFieldMetadataList,it as toFilterFieldType,Le as toFilterTree,ie as toLocalDateTime,ne as toLocalISODate,re as toLocalISODateTime,Qt as toReport,Nt as toReportParameter,Pt as toReportParameters,dt as toSavedFilter,mt as toSavedFilters,Re as unwrapSingleAndGroup,F as updateNodeAtPath,cn as version,en as waitForDialog};
11
+ `,document.body.append(e)}window.document&&(document.body?en():document.addEventListener(`DOMContentLoaded`,en,{once:!0}));function tn(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})})}const Q=/* @__PURE__ */ 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=tn(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 nn=/* @__PURE__ */ function(e){return e[e.YesNo=0]=`YesNo`,e[e.OkCancel=1]=`OkCancel`,e}({});async function rn(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 an(e,t={}){await $({content:e,className:`alert-dialog-alert`,buttons:[{label:y(`OK`),value:`ok`,primary:!0}],...t})}function on(e){return`${e??window.af?.article?.id??window.window?.location.pathname.substring(1).split(`/`)[0]}.${window.af?.userSession.login??`anonymous`}`}function sn(e,t){if(!window.af?.userSession)return null;let n=on(t),r=JSON.parse(localStorage.getItem(n)||`{}`);return e?r[e]||null:r}function cn(e,t,n){if(!window.af?.userSession)return;let r=on(n),i=JSON.parse(localStorage.getItem(r)||`{}`);t===void 0?i=e:i[e]=t,localStorage.setItem(r,JSON.stringify(i))}const ln=`2.16.1`;export{nn as ConfirmButtons,ut as NO_FILTER_ID,b as PERIOD_OPERATORS,Oe as RELATIVE_DATE_VALUES,t as SessionHandler,n as UserSession,Ze as addGroupAtPath,an as alert,yt as canDeleteSavedFilter,_t as canEditSavedFilter,z as canRenameSavedFilter,bt as canSetCrossDomain,vt as canShareSavedFilter,Ke as changeOperator,G as coerceParameterValue,lt as coerceToStandardLayout,rn as confirm,Qe as convertFilter,M as countExpressions,O as createEmptyFilter,k as createEmptyGroup,We as createExpression,ge as createLocalizer,B as decodeXml,$e as describeFilter,ae as downloadBlob,Yt as downloadReport,oe as downloadRequest,V as encodeXml,pe as expose,Vt as fetchParameterDefault,gt as findSavedFilter,Fe as getColumnsForField,De as getDefaultOperator,It as getDefaultParameterValues,Ae as getDynamicValueLabel,je as getDynamicValuesForField,y as getLocalizedString,qe as getNodeAtPath,x as getOperatorArity,Se as getOperatorLabel,Ee as getOperatorsForField,Kt as getReportExtension,q as getReportFileName,Qt as getReportFormats,K as getReportMediaType,J as getReportRequest,h as getSessionData,sn as getSettings,St as getUserImage,E as getValueType,Je as insertNodeAtPath,_ as invariant,N as isCompleteExpression,ze as isEmptyFilter,j as isExpression,A as isGroup,W as isProcedureDefault,P as isRangeEnd,ct as isStandardLayout,te as localStorage,Ct as localize,i as logActivity,s as logError,e as mitt,Ue as needsFilterString,D as normalizeOperator,$ as openAlertDialog,X as openReport,jt as parseParameterItems,zt as parseParameters,U as parseRecordSource,ht as partitionSavedFilters,Xt as printReport,Be as pruneFilter,H as readElement,Tt as readElements,Ye as removeNodeAtPath,Y as renderReport,Ht as resolveParameterDefaults,Bt as restoreParameterValues,cn as saveSettings,Rt as serializeParameters,Xe as setGroupMode,a as startActivity,Ne as supportsColumnValue,o as time,ot as toFieldMetadata,st as toFieldMetadataList,it as toFilterFieldType,Le as toFilterTree,ie as toLocalDateTime,ne as toLocalISODate,re as toLocalISODateTime,$t as toReport,Pt as toReportParameter,Ft as toReportParameters,dt as toSavedFilter,mt as toSavedFilters,Re as unwrapSingleAndGroup,F as updateNodeAtPath,ln as version,tn as waitForDialog};
12
12
  //# sourceMappingURL=af.common.legacy.min.js.map