jupiter-dynamic-forms 1.20.9 → 1.22.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.
package/dist/index.js CHANGED
@@ -3,55 +3,62 @@
3
3
  * @license
4
4
  * Copyright 2017 Google LLC
5
5
  * SPDX-License-Identifier: BSD-3-Clause
6
- */let a=class{constructor(e,t,i){if(this._$cssResult$=!0,i!==r)throw Error("CSSResult is not constructable. Use `unsafeCSS` or `css` instead.");this.cssText=e,this.t=t}get styleSheet(){let e=this.o;const t=this.t;if(o&&void 0===e){const i=void 0!==t&&1===t.length;i&&(e=n.get(t)),void 0===e&&((this.o=e=new CSSStyleSheet).replaceSync(this.cssText),i&&n.set(t,e))}return e}toString(){return this.cssText}};const s=o?e=>e:e=>e instanceof CSSStyleSheet?(e=>{let t="";for(const i of e.cssRules)t+=i.cssText;return(e=>new a("string"==typeof e?e:e+"",void 0,r))(t)})(e):e,{is:l,defineProperty:d,getOwnPropertyDescriptor:c,getOwnPropertyNames:p,getOwnPropertySymbols:u,getPrototypeOf:h}=Object,m=globalThis,f=m.trustedTypes,g=f?f.emptyScript:"",b=m.reactiveElementPolyfillSupport,v=(e,t)=>e,y={toAttribute(e,t){switch(t){case Boolean:e=e?g:null;break;case Object:case Array:e=null==e?e:JSON.stringify(e)}return e},fromAttribute(e,t){let i=e;switch(t){case Boolean:i=null!==e;break;case Number:i=null===e?null:Number(e);break;case Object:case Array:try{i=JSON.parse(e)}catch(o){i=null}}return i}},x=(e,t)=>!l(e,t),_={attribute:!0,type:String,converter:y,reflect:!1,useDefault:!1,hasChanged:x};
6
+ */let a=class{constructor(e,t,i){if(this._$cssResult$=!0,i!==r)throw Error("CSSResult is not constructable. Use `unsafeCSS` or `css` instead.");this.cssText=e,this.t=t}get styleSheet(){let e=this.o;const t=this.t;if(o&&void 0===e){const i=void 0!==t&&1===t.length;i&&(e=n.get(t)),void 0===e&&((this.o=e=new CSSStyleSheet).replaceSync(this.cssText),i&&n.set(t,e))}return e}toString(){return this.cssText}};const s=o?e=>e:e=>e instanceof CSSStyleSheet?(e=>{let t="";for(const i of e.cssRules)t+=i.cssText;return(e=>new a("string"==typeof e?e:e+"",void 0,r))(t)})(e):e,{is:l,defineProperty:d,getOwnPropertyDescriptor:c,getOwnPropertyNames:p,getOwnPropertySymbols:u,getPrototypeOf:h}=Object,m=globalThis,f=m.trustedTypes,b=f?f.emptyScript:"",g=m.reactiveElementPolyfillSupport,v=(e,t)=>e,y={toAttribute(e,t){switch(t){case Boolean:e=e?b:null;break;case Object:case Array:e=null==e?e:JSON.stringify(e)}return e},fromAttribute(e,t){let i=e;switch(t){case Boolean:i=null!==e;break;case Number:i=null===e?null:Number(e);break;case Object:case Array:try{i=JSON.parse(e)}catch(o){i=null}}return i}},x=(e,t)=>!l(e,t),_={attribute:!0,type:String,converter:y,reflect:!1,useDefault:!1,hasChanged:x};
7
7
  /**
8
8
  * @license
9
9
  * Copyright 2017 Google LLC
10
10
  * SPDX-License-Identifier: BSD-3-Clause
11
- */Symbol.metadata??(Symbol.metadata=Symbol("metadata")),m.litPropertyMetadata??(m.litPropertyMetadata=new WeakMap);class D extends HTMLElement{static addInitializer(e){this._$Ei(),(this.l??(this.l=[])).push(e)}static get observedAttributes(){return this.finalize(),this._$Eh&&[...this._$Eh.keys()]}static createProperty(e,t=_){if(t.state&&(t.attribute=!1),this._$Ei(),this.prototype.hasOwnProperty(e)&&((t=Object.create(t)).wrapped=!0),this.elementProperties.set(e,t),!t.noAccessor){const i=Symbol(),o=this.getPropertyDescriptor(e,i,t);void 0!==o&&d(this.prototype,e,o)}}static getPropertyDescriptor(e,t,i){const{get:o,set:r}=c(this.prototype,e)??{get(){return this[t]},set(e){this[t]=e}};return{get:o,set(t){const n=null==o?void 0:o.call(this);null==r||r.call(this,t),this.requestUpdate(e,n,i)},configurable:!0,enumerable:!0}}static getPropertyOptions(e){return this.elementProperties.get(e)??_}static _$Ei(){if(this.hasOwnProperty(v("elementProperties")))return;const e=h(this);e.finalize(),void 0!==e.l&&(this.l=[...e.l]),this.elementProperties=new Map(e.elementProperties)}static finalize(){if(this.hasOwnProperty(v("finalized")))return;if(this.finalized=!0,this._$Ei(),this.hasOwnProperty(v("properties"))){const e=this.properties,t=[...p(e),...u(e)];for(const i of t)this.createProperty(i,e[i])}const e=this[Symbol.metadata];if(null!==e){const t=litPropertyMetadata.get(e);if(void 0!==t)for(const[e,i]of t)this.elementProperties.set(e,i)}this._$Eh=new Map;for(const[t,i]of this.elementProperties){const e=this._$Eu(t,i);void 0!==e&&this._$Eh.set(e,t)}this.elementStyles=this.finalizeStyles(this.styles)}static finalizeStyles(e){const t=[];if(Array.isArray(e)){const i=new Set(e.flat(1/0).reverse());for(const e of i)t.unshift(s(e))}else void 0!==e&&t.push(s(e));return t}static _$Eu(e,t){const i=t.attribute;return!1===i?void 0:"string"==typeof i?i:"string"==typeof e?e.toLowerCase():void 0}constructor(){super(),this._$Ep=void 0,this.isUpdatePending=!1,this.hasUpdated=!1,this._$Em=null,this._$Ev()}_$Ev(){var e;this._$ES=new Promise(e=>this.enableUpdating=e),this._$AL=new Map,this._$E_(),this.requestUpdate(),null==(e=this.constructor.l)||e.forEach(e=>e(this))}addController(e){var t;(this._$EO??(this._$EO=new Set)).add(e),void 0!==this.renderRoot&&this.isConnected&&(null==(t=e.hostConnected)||t.call(e))}removeController(e){var t;null==(t=this._$EO)||t.delete(e)}_$E_(){const e=new Map,t=this.constructor.elementProperties;for(const i of t.keys())this.hasOwnProperty(i)&&(e.set(i,this[i]),delete this[i]);e.size>0&&(this._$Ep=e)}createRenderRoot(){const e=this.shadowRoot??this.attachShadow(this.constructor.shadowRootOptions);return((e,t)=>{if(o)e.adoptedStyleSheets=t.map(e=>e instanceof CSSStyleSheet?e:e.styleSheet);else for(const o of t){const t=document.createElement("style"),r=i.litNonce;void 0!==r&&t.setAttribute("nonce",r),t.textContent=o.cssText,e.appendChild(t)}})(e,this.constructor.elementStyles),e}connectedCallback(){var e;this.renderRoot??(this.renderRoot=this.createRenderRoot()),this.enableUpdating(!0),null==(e=this._$EO)||e.forEach(e=>{var t;return null==(t=e.hostConnected)?void 0:t.call(e)})}enableUpdating(e){}disconnectedCallback(){var e;null==(e=this._$EO)||e.forEach(e=>{var t;return null==(t=e.hostDisconnected)?void 0:t.call(e)})}attributeChangedCallback(e,t,i){this._$AK(e,i)}_$ET(e,t){var i;const o=this.constructor.elementProperties.get(e),r=this.constructor._$Eu(e,o);if(void 0!==r&&!0===o.reflect){const n=(void 0!==(null==(i=o.converter)?void 0:i.toAttribute)?o.converter:y).toAttribute(t,o.type);this._$Em=e,null==n?this.removeAttribute(r):this.setAttribute(r,n),this._$Em=null}}_$AK(e,t){var i,o;const r=this.constructor,n=r._$Eh.get(e);if(void 0!==n&&this._$Em!==n){const e=r.getPropertyOptions(n),a="function"==typeof e.converter?{fromAttribute:e.converter}:void 0!==(null==(i=e.converter)?void 0:i.fromAttribute)?e.converter:y;this._$Em=n;const s=a.fromAttribute(t,e.type);this[n]=s??(null==(o=this._$Ej)?void 0:o.get(n))??s,this._$Em=null}}requestUpdate(e,t,i){var o;if(void 0!==e){const r=this.constructor,n=this[e];if(i??(i=r.getPropertyOptions(e)),!((i.hasChanged??x)(n,t)||i.useDefault&&i.reflect&&n===(null==(o=this._$Ej)?void 0:o.get(e))&&!this.hasAttribute(r._$Eu(e,i))))return;this.C(e,t,i)}!1===this.isUpdatePending&&(this._$ES=this._$EP())}C(e,t,{useDefault:i,reflect:o,wrapped:r},n){i&&!(this._$Ej??(this._$Ej=new Map)).has(e)&&(this._$Ej.set(e,n??t??this[e]),!0!==r||void 0!==n)||(this._$AL.has(e)||(this.hasUpdated||i||(t=void 0),this._$AL.set(e,t)),!0===o&&this._$Em!==e&&(this._$Eq??(this._$Eq=new Set)).add(e))}async _$EP(){this.isUpdatePending=!0;try{await this._$ES}catch(t){Promise.reject(t)}const e=this.scheduleUpdate();return null!=e&&await e,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){var e;if(!this.isUpdatePending)return;if(!this.hasUpdated){if(this.renderRoot??(this.renderRoot=this.createRenderRoot()),this._$Ep){for(const[e,t]of this._$Ep)this[e]=t;this._$Ep=void 0}const e=this.constructor.elementProperties;if(e.size>0)for(const[t,i]of e){const{wrapped:e}=i,o=this[t];!0!==e||this._$AL.has(t)||void 0===o||this.C(t,void 0,i,o)}}let t=!1;const i=this._$AL;try{t=this.shouldUpdate(i),t?(this.willUpdate(i),null==(e=this._$EO)||e.forEach(e=>{var t;return null==(t=e.hostUpdate)?void 0:t.call(e)}),this.update(i)):this._$EM()}catch(o){throw t=!1,this._$EM(),o}t&&this._$AE(i)}willUpdate(e){}_$AE(e){var t;null==(t=this._$EO)||t.forEach(e=>{var t;return null==(t=e.hostUpdated)?void 0:t.call(e)}),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(e)),this.updated(e)}_$EM(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$ES}shouldUpdate(e){return!0}update(e){this._$Eq&&(this._$Eq=this._$Eq.forEach(e=>this._$ET(e,this[e]))),this._$EM()}updated(e){}firstUpdated(e){}}D.elementStyles=[],D.shadowRootOptions={mode:"open"},D[v("elementProperties")]=new Map,D[v("finalized")]=new Map,null==b||b({ReactiveElement:D}),(m.reactiveElementVersions??(m.reactiveElementVersions=[])).push("2.1.1");
11
+ */Symbol.metadata??(Symbol.metadata=Symbol("metadata")),m.litPropertyMetadata??(m.litPropertyMetadata=new WeakMap);class D extends HTMLElement{static addInitializer(e){this._$Ei(),(this.l??(this.l=[])).push(e)}static get observedAttributes(){return this.finalize(),this._$Eh&&[...this._$Eh.keys()]}static createProperty(e,t=_){if(t.state&&(t.attribute=!1),this._$Ei(),this.prototype.hasOwnProperty(e)&&((t=Object.create(t)).wrapped=!0),this.elementProperties.set(e,t),!t.noAccessor){const i=Symbol(),o=this.getPropertyDescriptor(e,i,t);void 0!==o&&d(this.prototype,e,o)}}static getPropertyDescriptor(e,t,i){const{get:o,set:r}=c(this.prototype,e)??{get(){return this[t]},set(e){this[t]=e}};return{get:o,set(t){const n=null==o?void 0:o.call(this);null==r||r.call(this,t),this.requestUpdate(e,n,i)},configurable:!0,enumerable:!0}}static getPropertyOptions(e){return this.elementProperties.get(e)??_}static _$Ei(){if(this.hasOwnProperty(v("elementProperties")))return;const e=h(this);e.finalize(),void 0!==e.l&&(this.l=[...e.l]),this.elementProperties=new Map(e.elementProperties)}static finalize(){if(this.hasOwnProperty(v("finalized")))return;if(this.finalized=!0,this._$Ei(),this.hasOwnProperty(v("properties"))){const e=this.properties,t=[...p(e),...u(e)];for(const i of t)this.createProperty(i,e[i])}const e=this[Symbol.metadata];if(null!==e){const t=litPropertyMetadata.get(e);if(void 0!==t)for(const[e,i]of t)this.elementProperties.set(e,i)}this._$Eh=new Map;for(const[t,i]of this.elementProperties){const e=this._$Eu(t,i);void 0!==e&&this._$Eh.set(e,t)}this.elementStyles=this.finalizeStyles(this.styles)}static finalizeStyles(e){const t=[];if(Array.isArray(e)){const i=new Set(e.flat(1/0).reverse());for(const e of i)t.unshift(s(e))}else void 0!==e&&t.push(s(e));return t}static _$Eu(e,t){const i=t.attribute;return!1===i?void 0:"string"==typeof i?i:"string"==typeof e?e.toLowerCase():void 0}constructor(){super(),this._$Ep=void 0,this.isUpdatePending=!1,this.hasUpdated=!1,this._$Em=null,this._$Ev()}_$Ev(){var e;this._$ES=new Promise(e=>this.enableUpdating=e),this._$AL=new Map,this._$E_(),this.requestUpdate(),null==(e=this.constructor.l)||e.forEach(e=>e(this))}addController(e){var t;(this._$EO??(this._$EO=new Set)).add(e),void 0!==this.renderRoot&&this.isConnected&&(null==(t=e.hostConnected)||t.call(e))}removeController(e){var t;null==(t=this._$EO)||t.delete(e)}_$E_(){const e=new Map,t=this.constructor.elementProperties;for(const i of t.keys())this.hasOwnProperty(i)&&(e.set(i,this[i]),delete this[i]);e.size>0&&(this._$Ep=e)}createRenderRoot(){const e=this.shadowRoot??this.attachShadow(this.constructor.shadowRootOptions);return((e,t)=>{if(o)e.adoptedStyleSheets=t.map(e=>e instanceof CSSStyleSheet?e:e.styleSheet);else for(const o of t){const t=document.createElement("style"),r=i.litNonce;void 0!==r&&t.setAttribute("nonce",r),t.textContent=o.cssText,e.appendChild(t)}})(e,this.constructor.elementStyles),e}connectedCallback(){var e;this.renderRoot??(this.renderRoot=this.createRenderRoot()),this.enableUpdating(!0),null==(e=this._$EO)||e.forEach(e=>{var t;return null==(t=e.hostConnected)?void 0:t.call(e)})}enableUpdating(e){}disconnectedCallback(){var e;null==(e=this._$EO)||e.forEach(e=>{var t;return null==(t=e.hostDisconnected)?void 0:t.call(e)})}attributeChangedCallback(e,t,i){this._$AK(e,i)}_$ET(e,t){var i;const o=this.constructor.elementProperties.get(e),r=this.constructor._$Eu(e,o);if(void 0!==r&&!0===o.reflect){const n=(void 0!==(null==(i=o.converter)?void 0:i.toAttribute)?o.converter:y).toAttribute(t,o.type);this._$Em=e,null==n?this.removeAttribute(r):this.setAttribute(r,n),this._$Em=null}}_$AK(e,t){var i,o;const r=this.constructor,n=r._$Eh.get(e);if(void 0!==n&&this._$Em!==n){const e=r.getPropertyOptions(n),a="function"==typeof e.converter?{fromAttribute:e.converter}:void 0!==(null==(i=e.converter)?void 0:i.fromAttribute)?e.converter:y;this._$Em=n;const s=a.fromAttribute(t,e.type);this[n]=s??(null==(o=this._$Ej)?void 0:o.get(n))??s,this._$Em=null}}requestUpdate(e,t,i){var o;if(void 0!==e){const r=this.constructor,n=this[e];if(i??(i=r.getPropertyOptions(e)),!((i.hasChanged??x)(n,t)||i.useDefault&&i.reflect&&n===(null==(o=this._$Ej)?void 0:o.get(e))&&!this.hasAttribute(r._$Eu(e,i))))return;this.C(e,t,i)}!1===this.isUpdatePending&&(this._$ES=this._$EP())}C(e,t,{useDefault:i,reflect:o,wrapped:r},n){i&&!(this._$Ej??(this._$Ej=new Map)).has(e)&&(this._$Ej.set(e,n??t??this[e]),!0!==r||void 0!==n)||(this._$AL.has(e)||(this.hasUpdated||i||(t=void 0),this._$AL.set(e,t)),!0===o&&this._$Em!==e&&(this._$Eq??(this._$Eq=new Set)).add(e))}async _$EP(){this.isUpdatePending=!0;try{await this._$ES}catch(t){Promise.reject(t)}const e=this.scheduleUpdate();return null!=e&&await e,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){var e;if(!this.isUpdatePending)return;if(!this.hasUpdated){if(this.renderRoot??(this.renderRoot=this.createRenderRoot()),this._$Ep){for(const[e,t]of this._$Ep)this[e]=t;this._$Ep=void 0}const e=this.constructor.elementProperties;if(e.size>0)for(const[t,i]of e){const{wrapped:e}=i,o=this[t];!0!==e||this._$AL.has(t)||void 0===o||this.C(t,void 0,i,o)}}let t=!1;const i=this._$AL;try{t=this.shouldUpdate(i),t?(this.willUpdate(i),null==(e=this._$EO)||e.forEach(e=>{var t;return null==(t=e.hostUpdate)?void 0:t.call(e)}),this.update(i)):this._$EM()}catch(o){throw t=!1,this._$EM(),o}t&&this._$AE(i)}willUpdate(e){}_$AE(e){var t;null==(t=this._$EO)||t.forEach(e=>{var t;return null==(t=e.hostUpdated)?void 0:t.call(e)}),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(e)),this.updated(e)}_$EM(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$ES}shouldUpdate(e){return!0}update(e){this._$Eq&&(this._$Eq=this._$Eq.forEach(e=>this._$ET(e,this[e]))),this._$EM()}updated(e){}firstUpdated(e){}}D.elementStyles=[],D.shadowRootOptions={mode:"open"},D[v("elementProperties")]=new Map,D[v("finalized")]=new Map,null==g||g({ReactiveElement:D}),(m.reactiveElementVersions??(m.reactiveElementVersions=[])).push("2.1.1");
12
12
  /**
13
13
  * @license
14
14
  * Copyright 2017 Google LLC
15
15
  * SPDX-License-Identifier: BSD-3-Clause
16
16
  */
17
- const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,i)=>{const{kind:o,metadata:r}=i;let n=globalThis.litPropertyMetadata.get(r);if(void 0===n&&globalThis.litPropertyMetadata.set(r,n=new Map),"setter"===o&&((e=Object.create(e)).wrapped=!0),n.set(i.name,e),"accessor"===o){const{name:o}=i;return{set(i){const r=t.get.call(this);t.set.call(this,i),this.requestUpdate(o,r,e)},init(t){return void 0!==t&&this.C(o,void 0,e,t),t}}}if("setter"===o){const{name:o}=i;return function(i){const r=this[o];t.call(this,i),this.requestUpdate(o,r,e)}}throw Error("Unsupported decorator location: "+o)};function w(e){return(t,i)=>"object"==typeof i?$(e,t,i):((e,t,i)=>{const o=t.hasOwnProperty(i);return t.constructor.createProperty(i,e),o?Object.getOwnPropertyDescriptor(t,i):void 0})(e,t,i)}
17
+ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},w=(e=I,t,i)=>{const{kind:o,metadata:r}=i;let n=globalThis.litPropertyMetadata.get(r);if(void 0===n&&globalThis.litPropertyMetadata.set(r,n=new Map),"setter"===o&&((e=Object.create(e)).wrapped=!0),n.set(i.name,e),"accessor"===o){const{name:o}=i;return{set(i){const r=t.get.call(this);t.set.call(this,i),this.requestUpdate(o,r,e)},init(t){return void 0!==t&&this.C(o,void 0,e,t),t}}}if("setter"===o){const{name:o}=i;return function(i){const r=this[o];t.call(this,i),this.requestUpdate(o,r,e)}}throw Error("Unsupported decorator location: "+o)};function S(e){return(t,i)=>"object"==typeof i?w(e,t,i):((e,t,i)=>{const o=t.hasOwnProperty(i);return t.constructor.createProperty(i,e),o?Object.getOwnPropertyDescriptor(t,i):void 0})(e,t,i)}
18
18
  /**
19
19
  * @license
20
20
  * Copyright 2017 Google LLC
21
21
  * SPDX-License-Identifier: BSD-3-Clause
22
- */function S(e){return w({...e,state:!0,attribute:!1})}class C{static validateField(e,t,i,o,r,n=[]){const a=[];for(const s of n){const n=this.validateRule(e,t,i,o,r,s);n&&a.push(n)}return a}static validateRule(e,t,i,o,r,n){const a=null==o||""===o;switch(n.type){case"required":if(a)return this.createError(e,t,i,n);break;case"min":if(!a&&"number"==typeof o&&o<n.value)return this.createError(e,t,i,n);break;case"max":if(!a&&"number"==typeof o&&o>n.value)return this.createError(e,t,i,n);break;case"minLength":if(!a&&"string"==typeof o&&o.length<n.value)return this.createError(e,t,i,n);break;case"maxLength":if(!a&&"string"==typeof o&&o.length>n.value)return this.createError(e,t,i,n);break;case"pattern":if(!a&&"string"==typeof o){if(!new RegExp(n.value).test(o))return this.createError(e,t,i,n)}break;case"email":if(!a&&"string"==typeof o){if(!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(o))return this.createError(e,t,i,n)}break;case"url":if(!a&&"string"==typeof o)try{new URL(o)}catch{return this.createError(e,t,i,n)}break;case"custom":break;default:console.warn(`Unknown validation rule type: ${n.type}`)}return null}static createError(e,t,i,o){return{fieldId:e,conceptId:t,columnId:i,message:o.message,severity:o.severity||"error",rule:o}}static validateDataType(e,t){if(null==e||""===e)return{valid:!0,convertedValue:e};switch(t){case"number":case"decimal":case"currency":case"percentage":{const t=Number(e);return isNaN(t)?{valid:!1,error:"Invalid number format"}:{valid:!0,convertedValue:t}}case"date":{const t=new Date(e);return isNaN(t.getTime())?{valid:!1,error:"Invalid date format"}:{valid:!0,convertedValue:t.toISOString().split("T")[0]}}case"datetime":{const t=new Date(e);return isNaN(t.getTime())?{valid:!1,error:"Invalid datetime format"}:{valid:!0,convertedValue:t.toISOString()}}case"boolean":if("boolean"==typeof e)return{valid:!0,convertedValue:e};if("string"==typeof e){const t=e.toLowerCase();if("true"===t||"1"===t)return{valid:!0,convertedValue:!0};if("false"===t||"0"===t)return{valid:!0,convertedValue:!1}}return{valid:!1,error:"Invalid boolean format"};case"text":case"textarea":case"email":case"url":case"tel":return{valid:!0,convertedValue:String(e)};default:return{valid:!0,convertedValue:e}}}static formatValue(e,t,i="en-US"){if(null==e)return"";switch(t){case"number":return new Intl.NumberFormat(i).format(Number(e));case"decimal":return new Intl.NumberFormat(i,{minimumFractionDigits:2,maximumFractionDigits:2}).format(Number(e));case"currency":return new Intl.NumberFormat(i,{style:"currency",currency:"USD"}).format(Number(e));case"percentage":return new Intl.NumberFormat(i,{style:"percent",minimumFractionDigits:2}).format(Number(e)/100);case"date":return new Date(e).toLocaleDateString(i);case"datetime":return new Date(e).toLocaleString(i);default:return String(e)}}}class T{static formatPeriodDisplay(e,t){if(!e||!t)return`${e} / ${t}`;const i=e.substring(0,4);return i===t.substring(0,4)?i:`${e} / ${t}`}static createUniqueConceptId(e,t){let i=e.id;if(e.preferredLabel&&""!==e.preferredLabel.trim()){const t=e.preferredLabel.match(/\/([^\/]+)$/),o=t?t[1]:e.preferredLabel.replace(/[^a-zA-Z0-9]/g,"_");i=`${e.id}_${o}`}if(t){return`${i}__${this.createSectionHash(t)}`}return i}static createSectionHash(e){let t=0;for(let i=0;i<e.length;i++){t=(t<<5)-t+e.charCodeAt(i),t&=t}return Math.abs(t).toString(36).substr(0,6)}static _extractDocumentationLabels(e){const t={};return e.filter(e=>"http://www.xbrl.org/2003/role/documentation"===e.role).forEach(e=>{t[e.lang]=e.label}),t}static buildFormSchema(e,t,i,o="en",r){var n,a;if(!e.presentation||0===e.presentation.length)throw new Error("XBRL presentation data is required");const s=e.presentation[0],l=null==(n=e.hypercubes)?void 0:n[0],d=Array.isArray(e.datatypes)?e.datatypes:(null==(a=e.datatypes)?void 0:a.concepts)||[],c=[];return s.roles.forEach(e=>{const n=this.buildSectionFromRole(e,t,i,l,o,r);d&&d.length>0?(n.datatypes=d,console.log(`✅ [buildFormSchema] Attached ${d.length} datatypes to section ${n.id}`)):console.warn(`⚠️ [buildFormSchema] No datatypes available for section ${n.id}`),this.assignFieldColumnIds(n),c.push(n)}),{formId:`xbrl-form-${Date.now()}`,title:`XBRL Form - ${this.extractEntityName(s.entrypoint)}`,description:"Dynamic form generated from XBRL taxonomy data",version:"1.0.0",sections:c}}static buildSectionFromRole(e,t,i,o,r="en",n){var a,s;let l;if(e.labels&&e.labels.length>0){const t=e.labels.find(e=>e.lang===r),i=e.labels.find(e=>"en"===e.lang)||e.labels[0];l=(t||i).label}else l=this.extractRoleTitle(e.role||e.id||"Unknown Role");const d=this.getAllNonAbstractConcepts(e),c=new Set(d.filter(e=>e.periodType).map(e=>e.periodType));let p=null==o?void 0:o.roles.find(t=>t.roleId===e.id);const u=null==n?void 0:n[e.id];p&&(null==u?void 0:u.dimensionSelections)&&u.dimensionSelections.length>0&&(console.log(`🔍 Filtering dimensions for role ${e.id} based on user selections`),p=this.filterHypercubeDimensionsBySelection(p,u.dimensionSelections));const h=this.generateDefaultColumnsForRole(e,t||"2025-01-01",i||"2025-12-31",p,d,c,u,r),m={periodTypes:c,availableColumnIds:h.map(e=>e.id),availableColumns:h},f=[],g=new Map;return(null==(a=e.presentationLinkbase)?void 0:a.concepts)&&e.presentationLinkbase.concepts.forEach(o=>{const n=this.buildConceptTree(o,0,t,i,m,e.id,r,g);n&&f.push(n)}),p&&(null==(s=p.items)?void 0:s.length)||!o||f.forEach(t=>this.applyCrossRoleDimensions(t,e.id,o,r)),{id:e.id,title:l,description:e.description||`Section for ${l}`,concepts:f,columns:h,expanded:!1,metadata:{roleURI:e.roleURI,originalRole:e.role},showPeriodControl:c.size>1,showPreviousYear:!0===e.showPreviousYear,instant:!0===e.instant,duration:!0===e.duration}}static buildConceptTree(e,t,i,o,r,n,a="en",s,l){var d,c;const p=this.getPreferredLabel(e.labels,a,e.preferredLabel),u=(null==(d=e.preferredLabel)?void 0:d.includes("periodStartLabel"))?"start":(null==(c=e.preferredLabel)?void 0:c.includes("periodEndLabel"))?"end":l,h="start"===u?"periodStartLabel":"end"===u?"periodEndLabel":void 0,m=[];if(!e.elementAbstract){let t=[];t=(null==r?void 0:r.availableColumnIds)&&r.availableColumnIds.length>0?r.availableColumnIds:["duration"],t.forEach(t=>{var n;const s=null==(n=null==r?void 0:r.availableColumns)?void 0:n.find(e=>e.id===t),d=(null==s?void 0:s.periodStartDate)||i,c=(null==s?void 0:s.periodEndDate)||o,p=this.createFieldFromConcept(e,d,c,t,l,a);p&&m.push(p)})}const f=[];e.children&&e.children.length>0&&e.children.forEach(e=>{const l=this.buildConceptTree(e,t+1,i,o,r,n,a,s,u);l&&f.push(l)});if(!(m.length>0||f.length>0))return null;let g=this.createUniqueConceptId(e,n);if(s){const e=s.get(g)??0;s.set(g,e+1),e>0&&(g=`${g}__occ${e+1}`)}const b={conceptName:e.conceptName,type:e.type,substitutionGroup:e.substitutionGroup,periodType:e.periodType,balance:e.balance,documentationLabels:this._extractDocumentationLabels(e.labels)};return{id:g,originalConceptId:e.id,name:e.conceptName,label:p,description:`${e.conceptName} (${e.type})`,type:e.type,level:t,children:f,fields:m,conceptMetadata:b,facts:e.facts||[],collapsed:t>0,abstract:e.elementAbstract,periodType:e.periodType,balance:e.balance,preferredLabel:e.preferredLabel,effectivePeriodRole:h}}static createFieldFromConcept(e,t,i,o,r,n="en"){var a;const s=this.mapXBRLTypeToFieldType(e.type),l=this.getPreferredLabel(e.labels,n,e.preferredLabel);let d;d=o||"duration";const c={id:`${e.id}_${d}_field`,conceptId:e.id,columnId:d,type:s,label:l,placeholder:`Enter ${l.toLowerCase()}`,required:!1,disabled:e.elementAbstract,defaultValue:null,periodType:"instant"===e.periodType||"duration"===e.periodType?e.periodType:void 0,periodStartDate:t||"2025-01-01",periodEndDate:i||"2025-12-31",periodInstantDate:"instant"===e.periodType?(null==(a=e.preferredLabel)?void 0:a.includes("periodStartLabel"))||"start"===r?this.subtractOneDay(t||"2025-01-01"):i||t||"2025-01-01":void 0};return"nl-cd_DescriptionLocationNL__a64trl"===e.id&&console.log(`🏗️ [Field Creation] Concept: ${e.id}, periodType from concept: ${e.periodType}, Field periodType: ${c.periodType}, ColumnId: ${d}`),c}static mapXBRLTypeToFieldType(e){return{"xbrli:stringItemType":"text","xbrli:monetaryItemType":"currency","xbrli:integerItemType":"number","xbrli:decimalItemType":"decimal","xbrli:percentItemType":"percentage","xbrli:dateItemType":"date","xbrli:booleanItemType":"boolean","dtr-types:domainItemType":"select","bw2-titel9:chamberOfCommerceRegistrationNumberItemType":"text"}[e]||"text"}static getPreferredLabel(e,t="en",i){if(!e||0===e.length)return"Unnamed Concept";const o=e.filter(e=>e.lang===t),r=o.length>0?o:e;if(i){const t=o.find(e=>e.role===i);if(t)return t.label;const r=e.find(e=>e.role===i);if(r)return r.label}const n=r.find(e=>e.preferredLabel);if(n)return n.label;const a=r.find(e=>"http://www.xbrl.org/2003/role/label"===e.role);if(a)return a.label;const s=r.find(e=>"http://www.xbrl.org/2003/role/terseLabel"===e.role);return s?s.label:r.length>0?r[0].label:e[0].label}static assignFieldColumnIds(e){if(!e.columns||0===e.columns.length)return;const t=e.columns.map(e=>e.id);e.concepts.forEach(e=>{this.assignColumnIdsToConceptFields(e,t)})}static assignColumnIdsToConceptFields(e,t){e.fields=e.fields.filter(e=>t.includes(e.columnId)),e.children&&e.children.forEach(e=>{this.assignColumnIdsToConceptFields(e,t)})}static countFieldsInTree(e){let t=e.fields.length;return e.children&&e.children.forEach(e=>{t+=this.countFieldsInTree(e)}),t}static getAllNonAbstractConcepts(e){var t;const i=[];return(null==(t=e.presentationLinkbase)?void 0:t.concepts)&&e.presentationLinkbase.concepts.forEach(e=>{this.collectNonAbstractConcepts(e,i)}),i}static collectNonAbstractConcepts(e,t){e.elementAbstract||t.push(e),e.children&&e.children.length>0&&e.children.forEach(e=>{this.collectNonAbstractConcepts(e,t)})}static filterHypercubeDimensionsBySelection(e,t){const i=JSON.parse(JSON.stringify(e));return i.items&&0!==i.items.length?(i.items.forEach(e=>{e.dimensions&&(e.dimensions=e.dimensions.map(e=>{var i,o;const r=t.find(t=>t.dimensionId===e.id);if(!r||!r.selectedMemberIds||0===r.selectedMemberIds.length)return e;const n={...e};return n.members=this.filterMembersBySelection(e.members,r.selectedMemberIds),console.log(` ✅ Filtered dimension ${e.id}: ${(null==(i=e.members)?void 0:i.length)||0} → ${(null==(o=n.members)?void 0:o.length)||0} members`),n}))}),i):i}static filterMembersBySelection(e,t){if(!e||!Array.isArray(e))return[];const i=[];return e.forEach(e=>{if(t.includes(e.id)&&i.push({...e,children:[]}),e.children&&e.children.length>0){const o=this.filterMembersBySelection(e.children,t);i.push(...o)}}),i}static findCrossRoleDimensions(e,t,i,o="en"){var r,n;const a=[];for(const d of i.roles)if(d.roleId!==t)for(const t of d.items)if((null==(r=t.conceptIds)?void 0:r.includes(e))&&(null==(n=t.dimensions)?void 0:n.some(e=>e.typedMember))){a.push(d);break}if(1!==a.length)return null;const s=a[0].items.find(t=>{var i;return null==(i=t.conceptIds)?void 0:i.includes(e)});if(!s)return null;const l=[];for(const d of s.dimensions){if(!d.typedMember)continue;const e=d.labels.find(e=>e.lang===o)||d.labels.find(e=>"en"===e.lang)||d.labels[0],t=(null==e?void 0:e.label)||d.id;l.push({axisId:d.id,axisLabel:t,typedMemberId:d.typedMember.id,memberLabel:t,type:d.typedMember.type,validation:d.typedMember.validation})}return l.length>0?l:null}static applyCrossRoleDimensions(e,t,i,o){var r;if(!e.abstract&&e.fields&&e.fields.length>0){const r=this.findCrossRoleDimensions(e.originalConceptId,t,i,o);r&&e.fields.forEach(e=>{e.crossRoleTypedMembers=r})}null==(r=e.children)||r.forEach(e=>this.applyCrossRoleDimensions(e,t,i,o))}static generateDefaultColumnsForRole(e,t,i,o,r,n,a,s="en"){var l,d;const c=r||this.getAllNonAbstractConcepts(e),p=n||new Set(c.filter(e=>e.periodType).map(e=>e.periodType));if(0===c.length)return[{id:"default",title:"Value",description:"Default value column",type:"base",order:0,removable:!1}];let u=[];if(1===(null==(l=null==o?void 0:o.items)?void 0:l.length)){const e=o.items[0];1===e.dimensions.length?u=this.generateSingleDimensionColumns(e.dimensions[0],t,i,p,s):e.dimensions.length>1&&(u=this.generateMultiDimensionColumns(e.dimensions,t,i,p,s)),a&&(u=this.filterColumnsByPeriodPreferences(u,a))}else(null==(d=null==o?void 0:o.items)?void 0:d.length)&&o.items.length;const h=[];u.length>0?h.push(...u):0===p.size?h.push({id:"default",title:this.formatPeriodDisplay(t,i),description:"",type:"base",order:0,removable:!1,periodStartDate:t,periodEndDate:i}):h.push({id:"duration",title:this.formatPeriodDisplay(t,i),description:"",type:"base",order:0,removable:!1,periodStartDate:t,periodEndDate:i});let m=h;if(a&&(m=this.filterColumnsByPeriodPreferences(h,a)),null==a?void 0:a.showPreviousYear){const e=this.generatePreviousYearColumns(m,t,i);m=[...m,...e]}return m}static getPreviousYearDate(e){try{const t=new Date(e);return t.setFullYear(t.getFullYear()-1),t.toISOString().split("T")[0]}catch(t){return console.error(`Error calculating previous year for date ${e}:`,t),e}}static subtractOneDay(e){try{const t=new Date(e);return t.setDate(t.getDate()-1),t.toISOString().split("T")[0]}catch(t){return console.error(`Error subtracting one day from date ${e}:`,t),e}}static generatePreviousYearColumns(e,t,i){const o=[],r=this.getPreviousYearDate(t),n=this.getPreviousYearDate(i);return e.forEach((e,t)=>{let i=e.title,a="",s="";e.dimensionData?(i=e.title,a=this.formatPeriodDisplay(r,n),s=`${e.id}_prev`):(i=this.formatPeriodDisplay(r,n),a="",s=`duration_prev_${t}`),o.push({...e,id:s,title:i,description:a,order:e.order+100,removable:!1,periodStartDate:r,periodEndDate:n,dimensionData:e.dimensionData?{...e.dimensionData,dimensionId:`${e.dimensionData.dimensionId}_prev`}:void 0})}),o}static filterColumnsByPeriodPreferences(e,t){return e.filter(e=>{var i,o,r,n;const a=e.id.includes("duration")||(null==(o=null==(i=e.dimensionData)?void 0:i.dimensionId)?void 0:o.includes("duration")),s=e.id.includes("instant")||(null==(n=null==(r=e.dimensionData)?void 0:r.dimensionId)?void 0:n.includes("instant"));return!a&&!s||!(a&&!t.showDuration)&&!(s&&!t.showInstant)})}static generateSingleDimensionColumns(e,t,i,o,r="en"){if(e.typedMember&&(!e.members||0===e.members.length)){const n=this.getPreferredLabel(e.labels,r)||e.conceptName,a={axisId:e.id,axisLabel:n,typedMemberId:e.typedMember.id,type:e.typedMember.type,validation:e.typedMember.validation,dimensionKey:`${n} | [Typed Input]`,dimensionIdKey:`${e.id}|[typed]`},s=[];return 0===o.size?s.push({id:"typed-default",title:n,description:"Typed dimension input column",type:"dimension",dimensionData:{dimensionId:"typed-default",axisId:a.axisId,memberId:"[typed]",memberValue:"Typed Input",memberLabel:"Typed Input",axis:a.axisLabel,axisLabel:a.axisLabel,memberKey:a.dimensionKey,dimensionIdKey:a.dimensionIdKey,hasTypedMembers:!0,typedMemberId:a.typedMemberId,typedMembers:[{axisId:a.axisId,axisLabel:a.axisLabel,typedMemberId:a.typedMemberId,memberLabel:a.axisLabel,type:a.type,validation:a.validation}]},order:0,removable:!1,periodStartDate:t,periodEndDate:i}):1===o.size&&o.has("instant")?s.push({id:"typed-instant",title:`${n} `,description:i,type:"dimension",dimensionData:{dimensionId:"typed-instant",axisId:a.axisId,memberId:"[typed]",memberValue:"Typed Input",memberLabel:"Typed Input",axis:a.axisLabel,axisLabel:a.axisLabel,memberKey:a.dimensionKey,dimensionIdKey:a.dimensionIdKey,hasTypedMembers:!0,typedMemberId:a.typedMemberId,typedMembers:[{axisId:a.axisId,axisLabel:a.axisLabel,typedMemberId:a.typedMemberId,memberLabel:a.axisLabel,type:a.type,validation:a.validation}]},order:0,removable:!1,periodStartDate:i,periodEndDate:i}):(1===o.size&&o.has("duration"),s.push({id:"typed-duration",title:`${n} `,description:this.formatPeriodDisplay(t,i),type:"dimension",dimensionData:{dimensionId:"typed-duration",axisId:a.axisId,memberId:"[typed]",memberValue:"Typed Input",memberLabel:"Typed Input",axis:a.axisLabel,axisLabel:a.axisLabel,memberKey:a.dimensionKey,dimensionIdKey:a.dimensionIdKey,hasTypedMembers:!0,typedMemberId:a.typedMemberId,typedMembers:[{axisId:a.axisId,axisLabel:a.axisLabel,typedMemberId:a.typedMemberId,memberLabel:a.axisLabel,type:a.type,validation:a.validation}]},order:0,removable:!1,periodStartDate:t,periodEndDate:i})),s}if(!e.members||!Array.isArray(e.members))return[];if(0===e.members.length)return[];const n=this.getPreferredLabel(e.labels,r)||e.conceptName,a=e.members[0],s=this.getPreferredLabel(a.labels,r)||a.conceptName,l={axisId:e.id,axisLabel:n,memberId:a.id,memberLabel:s,dimensionKey:`${n} | ${s}`,dimensionIdKey:`${e.id} | ${a.id}`},d=[];return 0===o.size?d.push({id:"default",title:l.memberLabel,description:"Default value column",type:"dimension",dimensionData:{dimensionId:"default",axisId:l.axisId,memberId:l.memberId,memberValue:l.memberLabel,memberLabel:l.memberLabel,axis:l.axisLabel,axisLabel:l.axisLabel,memberKey:l.dimensionKey,dimensionIdKey:l.dimensionIdKey},order:0,removable:!1,periodStartDate:t,periodEndDate:i}):1===o.size&&o.has("instant")?d.push({id:"instant",title:`${l.memberLabel}`,description:i,type:"dimension",dimensionData:{dimensionId:"instant",axisId:l.axisId,memberId:l.memberId,memberValue:l.memberLabel,memberLabel:l.memberLabel,axis:l.axisLabel,axisLabel:l.axisLabel,memberKey:l.dimensionKey,dimensionIdKey:l.dimensionIdKey},order:0,removable:!1,periodStartDate:i,periodEndDate:i}):1===o.size&&o.has("duration")?d.push({id:"duration",title:`${l.memberLabel}`,description:`${t} / ${i}`,type:"dimension",dimensionData:{dimensionId:"duration",axisId:l.axisId,memberId:l.memberId,memberValue:l.memberLabel,memberLabel:l.memberLabel,axis:l.axisLabel,axisLabel:l.axisLabel,memberKey:l.dimensionKey,dimensionIdKey:l.dimensionIdKey},order:0,removable:!1,periodStartDate:t,periodEndDate:i}):d.push({id:"duration",title:`${l.memberLabel}`,description:this.formatPeriodDisplay(t,i),type:"dimension",dimensionData:{dimensionId:"duration",axisId:l.axisId,memberId:l.memberId,memberValue:l.memberLabel,memberLabel:l.memberLabel,axis:l.axisLabel,axisLabel:l.axisLabel,memberKey:l.dimensionKey,dimensionIdKey:l.dimensionIdKey},order:0,removable:!1,periodStartDate:t,periodEndDate:i}),d}static generateMultiDimensionColumns(e,t,i,o,r="en"){e.some(e=>e.typedMember);const n=e.filter(e=>!!e.typedMember||!!(e.members&&Array.isArray(e.members)&&e.members.length>0));if(0===n.length)return[];const a=n.map(e=>{const t=this.getPreferredLabel(e.labels,r)||e.conceptName;if(e.typedMember)return{id:e.id,axisLabel:t,isTyped:!0,typedMemberId:e.typedMember.id,type:e.typedMember.type,validation:e.typedMember.validation,members:[{id:"[typed]",label:`${t}`}]};const i=this.getAllDimensionMembers(e.members);return{id:e.id,axisLabel:t,isTyped:!1,members:i.map(e=>({id:e.id,label:this.getPreferredLabel(e.labels,r)||e.conceptName}))}}),s=this.generateDimensionCombinations(a),l=[];return s.forEach((e,o)=>{const r=e.map(e=>e.memberLabel).join(" | "),n=e.filter(e=>e.isTyped),a=e.filter(e=>!e.isTyped),s={dimensionId:`multi_${o}`,memberValue:r,memberLabel:r,combinations:a.map(e=>({axisId:e.axisId,axisLabel:e.axisLabel,memberId:e.memberId,memberLabel:e.memberLabel})),typedMembers:n.map(e=>({axisId:e.axisId,axisLabel:e.axisLabel,typedMemberId:e.typedMemberId,memberLabel:e.memberLabel,type:e.type,validation:e.validation})),hasTypedMembers:n.length>0,memberKey:r,dimensionIdKey:[...a.map(e=>`${e.axisId}|${e.memberId}`),...n.map(e=>`${e.axisId}|[typed]`)].join("::")};l.push({id:`duration_${o}`,title:`${r}`,description:this.formatPeriodDisplay(t,i),type:"dimension",dimensionData:{...s,dimensionId:`duration_${o}`},order:o,removable:!1,periodStartDate:t,periodEndDate:i})}),l}static getAllDimensionMembers(e){if(!e||!Array.isArray(e))return[];const t=[];return e.forEach(e=>{t.push(e),e.children&&e.children.length>0&&t.push(...this.getAllDimensionMembers(e.children))}),t}static generateDimensionCombinations(e){if(0===e.length)return[];if(1===e.length)return e[0].members.map(t=>[{axisId:e[0].id,axisLabel:e[0].axisLabel,memberId:t.id,memberLabel:t.label,isTyped:e[0].isTyped||!1,typedMemberId:e[0].typedMemberId,type:e[0].type,validation:e[0].validation}]);const[t,...i]=e,o=this.generateDimensionCombinations(i),r=[];return t.members.forEach(e=>{0===o.length?r.push([{axisId:t.id,axisLabel:t.axisLabel,memberId:e.id,memberLabel:e.label,isTyped:t.isTyped||!1,typedMemberId:t.typedMemberId,type:t.type,validation:t.validation}]):o.forEach(i=>{r.push([{axisId:t.id,axisLabel:t.axisLabel,memberId:e.id,memberLabel:e.label,isTyped:t.isTyped||!1,typedMemberId:t.typedMemberId,type:t.type,validation:t.validation},...i])})}),r}static formatDateForDisplay(e){try{return new Date(e).toLocaleDateString("en-US",{year:"numeric",month:"short",day:"numeric"})}catch{return e}}static extractEntityName(e){try{const t=new URL(e).pathname.split("/");return t[t.length-1].replace(".xsd","").replace(/[^a-zA-Z0-9]/g," ").trim()||"Entity"}catch{return"Entity"}}static extractRoleTitle(e){if(!e)return"Unnamed Section";const t=e.match(/^\[[\d]+\]\s*(.+)$/);if(t)return t[1].trim();if(e.match(/^[a-z]+:[^:]*$/i)||e.match(/^urn:[^:]+:[^:]+/i)){const t=e.split(/[:\-]/);return t[t.length-1].replace(/[_\-]/g," ").replace(/\b\w/g,e=>e.toUpperCase())}return e.trim()||"Unnamed Section"}static extractRoleOrder(e){const t=e.match(/^\[([\d]+)\]/);return t?parseInt(t[1],10):0}static buildColumnsFromHypercubes(){return[{id:"default",label:"Values",type:"data"}]}}const F={en:{conceptInfo:{title:"Concept Information",conceptName:"Concept name",type:"Type",substitutionGroup:"Substitution group",periodType:"Period type",balance:"Balance",documentation:"Documentation",instant:"Instant",duration:"Duration",close:"Close"},form:{markAsComplete:"Mark as Complete",loading:"Loading form...",submit:"Validate",save:"Save",saveDraft:"Save Draft",savingDraft:"Saving draft",errors:"Errors",modified:"Modified",valid:"Valid",yes:"Yes",no:"No",noRoleSelected:"No Role Selected",pleaseSelectRole:"Please select a role from the list on the left.",expandPanel:"Expand side panel",collapsePanel:"Collapse side panel",validate:"Validate",preview:"Preview",download:"Download",cancelValidation:"Cancel Validation",lastValidationResults:"Last Validation Results",validationInProgress:"Validation In Progress",quickValidate:"Quick Validate"},filter:{selectRoles:"Select Roles",filterRoles:"Filter Roles",title:"Filter Roles",description:"Select the roles you want to display in the form. You can search and choose specific roles to focus on or manage all available roles.",searchPlaceholder:"Search..",clearSearch:"Clear search",showingResults:"Showing",of:"of",roles:"roles",matching:"matching",selectAll:"Select All",selectNone:"Select None",selectFiltered:"Select Filtered",deselectFiltered:"Deselect Filtered",deselectAll:"Deselect All",reset:"Reset",noRolesFound:"No roles found matching",tryDifferentSearch:"Try a different search term or clear the search.",noRolesAvailable:"No roles available.",cancel:"Cancel",applyFilter:"Apply Filter",showPeriodColumn:"Show Period Column:",additionalOptions:"Additional Options:",showPreviousYear:"Show previous year",duration:"Duration",instant:"Instant",uri:"URI",dimensionMemberSelection:"Dimension Member Selection",selectAllMembers:"Select All",clearMembers:"Clear",availableRoles:"Available Roles",chosenRoles:"Chosen Roles",roleCount:"role(s)",rolesSelected:"role(s) selected",addSelectedRole:"Add selected role",addAllRoles:"Add all roles",removeSelectedRole:"Remove selected role",removeAllRoles:"Remove all roles",advancedFilter:"Advanced Filter",backToFilterRoles:"← Back",showFactsOnly:"Show facts only",showFactsOnlyDescription:"Hide all blank rows and sections. Only roles and rows with at least one filled value will be shown.",searchByConcept:"Search by concept",searchByConceptDescription:"Type concept name or label to filter roles and rows. Press Apply Filter to apply.",searchByConceptPlaceholder:"Type concept name or label and press Apply Filter...",clearFilters:"Clear Filters",resetFilter:"Reset"},column:{addColumn:"Add Column",columnOptions:"Column Options",columnType:"Column Type",instantSingleDate:"Instant (single date)",durationDates:"Duration (start and end dates)",instantDate:"Instant Date",startPeriodDate:"Start Period Date",endPeriodDate:"End Period Date",availableDimensions:"Available Dimensions",dimensionsDescription:"Select dimensions to include in the column. Domain members can be selected here, while typed dimension values will be entered directly in the column header.",enterValue:"Enter value for",enterValuePlaceholder:"Enter value...",selectMember:"Select member:",noMembersAvailable:"No members available for this dimension",cancel:"Cancel",removeColumn:"Remove column",hideColumn:"Hide column",showColumn:"Double-click to show column",required:"required"},section:{enterPlaceholder:"Enter"},field:{selectOption:"Select an option...",select:"Select...",enterDetailedExplanation:"Enter detailed explanation...",enterAmountNoDecimals:"Enter amount (no decimals)",enterCurrency:"0.00",enterText:"Enter text",enterWholeNumber:"Enter whole number",enterPositiveNumber:"Enter positive number",enterDecimalValue:"Enter decimal value",enterNumberOfShares:"Enter number of shares",yearFormat:"YYYY",enterPercentage:"e.g. 0.25 for 25% or 0.2550 for 25.50%",emailPlaceholder:"email@example.com",urlPlaceholder:"https://example.com",phonePlaceholder:"+1 (555) 000-0000",enterValue:"Enter value",enterDetailedInformation:"Enter detailed information...",scale:"Scale",addText:"Add text",editText:"Edit",save:"Save",cancel:"Cancel",characters:"characters",editPeriod:"Edit Period",from:"From",to:"To",date:"Date",unit:"Unit",selectUnit:"Select Unit",leaveBlankForInf:"Leave blank for INF"},admin:{title:"Configure Roles",description:"Select which roles should display the 'Show Previous Year' checkbox and configure period type columns."},validation:{summary:"Please fix the following errors before submitting:",errorsFound:"errors found",unitRequired:"Unit is required. Please select a unit via the period icon.",typedMemberRequired:"This field is required because data has been entered in this column."},xbrlValidation:{patternMismatch:"Value does not match required pattern: {{pattern}}",invalidPattern:"Invalid pattern configuration: {{pattern}}",exactLength:"Value must be exactly {{required}} characters (current: {{current}})",minLength:"Value must be at least {{required}} characters (current: {{current}})",maxLength:"Value must not exceed {{required}} characters (current: {{current}})",totalDigits:"Value must not exceed {{required}} total digits (current: {{current}})",ruleSummaryPattern:"Must match pattern: {{pattern}}",ruleSummaryExactLength:"Must be exactly {{required}} characters",ruleSummaryMinLength:"Minimum {{required}} characters",ruleSummaryMaxLength:"Maximum {{required}} characters",ruleSummaryTotalDigits:"Maximum {{required}} total digits"},error:{popup:{title:"Validation Errors",message:"Please fix the following validation errors before saving:",field:"Field:",value:"Value:",errors:"Errors:",clickToFocus:"Click to focus this field",ok:"OK"}},calculationWarning:{title:"Calculation warning",summaryLine:'Total "{{label}}" should equal {{calculated}}, but you entered {{entered}}.',childrenPrefix:"Children:",childAdded:"{{label}} = {{value}} (added)",childSubtracted:"{{label}} = {{value}} (subtracted, opposite balance)",added:"Added",subtracted:"Subtracted (opposite balance)"},formulaValidation:{dialogTitle:"Formula check results",allPassed:"All formula checks passed",summaryCount:"{{failed}} of {{total}} checks failed",summaryCountBreakdown:"{{warnings}} warnings, {{errors}} errors",severityWarning:"Warning",severityError:"Error",close:"Close"},scrollToConcept:{revealRole:{title:"Role not in your filtered list",message:'This field is in the role "{{role}}", which is not in your filtered list of roles. Do you want to make this role visible?',confirm:"Yes, show role",cancel:"No"}}},nl:{conceptInfo:{title:"Conceptinformatie",conceptName:"Conceptnaam",type:"Type",substitutionGroup:"Substitutiegroep",periodType:"Periodetype",balance:"Saldo",documentation:"Documentatie",instant:"Moment",duration:"Periode",close:"Sluiten"},form:{markAsComplete:"Markeren als volledig behandeld",loading:"Formulier laden...",submit:"Valideren",save:"Opslaan",saveDraft:"Concept opslaan",savingDraft:"Concept opslaan...",errors:"Fouten",modified:"Gewijzigd",valid:"Geldig",yes:"Ja",no:"Nee",noRoleSelected:"Geen rol geselecteerd",pleaseSelectRole:"Selecteer een rol uit de lijst aan de linkerkant.",expandPanel:"Zijpaneel uitvouwen",collapsePanel:"Zijpaneel inklappen",validate:"Valideren",preview:"Voorbeeld",download:"Downloaden",cancelValidation:"Validatie annuleren",lastValidationResults:"Laatste validatieresultaten",validationInProgress:"Validatie bezig",quickValidate:"Snel valideren"},filter:{selectRoles:"Rollen selecteren",filterRoles:"Rollen filteren",title:"Rollen filteren",description:"Selecteer de rollen die u in het formulier wilt weergeven. U kunt zoeken en specifieke rollen kiezen om op te focussen of alle beschikbare rollen beheren.",searchPlaceholder:"Zoek rollen op naam, ID of URI...",clearSearch:"Zoekopdracht wissen",showingResults:"Weergeven",of:"van",roles:"rollen",matching:"overeenkomend met",selectAll:"Alles selecteren",selectNone:"Niets selecteren",selectFiltered:"Gefilterd selecteren",deselectFiltered:"Gefilterd deselecteren",deselectAll:"Alles deselecteren",reset:"Resetten",noRolesFound:"Geen rollen gevonden die overeenkomen met",tryDifferentSearch:"Probeer een andere zoekterm of wis de zoekopdracht.",noRolesAvailable:"Geen rollen beschikbaar.",cancel:"Annuleren",applyFilter:"Filter toepassen",showPeriodColumn:"Periodekolom weergeven:",additionalOptions:"Aanvullende opties:",showPreviousYear:"Vorig jaar weergeven",duration:"Duur",instant:"Moment",uri:"URI",dimensionMemberSelection:"Dimensieleden selectie",selectAllMembers:"Alles selecteren",clearMembers:"Wissen",availableRoles:"Beschikbare rollen",chosenRoles:"Gekozen rollen",roleCount:"rol(len)",rolesSelected:"rol(len) geselecteerd",addSelectedRole:"Geselecteerde rol toevoegen",addAllRoles:"Alle rollen toevoegen",removeSelectedRole:"Geselecteerde rol verwijderen",removeAllRoles:"Alle rollen verwijderen",advancedFilter:"Geavanceerd filter",backToFilterRoles:"← Terug",showFactsOnly:"Alleen feiten weergeven",showFactsOnlyDescription:"Verberg alle lege rijen en secties. Alleen rollen en rijen met minimaal één ingevulde waarde worden weergegeven.",searchByConcept:"Zoeken op concept",searchByConceptDescription:"Typ een conceptnaam of label om rollen en rijen te filteren. Druk op Filter toepassen om te activeren.",searchByConceptPlaceholder:"Typ conceptnaam of label en druk op Filter toepassen...",clearFilters:"Filters wissen",resetFilter:"Resetten"},column:{addColumn:"Kolom toevoegen",columnOptions:"Kolomopties",columnType:"Kolomtype",instantSingleDate:"Moment (enkele datum)",durationDates:"Duur (begin- en einddatum)",instantDate:"Momentdatum",startPeriodDate:"Startdatum periode",endPeriodDate:"Einddatum periode",availableDimensions:"Beschikbare dimensies",dimensionsDescription:"Selecteer dimensies om in de kolom op te nemen. Domeinleden kunnen hier worden geselecteerd, terwijl getypte dimensiewaarden direct in de kolomkop worden ingevoerd.",enterValue:"Voer waarde in voor",enterValuePlaceholder:"Voer waarde in...",selectMember:"Selecteer lid:",noMembersAvailable:"Geen leden beschikbaar voor deze dimensie",cancel:"Annuleren",removeColumn:"Kolom verwijderen",hideColumn:"Kolom verbergen",showColumn:"Dubbelklik om kolom te tonen",required:"verplicht"},section:{enterPlaceholder:"Invoeren"},field:{selectOption:"Selecteer een optie...",select:"Selecteer...",enterDetailedExplanation:"Voer gedetailleerde uitleg in...",enterAmountNoDecimals:"Voer bedrag in (geen decimalen)",enterCurrency:"0,00",enterText:"Voer tekst in",enterWholeNumber:"Voer geheel getal in",enterPositiveNumber:"Voer positief getal in",enterDecimalValue:"Voer decimale waarde in",enterNumberOfShares:"Voer aantal aandelen in",yearFormat:"JJJJ",enterPercentage:"bijv. 0,25 voor 25% of 0,2550 voor 25,50%",emailPlaceholder:"email@voorbeeld.nl",urlPlaceholder:"https://voorbeeld.nl",phonePlaceholder:"+31 (0)20 123 4567",enterValue:"Voer waarde in",enterDetailedInformation:"Voer gedetailleerde informatie in...",scale:"Schaal",addText:"Tekst toevoegen",editText:"Bewerken",save:"Opslaan",cancel:"Annuleren",characters:"tekens",editPeriod:"Periode bewerken",from:"Van",to:"Tot",date:"Datum",unit:"Eenheid",selectUnit:"Selecteer eenheid",leaveBlankForInf:"Leeg laten voor INF"},admin:{title:"Rollen configureren",description:"Selecteer welke rollen het selectievakje 'Vorig jaar weergeven' moeten weergeven en configureer periodetype kolommen."},validation:{summary:"Corrigeer de volgende fouten voordat u indient:",errorsFound:"fouten gevonden",unitRequired:"Eenheid is verplicht. Selecteer een eenheid via het periodeicoon.",typedMemberRequired:"Dit veld is verplicht omdat er gegevens zijn ingevoerd in deze kolom."},xbrlValidation:{patternMismatch:"Waarde voldoet niet aan het vereiste patroon: {{pattern}}",invalidPattern:"Ongeldige patternconfiguratie: {{pattern}}",exactLength:"Waarde moet exact {{required}} tekens bevatten (huidig: {{current}})",minLength:"Waarde moet minimaal {{required}} tekens bevatten (huidig: {{current}})",maxLength:"Waarde mag niet meer dan {{required}} tekens bevatten (huidig: {{current}})",totalDigits:"Waarde mag niet meer dan {{required}} cijfers bevatten (huidig: {{current}})",ruleSummaryPattern:"Moet overeenkomen met patroon: {{pattern}}",ruleSummaryExactLength:"Moet exact {{required}} tekens bevatten",ruleSummaryMinLength:"Minimaal {{required}} tekens",ruleSummaryMaxLength:"Maximaal {{required}} tekens",ruleSummaryTotalDigits:"Maximaal {{required}} cijfers"},error:{popup:{title:"Validatiefouten",message:"Corrigeer de volgende validatiefouten voordat u opslaat:",field:"Veld:",value:"Waarde:",errors:"Fouten:",clickToFocus:"Klik om dit veld te focussen",ok:"OK"}},calculationWarning:{title:"Berekeningswaarschuwing",summaryLine:'Totaal "{{label}}" zou {{calculated}} moeten zijn, maar u heeft {{entered}} ingevoerd.',childrenPrefix:"Onderdelen:",childAdded:"{{label}} = {{value}} (opgeteld)",childSubtracted:"{{label}} = {{value}} (afgetrokken, tegengestelde balans)",added:"Opgeteld",subtracted:"Afgetrokken (tegengestelde balans)"},formulaValidation:{dialogTitle:"Resultaten formulecontrole",allPassed:"Alle formulecontroles geslaagd",summaryCount:"{{failed}} van {{total}} controles mislukt",summaryCountBreakdown:"{{warnings}} waarschuwingen, {{errors}} fouten",severityWarning:"Waarschuwing",severityError:"Fout",close:"Sluiten"},scrollToConcept:{revealRole:{title:"Rol niet in uw gefilterde lijst",message:'Dit veld staat in de rol "{{role}}", die niet in uw gefilterde lijst met rollen staat. Wilt u deze rol zichtbaar maken?',confirm:"Ja, rol tonen",cancel:"Nee"}}}};class k{static setLanguage(e){F[e]?this.currentLanguage=e:(console.warn(`Language '${e}' not supported, falling back to 'en'`),this.currentLanguage="en")}static getLanguage(){return this.currentLanguage}static t(e,t){const i=e.split(".");let o=F[this.currentLanguage];for(const r of i){if(!o||"object"!=typeof o||!(r in o))return console.warn(`Translation key '${e}' not found for language '${this.currentLanguage}'`),e;o=o[r]}return t&&"string"==typeof o?this.interpolate(o,t):o}static interpolate(e,t){return e.replace(/\{\{(\w+)\}\}/g,(e,i)=>i in t?String(t[i]):e)}static has(e){const t=e.split(".");let i=F[this.currentLanguage];for(const o of t){if(!i||"object"!=typeof i||!(o in i))return!1;i=i[o]}return void 0!==i}static getAvailableLanguages(){return Object.keys(F)}}function E(e){return!!(null==e?void 0:e.toLowerCase().includes("totallabel"))}k.currentLanguage="en";class R{constructor(e=!1){this.DRAFT_DATA_KEY="jupiter-form-draft-data",this.DRAFT_METADATA_KEY="jupiter-form-draft-metadata",this.STORAGE_VERSION="1.0",this._storage=e?sessionStorage:localStorage,console.log(`💾 DraftStorageService initialized (using ${e?"sessionStorage":"localStorage"})`)}saveDraft(e,t){try{const i={formData:e,metadata:{...t,savedAt:(new Date).toISOString()},version:this.STORAGE_VERSION};return this._storage.setItem(this.DRAFT_DATA_KEY,JSON.stringify(i.formData)),this._storage.setItem(this.DRAFT_METADATA_KEY,JSON.stringify(i.metadata)),console.log("✅ Draft saved successfully",{entries:e.length,timestamp:i.metadata.savedAt,roles:t.selectedRoleIds.length,customColumns:t.customColumns.length}),!0}catch(i){return console.error("❌ Failed to save draft:",i),!1}}loadDraft(){try{const e=this._storage.getItem(this.DRAFT_DATA_KEY),t=this._storage.getItem(this.DRAFT_METADATA_KEY);if(!e||!t)return console.log("ℹ️ No saved draft found"),null;const i=JSON.parse(e),o=JSON.parse(t);return console.log("✅ Draft loaded successfully",{entries:i.length,savedAt:o.savedAt,roles:o.selectedRoleIds.length,customColumns:o.customColumns.length}),{formData:i,metadata:o,version:this.STORAGE_VERSION}}catch(e){return console.error("❌ Failed to load draft:",e),null}}hasDraft(){return null!==this._storage.getItem(this.DRAFT_DATA_KEY)&&null!==this._storage.getItem(this.DRAFT_METADATA_KEY)}getDraftMetadata(){try{const e=this._storage.getItem(this.DRAFT_METADATA_KEY);return e?JSON.parse(e):null}catch(e){return console.error("❌ Failed to load draft metadata:",e),null}}clearDraft(){try{return this._storage.removeItem(this.DRAFT_DATA_KEY),this._storage.removeItem(this.DRAFT_METADATA_KEY),console.log("🗑️ Draft cleared successfully"),!0}catch(e){return console.error("❌ Failed to clear draft:",e),!1}}getDraftAge(){const e=this.getDraftMetadata();if(!e)return null;const t=new Date(e.savedAt);return(new Date).getTime()-t.getTime()}isDraftStale(e){const t=this.getDraftAge();return null!==t&&t>e}extractCustomColumns(e){const t=[];return e.forEach(e=>{e.columns&&Array.isArray(e.columns)&&e.columns.forEach(i=>{t.push({sectionId:e.id,columnId:i.id,label:i.title,description:i.description,periodType:this._inferPeriodTypeFromColumn(i),date:i.periodStartDate,startDate:i.periodStartDate,endDate:i.periodEndDate,dimensionData:i.dimensionData})})}),t}_inferPeriodTypeFromColumn(e){return e.periodStartDate&&e.periodEndDate?"duration":"instant"}createMetadataSnapshot(e,t,i,o,r,n,a,s,l,d="en",c,p,u,h,m){return{periodStartDate:e,periodEndDate:t,language:i,reportingLanguage:d,selectedRoleIds:o,customColumns:this.extractCustomColumns(r),typedMemberData:n,periodPreferences:a,periodData:s,unitData:l,decimalsData:p,repeatCounts:c,roleCompletedStates:u,hiddenColumns:h,totalManuallyEditedData:m,schemaVersion:this.STORAGE_VERSION}}validateDraftCompatibility(e,t,i){const o=[];e.metadata.periodStartDate!==t&&o.push(`Draft period start (${e.metadata.periodStartDate}) differs from current (${t})`),e.metadata.periodEndDate!==i&&o.push(`Draft period end (${e.metadata.periodEndDate}) differs from current (${i})`);const r=this.getDraftAge();r&&r>6048e5&&o.push(`Draft is ${Math.floor(r/864e5)} days old`);return{compatible:0===o.length,warnings:o}}}const M=.01;class A extends Error{constructor(e,t,i="unsupported-syntax"){super(e),this.test=t,this.reason=i,this.name="FormulaExpressionError"}}const P=/\s*(?:(\$[A-Za-z_][\w-]*)|(-?\d+(?:\.\d+)?)|([A-Za-z][\w:-]*)|('[^']*')|(\()|(\))|(\+)|(-)|(=))/y;class j{constructor(e,t){this.tokens=e,this.test=t,this.pos=0}peek(){return this.tokens[this.pos]}next(){return this.tokens[this.pos++]}expect(e){const t=this.next();if(t.type!==e)throw new A(`Expected ${e} but got ${t.type} ("${t.value}")`,this.test,"parse-error");return t}parseBoolExpr(){const e=this.parseOrExpr();if("EOF"!==this.peek().type)throw new A(`Unexpected trailing token "${this.peek().value}"`,this.test,"unsupported-syntax");return e}parseOrExpr(){const e=[this.parseAndExpr()];for(;"IDENT"===this.peek().type&&"or"===this.peek().value;)this.next(),e.push(this.parseAndExpr());return 1===e.length?e[0]:{kind:"or",terms:e}}parseAndExpr(){const e=[this.parseBoolTerm()];for(;"IDENT"===this.peek().type&&"and"===this.peek().value;)this.next(),e.push(this.parseBoolTerm());return 1===e.length?e[0]:{kind:"and",terms:e}}parseBoolTerm(){const e=this.peek();if("IDENT"===e.type&&"not"===e.value){this.next(),this.expect("LPAREN");const e=this.parseOrExpr();return this.expect("RPAREN"),{kind:"not",arg:e}}if("IDENT"===e.type&&"empty"===e.value){this.next(),this.expect("LPAREN");const e=this.expect("VARIABLE").value;return this.expect("RPAREN"),{kind:"empty",variable:e}}if("IDENT"===e.type&&"xff:has-fallback-value"===e.value){this.next(),this.expect("LPAREN");const e=this.next();if("IDENT"!==e.type||"xs:QName"!==e.value)throw new A(`Expected xs:QName(...) inside xff:has-fallback-value(...), got "${e.value}"`,this.test,"unsupported-syntax");this.expect("LPAREN");const t=this.expect("STRING").value;return this.expect("RPAREN"),this.expect("RPAREN"),{kind:"hasFallbackValue",variableName:t}}const t=this.parseValueExpr(),i=this.peek();if("EQUALS"===i.type)return this.next(),{kind:"comparison",op:"=",left:t,right:this.parseValueExpr()};if("IDENT"===i.type&&"eq"===i.value)return this.next(),{kind:"comparison",op:"eq",left:t,right:this.parseValueExpr()};throw new A(`Expected a comparison operator ("=" or "eq") after value expression, got "${i.value}"`,this.test,"unsupported-syntax")}parseValueExpr(){const e=[];let t=1;for("PLUS"===this.peek().type?this.next():"MINUS"===this.peek().type&&(this.next(),t=-1),e.push({sign:t,term:this.parseValueTerm()});"PLUS"===this.peek().type||"MINUS"===this.peek().type;){const t="PLUS"===this.next().type?1:-1;e.push({sign:t,term:this.parseValueTerm()})}return 1===e.length&&1===e[0].sign?e[0].term:{kind:"additive",terms:e}}parseValueTerm(){const e=this.peek();if("NUMBER"===e.type)return this.next(),{kind:"number",value:Number(e.value)};if("STRING"===e.type)return this.next(),{kind:"string",value:e.value};if("VARIABLE"===e.type)return this.next(),{kind:"variable",name:e.value};if("IDENT"===e.type&&"sum"===e.value){this.next(),this.expect("LPAREN");const e=this.expect("VARIABLE").value;return this.expect("RPAREN"),{kind:"sum",variable:e}}if("LPAREN"===e.type){this.next();const e=this.parseValueExpr();return this.expect("RPAREN"),e}throw new A(`Expected a number, variable, sum(...), or parenthesized expression, got "${e.value}"`,this.test,"unsupported-syntax")}}function L(e,t){return e.get(t)}function N(e,t,i){switch(e.kind){case"number":case"string":return e.value;case"sum":return function(e,t,i){const o=L(t,e);return void 0===o?0:(Array.isArray(o)?o:[o]).reduce((t,o)=>{if("string"==typeof o)throw new A(`Variable "$${e}" resolved to a non-numeric value ("${o}") and cannot be used in sum(...)`,i,"unsupported-syntax");return t+o},0)}(e.variable,t,i);case"variable":{const o=L(t,e.name);if(void 0===o)throw new A(`Variable "$${e.name}" has no bound fact and cannot be evaluated directly (only sum()/empty() tolerate an unbound variable)`,i,"unbound-variable");if(Array.isArray(o))throw new A(`Variable "$${e.name}" is a sequence and must be wrapped in sum(...) to be used in arithmetic`,i,"unsupported-syntax");return o}case"additive":return e.terms.reduce((e,{sign:o,term:r})=>{const n=N(r,t,i);if("string"==typeof n)throw new A(`Non-numeric value ("${n}") cannot be used in arithmetic (+ / -)`,i,"unsupported-syntax");return e+o*n},0)}}function V(e,t,i,o){switch(e.kind){case"or":return e.terms.some(e=>V(e,t,i,o));case"and":return e.terms.every(e=>V(e,t,i,o));case"not":return!V(e.arg,t,i,o);case"empty":{const i=L(t,e.variable);return void 0===i||Array.isArray(i)&&0===i.length}case"hasFallbackValue":{const t=o.get(e.variableName);if(void 0===t)throw new A(`xff:has-fallback-value(xs:QName('${e.variableName}')) could not be evaluated — no fallback-usage tracked for this variable (either not one of this assertion's FACT_VARIABLEs, or it matched zero facts with no fallbackValue declared)`,i,"unbound-variable");return t}case"comparison":{const o=N(e.left,t,i),r=N(e.right,t,i);return"string"==typeof o||"string"==typeof r?String(o)===String(r):Math.abs(o-r)<M}}}function O(e,t,i=new Map){const o=function(e){const t=[];P.lastIndex=0;let i=0;for(;i<e.length;){P.lastIndex=i;const o=P.exec(e);if(!o||o.index!==i){if(/^\s*$/.test(e.slice(i)))break;throw new A(`Unrecognized token at position ${i}: "${e.slice(i,i+10)}..."`,e,"unsupported-syntax")}const[r,n,a,s,l,d,c,p,u,h]=o;n?t.push({type:"VARIABLE",value:n.slice(1)}):a?t.push({type:"NUMBER",value:a}):s?t.push({type:"IDENT",value:s}):l?t.push({type:"STRING",value:l.slice(1,-1)}):d?t.push({type:"LPAREN",value:d}):c?t.push({type:"RPAREN",value:c}):p?t.push({type:"PLUS",value:p}):u?t.push({type:"MINUS",value:u}):h&&t.push({type:"EQUALS",value:h}),i+=r.length}return t.push({type:"EOF",value:""}),t}(e);return V(new j(o,e).parseBoolExpr(),t,e,i)}const z=/^\.\s*(eq|ne|gt|lt|ge|le)\s+(-?\d+(?:\.\d+)?)$/;function U(e){return!!(null==e?void 0:e.toLowerCase().includes("totallabel"))}function J(e){return!!(null==e?void 0:e.toLowerCase().includes("negatedtotallabel"))}function B(e,t,i=0){if(!t.isAbstract(e))return e;if(i>5)return null;const o=t.getChildren(e).find(e=>U(t.getPreferredLabel(e)));return o?B(o,t,i+1):null}function q(e,t,i,o,r){if(i<0)return o;const n=e[t];if(J(r.getPreferredLabel(n)))return o.length>0?o:[e[i]];if(o.length>0)return[e[i],...o];if(J(r.getPreferredLabel(e[i]))){let t=-1;for(let o=i-1;o>=0;o--)if(U(r.getPreferredLabel(e[o]))){t=o;break}return t>=0?[e[t],e[i]]:[e[i]]}return[e[i]]}function H(e){return null!=e&&""!==e}function K(e){const t=[];for(const i of Object.keys(e)){const o=e[i]||{};for(const e of Object.keys(o))H(o[e])&&t.push({conceptId:i,columnId:e})}return t}function Y(e,t,i,o,r,n){const a={conceptId:e.id,qname:e.name,balance:e.balance,effectivePeriodRole:e.effectivePeriodRole};i.set(e.id,a),(t.get(e.name)??t.set(e.name,[]).get(e.name)).push(a);const s=e.children||[],l=s.length>0,d=!0===r.get(e.name);(!o.has(e.name)||l&&!d)&&(o.set(e.name,e.id),r.set(e.name,l)),n.set(e.id,s.map(e=>e.id)),s.forEach(e=>Y(e,t,i,o,r,n))}function W(e){const t=[e.id];return(e.children||[]).forEach(e=>t.push(...W(e))),t}function Q(e,t,i,o,r){t.has(e.conceptName)||t.set(e.conceptName,e.id),i.has(e.conceptName)||i.set(e.conceptName,(e.children||[]).map(e=>e.id)),o.has(e.conceptName)||o.set(e.conceptName,W(e)),(e.children||[]).forEach(e=>{r.add(e.id),Q(e,t,i,o,r)})}const G={getId:e=>e.id,getPreferredLabel:e=>e.preferredLabel,isAbstract:e=>!0===e.abstract,getChildren:e=>e.children||[]};function X(e,t,i,o,r,n,a){const s=new Map,l=new Map,d=new Map,c=new Map,p=new Map,u=new Map,h=new Map;i.forEach(e=>{const t=new Map,i=new Map,o=new Map;e.concepts.forEach(e=>Y(e,s,l,i,o,t)),c.set(e.roleURI,t),d.set(e.roleURI,i),p.set(e.roleURI,function(e,t){const i=new Map;function o(e,o){const r=[];for(const i of o){const e=B(i,t);e&&r.push(t.getId(e))}0!==r.length&&i.set(t.getId(e),r)}return function e(i){for(let r=0;r<i.length;r++){const n=i[r];if(U(t.getPreferredLabel(n))&&0===t.getChildren(n).length){let e=-1;for(let o=r-1;o>=0;o--)if(U(t.getPreferredLabel(i[o]))){e=o;break}const a=i.slice(e+1,r),s=q(i,r,e,a,t);s.length>0&&o(n,s)}const a=t.getChildren(n);a.length>0&&e(a)}}(e),i}(e.concepts,G));for(const r of t.keys())h.set(r,e.roleURI);e.columns&&u.set(e.roleURI,e.columns)});const m=new Map;d.forEach((e,t)=>{const i=c.get(t),o=p.get(t);e.forEach((e,r)=>{var n;const a=(null==i?void 0:i.get(e))||[],s=a.length>0?a:(null==o?void 0:o.get(e))||[];0!==s.length&&(m.has(r)||m.set(r,new Map),null==(n=m.get(r))||n.set(t,s))})});const f=new Map,g=new Map,b=new Map,v=new Map,y=new Set;return(o||[]).forEach(e=>{e.items.forEach(e=>{e.dimensions.forEach(e=>{f.has(e.conceptName)||f.set(e.conceptName,e.id),(e.members||[]).forEach(e=>Q(e,g,b,v,y))})})}),{formData:e,columns:t,periodStartDate:r,periodEndDate:n,conceptByQName:s,conceptById:l,conceptIdByQNamePerRole:d,childrenByRole:c,totalGroupChildrenByRole:p,crossRoleChildrenByQName:m,dimensionQNameToId:f,memberQNameToId:g,memberChildrenByQName:b,memberDescendantOrSelfIdsByQName:v,memberIdsWithParent:y,columnsByRole:u,roleURIByConceptId:h,allCandidates:K(e),typedMemberData:a??{}}}function Z(e,t){const i=[],o=[...e.get(t)||[]],r=new Set;for(;o.length>0;){const t=o.pop();r.has(t)||(r.add(t),i.push(t),o.push(...e.get(t)||[]))}return i}function ee(e){return`${e.conceptId}::${e.columnId}`}function te(e,t){return se(e.filters.map(i=>ae(i,t.allCandidates,t,e.filters)))}function ie(e,t){var i;const o=e.roleURIByConceptId.get(t.conceptId);return(o?null==(i=e.columnsByRole.get(o))?void 0:i.find(e=>e.id===t.columnId):void 0)??e.columns.find(e=>e.id===t.columnId)}function oe(e,t,i){if(!(null==e?void 0:e.dimensionData))return!1;return!(e.dimensionData.axisId!==t||void 0!==i&&e.dimensionData.memberId!==i)||(e.dimensionData.combinations||[]).some(e=>e.axisId===t&&(void 0===i||e.memberId===i))}function re(e,t){return{start:(null==e?void 0:e.periodStartDate)??t.periodStartDate,end:(null==e?void 0:e.periodEndDate)??t.periodEndDate}}function ne(e,t,i,o){var r,n;switch(e.type){case"CONCEPT_NAME":{const o=e.attributes["concept.qname"],r=o?i.conceptByQName.get(o):void 0;if(!r||0===r.length)return[];const n=new Set(r.map(e=>e.conceptId));return t.filter(e=>n.has(e.conceptId))}case"CONCEPT_BALANCE":{const o=e.attributes.balance;return t.filter(e=>{var t;return(null==(t=i.conceptById.get(e.conceptId))?void 0:t.balance)===o})}case"CONCEPT_RELATION":{const o=e.attributes.qname,a=e.attributes.linkrole,s=e.attributes.axis,l=o&&a?null==(r=i.conceptIdByQNamePerRole.get(a))?void 0:r.get(o):void 0,d=a?i.childrenByRole.get(a):void 0;if(!l||!d)return[];let c;if("descendant"===s)c=Z(d,l);else{const e=d.get(l)||[];c=e.length>0?e:(null==(n=i.totalGroupChildrenByRole.get(a??""))?void 0:n.get(l))||[],0===c.length&&(c=function(e,t,i){if(!e)return[];const o=i.crossRoleChildrenByQName.get(e);if(!o)return[];const r=Array.from(o.entries()).filter(([e])=>e!==t);return 1===r.length?r[0][1]:[]}(o,a,i))}const p=new Set(c);return t.filter(e=>p.has(e.conceptId))}case"EXPLICIT_DIMENSION":{const r=e.attributes["dimension.qname"],n=e.attributes["member.qname"],a=r?i.dimensionQNameToId.get(r):void 0;if(!a)return[];const s=e.attributes["member.axis"];if(n&&"child"===s)return function(e,t,i,o,r){var n,a;const s=o.memberChildrenByQName.get(e)||[];if(s.length>0){const e=i.filter(e=>s.some(i=>oe(ie(o,e),t,i)));if(e.length>0)return e}const l=r.find(e=>"CONCEPT_RELATION"===e.type&&"descendant"===e.attributes.axis),d=null==l?void 0:l.attributes.linkrole,c=null==l?void 0:l.attributes.qname,p=c&&d?null==(n=o.conceptIdByQNamePerRole.get(d))?void 0:n.get(c):void 0,u=new Set(p&&d&&(null==(a=o.childrenByRole.get(d))?void 0:a.get(p))||[]);return 0===u.size?[]:i.filter(e=>!u.has(e.conceptId))}(n,a,t,i,o);if(n&&"descendant-or-self"===s)return function(e,t,i,o){const r=o.memberDescendantOrSelfIdsByQName.get(e)||[];return 0===r.length?[]:i.filter(e=>r.some(i=>oe(ie(o,e),t,i)))}(n,a,t,i);const l=n?i.memberQNameToId.get(n):void 0;return t.filter(e=>oe(ie(i,e),a,l))}case"TYPED_DIMENSION":{const o=e.attributes["dimension.qname"],r=o?i.dimensionQNameToId.get(o):void 0;return r?t.filter(e=>function(e,t,i){if(!function(e,t){return!!(null==e?void 0:e.dimensionData)&&(void 0!==e.dimensionData.typedMemberId&&e.dimensionData.axisId===t||(e.dimensionData.typedMembers||[]).some(e=>e.axisId===t))}(ie(e,t),i))return!1;const o=e.typedMemberData[t.columnId];return void 0===o||!!o[i]}(i,e,r)):[]}case"PERIOD_INSTANT":case"PERIOD_END":{const o=e.attributes.date;return t.filter(e=>function(e,t,i){const o=function(e){if(e)return e.startsWith("$")?e.slice(1):e}(t);if(!o)return!1;const r=function(e,t){const i=e.includes("StartDate"),o=e.includes("EndDate")||"FinancialReportingPeriodCurrentEndDateParam"===e;if(e.startsWith("FinancialReportingPeriodCurrent"))return i?{start:t.periodStartDate}:o?{end:t.periodEndDate}:void 0;if(e.startsWith("FinancialReportingPeriodPrePrevious")||e.startsWith("FinancialReportingPeriodPrevious")){const e=function(e){return e.columns.find(t=>void 0!==t.periodEndDate&&t.periodEndDate<e.periodEndDate)}(t);if(!e)return;return i?{start:e.periodStartDate}:o?{end:e.periodEndDate}:void 0}}(o,i);if(!r)return!1;const n=re(e,i),a=r.end??r.start;return n.end===a}(ie(i,e),o,i))}case"OR_FILTER":return function(e){const t=new Map;return e.forEach(e=>e.forEach(e=>t.set(ee(e),e))),Array.from(t.values())}(e.children.map(e=>ae(e,t,i,o)));case"ASPECT_COVER":return t;case"UNKNOWN":{const o=e.attributes.boundary;if("start"===o||"end"===o){const e="start"===o?"periodStartLabel":"periodEndLabel";return t.filter(t=>{var o;return(null==(o=i.conceptById.get(t.conceptId))?void 0:o.effectivePeriodRole)===e})}return t}default:return[]}}function ae(e,t,i,o){const r=ne(e,t,i,o);if(!e.complement)return r;const n=new Set(r.map(ee));return t.filter(e=>!n.has(ee(e)))}function se(e){return 0===e.length?[]:e.reduce((e,t)=>{const i=new Set(t.map(ee));return e.filter(e=>i.has(ee(e)))})}function le(e){if(null==e||""===e)return;const t=parseFloat(String(e));return Number.isNaN(t)?String(e):t}function de(e){return e.some(e=>"PERIOD_INSTANT"===e.type||"PERIOD_END"===e.type||"OR_FILTER"===e.type&&de(e.children))}function ce(e,t,i){if(e.length<=1||de(t.filters))return e;const o=e.filter(e=>re(ie(i,e),i).end===i.periodEndDate);return o.length>0?o:e}function pe(e,t){return function(e,t){const i=new Map;e.forEach(e=>{var o;const r=(null==(o=t.conceptById.get(e.conceptId))?void 0:o.qname)??e.conceptId,n=`${e.columnId}::${r}`,a=i.get(n);a?a.push(e):i.set(n,[e])});const o=[];return i.forEach(e=>{if(e.length<=1)return void o.push(...e);const i=e.map(e=>{var i;return null==(i=t.conceptById.get(e.conceptId))?void 0:i.effectivePeriodRole}),r=e.filter((e,t)=>"periodEndLabel"===i[t]),n=new Set(i).size>1;o.push(...n&&r.length>0?r:e)}),o}(function(e,t,i){var o,r;if(t.bindAsSequence)return e;if(new Set(e.map(e=>e.conceptId)).size<=1)return e;const n=t.filters.find(e=>"CONCEPT_RELATION"===e.type&&"descendant"===e.attributes.axis),a=null==n?void 0:n.attributes.qname,s=null==n?void 0:n.attributes.linkrole,l=a&&s?null==(o=i.conceptIdByQNamePerRole.get(s))?void 0:o.get(a):void 0,d=new Set(l&&s&&(null==(r=i.childrenByRole.get(s))?void 0:r.get(l))||[]);return 0===d.size?e:e.filter(e=>d.has(e.conceptId))}(ce(te(e,t),e,t),e,t),t)}function ue(e,t){const i=new Set;for(const o of e.filters){if("EXPLICIT_DIMENSION"!==o.type||o.complement||o.cover)continue;if(o.attributes["member.qname"])continue;const e=t.dimensionQNameToId.get(o.attributes["dimension.qname"]??"");e&&i.add(e)}return i}function he(e,t,i){var o;const r=ie(e,t);if(null==r?void 0:r.dimensionData)return r.dimensionData.axisId===i?r.dimensionData.memberId:null==(o=(r.dimensionData.combinations||[]).find(e=>e.axisId===i))?void 0:o.memberId}function me(e,t,i){const o=new Map;if(e.forEach(e=>o.set(e.name,pe(e,t))),i){const i=new Set;e.forEach(e=>ue(e,t).forEach(e=>i.add(e))),i.forEach(i=>{const r=function(e,t,i,o){for(const r of e){if(r.bindAsSequence)continue;if(!ue(r,o).has(t))continue;const e=i.get(r.name)||[],n=new Set(e.map(e=>he(o,e,t)).filter(e=>void 0!==e));if(1===n.size)return{memberId:[...n][0],variableName:r.name,ambiguous:!1};const a=[...n].filter(e=>!o.memberIdsWithParent.has(e));if(1===a.length)return{memberId:a[0],variableName:r.name,ambiguous:!0}}}(e,i,o,t);r&&e.forEach(e=>{const n=e.bindAsSequence&&ue(e,t).has(i),a=r.ambiguous&&e.name===r.variableName;if(!n&&!a)return;const s=o.get(e.name)||[];o.set(e.name,s.filter(e=>he(t,e,i)===r.memberId))})})}const r=new Map;return e.forEach(e=>r.set(e.name,function(e,t,i){const o=t.map(e=>{var t;return le(null==(t=i.formData[e.conceptId])?void 0:t[e.columnId])}).filter(e=>void 0!==e);if(0===o.length&&"()"===e.fallbackValue)return[];if(e.bindAsSequence){if(0===o.length)return;return o}return 0!==o.length?(o.length>1&&console.warn(`[formula-variable-resolver] Variable "${e.name}" is scalar (bindAsSequence: false) but matched ${o.length} facts; using the first match by column order. This can legitimately happen when filters under-constrain the candidate set.`),o[0]):void 0}(e,o.get(e.name)||[],t))),r}function fe(e){const t=Object.entries(e.attributes).filter(([e])=>"id"!==e).sort(([e],[t])=>e.localeCompare(t));return JSON.stringify({type:e.type,complement:e.complement,cover:e.cover,attrs:t})}function ge(e,t){return te(e,t).length}function be(e,t){return!(ge(e,t)>0)&&(void 0!==e.fallbackValue||void 0)}function ve(e){const t=[];for(const i of e)if("CONCEPT_NAME"===i.type){const e=i.attributes["concept.qname"];e&&t.push(e)}else"OR_FILTER"===i.type&&t.push(...ve(i.children));return t}function ye(e){return ve(e.filters)}function xe(e,t,i){const o=i.columns.map(e=>({conceptId:t,columnId:e.id}));return se(e.filters.map(t=>ae(t,o,i,e.filters))).map(e=>e.columnId)}class _e{evaluate(e,t,i){var o;const r=null==(o=e.formula)?void 0:o[0];if(!r)return[];const n=[];for(const a of r.roles)for(const e of a.assertions)n.push(this._evaluateAssertion(e,a,t,i));return n}summarize(e){const t={totalAssertions:e.length,evaluated:0,skipped:0,passed:0,failed:0,failedWarnings:0,failedErrors:0};for(const i of e)i.skipped?t.skipped+=1:(t.evaluated+=1,i.satisfied?t.passed+=1:(t.failed+=1,"ERROR"===i.severity?t.failedErrors+=1:t.failedWarnings+=1));return t}_evaluateAssertion(e,t,i,o){try{const r=function(e,t){return me(e.variables,t,e.implicitFiltering)}(e,i),n=function(e){if("VALUE_ASSERTION"!==e.type||2!==e.variables.length)return;const t=e.variables.find(e=>!e.bindAsSequence),i=e.variables.find(e=>e.bindAsSequence);if(!t||!i)return;const o=e=>"CONCEPT_RELATION"===e.type&&"descendant"===e.attributes.axis&&!e.complement&&!e.cover,r=t.filters.find(o),n=i.filters.find(o);if(!r||!n)return;const a=r.attributes.qname,s=r.attributes.linkrole;if(!a||!s)return;if(n.attributes.qname!==a||n.attributes.linkrole!==s)return;const l=t.filters.find(e=>"EXPLICIT_DIMENSION"===e.type&&!e.complement&&e.cover&&!("member.axis"in e.attributes)),d=i.filters.find(e=>"EXPLICIT_DIMENSION"===e.type&&!e.complement&&e.cover&&"child"===e.attributes["member.axis"]);if(!l||!d)return;const c=l.attributes["dimension.qname"],p=l.attributes["member.qname"];if(!c||!p)return;if(d.attributes["dimension.qname"]!==c||d.attributes["member.qname"]!==p)return;const u=t.filters.filter(e=>e!==r&&e!==l).map(fe).sort(),h=i.filters.filter(e=>e!==n&&e!==d).map(fe).sort();return u.length!==h.length||u.some((e,t)=>e!==h[t])?void 0:{scalarVariable:t,sequenceVariable:i,anchorQName:a,linkrole:s,dimensionQName:c,memberQName:p}}(e),a=n?function(e,t){var i;const{scalarVariable:o,sequenceVariable:r,anchorQName:n,linkrole:a,dimensionQName:s,memberQName:l}=e,d=null==(i=t.conceptIdByQNamePerRole.get(a))?void 0:i.get(n),c=t.childrenByRole.get(a);if(!d||!c)return"not-applicable";const p=Z(c,d);if(0===p.length)return"not-applicable";const u=t.dimensionQNameToId.get(s),h=t.memberQNameToId.get(l),m=t.memberChildrenByQName.get(l)||[];if(!u||!h||0===m.length)return"not-applicable";const f=o.filters.filter(e=>!("CONCEPT_RELATION"===e.type&&"descendant"===e.attributes.axis||"EXPLICIT_DIMENSION"===e.type&&e.attributes["dimension.qname"]===s)),g=f.length>0?se(f.map(e=>ae(e,t.allCandidates,t,f))):t.allCandidates,b=new Set(p),v=new Map;if(g.forEach(e=>{if(!b.has(e.conceptId))return;const t=v.get(e.conceptId);t?t.push(e):v.set(e.conceptId,[e])}),!Array.from(v.values()).some(e=>e.some(e=>m.some(i=>oe(ie(t,e),u,i)))))return"not-applicable";let y=!1;for(const x of p){const e=v.get(x);if(!e||0===e.length)continue;const i=ce(e.filter(e=>oe(ie(t,e),u,h)),o,t),n=ce(e.filter(e=>m.some(i=>oe(ie(t,e),u,i))),r,t),a=i.map(e=>{var i;return le(null==(i=t.formData[e.conceptId])?void 0:i[e.columnId])}).filter(e=>"number"==typeof e),s=n.map(e=>{var i;return le(null==(i=t.formData[e.conceptId])?void 0:i[e.columnId])}).filter(e=>"number"==typeof e);if(0===a.length||0===s.length)continue;a.length>1&&console.warn(`[formula-variable-resolver] SumOfMembersOnAbstract concept "${x}" matched ${a.length} aggregate-member facts; using the first by column order.`);const l=a[0],d=s.reduce((e,t)=>e+t,0);if(y=!0,Math.abs(l-d)>=M)return!1}return!!y||"unresolvable"}(n,i):void 0,s=void 0!==a&&"not-applicable"!==a;if("VALUE_ASSERTION"===e.type&&!s){const i=function(e,t){for(const i of e.variables)if(void 0===t.get(i.name))return{satisfied:!1,skipReason:"unresolvable"};return{satisfied:!0}}(e,r);if(!i.satisfied)return this._skippedResult(e,t,i.skipReason??"unresolvable")}const l=function(e,t){var i;if(!(null==(i=e.test)?void 0:i.includes("has-fallback-value"))&&!e.preconditions.some(e=>e.test.includes("has-fallback-value")))return new Map;const o=new Map;for(const r of e.variables){const e=be(r,t);void 0!==e&&o.set(r.name,e)}return o}(e,i),d=function(e,t,i=new Map){if(0===e.length)return{satisfied:!0};for(const r of e){let e;try{e=O(r.test,t,i)}catch(o){if(o instanceof A)return{satisfied:!1,skipReason:"unresolvable"};throw o}if(!e)return{satisfied:!1,skipReason:"precondition"}}return{satisfied:!0}}(e.preconditions,r,l);if(!d.satisfied)return this._skippedResult(e,t,d.skipReason??"unresolvable");if("EXISTENCE_ASSERTION"===e.type){const r=1===e.variables.length?ge(e.variables[0],i):function(e,t){const i=new Map;for(const o of e)for(const e of te(o,t))i.set(ee(e),e);return i.size}(e.variables,i),n=function(e,t){const i=(e??"").trim();return""===i?t>0:i.split(/\bor\b/).some(e=>{const o=z.exec(e.trim());if(!o)throw new A(`Unsupported existence-assertion test shape: "${e.trim()}"`,i,"unsupported-syntax");const[,r,n]=o;return function(e,t,i){switch(e){case"eq":return t===i;case"ne":return t!==i;case"gt":return t>i;case"lt":return t<i;case"ge":return t>=i;case"le":return t<=i}}(r,t,Number(n))})}(e.test,r);return this._evaluatedResult(e,t,i,n,o,r)}if(s)return"unresolvable"===a?this._skippedResult(e,t,"unresolvable"):this._evaluatedResult(e,t,i,a,o);const c=O(e.test,r,l);return this._evaluatedResult(e,t,i,c,o)}catch(r){if(r instanceof A)return console.warn(`[FormulaValidationService] Assertion "${e.id}" could not be evaluated (${r.reason}): ${r.message}`),this._skippedResult(e,t,"unresolvable");throw r}}_skippedResult(e,t,i){return{assertionId:e.id,roleURI:t.roleURI,roleLabel:t.role,type:e.type,severity:e.severity,satisfied:!1,skipped:!0,skipReason:i}}_evaluatedResult(e,t,i,o,r,n){const a=o?void 0:this._pickMessage(e,r);return{assertionId:e.id,roleURI:t.roleURI,roleLabel:t.role,type:e.type,severity:e.severity,satisfied:o,skipped:!1,message:a,matchedFactCount:n,conceptLinks:a?this._buildConceptLinks(e,t.roleURI,i,a):void 0}}_pickMessage(e,t){const i=e.messages;if(0===i.length)return;const o=i.find(e=>e.xmlLang===t)??i.find(e=>"en"===e.xmlLang)??i[0];return this._stripTechnicalDetail(o.text)}_stripTechnicalDetail(e){const t=e.indexOf("{");return-1===t?e.trim():e.slice(0,t).replace(/\|\s*$/,"").trim()}_buildConceptLinks(e,t,i,o){var r,n,a;const s=[],l=new Set;for(const d of e.variables)for(const e of ye(d)){const c=(null==(r=i.conceptIdByQNamePerRole.get(t))?void 0:r.get(e))??(null==(a=null==(n=i.conceptByQName.get(e))?void 0:n[0])?void 0:a.conceptId);if(!c)continue;const p=e.includes(":")?e.split(":").pop():e;if(l.has(p))continue;if(!new RegExp("`"+this._escapeRegExp(p)+"`").test(o))continue;const u=xe(d,c,i);s.push({label:p,conceptQName:e,conceptId:c,columnId:u[0]}),l.add(p)}return s}_escapeRegExp(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}}class De{static findMatchingFact(e,t){if(!e||0===e.length)return null;const i=e.filter(e=>this.matchesPeriod(e,t));if(0===i.length)return null;const o=i.filter(e=>this.matchesDimensions(e,t));if(0===o.length)return null;if(o.length>1&&t.unit){const e=o.find(e=>this.matchesUnit(e,t));if(e)return e}return o[0]}static matchesPeriod(e,t){const i=this.parsePeriod(e.period);return"instant"===t.periodType&&t.periodInstantDate?i.isInstant&&i.instantDate===t.periodInstantDate:"duration"===t.periodType&&t.periodStartDate&&t.periodEndDate?!i.isInstant&&i.startDate===t.periodStartDate&&i.endDate===t.periodEndDate:t.periodInstantDate?i.isInstant&&i.instantDate===t.periodInstantDate:!t.periodStartDate||!t.periodEndDate||!i.isInstant&&i.startDate===t.periodStartDate&&i.endDate===t.periodEndDate}static matchesDimensions(e,t){const i=e.dimensions||[],o=this.extractDimensionsFromContext(t);if(0===o.length)return 0===i.length;if(0===i.length&&o.length>0)return!1;if(i.length!==o.length)return!1;return o.every(e=>i.some(t=>{if(!(this.normalizeAxisId(t.dimension)===this.normalizeAxisId(e.axisId)))return!1;if("explicit"===t.dimensionType&&e.memberId){return this.normalizeMemberId(t.member||"")===this.normalizeMemberId(e.memberId)}return!("typed"!==t.dimensionType||!e.isTyped)}))}static matchesUnit(e,t){if(!t.unit||!e.unitMeasure)return!0;return this.normalizeUnit(e.unitMeasure)===this.normalizeUnit(t.unit)}static parsePeriod(e){if(e.includes(" / ")){const[t,i]=e.split(" / ").map(e=>e.trim());return{isInstant:!1,startDate:t,endDate:i}}return{isInstant:!0,instantDate:e.trim()}}static extractDimensionsFromContext(e){if(!e.dimensionData)return[];const t=[];return e.dimensionData.combinations&&e.dimensionData.combinations.length>0&&e.dimensionData.combinations.forEach(e=>{t.push({axisId:e.axisId,memberId:e.memberId})}),e.dimensionData.typedMembers&&e.dimensionData.typedMembers.length>0&&e.dimensionData.typedMembers.forEach(e=>{t.push({axisId:e.axisId,memberId:"[typed]",isTyped:!0})}),t}static normalizeAxisId(e){if(!e)return"";if(e.includes(":")){const t=e.split(":");return t[1]||t[0]}if(e.includes("_")){e.split("_");const t=e.lastIndexOf("_");if(t>0)return e.substring(t+1)}return e}static normalizeMemberId(e){if(!e)return"";if(e.includes(":")){const t=e.split(":");return t[1]||t[0]}if(e.includes("_")){const t=e.lastIndexOf("_");if(t>0)return e.substring(t+1)}return e}static normalizeUnit(e){if(!e)return"";const t=e.split(":");return t.length>1?t[1]:t[0]}static extractTypedValues(e,t){const i={};if(!e||0===e.length)return i;return e.filter(e=>this.matchesPeriod(e,t)&&this.matchesDimensions(e,t)).forEach(e=>{e.dimensions&&e.dimensions.forEach(e=>{if("typed"===e.dimensionType&&e.typedMemberValue){const t=this.normalizeAxisId(e.dimension);i[t]=e.typedMemberValue}})}),i}static debugMatch(e,t){console.log("🔍 [FactMatcher] Debug Match"),console.log(" Context:",{conceptId:t.conceptId,columnId:t.columnId,period:"instant"===t.periodType?t.periodInstantDate:`${t.periodStartDate} / ${t.periodEndDate}`,dimensions:this.extractDimensionsFromContext(t)}),console.log(" Facts:",e.map(e=>{var t;return{value:e.value,period:e.period,dimensions:null==(t=e.dimensions)?void 0:t.map(e=>`${e.dimension}:${e.member}`)}}));const i=this.findMatchingFact(e,t);console.log(" Match Result:",i?i.value:"No match")}}const Ie=1,$e=2,we=3,Se=4,Ce=5,Te=e=>"string"==typeof e?e.trim().toLowerCase():"",Fe=e=>e.split(/[^\p{L}\p{N}]+/u).filter(Boolean);function ke(e){const t=e.replace(/[/#:]+$/,""),i=Math.max(t.lastIndexOf(":"),t.lastIndexOf("/"),t.lastIndexOf("#"));return i>=0?t.slice(i+1):t}function Ee(e,t){var i,o;const r=[t.id,null==(i=t.metadata)?void 0:i.roleURI].map(Te).filter(Boolean),n=[t.title,t.description,null==(o=t.metadata)?void 0:o.originalRole].map(Te).filter(Boolean),a=r.map(ke),s=/\s/.test(e)?null:ke(e);if(r.includes(e))return{tier:Ie,looseness:0};if(s&&a.includes(s))return{tier:$e,looseness:0};if(n.includes(e))return{tier:we,looseness:0};const l=s??e,d=[...a,...n];let c=null;for(const u of d)if(u.includes(l)||l.includes(u)){const e=Math.abs(u.length-l.length);(null===c||e<c)&&(c=e)}if(null!==c)return{tier:Se,looseness:c};const p=new Set(Fe(l));if(!p.size)return null;for(const u of d){const e=new Set(Fe(u));if([...p].every(t=>e.has(t))){const t=e.size-p.size;(null===c||t<c)&&(c=t)}}return null!==c?{tier:Ce,looseness:c}:null}const Re={"nl-types:formattedExplanationItemType":{fieldType:"textarea",placeholder:k.t("field.enterDetailedExplanation")},"nl-types:monetaryNoDecimals20ItemType":{fieldType:"number",htmlInputType:"text",inputMode:"decimal",allowDecimals:!1,step:1,placeholder:k.t("field.enterAmountNoDecimals")},"xbrli:monetaryItemType":{fieldType:"currency",htmlInputType:"text",inputMode:"decimal",allowDecimals:!0,step:.01,placeholder:k.t("field.enterCurrency")},"xbrli:stringItemType":{fieldType:"text",htmlInputType:"text",placeholder:k.t("field.enterText")},"xbrli:dateItemType":{fieldType:"date",htmlInputType:"date",min:"1900-01-01",max:"2100-12-31"},"xbrli:dateTimeItemType":{fieldType:"datetime",htmlInputType:"datetime-local",min:"1900-01-01T00:00",max:"2100-12-31T23:59"},"xbrli:integerItemType":{fieldType:"integer",htmlInputType:"text",inputMode:"numeric",allowDecimals:!1,step:1,placeholder:k.t("field.enterWholeNumber")},"xbrli:nonNegativeIntegerItemType":{fieldType:"integer",htmlInputType:"text",inputMode:"numeric",allowDecimals:!1,min:0,step:1,placeholder:k.t("field.enterPositiveNumber")},"xbrli:positiveIntegerItemType":{fieldType:"integer",htmlInputType:"text",inputMode:"numeric",allowDecimals:!1,min:1,step:1,placeholder:k.t("field.enterPositiveNumber")},"xbrli:decimalItemType":{fieldType:"decimal",htmlInputType:"text",inputMode:"decimal",allowDecimals:!0,step:"any",placeholder:k.t("field.enterDecimalValue")},"xbrli:sharesItemType":{fieldType:"number",htmlInputType:"text",inputMode:"decimal",allowDecimals:!0,min:0,step:.01,placeholder:k.t("field.enterNumberOfShares")},"xbrli:shares":{fieldType:"number",htmlInputType:"text",inputMode:"decimal",allowDecimals:!0,min:0,step:.01,placeholder:k.t("field.enterNumberOfShares")},"xbrli:gYearItemType":{fieldType:"number",htmlInputType:"text",inputMode:"numeric",allowDecimals:!1,min:1900,max:2100,step:1,placeholder:k.t("field.yearFormat")},"xbrli:booleanItemType":{fieldType:"boolean"},"xbrli:pureItemType":{fieldType:"percentage",htmlInputType:"text",inputMode:"decimal",allowDecimals:!0,step:.01,placeholder:k.t("field.enterPercentage")},"xbrli:percentItemType":{fieldType:"percentage",htmlInputType:"text",inputMode:"decimal",allowDecimals:!0,step:.01,placeholder:k.t("field.enterPercentage")},"xbrli:emailItemType":{fieldType:"email",htmlInputType:"email",placeholder:k.t("field.emailPlaceholder")},"xbrli:urlItemType":{fieldType:"url",htmlInputType:"url",placeholder:k.t("field.urlPlaceholder")},"xbrli:telephoneItemType":{fieldType:"tel",htmlInputType:"tel",placeholder:k.t("field.phonePlaceholder")}};function Me(e,t){if(!e)return{fieldType:"text",htmlInputType:"text",placeholder:k.t("field.enterValue")};if(t&&t.length>0){const i=Ne(e,t);if(i.length>0){return Oe(i,t)}}if(console.log(`⚠️ [Type Resolution Fallback] Using pattern matching for: ${e}`),Re[e])return Re[e];const i=e.toLowerCase();if(i.includes("monetary"))return i.includes("nodecimals")||i.includes("no-decimals")?{fieldType:"number",htmlInputType:"text",inputMode:"decimal",allowDecimals:!1,step:1,placeholder:k.t("field.enterAmountNoDecimals")}:{fieldType:"currency",htmlInputType:"text",inputMode:"decimal",allowDecimals:!0,step:.01,placeholder:k.t("field.enterCurrency")};if(i.includes("explanation")||i.includes("description")||i.includes("notes")||i.includes("formatted"))return{fieldType:"textarea",placeholder:k.t("field.enterDetailedInformation")};if(i.includes("date"))return i.includes("time")?{fieldType:"datetime",htmlInputType:"datetime-local",min:"1900-01-01T00:00",max:"2100-12-31T23:59"}:{fieldType:"date",htmlInputType:"date",min:"1900-01-01",max:"2100-12-31"};if(i.includes("boolean")||i.includes("bool"))return{fieldType:"boolean"};if(i.includes("integer")||i.includes("int")){const e=i.includes("nonnegative")||i.includes("non-negative");return{fieldType:"integer",htmlInputType:"text",inputMode:"numeric",allowDecimals:!1,min:i.includes("positive")?1:e?0:void 0,step:1,placeholder:k.t("field.enterWholeNumber")}}return i.includes("decimal")||i.includes("numeric")||i.includes("number")?{fieldType:"decimal",htmlInputType:"text",inputMode:"decimal",allowDecimals:!0,step:"any",placeholder:k.t("field.enterDecimalValue")}:i.includes("percent")||i.includes("pure")?{fieldType:"percentage",htmlInputType:"text",inputMode:"decimal",allowDecimals:!0,step:.01,placeholder:k.t("field.enterPercentage")}:{fieldType:"text",htmlInputType:"text",placeholder:k.t("field.enterValue")}}function Ae(e){return"textarea"===e}function Pe(e){return"boolean"===e}function je(e){return["number","decimal","integer","currency","percentage"].includes(e)}function Le(e){return"select"===e}function Ne(e,t){const i=[];if(!e)return i;if(!t||0===t.length)return i.push(e),i;let o=e;const r=new Set;for(;o;){if(i.push(o),r.has(o)){console.warn(`Circular reference detected in datatype hierarchy for type: ${o}`);break}r.add(o);const e=t.find(e=>e.type===o);if(!e||!e.basetype||""===e.basetype.trim())break;o=e.basetype}return i}function Ve(e,t){if(e&&0!==e.length&&t&&0!==t.length)for(const i of e){const e=t.find(e=>e.type===i);if(e&&e.enumerations&&e.enumerations.length>0)return e.enumerations.map(e=>({id:e.id||e.value,value:e.value,label:e.value}))}}function Oe(e,t){if(!e||0===e.length)return{fieldType:"text",htmlInputType:"text",placeholder:k.t("field.enterValue")};if(t&&t.length>0){const i=Ve(e,t);if(i&&i.length>0)return{fieldType:"select",enumerations:i,placeholder:k.t("field.selectOption")}}const i=e.map(e=>e.toLowerCase()),o=i.join("|");if(e.some(e=>"nl-types:formattedExplanationItemType"===e)||o.includes("formattedexplanation")||o.includes("formatted")&&o.includes("explanation"))return{fieldType:"textarea",placeholder:k.t("field.enterDetailedExplanation")};if(i.some(e=>e.includes("date")))return o.includes("datetime")||o.includes("time")?{fieldType:"datetime",htmlInputType:"datetime-local",min:"1900-01-01T00:00",max:"2100-12-31T23:59"}:{fieldType:"date",htmlInputType:"date",min:"1900-01-01",max:"2100-12-31"};if(i.some(e=>e.includes("boolean")||e.includes("bool")))return{fieldType:"boolean"};if(i.some(e=>e.includes("integer")||"integer"===e)){const e=o.includes("nonnegative")||o.includes("non-negative");return{fieldType:"integer",htmlInputType:"text",inputMode:"numeric",allowDecimals:!1,min:o.includes("positive")?1:e?0:void 0,step:1,placeholder:k.t("field.enterWholeNumber")}}return i.some(e=>e.includes("percent")||e.includes("pure"))?{fieldType:"percentage",htmlInputType:"text",inputMode:"decimal",allowDecimals:!0,step:.01,placeholder:k.t("field.enterPercentage")}:i.some(e=>e.includes("decimal")||"decimal"===e)?o.includes("monetary")||o.includes("currency")?o.includes("nodecimals")||o.includes("no-decimals")||o.includes("nodecimals20")?{fieldType:"number",htmlInputType:"text",inputMode:"decimal",allowDecimals:!1,step:1,placeholder:k.t("field.enterAmountNoDecimals")}:{fieldType:"currency",htmlInputType:"text",inputMode:"decimal",allowDecimals:!0,step:.01,placeholder:k.t("field.enterCurrency")}:{fieldType:"decimal",htmlInputType:"text",inputMode:"decimal",allowDecimals:!0,step:"any",placeholder:k.t("field.enterDecimalValue")}:e.some(e=>"xbrli:stringItemType"===e)||i.some(e=>"string"===e||e.includes("stringitem"))?{fieldType:"text",htmlInputType:"text",placeholder:k.t("field.enterText")}:{fieldType:"text",htmlInputType:"text",placeholder:k.t("field.enterValue")}}class ze{static validateConceptValue(e,t,i){if(null==t||""===t)return{valid:!0,errors:[]};if(!e||!i||0===i.length)return{valid:!0,errors:[]};const o=this.findDatatype(e,i);return o&&o.validation?this.validateAgainstRules(t,o.validation):{valid:!0,errors:[]}}static validateAgainstRules(e,t){const i=[];if(null==e||""===e)return{valid:!0,errors:[]};if(!t)return{valid:!0,errors:[]};const o=String(e);if(t.pattern){const e=this.validatePattern(o,t.pattern);e&&i.push(e)}if(void 0!==t.length){const e=this.validateExactLength(o,t.length);e&&i.push(e)}if(void 0!==t.minLength){const e=this.validateMinLength(o,t.minLength);e&&i.push(e)}if(void 0!==t.maxLength){const e=this.validateMaxLength(o,t.maxLength);e&&i.push(e)}if(void 0!==t.totalDigits){const e=this.validateTotalDigits(o,t.totalDigits);e&&i.push(e)}return{valid:0===i.length,errors:i}}static findDatatype(e,t){let i=t.find(t=>t.type===e);if(i)return i;const o=new Set;let r=e;for(;r&&!o.has(r)&&(o.add(r),i=t.find(e=>e.type===r),i);){if(i.validation)return i;r=i.basetype}}static validatePattern(e,t){try{if(!new RegExp(`^${t}$`).test(e))return{type:"pattern",message:k.t("xbrlValidation.patternMismatch",{pattern:t}),expectedValue:t,actualValue:e}}catch(i){return console.error(`Invalid regex pattern: ${t}`,i),{type:"pattern",message:k.t("xbrlValidation.invalidPattern",{pattern:t}),expectedValue:t,actualValue:e}}return null}static validateExactLength(e,t){return e.length!==t?{type:"length",message:k.t("xbrlValidation.exactLength",{required:t,current:e.length}),expectedValue:t,actualValue:e.length}:null}static validateMinLength(e,t){return e.length<t?{type:"minLength",message:k.t("xbrlValidation.minLength",{required:t,current:e.length}),expectedValue:t,actualValue:e.length}:null}static validateMaxLength(e,t){return e.length>t?{type:"maxLength",message:k.t("xbrlValidation.maxLength",{required:t,current:e.length}),expectedValue:t,actualValue:e.length}:null}static validateTotalDigits(e,t){const i=e.replace(/[^\d]/g,"");return i.length>t?{type:"totalDigits",message:k.t("xbrlValidation.totalDigits",{required:t,current:i.length}),expectedValue:t,actualValue:i.length}:null}static getValidationRulesSummary(e,t){if(!e||!t)return[];const i=this.findDatatype(e,t);if(!i||!i.validation)return[];const o=i.validation,r=[];return o.pattern&&r.push(k.t("xbrlValidation.ruleSummaryPattern",{pattern:o.pattern})),void 0!==o.length&&r.push(k.t("xbrlValidation.ruleSummaryExactLength",{required:o.length})),void 0!==o.minLength&&r.push(k.t("xbrlValidation.ruleSummaryMinLength",{required:o.minLength})),void 0!==o.maxLength&&r.push(k.t("xbrlValidation.ruleSummaryMaxLength",{required:o.maxLength})),void 0!==o.totalDigits&&r.push(k.t("xbrlValidation.ruleSummaryTotalDigits",{required:o.totalDigits})),r}}var Ue=Object.defineProperty,Je=Object.getOwnPropertyDescriptor,Be=(e,t,i,o)=>{for(var r,n=o>1?void 0:o?Je(t,i):t,a=e.length-1;a>=0;a--)(r=e[a])&&(n=(o?r(t,i,n):r(n))||n);return o&&n&&Ue(t,i,n),n};exports.JupiterFormField=class extends e.LitElement{constructor(){super(...arguments),this.defaultUnits=[],this.value=null,this.disabled=!1,this.locale="en-US",this.hideLabel=!1,this.mode="inputForm",this.globalDecimals="INF",this.typedMemberValues={},this._errors=[],this._xbrlErrors=[],this._touched=!1,this._showPeriodPopup=!1,this._availableUnits=[],this._numericDraftValue=null}willUpdate(e){var t;(e.has("value")||e.has("field"))&&this._validateField(),e.has("unit")&&this.unit&&(console.log(`🏷️ [FormField willUpdate] Unit property changed to: ${this.unit}, conceptId: ${this.conceptId}, columnId: ${this.columnId}`),this.dispatchEvent(new CustomEvent("unit-change",{detail:{fieldId:null==(t=this.field)?void 0:t.id,conceptId:this.conceptId,columnId:this.columnId,unit:this.unit},bubbles:!0,composed:!0}))),e.has("field")&&this.field&&(this.conceptId.includes("DescriptionLocationNL")||this.columnId.startsWith("col-"))&&console.log(`📅 [FormField willUpdate] Concept ${this.conceptId}, Column ${this.columnId}: field.periodType=${this.field.periodType}, field.periodStartDate=${this.field.periodStartDate}, field.periodEndDate=${this.field.periodEndDate}, field.periodInstantDate=${this.field.periodInstantDate}`)}_validateField(){var e;(null==(e=this.field)?void 0:e.validation)&&(this._errors=C.validateField(this.field.id,this.conceptId,this.columnId,this.value,this.field.type,this.field.validation))}_isRoundingLevelConcept(){return!!this.conceptId&&this.conceptId.includes("DocumentIntendedRoundingLevel")}_isNumericField(){var e;return je(Me(this.conceptType,this.datatypes).fieldType||(null==(e=this.field)?void 0:e.type)||"text")||"number"===this._getInputType()}_isIntermediateNumericValue(e){return"-"===e||"."===e||"-."===e}_handleInput(e){const t=e.target;if(t instanceof HTMLInputElement&&("date"===t.type||"datetime-local"===t.type)){if("change"!==e.type)return}else if("INPUT"===t.tagName&&"checkbox"!==t.type&&"change"===e.type)return;const i=this.value;let o=t.value;if(this._isNumericField()){const e=t.value;if(this._numericDraftValue=e,""===e||this._isIntermediateNumericValue(e))o=null;else{const t=Number(e);o=Number.isNaN(t)?null:t}}else"boolean"===this.field.type?(o=t.checked,this._numericDraftValue=null):this._numericDraftValue=null;this.value=o,this._touched=!0,this.dispatchEvent(new CustomEvent("field-change",{detail:{fieldId:this.field.id,conceptId:this.conceptId,columnId:this.columnId,value:o,oldValue:i},bubbles:!0}))}_handleFocus(){this.dispatchEvent(new CustomEvent("field-focus",{detail:{fieldId:this.field.id,conceptId:this.conceptId,columnId:this.columnId},bubbles:!0}))}_handleBlur(){let e=!1;if(this._isNumericField()&&null!==this._numericDraftValue){e=!0;const t=this._numericDraftValue;if(""===t||this._isIntermediateNumericValue(t))this.value=null;else{const e=Number(t);this.value=Number.isNaN(e)?null:e}this._numericDraftValue=null}if(this._isPercentItemType()&&e&&null!==this.value&&void 0!==this.value){const e=Number(this.value);if(!isNaN(e)&&Math.abs(e)>1){this.value=e/100;const t=e;this.dispatchEvent(new CustomEvent("field-change",{detail:{fieldId:this.field.id,conceptId:this.conceptId,columnId:this.columnId,value:this.value,oldValue:t},bubbles:!0}))}}this._touched=!0,this._validateXBRLDatatype(),this._validateUnitSelection(),console.log(`🟦 [FormField] Blur event - fieldId: ${this.field.id}, conceptId: ${this.conceptId}, columnId: ${this.columnId}`),console.log("🟦 [FormField] Current _xbrlErrors:",this._xbrlErrors),console.log("🟦 [FormField] Current value:",this.value),this.dispatchEvent(new CustomEvent("field-blur",{detail:{fieldId:this.field.id,conceptId:this.conceptId,columnId:this.columnId,xbrlValidationErrors:this._xbrlErrors},bubbles:!0,composed:!0})),console.log(`🟦 [FormField] Dispatched field-blur event with ${this._xbrlErrors.length} errors`)}_isMonetaryType(){if(!this.conceptType||!this.datatypes)return!1;if(this.conceptType.includes("monetary")||this.conceptType.includes("Monetary"))return!0;return Ne(this.conceptType,this.datatypes).some(e=>e.includes("monetary")||e.includes("Monetary"))}_isPercentItemType(){if(!this.conceptType)return!1;if(this.conceptType.toLowerCase().includes("percent"))return!0;if(!this.datatypes)return!1;return Ne(this.conceptType,this.datatypes).some(e=>e.toLowerCase().includes("percent"))}_handleKeyDown(e){const t=e.target;if(!this._isNumericField())return;if(["Backspace","Delete","Tab","Escape","Enter","ArrowLeft","ArrowRight","ArrowUp","ArrowDown","Home","End"].includes(e.key))return;if(e.ctrlKey||e.metaKey)return;const i=Me(this.conceptType,this.datatypes),o=void 0===i.min||"number"==typeof i.min&&i.min<0;("-"!==e.key||!o||t.value.includes("-")||0!==t.selectionStart&&0!==t.value.length)&&("."!==e.key||!1===i.allowDecimals||t.value.includes("."))&&(e.key>="0"&&e.key<="9"||e.preventDefault())}_validateXBRLDatatype(){if(this._xbrlErrors=[],null===this.value||void 0===this.value||""===this.value)return;if(!this.conceptType||!this.datatypes||0===this.datatypes.length)return;const e=ze.validateConceptValue(this.conceptType,this.value,this.datatypes);e.valid?console.log(`✅ [FormField] XBRL Validation passed for ${this.conceptId}`):(this._xbrlErrors=e.errors,console.log(`❌ [FormField] XBRL Validation failed for ${this.conceptId}:`,{conceptType:this.conceptType,value:this.value,errors:this._xbrlErrors}))}_validateUnitSelection(){if(null===this.value||void 0===this.value||""===this.value)return;const e=this._collectUnitsForConceptType();if(0===e.length)return;if(this.unit)return;const t=e.find(e=>!0===e.isDefault)??(1===e.length?e[0]:null);if(t)return this.unit=t.id,this.dispatchEvent(new CustomEvent("unit-change",{detail:{fieldId:this.field.id,conceptId:this.conceptId,columnId:this.columnId,unit:this.unit},bubbles:!0,composed:!0})),void console.log(`🎯 [FormField] Auto-selected default unit on blur: ${this.unit} for ${this.conceptId}`);this._xbrlErrors=[...this._xbrlErrors,{type:"unit",message:k.t("validation.unitRequired"),expectedValue:e.map(e=>e.label).join(", "),actualValue:""}],console.log(`❌ [FormField] Unit validation failed for ${this.conceptId}: unit is required but not selected`)}_handlePeriodIconClick(){if(!this._isRoundingLevelConcept()){if(this._availableUnits=this._collectUnitsForConceptType(),console.log(`📊 [FormField] Collected ${this._availableUnits.length} units for concept ${this.conceptId}:`,this._availableUnits),console.log(`📊 [FormField] Current unit value: ${this.unit}`),console.log(`📊 [FormField] ConceptId: ${this.conceptId}, ColumnId: ${this.columnId}`),!this.unit&&this._availableUnits.length>0){let e=null;const t=this._availableUnits.find(e=>!0===e.isDefault);t?(e=t.id,console.log(`🎯 [FormField] Auto-selecting default unit: ${t.id} (${t.label})`)):1===this._availableUnits.length&&(e=this._availableUnits[0].id,console.log(`🎯 [FormField] Auto-selecting single available unit: ${e}`)),e&&(this.unit=e,this.dispatchEvent(new CustomEvent("unit-change",{detail:{fieldId:this.field.id,conceptId:this.conceptId,columnId:this.columnId,unit:this.unit},bubbles:!0,composed:!0})))}else this.unit&&(console.log(`📊 [FormField] Unit already set, dispatching unit-change to ensure parent stores it: ${this.unit}`),this.dispatchEvent(new CustomEvent("unit-change",{detail:{fieldId:this.field.id,conceptId:this.conceptId,columnId:this.columnId,unit:this.unit},bubbles:!0,composed:!0})));this._showPeriodPopup=!0}}_collectUnitsForConceptType(){if(!this.conceptType||!this.datatypes)return[];const e=Ne(this.conceptType,this.datatypes);console.log(`🔍 [Unit Resolution] Concept: ${this.conceptId}, Type: ${this.conceptType}, BaseType Chain:`,e);for(const t of e){const e=this.datatypes.find(e=>e.type===t);if(e&&e.units&&Array.isArray(e.units)&&e.units.length>0)return console.log(`✅ [Unit Resolution] Found ${e.units.length} units in type: ${t}`),e.units}return console.log(`ℹ️ [Unit Resolution] No units found for concept ${this.conceptId}`),[]}_closePeriodPopup(){this._showPeriodPopup=!1}_handleUnitChange(e){const t=e.target.value;console.log(`🏷️ [FormField] Unit change detected: value=${t}, conceptId=${this.conceptId}, columnId=${this.columnId}`),console.log(`🏷️ [FormField] Previous unit value: ${this.unit}`),this.unit=t,console.log(`🏷️ [FormField] Updated unit value to: ${this.unit}`);const i={fieldId:this.field.id,conceptId:this.conceptId,columnId:this.columnId,unit:this.unit};console.log("🏷️ [FormField] Dispatching unit-change event with detail:",i),this.dispatchEvent(new CustomEvent("unit-change",{detail:i,bubbles:!0,composed:!0})),console.log("🏷️ [FormField] unit-change event dispatched")}_handleDecimalsChange(e){const t=e.target.value.trim(),i=parseFloat(t),o=t&&!isNaN(i)?String(Math.abs(i)):""===t?"":t;this.decimals=o||void 0,this.dispatchEvent(new CustomEvent("decimals-change",{detail:{conceptId:this.conceptId,columnId:this.columnId,decimals:this.decimals},bubbles:!0,composed:!0}))}_handlePopupOverlayClick(e){e.target===e.currentTarget&&this._closePeriodPopup()}_ensureTextDialogStyles(){if(document.getElementById("jdf-text-dialog-styles"))return;const e=document.createElement("style");e.id="jdf-text-dialog-styles",e.textContent="\n dialog.jdf-text-entry-dialog {\n border: none; border-radius: 8px; padding: 0;\n max-width: 600px; width: 90vw;\n box-shadow: 0 8px 32px rgba(0,0,0,0.2); overflow: hidden;\n font-family: inherit;\n }\n dialog.jdf-text-entry-dialog::backdrop { background: rgba(0,0,0,0.35); }\n .jdf-text-dialog-header {\n background: #f0f2f5; padding: 14px 20px;\n display: flex; align-items: center; justify-content: space-between;\n border-bottom: 1px solid #ddd;\n }\n .jdf-text-dialog-title {\n font-size: 15px; font-weight: 600; color: #333; margin: 0;\n font-family: inherit; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;\n }\n .jdf-text-dialog-close {\n flex-shrink: 0; width: 28px; height: 28px; border: none; background: transparent;\n font-size: 20px; line-height: 1; cursor: pointer; color: #666;\n border-radius: 4px; display: flex; align-items: center; justify-content: center;\n padding: 0; font-family: inherit; margin-left: 8px;\n }\n .jdf-text-dialog-close:hover { background: #ddd; color: #333; }\n .jdf-text-dialog-body { padding: 20px 20px 12px; }\n .jdf-text-dialog-textarea {\n width: 100%; min-height: 200px; max-height: 50vh;\n padding: 10px 12px; font-size: 14px; font-family: inherit;\n border: 1px solid #ddd; border-radius: 4px;\n box-sizing: border-box; resize: vertical; line-height: 1.5;\n color: #333; background: #fff;\n }\n .jdf-text-dialog-textarea:focus {\n outline: none; border-color: #1976d2;\n box-shadow: 0 0 0 2px rgba(25,118,210,0.2);\n }\n .jdf-text-dialog-char-count {\n margin-top: 4px; font-size: 12px; color: #888; text-align: right;\n font-family: inherit;\n }\n .jdf-text-dialog-actions {\n display: flex; justify-content: flex-end; gap: 8px;\n padding: 12px 20px 16px; border-top: 1px solid #eee;\n }\n .jdf-text-dialog-cancel {\n padding: 7px 18px; border: 1px solid #ddd; border-radius: 4px;\n background: transparent; color: #555; font-size: 14px;\n cursor: pointer; font-family: inherit;\n }\n .jdf-text-dialog-cancel:hover { background: #f5f5f5; }\n .jdf-text-dialog-save {\n padding: 7px 18px; border: none; border-radius: 4px;\n background: #1976d2; color: #fff; font-size: 14px;\n cursor: pointer; font-family: inherit; font-weight: 500;\n }\n .jdf-text-dialog-save:hover { background: #1565c0; }\n ",document.head.appendChild(e)}_openTextDialog(e,t){var i;this._ensureTextDialogStyles(),null==(i=document.getElementById("jdf-text-entry-dialog"))||i.remove();const o=document.createElement("dialog");o.id="jdf-text-entry-dialog",o.className="jdf-text-entry-dialog",o.setAttribute("role","dialog"),o.setAttribute("aria-modal","true"),o.setAttribute("aria-labelledby","jdf-text-dialog-title"),o.innerHTML='\n <div class="jdf-text-dialog-header">\n <h3 class="jdf-text-dialog-title" id="jdf-text-dialog-title"></h3>\n <button class="jdf-text-dialog-close" type="button" aria-label="Close">×</button>\n </div>\n <div class="jdf-text-dialog-body">\n <textarea class="jdf-text-dialog-textarea" spellcheck="true"></textarea>\n <div class="jdf-text-dialog-char-count"></div>\n </div>\n <div class="jdf-text-dialog-actions">\n <button class="jdf-text-dialog-cancel" type="button"></button>\n <button class="jdf-text-dialog-save" type="button"></button>\n </div>\n ';const r=t;o.querySelector(".jdf-text-dialog-title").textContent=r||t,o.querySelector(".jdf-text-dialog-cancel").textContent=k.t("field.cancel"),o.querySelector(".jdf-text-dialog-save").textContent=k.t("field.save");const n=o.querySelector(".jdf-text-dialog-textarea"),a=o.querySelector(".jdf-text-dialog-char-count");n.value=e,a.textContent=`${e.length} ${k.t("field.characters")}`,n.addEventListener("input",()=>{a.textContent=`${n.value.length} ${k.t("field.characters")}`}),o.querySelector(".jdf-text-dialog-close").addEventListener("click",()=>o.close()),o.querySelector(".jdf-text-dialog-cancel").addEventListener("click",()=>o.close()),o.querySelector(".jdf-text-dialog-save").addEventListener("click",()=>{const e=n.value,t=this.value;this.value=e,this._touched=!0,this.dispatchEvent(new CustomEvent("field-change",{detail:{fieldId:this.field.id,conceptId:this.conceptId,columnId:this.columnId,value:e,oldValue:t},bubbles:!0})),o.close()}),o.addEventListener("click",e=>{const t=o.getBoundingClientRect();(e.clientX<t.left||e.clientX>t.right||e.clientY<t.top||e.clientY>t.bottom)&&o.close()}),o.addEventListener("close",()=>o.remove()),document.body.appendChild(o),o.showModal(),n.focus()}_renderTextDialogTrigger(t,i){const o=null!=t&&""!==String(t).trim(),r=o?String(t):"";return i?e.html`
23
- <span class="text-readonly-label ${o?"":"empty"}"
24
- title="${r}">${o?r:"—"}</span>
25
- `:o?e.html`
22
+ */function C(e){return S({...e,state:!0,attribute:!1})}class ${static validateField(e,t,i,o,r,n=[]){const a=[];for(const s of n){const n=this.validateRule(e,t,i,o,r,s);n&&a.push(n)}return a}static validateRule(e,t,i,o,r,n){const a=null==o||""===o;switch(n.type){case"required":if(a)return this.createError(e,t,i,n);break;case"min":if(!a&&"number"==typeof o&&o<n.value)return this.createError(e,t,i,n);break;case"max":if(!a&&"number"==typeof o&&o>n.value)return this.createError(e,t,i,n);break;case"minLength":if(!a&&"string"==typeof o&&o.length<n.value)return this.createError(e,t,i,n);break;case"maxLength":if(!a&&"string"==typeof o&&o.length>n.value)return this.createError(e,t,i,n);break;case"pattern":if(!a&&"string"==typeof o){if(!new RegExp(n.value).test(o))return this.createError(e,t,i,n)}break;case"email":if(!a&&"string"==typeof o){if(!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(o))return this.createError(e,t,i,n)}break;case"url":if(!a&&"string"==typeof o)try{new URL(o)}catch{return this.createError(e,t,i,n)}break;case"custom":break;default:console.warn(`Unknown validation rule type: ${n.type}`)}return null}static createError(e,t,i,o){return{fieldId:e,conceptId:t,columnId:i,message:o.message,severity:o.severity||"error",rule:o}}static validateDataType(e,t){if(null==e||""===e)return{valid:!0,convertedValue:e};switch(t){case"number":case"decimal":case"currency":case"percentage":{const t=Number(e);return isNaN(t)?{valid:!1,error:"Invalid number format"}:{valid:!0,convertedValue:t}}case"date":{const t=new Date(e);return isNaN(t.getTime())?{valid:!1,error:"Invalid date format"}:{valid:!0,convertedValue:t.toISOString().split("T")[0]}}case"datetime":{const t=new Date(e);return isNaN(t.getTime())?{valid:!1,error:"Invalid datetime format"}:{valid:!0,convertedValue:t.toISOString()}}case"boolean":if("boolean"==typeof e)return{valid:!0,convertedValue:e};if("string"==typeof e){const t=e.toLowerCase();if("true"===t||"1"===t)return{valid:!0,convertedValue:!0};if("false"===t||"0"===t)return{valid:!0,convertedValue:!1}}return{valid:!1,error:"Invalid boolean format"};case"text":case"textarea":case"email":case"url":case"tel":return{valid:!0,convertedValue:String(e)};default:return{valid:!0,convertedValue:e}}}static formatValue(e,t,i="en-US"){if(null==e)return"";switch(t){case"number":return new Intl.NumberFormat(i).format(Number(e));case"decimal":return new Intl.NumberFormat(i,{minimumFractionDigits:2,maximumFractionDigits:2}).format(Number(e));case"currency":return new Intl.NumberFormat(i,{style:"currency",currency:"USD"}).format(Number(e));case"percentage":return new Intl.NumberFormat(i,{style:"percent",minimumFractionDigits:2}).format(Number(e)/100);case"date":return new Date(e).toLocaleDateString(i);case"datetime":return new Date(e).toLocaleString(i);default:return String(e)}}}class k{static formatPeriodDisplay(e,t){if(!e||!t)return`${e} / ${t}`;const i=e.substring(0,4);return i===t.substring(0,4)?i:`${e} / ${t}`}static createUniqueConceptId(e,t){let i=e.id;if(e.preferredLabel&&""!==e.preferredLabel.trim()){const t=e.preferredLabel.match(/\/([^\/]+)$/),o=t?t[1]:e.preferredLabel.replace(/[^a-zA-Z0-9]/g,"_");i=`${e.id}_${o}`}if(t){return`${i}__${this.createSectionHash(t)}`}return i}static createSectionHash(e){let t=0;for(let i=0;i<e.length;i++){t=(t<<5)-t+e.charCodeAt(i),t&=t}return Math.abs(t).toString(36).substr(0,6)}static _extractDocumentationLabels(e){const t={};return e.filter(e=>"http://www.xbrl.org/2003/role/documentation"===e.role).forEach(e=>{t[e.lang]=e.label}),t}static buildFormSchema(e,t,i,o="en",r){var n,a;if(!e.presentation||0===e.presentation.length)throw new Error("XBRL presentation data is required");const s=e.presentation[0],l=null==(n=e.hypercubes)?void 0:n[0],d=Array.isArray(e.datatypes)?e.datatypes:(null==(a=e.datatypes)?void 0:a.concepts)||[],c=[];return s.roles.forEach(e=>{const n=this.buildSectionFromRole(e,t,i,l,o,r);d&&d.length>0?(n.datatypes=d,d.length,n.id):console.warn(`⚠️ [buildFormSchema] No datatypes available for section ${n.id}`),this.assignFieldColumnIds(n),c.push(n)}),{formId:`xbrl-form-${Date.now()}`,title:`XBRL Form - ${this.extractEntityName(s.entrypoint)}`,description:"Dynamic form generated from XBRL taxonomy data",version:"1.0.0",sections:c}}static buildSectionFromRole(e,t,i,o,r="en",n){var a,s;let l;if(e.labels&&e.labels.length>0){const t=e.labels.find(e=>e.lang===r),i=e.labels.find(e=>"en"===e.lang)||e.labels[0];l=(t||i).label}else l=this.extractRoleTitle(e.role||e.id||"Unknown Role");const d=this.getAllNonAbstractConcepts(e),c=new Set(d.filter(e=>e.periodType).map(e=>e.periodType));let p=null==o?void 0:o.roles.find(t=>t.roleId===e.id);const u=null==n?void 0:n[e.id];p&&(null==u?void 0:u.dimensionSelections)&&u.dimensionSelections.length>0&&(e.id,p=this.filterHypercubeDimensionsBySelection(p,u.dimensionSelections));const h=this.generateDefaultColumnsForRole(e,t||"2025-01-01",i||"2025-12-31",p,d,c,u,r),m={periodTypes:c,availableColumnIds:h.map(e=>e.id),availableColumns:h},f=[],b=new Map;return(null==(a=e.presentationLinkbase)?void 0:a.concepts)&&e.presentationLinkbase.concepts.forEach(o=>{const n=this.buildConceptTree(o,0,t,i,m,e.id,r,b);n&&f.push(n)}),p&&(null==(s=p.items)?void 0:s.length)||!o||f.forEach(t=>this.applyCrossRoleDimensions(t,e.id,o,r)),{id:e.id,title:l,description:e.description||`Section for ${l}`,concepts:f,columns:h,expanded:!1,metadata:{roleURI:e.roleURI,originalRole:e.role},showPeriodControl:c.size>1,showPreviousYear:!0===e.showPreviousYear,instant:!0===e.instant,duration:!0===e.duration}}static buildConceptTree(e,t,i,o,r,n,a="en",s,l){var d,c;const p=this.getPreferredLabel(e.labels,a,e.preferredLabel),u=(null==(d=e.preferredLabel)?void 0:d.includes("periodStartLabel"))?"start":(null==(c=e.preferredLabel)?void 0:c.includes("periodEndLabel"))?"end":l,h="start"===u?"periodStartLabel":"end"===u?"periodEndLabel":void 0,m=[];if(!e.elementAbstract){let t=[];t=(null==r?void 0:r.availableColumnIds)&&r.availableColumnIds.length>0?r.availableColumnIds:["duration"],t.forEach(t=>{var n;const s=null==(n=null==r?void 0:r.availableColumns)?void 0:n.find(e=>e.id===t),d=(null==s?void 0:s.periodStartDate)||i,c=(null==s?void 0:s.periodEndDate)||o,p=this.createFieldFromConcept(e,d,c,t,l,a);p&&m.push(p)})}const f=[];e.children&&e.children.length>0&&e.children.forEach(e=>{const l=this.buildConceptTree(e,t+1,i,o,r,n,a,s,u);l&&f.push(l)});if(!(m.length>0||f.length>0))return null;let b=this.createUniqueConceptId(e,n);if(s){const e=s.get(b)??0;s.set(b,e+1),e>0&&(b=`${b}__occ${e+1}`)}const g={conceptName:e.conceptName,type:e.type,substitutionGroup:e.substitutionGroup,periodType:e.periodType,balance:e.balance,documentationLabels:this._extractDocumentationLabels(e.labels)};return{id:b,originalConceptId:e.id,name:e.conceptName,label:p,description:`${e.conceptName} (${e.type})`,type:e.type,level:t,children:f,fields:m,conceptMetadata:g,facts:e.facts||[],collapsed:t>0,abstract:e.elementAbstract,periodType:e.periodType,balance:e.balance,preferredLabel:e.preferredLabel,effectivePeriodRole:h}}static createFieldFromConcept(e,t,i,o,r,n="en"){var a;const s=this.mapXBRLTypeToFieldType(e.type),l=this.getPreferredLabel(e.labels,n,e.preferredLabel);let d;d=o||"duration";const c={id:`${e.id}_${d}_field`,conceptId:e.id,columnId:d,type:s,label:l,placeholder:`Enter ${l.toLowerCase()}`,required:!1,disabled:e.elementAbstract,defaultValue:null,periodType:"instant"===e.periodType||"duration"===e.periodType?e.periodType:void 0,periodStartDate:t||"2025-01-01",periodEndDate:i||"2025-12-31",periodInstantDate:"instant"===e.periodType?(null==(a=e.preferredLabel)?void 0:a.includes("periodStartLabel"))||"start"===r?this.subtractOneDay(t||"2025-01-01"):i||t||"2025-01-01":void 0};return"nl-cd_DescriptionLocationNL__a64trl"===e.id&&(e.id,e.periodType),c}static mapXBRLTypeToFieldType(e){return{"xbrli:stringItemType":"text","xbrli:monetaryItemType":"currency","xbrli:integerItemType":"number","xbrli:decimalItemType":"decimal","xbrli:percentItemType":"percentage","xbrli:dateItemType":"date","xbrli:booleanItemType":"boolean","dtr-types:domainItemType":"select","bw2-titel9:chamberOfCommerceRegistrationNumberItemType":"text"}[e]||"text"}static getPreferredLabel(e,t="en",i){if(!e||0===e.length)return"Unnamed Concept";const o=e.filter(e=>e.lang===t),r=o.length>0?o:e;if(i){const t=o.find(e=>e.role===i);if(t)return t.label;const r=e.find(e=>e.role===i);if(r)return r.label}const n=r.find(e=>e.preferredLabel);if(n)return n.label;const a=r.find(e=>"http://www.xbrl.org/2003/role/label"===e.role);if(a)return a.label;const s=r.find(e=>"http://www.xbrl.org/2003/role/terseLabel"===e.role);return s?s.label:r.length>0?r[0].label:e[0].label}static assignFieldColumnIds(e){if(!e.columns||0===e.columns.length)return;const t=e.columns.map(e=>e.id);e.concepts.forEach(e=>{this.assignColumnIdsToConceptFields(e,t)})}static assignColumnIdsToConceptFields(e,t){e.fields=e.fields.filter(e=>t.includes(e.columnId)),e.children&&e.children.forEach(e=>{this.assignColumnIdsToConceptFields(e,t)})}static countFieldsInTree(e){let t=e.fields.length;return e.children&&e.children.forEach(e=>{t+=this.countFieldsInTree(e)}),t}static getAllNonAbstractConcepts(e){var t;const i=[];return(null==(t=e.presentationLinkbase)?void 0:t.concepts)&&e.presentationLinkbase.concepts.forEach(e=>{this.collectNonAbstractConcepts(e,i)}),i}static collectNonAbstractConcepts(e,t){e.elementAbstract||t.push(e),e.children&&e.children.length>0&&e.children.forEach(e=>{this.collectNonAbstractConcepts(e,t)})}static filterHypercubeDimensionsBySelection(e,t){const i=JSON.parse(JSON.stringify(e));return i.items&&0!==i.items.length?(i.items.forEach(e=>{e.dimensions&&(e.dimensions=e.dimensions.map(e=>{var i,o;const r=t.find(t=>t.dimensionId===e.id);if(!r||!r.selectedMemberIds||0===r.selectedMemberIds.length)return e;const n={...e};return n.members=this.filterMembersBySelection(e.members,r.selectedMemberIds),e.id,null==(i=e.members)||i.length,null==(o=n.members)||o.length,n}))}),i):i}static filterMembersBySelection(e,t){if(!e||!Array.isArray(e))return[];const i=[];return e.forEach(e=>{if(t.includes(e.id)&&i.push({...e,children:[]}),e.children&&e.children.length>0){const o=this.filterMembersBySelection(e.children,t);i.push(...o)}}),i}static findCrossRoleDimensions(e,t,i,o="en"){var r,n;const a=[];for(const d of i.roles)if(d.roleId!==t)for(const t of d.items)if((null==(r=t.conceptIds)?void 0:r.includes(e))&&(null==(n=t.dimensions)?void 0:n.some(e=>e.typedMember))){a.push(d);break}if(1!==a.length)return null;const s=a[0].items.find(t=>{var i;return null==(i=t.conceptIds)?void 0:i.includes(e)});if(!s)return null;const l=[];for(const d of s.dimensions){if(!d.typedMember)continue;const e=d.labels.find(e=>e.lang===o)||d.labels.find(e=>"en"===e.lang)||d.labels[0],t=(null==e?void 0:e.label)||d.id;l.push({axisId:d.id,axisLabel:t,typedMemberId:d.typedMember.id,memberLabel:t,type:d.typedMember.type,validation:d.typedMember.validation})}return l.length>0?l:null}static applyCrossRoleDimensions(e,t,i,o){var r;if(!e.abstract&&e.fields&&e.fields.length>0){const r=this.findCrossRoleDimensions(e.originalConceptId,t,i,o);r&&e.fields.forEach(e=>{e.crossRoleTypedMembers=r})}null==(r=e.children)||r.forEach(e=>this.applyCrossRoleDimensions(e,t,i,o))}static generateDefaultColumnsForRole(e,t,i,o,r,n,a,s="en"){var l,d;const c=r||this.getAllNonAbstractConcepts(e),p=n||new Set(c.filter(e=>e.periodType).map(e=>e.periodType));if(0===c.length)return[{id:"default",title:"Value",description:"Default value column",type:"base",order:0,removable:!1}];let u=[];if(1===(null==(l=null==o?void 0:o.items)?void 0:l.length)){const e=o.items[0];1===e.dimensions.length?u=this.generateSingleDimensionColumns(e.dimensions[0],t,i,p,s):e.dimensions.length>1&&(u=this.generateMultiDimensionColumns(e.dimensions,t,i,p,s)),a&&(u=this.filterColumnsByPeriodPreferences(u,a))}else(null==(d=null==o?void 0:o.items)?void 0:d.length)&&o.items.length;const h=[];u.length>0?h.push(...u):0===p.size?h.push({id:"default",title:this.formatPeriodDisplay(t,i),description:"",type:"base",order:0,removable:!1,periodStartDate:t,periodEndDate:i}):h.push({id:"duration",title:this.formatPeriodDisplay(t,i),description:"",type:"base",order:0,removable:!1,periodStartDate:t,periodEndDate:i});let m=h;if(a&&(m=this.filterColumnsByPeriodPreferences(h,a)),null==a?void 0:a.showPreviousYear){const e=this.generatePreviousYearColumns(m,t,i);m=[...m,...e]}return m}static getPreviousYearDate(e){try{const t=new Date(e);return t.setFullYear(t.getFullYear()-1),t.toISOString().split("T")[0]}catch(t){return console.error(`Error calculating previous year for date ${e}:`,t),e}}static subtractOneDay(e){try{const t=new Date(e);return t.setDate(t.getDate()-1),t.toISOString().split("T")[0]}catch(t){return console.error(`Error subtracting one day from date ${e}:`,t),e}}static generatePreviousYearColumns(e,t,i){const o=[],r=this.getPreviousYearDate(t),n=this.getPreviousYearDate(i);return e.forEach((e,t)=>{let i=e.title,a="",s="";e.dimensionData?(i=e.title,a=this.formatPeriodDisplay(r,n),s=`${e.id}_prev`):(i=this.formatPeriodDisplay(r,n),a="",s=`duration_prev_${t}`),o.push({...e,id:s,title:i,description:a,order:e.order+100,removable:!1,periodStartDate:r,periodEndDate:n,dimensionData:e.dimensionData?{...e.dimensionData,dimensionId:`${e.dimensionData.dimensionId}_prev`}:void 0})}),o}static filterColumnsByPeriodPreferences(e,t){return e.filter(e=>{var i,o,r,n;const a=e.id.includes("duration")||(null==(o=null==(i=e.dimensionData)?void 0:i.dimensionId)?void 0:o.includes("duration")),s=e.id.includes("instant")||(null==(n=null==(r=e.dimensionData)?void 0:r.dimensionId)?void 0:n.includes("instant"));return!a&&!s||!(a&&!t.showDuration)&&!(s&&!t.showInstant)})}static generateSingleDimensionColumns(e,t,i,o,r="en"){if(e.typedMember&&(!e.members||0===e.members.length)){const n=this.getPreferredLabel(e.labels,r)||e.conceptName,a={axisId:e.id,axisLabel:n,typedMemberId:e.typedMember.id,type:e.typedMember.type,validation:e.typedMember.validation,dimensionKey:`${n} | [Typed Input]`,dimensionIdKey:`${e.id}|[typed]`},s=[];return 0===o.size?s.push({id:"typed-default",title:n,description:"Typed dimension input column",type:"dimension",dimensionData:{dimensionId:"typed-default",axisId:a.axisId,memberId:"[typed]",memberValue:"Typed Input",memberLabel:"Typed Input",axis:a.axisLabel,axisLabel:a.axisLabel,memberKey:a.dimensionKey,dimensionIdKey:a.dimensionIdKey,hasTypedMembers:!0,typedMemberId:a.typedMemberId,typedMembers:[{axisId:a.axisId,axisLabel:a.axisLabel,typedMemberId:a.typedMemberId,memberLabel:a.axisLabel,type:a.type,validation:a.validation}]},order:0,removable:!1,periodStartDate:t,periodEndDate:i}):1===o.size&&o.has("instant")?s.push({id:"typed-instant",title:`${n} `,description:i,type:"dimension",dimensionData:{dimensionId:"typed-instant",axisId:a.axisId,memberId:"[typed]",memberValue:"Typed Input",memberLabel:"Typed Input",axis:a.axisLabel,axisLabel:a.axisLabel,memberKey:a.dimensionKey,dimensionIdKey:a.dimensionIdKey,hasTypedMembers:!0,typedMemberId:a.typedMemberId,typedMembers:[{axisId:a.axisId,axisLabel:a.axisLabel,typedMemberId:a.typedMemberId,memberLabel:a.axisLabel,type:a.type,validation:a.validation}]},order:0,removable:!1,periodStartDate:i,periodEndDate:i}):(1===o.size&&o.has("duration"),s.push({id:"typed-duration",title:`${n} `,description:this.formatPeriodDisplay(t,i),type:"dimension",dimensionData:{dimensionId:"typed-duration",axisId:a.axisId,memberId:"[typed]",memberValue:"Typed Input",memberLabel:"Typed Input",axis:a.axisLabel,axisLabel:a.axisLabel,memberKey:a.dimensionKey,dimensionIdKey:a.dimensionIdKey,hasTypedMembers:!0,typedMemberId:a.typedMemberId,typedMembers:[{axisId:a.axisId,axisLabel:a.axisLabel,typedMemberId:a.typedMemberId,memberLabel:a.axisLabel,type:a.type,validation:a.validation}]},order:0,removable:!1,periodStartDate:t,periodEndDate:i})),s}if(!e.members||!Array.isArray(e.members))return[];if(0===e.members.length)return[];const n=this.getPreferredLabel(e.labels,r)||e.conceptName,a=e.members[0],s=this.getPreferredLabel(a.labels,r)||a.conceptName,l={axisId:e.id,axisLabel:n,memberId:a.id,memberLabel:s,dimensionKey:`${n} | ${s}`,dimensionIdKey:`${e.id} | ${a.id}`},d=[];return 0===o.size?d.push({id:"default",title:l.memberLabel,description:"Default value column",type:"dimension",dimensionData:{dimensionId:"default",axisId:l.axisId,memberId:l.memberId,memberValue:l.memberLabel,memberLabel:l.memberLabel,axis:l.axisLabel,axisLabel:l.axisLabel,memberKey:l.dimensionKey,dimensionIdKey:l.dimensionIdKey},order:0,removable:!1,periodStartDate:t,periodEndDate:i}):1===o.size&&o.has("instant")?d.push({id:"instant",title:`${l.memberLabel}`,description:i,type:"dimension",dimensionData:{dimensionId:"instant",axisId:l.axisId,memberId:l.memberId,memberValue:l.memberLabel,memberLabel:l.memberLabel,axis:l.axisLabel,axisLabel:l.axisLabel,memberKey:l.dimensionKey,dimensionIdKey:l.dimensionIdKey},order:0,removable:!1,periodStartDate:i,periodEndDate:i}):1===o.size&&o.has("duration")?d.push({id:"duration",title:`${l.memberLabel}`,description:`${t} / ${i}`,type:"dimension",dimensionData:{dimensionId:"duration",axisId:l.axisId,memberId:l.memberId,memberValue:l.memberLabel,memberLabel:l.memberLabel,axis:l.axisLabel,axisLabel:l.axisLabel,memberKey:l.dimensionKey,dimensionIdKey:l.dimensionIdKey},order:0,removable:!1,periodStartDate:t,periodEndDate:i}):d.push({id:"duration",title:`${l.memberLabel}`,description:this.formatPeriodDisplay(t,i),type:"dimension",dimensionData:{dimensionId:"duration",axisId:l.axisId,memberId:l.memberId,memberValue:l.memberLabel,memberLabel:l.memberLabel,axis:l.axisLabel,axisLabel:l.axisLabel,memberKey:l.dimensionKey,dimensionIdKey:l.dimensionIdKey},order:0,removable:!1,periodStartDate:t,periodEndDate:i}),d}static generateMultiDimensionColumns(e,t,i,o,r="en"){e.some(e=>e.typedMember);const n=e.filter(e=>!!e.typedMember||!!(e.members&&Array.isArray(e.members)&&e.members.length>0));if(0===n.length)return[];const a=n.map(e=>{const t=this.getPreferredLabel(e.labels,r)||e.conceptName;if(e.typedMember)return{id:e.id,axisLabel:t,isTyped:!0,typedMemberId:e.typedMember.id,type:e.typedMember.type,validation:e.typedMember.validation,members:[{id:"[typed]",label:`${t}`}]};const i=this.getAllDimensionMembers(e.members);return{id:e.id,axisLabel:t,isTyped:!1,members:i.map(e=>({id:e.id,label:this.getPreferredLabel(e.labels,r)||e.conceptName}))}}),s=this.generateDimensionCombinations(a),l=[];return s.forEach((e,o)=>{const r=e.map(e=>e.memberLabel).join(" | "),n=e.filter(e=>e.isTyped),a=e.filter(e=>!e.isTyped),s={dimensionId:`multi_${o}`,memberValue:r,memberLabel:r,combinations:a.map(e=>({axisId:e.axisId,axisLabel:e.axisLabel,memberId:e.memberId,memberLabel:e.memberLabel})),typedMembers:n.map(e=>({axisId:e.axisId,axisLabel:e.axisLabel,typedMemberId:e.typedMemberId,memberLabel:e.memberLabel,type:e.type,validation:e.validation})),hasTypedMembers:n.length>0,memberKey:r,dimensionIdKey:[...a.map(e=>`${e.axisId}|${e.memberId}`),...n.map(e=>`${e.axisId}|[typed]`)].join("::")};l.push({id:`duration_${o}`,title:`${r}`,description:this.formatPeriodDisplay(t,i),type:"dimension",dimensionData:{...s,dimensionId:`duration_${o}`},order:o,removable:!1,periodStartDate:t,periodEndDate:i})}),l}static getAllDimensionMembers(e){if(!e||!Array.isArray(e))return[];const t=[];return e.forEach(e=>{t.push(e),e.children&&e.children.length>0&&t.push(...this.getAllDimensionMembers(e.children))}),t}static generateDimensionCombinations(e){if(0===e.length)return[];if(1===e.length)return e[0].members.map(t=>[{axisId:e[0].id,axisLabel:e[0].axisLabel,memberId:t.id,memberLabel:t.label,isTyped:e[0].isTyped||!1,typedMemberId:e[0].typedMemberId,type:e[0].type,validation:e[0].validation}]);const[t,...i]=e,o=this.generateDimensionCombinations(i),r=[];return t.members.forEach(e=>{0===o.length?r.push([{axisId:t.id,axisLabel:t.axisLabel,memberId:e.id,memberLabel:e.label,isTyped:t.isTyped||!1,typedMemberId:t.typedMemberId,type:t.type,validation:t.validation}]):o.forEach(i=>{r.push([{axisId:t.id,axisLabel:t.axisLabel,memberId:e.id,memberLabel:e.label,isTyped:t.isTyped||!1,typedMemberId:t.typedMemberId,type:t.type,validation:t.validation},...i])})}),r}static formatDateForDisplay(e){try{return new Date(e).toLocaleDateString("en-US",{year:"numeric",month:"short",day:"numeric"})}catch{return e}}static extractEntityName(e){try{const t=new URL(e).pathname.split("/");return t[t.length-1].replace(".xsd","").replace(/[^a-zA-Z0-9]/g," ").trim()||"Entity"}catch{return"Entity"}}static extractRoleTitle(e){if(!e)return"Unnamed Section";const t=e.match(/^\[[\d]+\]\s*(.+)$/);if(t)return t[1].trim();if(e.match(/^[a-z]+:[^:]*$/i)||e.match(/^urn:[^:]+:[^:]+/i)){const t=e.split(/[:\-]/);return t[t.length-1].replace(/[_\-]/g," ").replace(/\b\w/g,e=>e.toUpperCase())}return e.trim()||"Unnamed Section"}static extractRoleOrder(e){const t=e.match(/^\[([\d]+)\]/);return t?parseInt(t[1],10):0}static buildColumnsFromHypercubes(){return[{id:"default",label:"Values",type:"data"}]}}const T={en:{conceptInfo:{title:"Concept Information",conceptName:"Concept name",type:"Type",substitutionGroup:"Substitution group",periodType:"Period type",balance:"Balance",documentation:"Documentation",instant:"Instant",duration:"Duration",close:"Close"},form:{markAsComplete:"Mark as Complete",loading:"Loading form...",submit:"Validate",save:"Save",saveDraft:"Save Draft",savingDraft:"Saving draft",errors:"Errors",modified:"Modified",valid:"Valid",yes:"Yes",no:"No",noRoleSelected:"No Role Selected",pleaseSelectRole:"Please select a role from the list on the left.",expandPanel:"Expand side panel",collapsePanel:"Collapse side panel",validate:"Validate",preview:"Preview",download:"Download",cancelValidation:"Cancel Validation",lastValidationResults:"Last Validation Results",validationInProgress:"Validation In Progress",quickValidate:"Quick Validate"},filter:{selectRoles:"Select Roles",filterRoles:"Filter Roles",title:"Filter Roles",description:"Select the roles you want to display in the form. You can search and choose specific roles to focus on or manage all available roles.",searchPlaceholder:"Search..",clearSearch:"Clear search",showingResults:"Showing",of:"of",roles:"roles",matching:"matching",selectAll:"Select All",selectNone:"Select None",selectFiltered:"Select Filtered",deselectFiltered:"Deselect Filtered",deselectAll:"Deselect All",reset:"Reset",noRolesFound:"No roles found matching",tryDifferentSearch:"Try a different search term or clear the search.",noRolesAvailable:"No roles available.",cancel:"Cancel",applyFilter:"Apply Filter",showPeriodColumn:"Show Period Column:",additionalOptions:"Additional Options:",showPreviousYear:"Show previous year",duration:"Duration",instant:"Instant",uri:"URI",dimensionMemberSelection:"Dimension Member Selection",selectAllMembers:"Select All",clearMembers:"Clear",availableRoles:"Available Roles",chosenRoles:"Chosen Roles",roleCount:"role(s)",rolesSelected:"role(s) selected",addSelectedRole:"Add selected role",addAllRoles:"Add all roles",removeSelectedRole:"Remove selected role",removeAllRoles:"Remove all roles",advancedFilter:"Advanced Filter",backToFilterRoles:"← Back",showFactsOnly:"Show facts only",showFactsOnlyDescription:"Hide all blank rows and sections. Only roles and rows with at least one filled value will be shown.",searchByConcept:"Search by concept",searchByConceptDescription:"Type concept name or label to filter roles and rows. Press Apply Filter to apply.",searchByConceptPlaceholder:"Type concept name or label and press Apply Filter...",clearFilters:"Clear Filters",resetFilter:"Reset",bannerConcept:'Filtered by "{{concept}}" — {{count}} row(s) visible',bannerFactsOnly:"Only filled-in fields are shown",showAll:"Show all"},column:{addColumn:"Add Column",columnOptions:"Column Options",columnType:"Column Type",instantSingleDate:"Instant (single date)",durationDates:"Duration (start and end dates)",instantDate:"Instant Date",startPeriodDate:"Start Period Date",endPeriodDate:"End Period Date",availableDimensions:"Available Dimensions",dimensionsDescription:"Select dimensions to include in the column. Domain members can be selected here, while typed dimension values will be entered directly in the column header.",enterValue:"Enter value for",enterValuePlaceholder:"Enter value...",selectMember:"Select member:",noMembersAvailable:"No members available for this dimension",cancel:"Cancel",removeColumn:"Remove column",hideColumn:"Hide column",showColumn:"Double-click to show column",required:"required"},section:{enterPlaceholder:"Enter",position:"Section {{current}} of {{total}}",previous:"← Previous",next:"Next: {{title}} →",locateInList:"Show this section in the list on the left",amountScaleBase:"Amounts in €",amountScaleFactor:"Amounts in € × {{factor}}"},field:{selectOption:"Select an option...",select:"Select...",emptyOption:"—",enterDetailedExplanation:"Detailed explanation",enterAmountNoDecimals:"Amount, no decimals",enterCurrency:"0.00",enterText:"Text",enterWholeNumber:"Whole number",enterPositiveNumber:"Positive number",enterDecimalValue:"Decimal value",enterNumberOfShares:"Number of shares",yearFormat:"YYYY",enterPercentage:"e.g. 0.25 for 25% or 0.2550 for 25.50%",emailPlaceholder:"email@example.com",urlPlaceholder:"https://example.com",phonePlaceholder:"+1 (555) 000-0000",enterValue:"Value",enterDetailedInformation:"Detailed information",scale:"Scale",addText:"Add text",editText:"Edit",save:"Save",cancel:"Cancel",characters:"characters",editPeriod:"Edit Period",from:"From",to:"To",date:"Date",unit:"Unit",selectUnit:"Select Unit",leaveBlankForInf:"Leave blank for INF",prefilledLocked:"Pre-filled — cannot be changed here",invalidNumber:'Can\'t read "{{value}}" as a number',noDecimalsAllowed:"This field doesn't accept decimals",negativeNotAllowed:"A negative value isn't allowed here",ambiguousNumber:'"{{value}}" is ambiguous — retype it without the thousands separator'},admin:{title:"Configure Roles",description:"Select which roles should display the 'Show Previous Year' checkbox and configure period type columns."},validation:{summary:"Please fix the following errors before submitting:",errorsFound:"errors found",unitRequired:"Unit is required. Please select a unit via the period icon.",typedMemberRequired:"This field is required because data has been entered in this column."},xbrlValidation:{patternMismatch:"Value does not match required pattern: {{pattern}}",invalidPattern:"Invalid pattern configuration: {{pattern}}",exactLength:"Value must be exactly {{required}} characters (current: {{current}})",minLength:"Value must be at least {{required}} characters (current: {{current}})",maxLength:"Value must not exceed {{required}} characters (current: {{current}})",totalDigits:"Value must not exceed {{required}} total digits (current: {{current}})",ruleSummaryPattern:"Must match pattern: {{pattern}}",ruleSummaryExactLength:"Must be exactly {{required}} characters",ruleSummaryMinLength:"Minimum {{required}} characters",ruleSummaryMaxLength:"Maximum {{required}} characters",ruleSummaryTotalDigits:"Maximum {{required}} total digits"},error:{popup:{title:"Validation Errors",message:"Please fix the following validation errors before saving:",field:"Field:",value:"Value:",errors:"Errors:",clickToFocus:"Click to focus this field",ok:"OK"}},typedDimensionWarning:{title:"Typed dimension values missing",message:"The form contains errors for the following roles where a typed dimension value is missing. Do you still want to continue?",role:"Role:",field:"Field:",value:"Value:",clickToFocus:"Click to go to this fact",continue:"Continue to validate",cancel:"Cancel"},calculationWarning:{title:"Calculation warning",summaryLine:'Total "{{label}}" should equal {{calculated}}, but you entered {{entered}}.',childrenPrefix:"Children:",childAdded:"{{label}} = {{value}} (added)",childSubtracted:"{{label}} = {{value}} (subtracted, opposite balance)",added:"Added",subtracted:"Subtracted (opposite balance)"},balanceCheck:{balanced:"{{column}}: In balance",difference:"Difference {{column}}: {{amount}}"},formulaValidation:{dialogTitle:"Formula check results",allPassed:"All formula checks passed",summaryCount:"{{failed}} of {{total}} checks failed",summaryCountBreakdown:"{{warnings}} warnings, {{errors}} errors",severityWarning:"Warning",severityError:"Error",close:"Close"},scrollToConcept:{revealRole:{title:"Role not in your filtered list",message:'This field is in the role "{{role}}", which is not in your filtered list of roles. Do you want to make this role visible?',confirm:"Yes, show role",cancel:"No"}}},nl:{conceptInfo:{title:"Conceptinformatie",conceptName:"Conceptnaam",type:"Type",substitutionGroup:"Substitutiegroep",periodType:"Periodetype",balance:"Saldo",documentation:"Documentatie",instant:"Moment",duration:"Periode",close:"Sluiten"},form:{markAsComplete:"Markeren als volledig behandeld",loading:"Formulier laden...",submit:"Valideren",save:"Opslaan",saveDraft:"Concept opslaan",savingDraft:"Concept opslaan...",errors:"Fouten",modified:"Gewijzigd",valid:"Geldig",yes:"Ja",no:"Nee",noRoleSelected:"Geen rol geselecteerd",pleaseSelectRole:"Selecteer een rol uit de lijst aan de linkerkant.",expandPanel:"Zijpaneel uitvouwen",collapsePanel:"Zijpaneel inklappen",validate:"Valideren",preview:"Voorbeeld",download:"Downloaden",cancelValidation:"Validatie annuleren",lastValidationResults:"Laatste validatieresultaten",validationInProgress:"Validatie bezig",quickValidate:"Snel valideren"},filter:{selectRoles:"Rollen selecteren",filterRoles:"Rollen filteren",title:"Rollen filteren",description:"Selecteer de rollen die u in het formulier wilt weergeven. U kunt zoeken en specifieke rollen kiezen om op te focussen of alle beschikbare rollen beheren.",searchPlaceholder:"Zoek rollen op naam, ID of URI...",clearSearch:"Zoekopdracht wissen",showingResults:"Weergeven",of:"van",roles:"rollen",matching:"overeenkomend met",selectAll:"Alles selecteren",selectNone:"Niets selecteren",selectFiltered:"Gefilterd selecteren",deselectFiltered:"Gefilterd deselecteren",deselectAll:"Alles deselecteren",reset:"Resetten",noRolesFound:"Geen rollen gevonden die overeenkomen met",tryDifferentSearch:"Probeer een andere zoekterm of wis de zoekopdracht.",noRolesAvailable:"Geen rollen beschikbaar.",cancel:"Annuleren",applyFilter:"Filter toepassen",showPeriodColumn:"Periodekolom weergeven:",additionalOptions:"Aanvullende opties:",showPreviousYear:"Vorig jaar weergeven",duration:"Duur",instant:"Moment",uri:"URI",dimensionMemberSelection:"Dimensieleden selectie",selectAllMembers:"Alles selecteren",clearMembers:"Wissen",availableRoles:"Beschikbare rollen",chosenRoles:"Gekozen rollen",roleCount:"rol(len)",rolesSelected:"rol(len) geselecteerd",addSelectedRole:"Geselecteerde rol toevoegen",addAllRoles:"Alle rollen toevoegen",removeSelectedRole:"Geselecteerde rol verwijderen",removeAllRoles:"Alle rollen verwijderen",advancedFilter:"Geavanceerd filter",backToFilterRoles:"← Terug",showFactsOnly:"Alleen feiten weergeven",showFactsOnlyDescription:"Verberg alle lege rijen en secties. Alleen rollen en rijen met minimaal één ingevulde waarde worden weergegeven.",searchByConcept:"Zoeken op concept",searchByConceptDescription:"Typ een conceptnaam of label om rollen en rijen te filteren. Druk op Filter toepassen om te activeren.",searchByConceptPlaceholder:"Typ conceptnaam of label en druk op Filter toepassen...",clearFilters:"Filters wissen",resetFilter:"Resetten",bannerConcept:'Gefilterd op "{{concept}}" — {{count}} rij(en) zichtbaar',bannerFactsOnly:"Alleen ingevulde velden worden getoond",showAll:"Alles tonen"},column:{addColumn:"Kolom toevoegen",columnOptions:"Kolomopties",columnType:"Kolomtype",instantSingleDate:"Moment (enkele datum)",durationDates:"Duur (begin- en einddatum)",instantDate:"Momentdatum",startPeriodDate:"Startdatum periode",endPeriodDate:"Einddatum periode",availableDimensions:"Beschikbare dimensies",dimensionsDescription:"Selecteer dimensies om in de kolom op te nemen. Domeinleden kunnen hier worden geselecteerd, terwijl getypte dimensiewaarden direct in de kolomkop worden ingevoerd.",enterValue:"Voer waarde in voor",enterValuePlaceholder:"Voer waarde in...",selectMember:"Selecteer lid:",noMembersAvailable:"Geen leden beschikbaar voor deze dimensie",cancel:"Annuleren",removeColumn:"Kolom verwijderen",hideColumn:"Kolom verbergen",showColumn:"Dubbelklik om kolom te tonen",required:"verplicht"},section:{enterPlaceholder:"Invoeren",position:"Onderdeel {{current}} van {{total}}",previous:"← Vorige",next:"Volgende: {{title}} →",locateInList:"Toon dit onderdeel in de lijst aan de linkerkant",amountScaleBase:"Bedragen in €",amountScaleFactor:"Bedragen in € × {{factor}}"},field:{selectOption:"Selecteer een optie...",select:"Selecteer...",emptyOption:"—",enterDetailedExplanation:"Gedetailleerde uitleg",enterAmountNoDecimals:"Bedrag, zonder decimalen",enterCurrency:"0,00",enterText:"Tekst",enterWholeNumber:"Geheel getal",enterPositiveNumber:"Positief getal",enterDecimalValue:"Decimale waarde",enterNumberOfShares:"Aantal aandelen",yearFormat:"JJJJ",enterPercentage:"bijv. 0,25 voor 25% of 0,2550 voor 25,50%",emailPlaceholder:"email@voorbeeld.nl",urlPlaceholder:"https://voorbeeld.nl",phonePlaceholder:"+31 (0)20 123 4567",enterValue:"Waarde",enterDetailedInformation:"Gedetailleerde informatie",scale:"Schaal",addText:"Tekst toevoegen",editText:"Bewerken",save:"Opslaan",cancel:"Annuleren",characters:"tekens",editPeriod:"Periode bewerken",from:"Van",to:"Tot",date:"Datum",unit:"Eenheid",selectUnit:"Selecteer eenheid",leaveBlankForInf:"Leeg laten voor INF",prefilledLocked:"Vooraf ingevuld — kan hier niet worden gewijzigd",invalidNumber:"Kan '{{value}}' niet lezen als getal",noDecimalsAllowed:"Dit veld accepteert geen decimalen",negativeNotAllowed:"Een negatieve waarde is hier niet toegestaan",ambiguousNumber:"'{{value}}' is dubbelzinnig — typ het opnieuw zonder duizendtalscheidingsteken"},admin:{title:"Rollen configureren",description:"Selecteer welke rollen het selectievakje 'Vorig jaar weergeven' moeten weergeven en configureer periodetype kolommen."},validation:{summary:"Corrigeer de volgende fouten voordat u indient:",errorsFound:"fouten gevonden",unitRequired:"Eenheid is verplicht. Selecteer een eenheid via het periodeicoon.",typedMemberRequired:"Dit veld is verplicht omdat er gegevens zijn ingevoerd in deze kolom."},xbrlValidation:{patternMismatch:"Waarde voldoet niet aan het vereiste patroon: {{pattern}}",invalidPattern:"Ongeldige patternconfiguratie: {{pattern}}",exactLength:"Waarde moet exact {{required}} tekens bevatten (huidig: {{current}})",minLength:"Waarde moet minimaal {{required}} tekens bevatten (huidig: {{current}})",maxLength:"Waarde mag niet meer dan {{required}} tekens bevatten (huidig: {{current}})",totalDigits:"Waarde mag niet meer dan {{required}} cijfers bevatten (huidig: {{current}})",ruleSummaryPattern:"Moet overeenkomen met patroon: {{pattern}}",ruleSummaryExactLength:"Moet exact {{required}} tekens bevatten",ruleSummaryMinLength:"Minimaal {{required}} tekens",ruleSummaryMaxLength:"Maximaal {{required}} tekens",ruleSummaryTotalDigits:"Maximaal {{required}} cijfers"},error:{popup:{title:"Validatiefouten",message:"Corrigeer de volgende validatiefouten voordat u opslaat:",field:"Veld:",value:"Waarde:",errors:"Fouten:",clickToFocus:"Klik om dit veld te focussen",ok:"OK"}},typedDimensionWarning:{title:"Waarden voor typed dimensie ontbreken",message:"Het formulier bevat fouten voor de volgende rollen waar een waarde voor de typed dimensie ontbreekt. Wilt u toch doorgaan?",role:"Rol:",field:"Veld:",value:"Waarde:",clickToFocus:"Klik om naar dit feit te gaan",continue:"Doorgaan met valideren",cancel:"Annuleren"},calculationWarning:{title:"Berekeningswaarschuwing",summaryLine:'Totaal "{{label}}" zou {{calculated}} moeten zijn, maar u heeft {{entered}} ingevoerd.',childrenPrefix:"Onderdelen:",childAdded:"{{label}} = {{value}} (opgeteld)",childSubtracted:"{{label}} = {{value}} (afgetrokken, tegengestelde balans)",added:"Opgeteld",subtracted:"Afgetrokken (tegengestelde balans)"},balanceCheck:{balanced:"{{column}}: In balans",difference:"Verschil {{column}}: {{amount}}"},formulaValidation:{dialogTitle:"Resultaten formulecontrole",allPassed:"Alle formulecontroles geslaagd",summaryCount:"{{failed}} van {{total}} controles mislukt",summaryCountBreakdown:"{{warnings}} waarschuwingen, {{errors}} fouten",severityWarning:"Waarschuwing",severityError:"Fout",close:"Sluiten"},scrollToConcept:{revealRole:{title:"Rol niet in uw gefilterde lijst",message:'Dit veld staat in de rol "{{role}}", die niet in uw gefilterde lijst met rollen staat. Wilt u deze rol zichtbaar maken?',confirm:"Ja, rol tonen",cancel:"Nee"}}}};class E{static setLanguage(e){T[e]?this.currentLanguage=e:(console.warn(`Language '${e}' not supported, falling back to 'en'`),this.currentLanguage="en")}static getLanguage(){return this.currentLanguage}static t(e,t){const i=e.split(".");let o=T[this.currentLanguage];for(const r of i){if(!o||"object"!=typeof o||!(r in o))return console.warn(`Translation key '${e}' not found for language '${this.currentLanguage}'`),e;o=o[r]}return t&&"string"==typeof o?this.interpolate(o,t):o}static interpolate(e,t){return e.replace(/\{\{(\w+)\}\}/g,(e,i)=>i in t?String(t[i]):e)}static has(e){const t=e.split(".");let i=T[this.currentLanguage];for(const o of t){if(!i||"object"!=typeof i||!(o in i))return!1;i=i[o]}return void 0!==i}static getAvailableLanguages(){return Object.keys(T)}}function F(e){return!!(null==e?void 0:e.toLowerCase().includes("totallabel"))}E.currentLanguage="en";class R{constructor(e=!1){this.DRAFT_DATA_KEY="jupiter-form-draft-data",this.DRAFT_METADATA_KEY="jupiter-form-draft-metadata",this.STORAGE_VERSION="1.0",this._storage=e?sessionStorage:localStorage}saveDraft(e,t){try{const i={formData:e,metadata:{...t,savedAt:(new Date).toISOString()},version:this.STORAGE_VERSION};return this._storage.setItem(this.DRAFT_DATA_KEY,JSON.stringify(i.formData)),this._storage.setItem(this.DRAFT_METADATA_KEY,JSON.stringify(i.metadata)),e.length,i.metadata.savedAt,t.selectedRoleIds.length,t.customColumns.length,!0}catch(i){return console.error("❌ Failed to save draft:",i),!1}}loadDraft(){try{const e=this._storage.getItem(this.DRAFT_DATA_KEY),t=this._storage.getItem(this.DRAFT_METADATA_KEY);if(!e||!t)return null;const i=JSON.parse(e),o=JSON.parse(t);return i.length,o.savedAt,o.selectedRoleIds.length,o.customColumns.length,{formData:i,metadata:o,version:this.STORAGE_VERSION}}catch(e){return console.error("❌ Failed to load draft:",e),null}}hasDraft(){return null!==this._storage.getItem(this.DRAFT_DATA_KEY)&&null!==this._storage.getItem(this.DRAFT_METADATA_KEY)}getDraftMetadata(){try{const e=this._storage.getItem(this.DRAFT_METADATA_KEY);return e?JSON.parse(e):null}catch(e){return console.error("❌ Failed to load draft metadata:",e),null}}clearDraft(){try{return this._storage.removeItem(this.DRAFT_DATA_KEY),this._storage.removeItem(this.DRAFT_METADATA_KEY),!0}catch(e){return console.error("❌ Failed to clear draft:",e),!1}}getDraftAge(){const e=this.getDraftMetadata();if(!e)return null;const t=new Date(e.savedAt);return(new Date).getTime()-t.getTime()}isDraftStale(e){const t=this.getDraftAge();return null!==t&&t>e}extractCustomColumns(e){const t=[];return e.forEach(e=>{e.columns&&Array.isArray(e.columns)&&e.columns.forEach(i=>{t.push({sectionId:e.id,columnId:i.id,label:i.title,description:i.description,periodType:this._inferPeriodTypeFromColumn(i),date:i.periodStartDate,startDate:i.periodStartDate,endDate:i.periodEndDate,dimensionData:i.dimensionData})})}),t}_inferPeriodTypeFromColumn(e){return e.periodStartDate&&e.periodEndDate?"duration":"instant"}createMetadataSnapshot(e,t,i,o,r,n,a,s,l,d="en",c,p,u,h,m){return{periodStartDate:e,periodEndDate:t,language:i,reportingLanguage:d,selectedRoleIds:o,customColumns:this.extractCustomColumns(r),typedMemberData:n,periodPreferences:a,periodData:s,unitData:l,decimalsData:p,repeatCounts:c,roleCompletedStates:u,hiddenColumns:h,totalManuallyEditedData:m,schemaVersion:this.STORAGE_VERSION}}validateDraftCompatibility(e,t,i){const o=[];e.metadata.periodStartDate!==t&&o.push(`Draft period start (${e.metadata.periodStartDate}) differs from current (${t})`),e.metadata.periodEndDate!==i&&o.push(`Draft period end (${e.metadata.periodEndDate}) differs from current (${i})`);const r=this.getDraftAge();r&&r>6048e5&&o.push(`Draft is ${Math.floor(r/864e5)} days old`);return{compatible:0===o.length,warnings:o}}}const M=.01;class j extends Error{constructor(e,t,i="unsupported-syntax"){super(e),this.test=t,this.reason=i,this.name="FormulaExpressionError"}}const A=/\s*(?:(\$[A-Za-z_][\w-]*)|(-?\d+(?:\.\d+)?)|([A-Za-z][\w:-]*)|('[^']*')|(\()|(\))|(\+)|(-)|(=))/y;class P{constructor(e,t){this.tokens=e,this.test=t,this.pos=0}peek(){return this.tokens[this.pos]}next(){return this.tokens[this.pos++]}expect(e){const t=this.next();if(t.type!==e)throw new j(`Expected ${e} but got ${t.type} ("${t.value}")`,this.test,"parse-error");return t}parseBoolExpr(){const e=this.parseOrExpr();if("EOF"!==this.peek().type)throw new j(`Unexpected trailing token "${this.peek().value}"`,this.test,"unsupported-syntax");return e}parseOrExpr(){const e=[this.parseAndExpr()];for(;"IDENT"===this.peek().type&&"or"===this.peek().value;)this.next(),e.push(this.parseAndExpr());return 1===e.length?e[0]:{kind:"or",terms:e}}parseAndExpr(){const e=[this.parseBoolTerm()];for(;"IDENT"===this.peek().type&&"and"===this.peek().value;)this.next(),e.push(this.parseBoolTerm());return 1===e.length?e[0]:{kind:"and",terms:e}}parseBoolTerm(){const e=this.peek();if("IDENT"===e.type&&"not"===e.value){this.next(),this.expect("LPAREN");const e=this.parseOrExpr();return this.expect("RPAREN"),{kind:"not",arg:e}}if("IDENT"===e.type&&"empty"===e.value){this.next(),this.expect("LPAREN");const e=this.expect("VARIABLE").value;return this.expect("RPAREN"),{kind:"empty",variable:e}}if("IDENT"===e.type&&"xff:has-fallback-value"===e.value){this.next(),this.expect("LPAREN");const e=this.next();if("IDENT"!==e.type||"xs:QName"!==e.value)throw new j(`Expected xs:QName(...) inside xff:has-fallback-value(...), got "${e.value}"`,this.test,"unsupported-syntax");this.expect("LPAREN");const t=this.expect("STRING").value;return this.expect("RPAREN"),this.expect("RPAREN"),{kind:"hasFallbackValue",variableName:t}}const t=this.parseValueExpr(),i=this.peek();if("EQUALS"===i.type)return this.next(),{kind:"comparison",op:"=",left:t,right:this.parseValueExpr()};if("IDENT"===i.type&&"eq"===i.value)return this.next(),{kind:"comparison",op:"eq",left:t,right:this.parseValueExpr()};throw new j(`Expected a comparison operator ("=" or "eq") after value expression, got "${i.value}"`,this.test,"unsupported-syntax")}parseValueExpr(){const e=[];let t=1;for("PLUS"===this.peek().type?this.next():"MINUS"===this.peek().type&&(this.next(),t=-1),e.push({sign:t,term:this.parseValueTerm()});"PLUS"===this.peek().type||"MINUS"===this.peek().type;){const t="PLUS"===this.next().type?1:-1;e.push({sign:t,term:this.parseValueTerm()})}return 1===e.length&&1===e[0].sign?e[0].term:{kind:"additive",terms:e}}parseValueTerm(){const e=this.peek();if("NUMBER"===e.type)return this.next(),{kind:"number",value:Number(e.value)};if("STRING"===e.type)return this.next(),{kind:"string",value:e.value};if("VARIABLE"===e.type)return this.next(),{kind:"variable",name:e.value};if("IDENT"===e.type&&"sum"===e.value){this.next(),this.expect("LPAREN");const e=this.expect("VARIABLE").value;return this.expect("RPAREN"),{kind:"sum",variable:e}}if("LPAREN"===e.type){this.next();const e=this.parseValueExpr();return this.expect("RPAREN"),e}throw new j(`Expected a number, variable, sum(...), or parenthesized expression, got "${e.value}"`,this.test,"unsupported-syntax")}}function L(e,t){return e.get(t)}function N(e,t,i){switch(e.kind){case"number":case"string":return e.value;case"sum":return function(e,t,i){const o=L(t,e);return void 0===o?0:(Array.isArray(o)?o:[o]).reduce((t,o)=>{if("string"==typeof o)throw new j(`Variable "$${e}" resolved to a non-numeric value ("${o}") and cannot be used in sum(...)`,i,"unsupported-syntax");return t+o},0)}(e.variable,t,i);case"variable":{const o=L(t,e.name);if(void 0===o)throw new j(`Variable "$${e.name}" has no bound fact and cannot be evaluated directly (only sum()/empty() tolerate an unbound variable)`,i,"unbound-variable");if(Array.isArray(o))throw new j(`Variable "$${e.name}" is a sequence and must be wrapped in sum(...) to be used in arithmetic`,i,"unsupported-syntax");return o}case"additive":return e.terms.reduce((e,{sign:o,term:r})=>{const n=N(r,t,i);if("string"==typeof n)throw new j(`Non-numeric value ("${n}") cannot be used in arithmetic (+ / -)`,i,"unsupported-syntax");return e+o*n},0)}}function V(e,t,i,o){switch(e.kind){case"or":return e.terms.some(e=>V(e,t,i,o));case"and":return e.terms.every(e=>V(e,t,i,o));case"not":return!V(e.arg,t,i,o);case"empty":{const i=L(t,e.variable);return void 0===i||Array.isArray(i)&&0===i.length}case"hasFallbackValue":{const t=o.get(e.variableName);if(void 0===t)throw new j(`xff:has-fallback-value(xs:QName('${e.variableName}')) could not be evaluated — no fallback-usage tracked for this variable (either not one of this assertion's FACT_VARIABLEs, or it matched zero facts with no fallbackValue declared)`,i,"unbound-variable");return t}case"comparison":{const o=N(e.left,t,i),r=N(e.right,t,i);return"string"==typeof o||"string"==typeof r?String(o)===String(r):Math.abs(o-r)<M}}}function O(e,t,i=new Map){const o=function(e){const t=[];A.lastIndex=0;let i=0;for(;i<e.length;){A.lastIndex=i;const o=A.exec(e);if(!o||o.index!==i){if(/^\s*$/.test(e.slice(i)))break;throw new j(`Unrecognized token at position ${i}: "${e.slice(i,i+10)}..."`,e,"unsupported-syntax")}const[r,n,a,s,l,d,c,p,u,h]=o;n?t.push({type:"VARIABLE",value:n.slice(1)}):a?t.push({type:"NUMBER",value:a}):s?t.push({type:"IDENT",value:s}):l?t.push({type:"STRING",value:l.slice(1,-1)}):d?t.push({type:"LPAREN",value:d}):c?t.push({type:"RPAREN",value:c}):p?t.push({type:"PLUS",value:p}):u?t.push({type:"MINUS",value:u}):h&&t.push({type:"EQUALS",value:h}),i+=r.length}return t.push({type:"EOF",value:""}),t}(e);return V(new P(o,e).parseBoolExpr(),t,e,i)}const z=/^\.\s*(eq|ne|gt|lt|ge|le)\s+(-?\d+(?:\.\d+)?)$/;function J(e){return!!(null==e?void 0:e.toLowerCase().includes("totallabel"))}function B(e){return!!(null==e?void 0:e.toLowerCase().includes("negatedtotallabel"))}function U(e,t,i=0){if(!t.isAbstract(e))return e;if(i>5)return null;const o=t.getChildren(e).find(e=>J(t.getPreferredLabel(e)));return o?U(o,t,i+1):null}function q(e,t,i,o,r){if(i<0)return o;const n=e[t];if(B(r.getPreferredLabel(n)))return o.length>0?o:[e[i]];if(o.length>0)return[e[i],...o];if(B(r.getPreferredLabel(e[i]))){let t=-1;for(let o=i-1;o>=0;o--)if(J(r.getPreferredLabel(e[o]))){t=o;break}return t>=0?[e[t],e[i]]:[e[i]]}return[e[i]]}function H(e){return null!=e&&""!==e}function W(e){const t=[];for(const i of Object.keys(e)){const o=e[i]||{};for(const e of Object.keys(o))H(o[e])&&t.push({conceptId:i,columnId:e})}return t}function K(e,t,i,o,r,n){const a={conceptId:e.id,qname:e.name,balance:e.balance,effectivePeriodRole:e.effectivePeriodRole};i.set(e.id,a),(t.get(e.name)??t.set(e.name,[]).get(e.name)).push(a);const s=e.children||[],l=s.length>0,d=!0===r.get(e.name);(!o.has(e.name)||l&&!d)&&(o.set(e.name,e.id),r.set(e.name,l)),n.set(e.id,s.map(e=>e.id)),s.forEach(e=>K(e,t,i,o,r,n))}function Y(e){const t=[e.id];return(e.children||[]).forEach(e=>t.push(...Y(e))),t}function Q(e,t,i,o,r){t.has(e.conceptName)||t.set(e.conceptName,e.id),i.has(e.conceptName)||i.set(e.conceptName,(e.children||[]).map(e=>e.id)),o.has(e.conceptName)||o.set(e.conceptName,Y(e)),(e.children||[]).forEach(e=>{r.add(e.id),Q(e,t,i,o,r)})}const G={getId:e=>e.id,getPreferredLabel:e=>e.preferredLabel,isAbstract:e=>!0===e.abstract,getChildren:e=>e.children||[]};function X(e,t,i,o,r,n,a){const s=new Map,l=new Map,d=new Map,c=new Map,p=new Map,u=new Map,h=new Map;i.forEach(e=>{const t=new Map,i=new Map,o=new Map;e.concepts.forEach(e=>K(e,s,l,i,o,t)),c.set(e.roleURI,t),d.set(e.roleURI,i),p.set(e.roleURI,function(e,t){const i=new Map;function o(e,o){const r=[];for(const i of o){const e=U(i,t);e&&r.push(t.getId(e))}0!==r.length&&i.set(t.getId(e),r)}return function e(i){for(let r=0;r<i.length;r++){const n=i[r];if(J(t.getPreferredLabel(n))&&0===t.getChildren(n).length){let e=-1;for(let o=r-1;o>=0;o--)if(J(t.getPreferredLabel(i[o]))){e=o;break}const a=i.slice(e+1,r),s=q(i,r,e,a,t);s.length>0&&o(n,s)}const a=t.getChildren(n);a.length>0&&e(a)}}(e),i}(e.concepts,G));for(const r of t.keys())h.set(r,e.roleURI);e.columns&&u.set(e.roleURI,e.columns)});const m=new Map;d.forEach((e,t)=>{const i=c.get(t),o=p.get(t);e.forEach((e,r)=>{var n;const a=(null==i?void 0:i.get(e))||[],s=a.length>0?a:(null==o?void 0:o.get(e))||[];0!==s.length&&(m.has(r)||m.set(r,new Map),null==(n=m.get(r))||n.set(t,s))})});const f=new Map,b=new Map,g=new Map,v=new Map,y=new Set;return(o||[]).forEach(e=>{e.items.forEach(e=>{e.dimensions.forEach(e=>{f.has(e.conceptName)||f.set(e.conceptName,e.id),(e.members||[]).forEach(e=>Q(e,b,g,v,y))})})}),{formData:e,columns:t,periodStartDate:r,periodEndDate:n,conceptByQName:s,conceptById:l,conceptIdByQNamePerRole:d,childrenByRole:c,totalGroupChildrenByRole:p,crossRoleChildrenByQName:m,dimensionQNameToId:f,memberQNameToId:b,memberChildrenByQName:g,memberDescendantOrSelfIdsByQName:v,memberIdsWithParent:y,columnsByRole:u,roleURIByConceptId:h,allCandidates:W(e),typedMemberData:a??{}}}function Z(e,t){const i=[],o=[...e.get(t)||[]],r=new Set;for(;o.length>0;){const t=o.pop();r.has(t)||(r.add(t),i.push(t),o.push(...e.get(t)||[]))}return i}function ee(e){return`${e.conceptId}::${e.columnId}`}function te(e,t){return se(e.filters.map(i=>ae(i,t.allCandidates,t,e.filters)))}function ie(e,t){var i;const o=e.roleURIByConceptId.get(t.conceptId);return(o?null==(i=e.columnsByRole.get(o))?void 0:i.find(e=>e.id===t.columnId):void 0)??e.columns.find(e=>e.id===t.columnId)}function oe(e,t,i){if(!(null==e?void 0:e.dimensionData))return!1;return!(e.dimensionData.axisId!==t||void 0!==i&&e.dimensionData.memberId!==i)||(e.dimensionData.combinations||[]).some(e=>e.axisId===t&&(void 0===i||e.memberId===i))}function re(e,t){return{start:(null==e?void 0:e.periodStartDate)??t.periodStartDate,end:(null==e?void 0:e.periodEndDate)??t.periodEndDate}}function ne(e,t,i,o){var r,n;switch(e.type){case"CONCEPT_NAME":{const o=e.attributes["concept.qname"],r=o?i.conceptByQName.get(o):void 0;if(!r||0===r.length)return[];const n=new Set(r.map(e=>e.conceptId));return t.filter(e=>n.has(e.conceptId))}case"CONCEPT_BALANCE":{const o=e.attributes.balance;return t.filter(e=>{var t;return(null==(t=i.conceptById.get(e.conceptId))?void 0:t.balance)===o})}case"CONCEPT_RELATION":{const o=e.attributes.qname,a=e.attributes.linkrole,s=e.attributes.axis,l=o&&a?null==(r=i.conceptIdByQNamePerRole.get(a))?void 0:r.get(o):void 0,d=a?i.childrenByRole.get(a):void 0;if(!l||!d)return[];let c;if("descendant"===s)c=Z(d,l);else{const e=d.get(l)||[];c=e.length>0?e:(null==(n=i.totalGroupChildrenByRole.get(a??""))?void 0:n.get(l))||[],0===c.length&&(c=function(e,t,i){if(!e)return[];const o=i.crossRoleChildrenByQName.get(e);if(!o)return[];const r=Array.from(o.entries()).filter(([e])=>e!==t);return 1===r.length?r[0][1]:[]}(o,a,i))}const p=new Set(c);return t.filter(e=>p.has(e.conceptId))}case"EXPLICIT_DIMENSION":{const r=e.attributes["dimension.qname"],n=e.attributes["member.qname"],a=r?i.dimensionQNameToId.get(r):void 0;if(!a)return[];const s=e.attributes["member.axis"];if(n&&"child"===s)return function(e,t,i,o,r){var n,a;const s=o.memberChildrenByQName.get(e)||[];if(s.length>0){const e=i.filter(e=>s.some(i=>oe(ie(o,e),t,i)));if(e.length>0)return e}const l=r.find(e=>"CONCEPT_RELATION"===e.type&&"descendant"===e.attributes.axis),d=null==l?void 0:l.attributes.linkrole,c=null==l?void 0:l.attributes.qname,p=c&&d?null==(n=o.conceptIdByQNamePerRole.get(d))?void 0:n.get(c):void 0,u=new Set(p&&d&&(null==(a=o.childrenByRole.get(d))?void 0:a.get(p))||[]);return 0===u.size?[]:i.filter(e=>!u.has(e.conceptId))}(n,a,t,i,o);if(n&&"descendant-or-self"===s)return function(e,t,i,o){const r=o.memberDescendantOrSelfIdsByQName.get(e)||[];return 0===r.length?[]:i.filter(e=>r.some(i=>oe(ie(o,e),t,i)))}(n,a,t,i);const l=n?i.memberQNameToId.get(n):void 0;return t.filter(e=>oe(ie(i,e),a,l))}case"TYPED_DIMENSION":{const o=e.attributes["dimension.qname"],r=o?i.dimensionQNameToId.get(o):void 0;return r?t.filter(e=>function(e,t,i){if(!function(e,t){return!!(null==e?void 0:e.dimensionData)&&(void 0!==e.dimensionData.typedMemberId&&e.dimensionData.axisId===t||(e.dimensionData.typedMembers||[]).some(e=>e.axisId===t))}(ie(e,t),i))return!1;const o=e.typedMemberData[t.columnId];return void 0===o||!!o[i]}(i,e,r)):[]}case"PERIOD_INSTANT":case"PERIOD_END":{const o=e.attributes.date;return t.filter(e=>function(e,t,i){const o=function(e){if(e)return e.startsWith("$")?e.slice(1):e}(t);if(!o)return!1;const r=function(e,t){const i=e.includes("StartDate"),o=e.includes("EndDate")||"FinancialReportingPeriodCurrentEndDateParam"===e;if(e.startsWith("FinancialReportingPeriodCurrent"))return i?{start:t.periodStartDate}:o?{end:t.periodEndDate}:void 0;if(e.startsWith("FinancialReportingPeriodPrePrevious")||e.startsWith("FinancialReportingPeriodPrevious")){const e=function(e){return e.columns.find(t=>void 0!==t.periodEndDate&&t.periodEndDate<e.periodEndDate)}(t);if(!e)return;return i?{start:e.periodStartDate}:o?{end:e.periodEndDate}:void 0}}(o,i);if(!r)return!1;const n=re(e,i),a=r.end??r.start;return n.end===a}(ie(i,e),o,i))}case"OR_FILTER":return function(e){const t=new Map;return e.forEach(e=>e.forEach(e=>t.set(ee(e),e))),Array.from(t.values())}(e.children.map(e=>ae(e,t,i,o)));case"ASPECT_COVER":return t;case"UNKNOWN":{const o=e.attributes.boundary;if("start"===o||"end"===o){const e="start"===o?"periodStartLabel":"periodEndLabel";return t.filter(t=>{var o;return(null==(o=i.conceptById.get(t.conceptId))?void 0:o.effectivePeriodRole)===e})}return t}default:return[]}}function ae(e,t,i,o){const r=ne(e,t,i,o);if(!e.complement)return r;const n=new Set(r.map(ee));return t.filter(e=>!n.has(ee(e)))}function se(e){return 0===e.length?[]:e.reduce((e,t)=>{const i=new Set(t.map(ee));return e.filter(e=>i.has(ee(e)))})}function le(e){if(null==e||""===e)return;const t=parseFloat(String(e));return Number.isNaN(t)?String(e):t}function de(e){return e.some(e=>"PERIOD_INSTANT"===e.type||"PERIOD_END"===e.type||"OR_FILTER"===e.type&&de(e.children))}function ce(e,t,i){if(e.length<=1||de(t.filters))return e;const o=e.filter(e=>re(ie(i,e),i).end===i.periodEndDate);return o.length>0?o:e}function pe(e,t){return function(e,t){const i=new Map;e.forEach(e=>{var o;const r=(null==(o=t.conceptById.get(e.conceptId))?void 0:o.qname)??e.conceptId,n=`${e.columnId}::${r}`,a=i.get(n);a?a.push(e):i.set(n,[e])});const o=[];return i.forEach(e=>{if(e.length<=1)return void o.push(...e);const i=e.map(e=>{var i;return null==(i=t.conceptById.get(e.conceptId))?void 0:i.effectivePeriodRole}),r=e.filter((e,t)=>"periodEndLabel"===i[t]),n=new Set(i).size>1;o.push(...n&&r.length>0?r:e)}),o}(function(e,t,i){var o,r;if(t.bindAsSequence)return e;if(new Set(e.map(e=>e.conceptId)).size<=1)return e;const n=t.filters.find(e=>"CONCEPT_RELATION"===e.type&&"descendant"===e.attributes.axis),a=null==n?void 0:n.attributes.qname,s=null==n?void 0:n.attributes.linkrole,l=a&&s?null==(o=i.conceptIdByQNamePerRole.get(s))?void 0:o.get(a):void 0,d=new Set(l&&s&&(null==(r=i.childrenByRole.get(s))?void 0:r.get(l))||[]);return 0===d.size?e:e.filter(e=>d.has(e.conceptId))}(ce(te(e,t),e,t),e,t),t)}function ue(e,t){const i=new Set;for(const o of e.filters){if("EXPLICIT_DIMENSION"!==o.type||o.complement||o.cover)continue;if(o.attributes["member.qname"])continue;const e=t.dimensionQNameToId.get(o.attributes["dimension.qname"]??"");e&&i.add(e)}return i}function he(e,t,i){var o;const r=ie(e,t);if(null==r?void 0:r.dimensionData)return r.dimensionData.axisId===i?r.dimensionData.memberId:null==(o=(r.dimensionData.combinations||[]).find(e=>e.axisId===i))?void 0:o.memberId}function me(e,t,i){const o=new Map;if(e.forEach(e=>o.set(e.name,pe(e,t))),i){const i=new Set;e.forEach(e=>ue(e,t).forEach(e=>i.add(e))),i.forEach(i=>{const r=function(e,t,i,o){for(const r of e){if(r.bindAsSequence)continue;if(!ue(r,o).has(t))continue;const e=i.get(r.name)||[],n=new Set(e.map(e=>he(o,e,t)).filter(e=>void 0!==e));if(1===n.size)return{memberId:[...n][0],variableName:r.name,ambiguous:!1};const a=[...n].filter(e=>!o.memberIdsWithParent.has(e));if(1===a.length)return{memberId:a[0],variableName:r.name,ambiguous:!0}}}(e,i,o,t);r&&e.forEach(e=>{const n=e.bindAsSequence&&ue(e,t).has(i),a=r.ambiguous&&e.name===r.variableName;if(!n&&!a)return;const s=o.get(e.name)||[];o.set(e.name,s.filter(e=>he(t,e,i)===r.memberId))})})}const r=new Map;return e.forEach(e=>r.set(e.name,function(e,t,i){const o=t.map(e=>{var t;return le(null==(t=i.formData[e.conceptId])?void 0:t[e.columnId])}).filter(e=>void 0!==e);if(0===o.length&&"()"===e.fallbackValue)return[];if(e.bindAsSequence){if(0===o.length)return;return o}return 0!==o.length?(o.length>1&&console.warn(`[formula-variable-resolver] Variable "${e.name}" is scalar (bindAsSequence: false) but matched ${o.length} facts; using the first match by column order. This can legitimately happen when filters under-constrain the candidate set.`),o[0]):void 0}(e,o.get(e.name)||[],t))),r}function fe(e){const t=Object.entries(e.attributes).filter(([e])=>"id"!==e).sort(([e],[t])=>e.localeCompare(t));return JSON.stringify({type:e.type,complement:e.complement,cover:e.cover,attrs:t})}function be(e,t){return te(e,t).length}function ge(e,t){return!(be(e,t)>0)&&(void 0!==e.fallbackValue||void 0)}function ve(e){const t=[];for(const i of e)if("CONCEPT_NAME"===i.type){const e=i.attributes["concept.qname"];e&&t.push(e)}else"OR_FILTER"===i.type&&t.push(...ve(i.children));return t}function ye(e){return ve(e.filters)}function xe(e,t,i){const o=i.columns.map(e=>({conceptId:t,columnId:e.id}));return se(e.filters.map(t=>ae(t,o,i,e.filters))).map(e=>e.columnId)}class _e{evaluate(e,t,i){var o;const r=null==(o=e.formula)?void 0:o[0];if(!r)return[];const n=[];for(const a of r.roles)for(const e of a.assertions)n.push(this._evaluateAssertion(e,a,t,i));return n}summarize(e){const t={totalAssertions:e.length,evaluated:0,skipped:0,passed:0,failed:0,failedWarnings:0,failedErrors:0};for(const i of e)i.skipped?t.skipped+=1:(t.evaluated+=1,i.satisfied?t.passed+=1:(t.failed+=1,"ERROR"===i.severity?t.failedErrors+=1:t.failedWarnings+=1));return t}_evaluateAssertion(e,t,i,o){try{const r=function(e,t){return me(e.variables,t,e.implicitFiltering)}(e,i),n=function(e){if("VALUE_ASSERTION"!==e.type||2!==e.variables.length)return;const t=e.variables.find(e=>!e.bindAsSequence),i=e.variables.find(e=>e.bindAsSequence);if(!t||!i)return;const o=e=>"CONCEPT_RELATION"===e.type&&"descendant"===e.attributes.axis&&!e.complement&&!e.cover,r=t.filters.find(o),n=i.filters.find(o);if(!r||!n)return;const a=r.attributes.qname,s=r.attributes.linkrole;if(!a||!s)return;if(n.attributes.qname!==a||n.attributes.linkrole!==s)return;const l=t.filters.find(e=>"EXPLICIT_DIMENSION"===e.type&&!e.complement&&e.cover&&!("member.axis"in e.attributes)),d=i.filters.find(e=>"EXPLICIT_DIMENSION"===e.type&&!e.complement&&e.cover&&"child"===e.attributes["member.axis"]);if(!l||!d)return;const c=l.attributes["dimension.qname"],p=l.attributes["member.qname"];if(!c||!p)return;if(d.attributes["dimension.qname"]!==c||d.attributes["member.qname"]!==p)return;const u=t.filters.filter(e=>e!==r&&e!==l).map(fe).sort(),h=i.filters.filter(e=>e!==n&&e!==d).map(fe).sort();return u.length!==h.length||u.some((e,t)=>e!==h[t])?void 0:{scalarVariable:t,sequenceVariable:i,anchorQName:a,linkrole:s,dimensionQName:c,memberQName:p}}(e),a=n?function(e,t){var i;const{scalarVariable:o,sequenceVariable:r,anchorQName:n,linkrole:a,dimensionQName:s,memberQName:l}=e,d=null==(i=t.conceptIdByQNamePerRole.get(a))?void 0:i.get(n),c=t.childrenByRole.get(a);if(!d||!c)return"not-applicable";const p=Z(c,d);if(0===p.length)return"not-applicable";const u=t.dimensionQNameToId.get(s),h=t.memberQNameToId.get(l),m=t.memberChildrenByQName.get(l)||[];if(!u||!h||0===m.length)return"not-applicable";const f=o.filters.filter(e=>!("CONCEPT_RELATION"===e.type&&"descendant"===e.attributes.axis||"EXPLICIT_DIMENSION"===e.type&&e.attributes["dimension.qname"]===s)),b=f.length>0?se(f.map(e=>ae(e,t.allCandidates,t,f))):t.allCandidates,g=new Set(p),v=new Map;if(b.forEach(e=>{if(!g.has(e.conceptId))return;const t=v.get(e.conceptId);t?t.push(e):v.set(e.conceptId,[e])}),!Array.from(v.values()).some(e=>e.some(e=>m.some(i=>oe(ie(t,e),u,i)))))return"not-applicable";let y=!1;for(const x of p){const e=v.get(x);if(!e||0===e.length)continue;const i=ce(e.filter(e=>oe(ie(t,e),u,h)),o,t),n=ce(e.filter(e=>m.some(i=>oe(ie(t,e),u,i))),r,t),a=i.map(e=>{var i;return le(null==(i=t.formData[e.conceptId])?void 0:i[e.columnId])}).filter(e=>"number"==typeof e),s=n.map(e=>{var i;return le(null==(i=t.formData[e.conceptId])?void 0:i[e.columnId])}).filter(e=>"number"==typeof e);if(0===a.length||0===s.length)continue;a.length>1&&console.warn(`[formula-variable-resolver] SumOfMembersOnAbstract concept "${x}" matched ${a.length} aggregate-member facts; using the first by column order.`);const l=a[0],d=s.reduce((e,t)=>e+t,0);if(y=!0,Math.abs(l-d)>=M)return!1}return!!y||"unresolvable"}(n,i):void 0,s=void 0!==a&&"not-applicable"!==a;if("VALUE_ASSERTION"===e.type&&!s){const i=function(e,t){for(const i of e.variables)if(void 0===t.get(i.name))return{satisfied:!1,skipReason:"unresolvable"};return{satisfied:!0}}(e,r);if(!i.satisfied)return this._skippedResult(e,t,i.skipReason??"unresolvable")}const l=function(e,t){var i;if(!(null==(i=e.test)?void 0:i.includes("has-fallback-value"))&&!e.preconditions.some(e=>e.test.includes("has-fallback-value")))return new Map;const o=new Map;for(const r of e.variables){const e=ge(r,t);void 0!==e&&o.set(r.name,e)}return o}(e,i),d=function(e,t,i=new Map){if(0===e.length)return{satisfied:!0};for(const r of e){let e;try{e=O(r.test,t,i)}catch(o){if(o instanceof j)return{satisfied:!1,skipReason:"unresolvable"};throw o}if(!e)return{satisfied:!1,skipReason:"precondition"}}return{satisfied:!0}}(e.preconditions,r,l);if(!d.satisfied)return this._skippedResult(e,t,d.skipReason??"unresolvable");if("EXISTENCE_ASSERTION"===e.type){const r=1===e.variables.length?be(e.variables[0],i):function(e,t){const i=new Map;for(const o of e)for(const e of te(o,t))i.set(ee(e),e);return i.size}(e.variables,i),n=function(e,t){const i=(e??"").trim();return""===i?t>0:i.split(/\bor\b/).some(e=>{const o=z.exec(e.trim());if(!o)throw new j(`Unsupported existence-assertion test shape: "${e.trim()}"`,i,"unsupported-syntax");const[,r,n]=o;return function(e,t,i){switch(e){case"eq":return t===i;case"ne":return t!==i;case"gt":return t>i;case"lt":return t<i;case"ge":return t>=i;case"le":return t<=i}}(r,t,Number(n))})}(e.test,r);return this._evaluatedResult(e,t,i,n,o,r)}if(s)return"unresolvable"===a?this._skippedResult(e,t,"unresolvable"):this._evaluatedResult(e,t,i,a,o);const c=O(e.test,r,l);return this._evaluatedResult(e,t,i,c,o)}catch(r){if(r instanceof j)return console.warn(`[FormulaValidationService] Assertion "${e.id}" could not be evaluated (${r.reason}): ${r.message}`),this._skippedResult(e,t,"unresolvable");throw r}}_skippedResult(e,t,i){return{assertionId:e.id,roleURI:t.roleURI,roleLabel:t.role,type:e.type,severity:e.severity,satisfied:!1,skipped:!0,skipReason:i}}_evaluatedResult(e,t,i,o,r,n){const a=o?void 0:this._pickMessage(e,r);return{assertionId:e.id,roleURI:t.roleURI,roleLabel:t.role,type:e.type,severity:e.severity,satisfied:o,skipped:!1,message:a,matchedFactCount:n,conceptLinks:a?this._buildConceptLinks(e,t.roleURI,i,a):void 0}}_pickMessage(e,t){const i=e.messages;if(0===i.length)return;const o=i.find(e=>e.xmlLang===t)??i.find(e=>"en"===e.xmlLang)??i[0];return this._stripTechnicalDetail(o.text)}_stripTechnicalDetail(e){const t=e.indexOf("{");return-1===t?e.trim():e.slice(0,t).replace(/\|\s*$/,"").trim()}_buildConceptLinks(e,t,i,o){var r,n,a;const s=[],l=new Set;for(const d of e.variables)for(const e of ye(d)){const c=(null==(r=i.conceptIdByQNamePerRole.get(t))?void 0:r.get(e))??(null==(a=null==(n=i.conceptByQName.get(e))?void 0:n[0])?void 0:a.conceptId);if(!c)continue;const p=e.includes(":")?e.split(":").pop():e;if(l.has(p))continue;if(!new RegExp("`"+this._escapeRegExp(p)+"`").test(o))continue;const u=xe(d,c,i);s.push({label:p,conceptQName:e,conceptId:c,columnId:u[0]}),l.add(p)}return s}_escapeRegExp(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}}class De{static findMatchingFact(e,t){if(!e||0===e.length)return null;const i=e.filter(e=>this.matchesPeriod(e,t));if(0===i.length)return null;const o=i.filter(e=>this.matchesDimensions(e,t));if(0===o.length)return null;if(o.length>1&&t.unit){const e=o.find(e=>this.matchesUnit(e,t));if(e)return e}return o[0]}static matchesPeriod(e,t){const i=this.parsePeriod(e.period);return"instant"===t.periodType&&t.periodInstantDate?i.isInstant&&i.instantDate===t.periodInstantDate:"duration"===t.periodType&&t.periodStartDate&&t.periodEndDate?!i.isInstant&&i.startDate===t.periodStartDate&&i.endDate===t.periodEndDate:t.periodInstantDate?i.isInstant&&i.instantDate===t.periodInstantDate:!t.periodStartDate||!t.periodEndDate||!i.isInstant&&i.startDate===t.periodStartDate&&i.endDate===t.periodEndDate}static matchesDimensions(e,t){const i=e.dimensions||[],o=this.extractDimensionsFromContext(t);if(0===o.length)return 0===i.length;if(0===i.length&&o.length>0)return!1;if(i.length!==o.length)return!1;return o.every(e=>i.some(t=>{if(!(this.normalizeAxisId(t.dimension)===this.normalizeAxisId(e.axisId)))return!1;if("explicit"===t.dimensionType&&e.memberId){return this.normalizeMemberId(t.member||"")===this.normalizeMemberId(e.memberId)}return!("typed"!==t.dimensionType||!e.isTyped)}))}static matchesUnit(e,t){if(!t.unit||!e.unitMeasure)return!0;return this.normalizeUnit(e.unitMeasure)===this.normalizeUnit(t.unit)}static parsePeriod(e){if(e.includes(" / ")){const[t,i]=e.split(" / ").map(e=>e.trim());return{isInstant:!1,startDate:t,endDate:i}}return{isInstant:!0,instantDate:e.trim()}}static extractDimensionsFromContext(e){if(!e.dimensionData)return[];const t=[];return e.dimensionData.combinations&&e.dimensionData.combinations.length>0&&e.dimensionData.combinations.forEach(e=>{t.push({axisId:e.axisId,memberId:e.memberId})}),e.dimensionData.typedMembers&&e.dimensionData.typedMembers.length>0&&e.dimensionData.typedMembers.forEach(e=>{t.push({axisId:e.axisId,memberId:"[typed]",isTyped:!0})}),t}static normalizeAxisId(e){if(!e)return"";if(e.includes(":")){const t=e.split(":");return t[1]||t[0]}if(e.includes("_")){e.split("_");const t=e.lastIndexOf("_");if(t>0)return e.substring(t+1)}return e}static normalizeMemberId(e){if(!e)return"";if(e.includes(":")){const t=e.split(":");return t[1]||t[0]}if(e.includes("_")){const t=e.lastIndexOf("_");if(t>0)return e.substring(t+1)}return e}static normalizeUnit(e){if(!e)return"";const t=e.split(":");return t.length>1?t[1]:t[0]}static extractTypedValues(e,t){const i={};if(!e||0===e.length)return i;return e.filter(e=>this.matchesPeriod(e,t)&&this.matchesDimensions(e,t)).forEach(e=>{e.dimensions&&e.dimensions.forEach(e=>{if("typed"===e.dimensionType&&e.typedMemberValue){const t=this.normalizeAxisId(e.dimension);i[t]=e.typedMemberValue}})}),i}static debugMatch(e,t){t.conceptId,t.columnId,"instant"===t.periodType?t.periodInstantDate:(t.periodStartDate,t.periodEndDate),this.extractDimensionsFromContext(t),e.map(e=>{var t;return{value:e.value,period:e.period,dimensions:null==(t=e.dimensions)?void 0:t.map(e=>`${e.dimension}:${e.member}`)}});const i=this.findMatchingFact(e,t);i&&i.value}}const Ie=1,we=2,Se=3,Ce=4,$e=5,ke=e=>"string"==typeof e?e.trim().toLowerCase():"",Te=e=>e.split(/[^\p{L}\p{N}]+/u).filter(Boolean);function Ee(e){const t=e.replace(/[/#:]+$/,""),i=Math.max(t.lastIndexOf(":"),t.lastIndexOf("/"),t.lastIndexOf("#"));return i>=0?t.slice(i+1):t}function Fe(e,t){var i,o;const r=[t.id,null==(i=t.metadata)?void 0:i.roleURI].map(ke).filter(Boolean),n=[t.title,t.description,null==(o=t.metadata)?void 0:o.originalRole].map(ke).filter(Boolean),a=r.map(Ee),s=/\s/.test(e)?null:Ee(e);if(r.includes(e))return{tier:Ie,looseness:0};if(s&&a.includes(s))return{tier:we,looseness:0};if(n.includes(e))return{tier:Se,looseness:0};const l=s??e,d=[...a,...n];let c=null;for(const u of d)if(u.includes(l)||l.includes(u)){const e=Math.abs(u.length-l.length);(null===c||e<c)&&(c=e)}if(null!==c)return{tier:Ce,looseness:c};const p=new Set(Te(l));if(!p.size)return null;for(const u of d){const e=new Set(Te(u));if([...p].every(t=>e.has(t))){const t=e.size-p.size;(null===c||t<c)&&(c=t)}}return null!==c?{tier:$e,looseness:c}:null}function Re(e){var t,i;if(!e)return[];const o=[];if(null==(t=e.combinations)?void 0:t.length)for(const r of e.combinations)o.push({key:r.axisId||r.memberLabel,label:r.memberLabel});else{const t=e.selectedDimensions;for(const e of t??[])!e.isTyped&&e.memberLabel&&o.push({key:e.axisId,label:e.memberLabel})}if(null==(i=e.typedMembers)?void 0:i.length)for(const r of e.typedMembers)o.push({key:r.axisId,label:r.axisLabel});return 0===o.length&&e.memberLabel&&(e.axisId||e.axisLabel)&&o.push({key:e.axisId||e.axisLabel,label:e.memberLabel}),o}const Me={"nl-types:formattedExplanationItemType":{fieldType:"textarea",placeholder:E.t("field.enterDetailedExplanation")},"nl-types:monetaryNoDecimals20ItemType":{fieldType:"number",htmlInputType:"text",inputMode:"decimal",allowDecimals:!1,step:1,placeholder:E.t("field.enterAmountNoDecimals")},"xbrli:monetaryItemType":{fieldType:"currency",htmlInputType:"text",inputMode:"decimal",allowDecimals:!0,step:.01,placeholder:E.t("field.enterCurrency")},"xbrli:stringItemType":{fieldType:"text",htmlInputType:"text",placeholder:E.t("field.enterText")},"xbrli:dateItemType":{fieldType:"date",htmlInputType:"date",min:"1900-01-01",max:"2100-12-31"},"xbrli:dateTimeItemType":{fieldType:"datetime",htmlInputType:"datetime-local",min:"1900-01-01T00:00",max:"2100-12-31T23:59"},"xbrli:integerItemType":{fieldType:"integer",htmlInputType:"text",inputMode:"numeric",allowDecimals:!1,step:1,placeholder:E.t("field.enterWholeNumber")},"xbrli:nonNegativeIntegerItemType":{fieldType:"integer",htmlInputType:"text",inputMode:"numeric",allowDecimals:!1,min:0,step:1,placeholder:E.t("field.enterPositiveNumber")},"xbrli:positiveIntegerItemType":{fieldType:"integer",htmlInputType:"text",inputMode:"numeric",allowDecimals:!1,min:1,step:1,placeholder:E.t("field.enterPositiveNumber")},"xbrli:decimalItemType":{fieldType:"decimal",htmlInputType:"text",inputMode:"decimal",allowDecimals:!0,step:"any",placeholder:E.t("field.enterDecimalValue")},"xbrli:sharesItemType":{fieldType:"number",htmlInputType:"text",inputMode:"decimal",allowDecimals:!0,min:0,step:.01,placeholder:E.t("field.enterNumberOfShares")},"xbrli:shares":{fieldType:"number",htmlInputType:"text",inputMode:"decimal",allowDecimals:!0,min:0,step:.01,placeholder:E.t("field.enterNumberOfShares")},"xbrli:gYearItemType":{fieldType:"number",htmlInputType:"text",inputMode:"numeric",allowDecimals:!1,min:1900,max:2100,step:1,placeholder:E.t("field.yearFormat")},"xbrli:booleanItemType":{fieldType:"boolean"},"xbrli:pureItemType":{fieldType:"percentage",htmlInputType:"text",inputMode:"decimal",allowDecimals:!0,step:.01,placeholder:E.t("field.enterPercentage")},"xbrli:percentItemType":{fieldType:"percentage",htmlInputType:"text",inputMode:"decimal",allowDecimals:!0,step:.01,placeholder:E.t("field.enterPercentage")},"xbrli:emailItemType":{fieldType:"email",htmlInputType:"email",placeholder:E.t("field.emailPlaceholder")},"xbrli:urlItemType":{fieldType:"url",htmlInputType:"url",placeholder:E.t("field.urlPlaceholder")},"xbrli:telephoneItemType":{fieldType:"tel",htmlInputType:"tel",placeholder:E.t("field.phonePlaceholder")}};function je(e,t){if(!e)return{fieldType:"text",htmlInputType:"text",placeholder:E.t("field.enterValue")};if(t&&t.length>0){const i=Ve(e,t);if(i.length>0){return ze(i,t)}}if(Me[e])return Me[e];const i=e.toLowerCase();if(i.includes("monetary"))return i.includes("nodecimals")||i.includes("no-decimals")?{fieldType:"number",htmlInputType:"text",inputMode:"decimal",allowDecimals:!1,step:1,placeholder:E.t("field.enterAmountNoDecimals")}:{fieldType:"currency",htmlInputType:"text",inputMode:"decimal",allowDecimals:!0,step:.01,placeholder:E.t("field.enterCurrency")};if(i.includes("explanation")||i.includes("description")||i.includes("notes")||i.includes("formatted"))return{fieldType:"textarea",placeholder:E.t("field.enterDetailedInformation")};if(i.includes("date"))return i.includes("time")?{fieldType:"datetime",htmlInputType:"datetime-local",min:"1900-01-01T00:00",max:"2100-12-31T23:59"}:{fieldType:"date",htmlInputType:"date",min:"1900-01-01",max:"2100-12-31"};if(i.includes("boolean")||i.includes("bool"))return{fieldType:"boolean"};if(i.includes("integer")||i.includes("int")){const e=i.includes("nonnegative")||i.includes("non-negative");return{fieldType:"integer",htmlInputType:"text",inputMode:"numeric",allowDecimals:!1,min:i.includes("positive")?1:e?0:void 0,step:1,placeholder:E.t("field.enterWholeNumber")}}return i.includes("decimal")||i.includes("numeric")||i.includes("number")?{fieldType:"decimal",htmlInputType:"text",inputMode:"decimal",allowDecimals:!0,step:"any",placeholder:E.t("field.enterDecimalValue")}:i.includes("percent")||i.includes("pure")?{fieldType:"percentage",htmlInputType:"text",inputMode:"decimal",allowDecimals:!0,step:.01,placeholder:E.t("field.enterPercentage")}:{fieldType:"text",htmlInputType:"text",placeholder:E.t("field.enterValue")}}function Ae(e){return"textarea"===e}function Pe(e){return"boolean"===e}function Le(e){return["number","decimal","integer","currency","percentage"].includes(e)}function Ne(e){return"select"===e}function Ve(e,t){const i=[];if(!e)return i;if(!t||0===t.length)return i.push(e),i;let o=e;const r=new Set;for(;o;){if(i.push(o),r.has(o)){console.warn(`Circular reference detected in datatype hierarchy for type: ${o}`);break}r.add(o);const e=t.find(e=>e.type===o);if(!e||!e.basetype||""===e.basetype.trim())break;o=e.basetype}return i}function Oe(e,t){if(e&&0!==e.length&&t&&0!==t.length)for(const i of e){const e=t.find(e=>e.type===i);if(e&&e.enumerations&&e.enumerations.length>0)return e.enumerations.map(e=>({id:e.id||e.value,value:e.value,label:e.value}))}}function ze(e,t){if(!e||0===e.length)return{fieldType:"text",htmlInputType:"text",placeholder:E.t("field.enterValue")};if(t&&t.length>0){const i=Oe(e,t);if(i&&i.length>0)return{fieldType:"select",enumerations:i,placeholder:E.t("field.selectOption")}}const i=e.map(e=>e.toLowerCase()),o=i.join("|");if(e.some(e=>"nl-types:formattedExplanationItemType"===e)||o.includes("formattedexplanation")||o.includes("formatted")&&o.includes("explanation"))return{fieldType:"textarea",placeholder:E.t("field.enterDetailedExplanation")};if(i.some(e=>e.includes("date")))return o.includes("datetime")||o.includes("time")?{fieldType:"datetime",htmlInputType:"datetime-local",min:"1900-01-01T00:00",max:"2100-12-31T23:59"}:{fieldType:"date",htmlInputType:"date",min:"1900-01-01",max:"2100-12-31"};if(i.some(e=>e.includes("boolean")||e.includes("bool")))return{fieldType:"boolean"};if(i.some(e=>e.includes("integer")||"integer"===e)){const e=o.includes("nonnegative")||o.includes("non-negative");return{fieldType:"integer",htmlInputType:"text",inputMode:"numeric",allowDecimals:!1,min:o.includes("positive")?1:e?0:void 0,step:1,placeholder:E.t("field.enterWholeNumber")}}return i.some(e=>e.includes("percent")||e.includes("pure"))?{fieldType:"percentage",htmlInputType:"text",inputMode:"decimal",allowDecimals:!0,step:.01,placeholder:E.t("field.enterPercentage")}:i.some(e=>e.includes("decimal")||"decimal"===e)?o.includes("monetary")||o.includes("currency")?o.includes("nodecimals")||o.includes("no-decimals")||o.includes("nodecimals20")?{fieldType:"number",htmlInputType:"text",inputMode:"decimal",allowDecimals:!1,step:1,placeholder:E.t("field.enterAmountNoDecimals")}:{fieldType:"currency",htmlInputType:"text",inputMode:"decimal",allowDecimals:!0,step:.01,placeholder:E.t("field.enterCurrency")}:{fieldType:"decimal",htmlInputType:"text",inputMode:"decimal",allowDecimals:!0,step:"any",placeholder:E.t("field.enterDecimalValue")}:e.some(e=>"xbrli:stringItemType"===e)||i.some(e=>"string"===e||e.includes("stringitem"))?{fieldType:"text",htmlInputType:"text",placeholder:E.t("field.enterText")}:{fieldType:"text",htmlInputType:"text",placeholder:E.t("field.enterValue")}}class Je{static validateConceptValue(e,t,i){if(null==t||""===t)return{valid:!0,errors:[]};if(!e||!i||0===i.length)return{valid:!0,errors:[]};const o=this.findDatatype(e,i);return o&&o.validation?this.validateAgainstRules(t,o.validation):{valid:!0,errors:[]}}static validateAgainstRules(e,t){const i=[];if(null==e||""===e)return{valid:!0,errors:[]};if(!t)return{valid:!0,errors:[]};const o=String(e);if(t.pattern){const e=this.validatePattern(o,t.pattern);e&&i.push(e)}if(void 0!==t.length){const e=this.validateExactLength(o,t.length);e&&i.push(e)}if(void 0!==t.minLength){const e=this.validateMinLength(o,t.minLength);e&&i.push(e)}if(void 0!==t.maxLength){const e=this.validateMaxLength(o,t.maxLength);e&&i.push(e)}if(void 0!==t.totalDigits){const e=this.validateTotalDigits(o,t.totalDigits);e&&i.push(e)}return{valid:0===i.length,errors:i}}static findDatatype(e,t){let i=t.find(t=>t.type===e);if(i)return i;const o=new Set;let r=e;for(;r&&!o.has(r)&&(o.add(r),i=t.find(e=>e.type===r),i);){if(i.validation)return i;r=i.basetype}}static validatePattern(e,t){try{if(!new RegExp(`^${t}$`).test(e))return{type:"pattern",message:E.t("xbrlValidation.patternMismatch",{pattern:t}),expectedValue:t,actualValue:e}}catch(i){return console.error(`Invalid regex pattern: ${t}`,i),{type:"pattern",message:E.t("xbrlValidation.invalidPattern",{pattern:t}),expectedValue:t,actualValue:e}}return null}static validateExactLength(e,t){return e.length!==t?{type:"length",message:E.t("xbrlValidation.exactLength",{required:t,current:e.length}),expectedValue:t,actualValue:e.length}:null}static validateMinLength(e,t){return e.length<t?{type:"minLength",message:E.t("xbrlValidation.minLength",{required:t,current:e.length}),expectedValue:t,actualValue:e.length}:null}static validateMaxLength(e,t){return e.length>t?{type:"maxLength",message:E.t("xbrlValidation.maxLength",{required:t,current:e.length}),expectedValue:t,actualValue:e.length}:null}static validateTotalDigits(e,t){const i=e.replace(/[^\d]/g,"");return i.length>t?{type:"totalDigits",message:E.t("xbrlValidation.totalDigits",{required:t,current:i.length}),expectedValue:t,actualValue:i.length}:null}static getValidationRulesSummary(e,t){if(!e||!t)return[];const i=this.findDatatype(e,t);if(!i||!i.validation)return[];const o=i.validation,r=[];return o.pattern&&r.push(E.t("xbrlValidation.ruleSummaryPattern",{pattern:o.pattern})),void 0!==o.length&&r.push(E.t("xbrlValidation.ruleSummaryExactLength",{required:o.length})),void 0!==o.minLength&&r.push(E.t("xbrlValidation.ruleSummaryMinLength",{required:o.minLength})),void 0!==o.maxLength&&r.push(E.t("xbrlValidation.ruleSummaryMaxLength",{required:o.maxLength})),void 0!==o.totalDigits&&r.push(E.t("xbrlValidation.ruleSummaryTotalDigits",{required:o.totalDigits})),r}}function Be(e){return e.length>=1&&e[0].length>=1&&e[0].length<=3&&e.slice(1).every(e=>3===e.length)}function Ue(e,t={}){const i=!1!==t.allowDecimals,o=!1!==t.allowNegative,r=(t.locale??"nl-NL").toLowerCase().startsWith("nl");let n=e.trim();if(""===n)return{ok:!1,reason:"unreadable"};if(n=n.replace(/EUR/gi,"").replace(/[€'\s]/g,""),""===n)return{ok:!1,reason:"unreadable"};let a=!1;const s=/^\((.*)\)$/.exec(n);if(s&&(a=!0,n=s[1]),n.startsWith("+")?n=n.slice(1):n.startsWith("-")?(a=!0,n=n.slice(1)):n.endsWith("-")&&(a=!0,n=n.slice(0,-1)),""===n||!/^[0-9.,]+$/.test(n))return{ok:!1,reason:"unreadable"};const l=(n.match(/\./g)||[]).length,d=(n.match(/,/g)||[]).length;let c,p=!1;if(0===l&&0===d)c=n,p=!0;else if(l>0&&d>0){const e=n.lastIndexOf("."),t=n.lastIndexOf(","),i=e>t?".":",",o="."===i?",":".",r="."===i?l:d,a="."===i?e:t,s=[...n].every((e,t)=>e!==o||t<a);if(1!==r||!s)return{ok:!1,reason:"unreadable"};const p=n.slice(0,a),u=n.slice(a+1),h=p.split(o);if(!Be(h)||0===u.length)return{ok:!1,reason:"unreadable"};c=`${h.join("")}.${u}`}else if(l>=2||d>=2){const e=l>=2?".":",",t=n.split(e);if(!Be(t))return{ok:!1,reason:"unreadable"};c=t.join(""),p=!0}else{const e=1===l?".":",",t=n.indexOf(e),o=n.slice(0,t),a=n.slice(t+1);if(""===o||""===a)return{ok:!1,reason:"unreadable"};const s=3===a.length&&"0"!==o;if(r)if("."===e)i?c=`${o}.${a}`:s?(c=o+a,p=!0):c=`${o}.${a}`;else if(s){if(i)return{ok:!1,reason:"ambiguous"};c=o+a,p=!0}else c=`${o}.${a}`;else if("."===e)c=`${o}.${a}`;else{if(!s)return{ok:!1,reason:"unreadable"};c=o+a,p=!0}}if(null===c)return{ok:!1,reason:"unreadable"};const u=Number(c);if(!Number.isFinite(u))return{ok:!1,reason:"unreadable"};if(a&&!o)return{ok:!1,reason:"negativeNotAllowed"};const h=a?-u:u;return i||p||h===Math.trunc(h)?{ok:!0,value:h}:{ok:!1,reason:"decimalsNotAllowed"}}var qe=Object.defineProperty,He=Object.getOwnPropertyDescriptor,We=(e,t,i,o)=>{for(var r,n=o>1?void 0:o?He(t,i):t,a=e.length-1;a>=0;a--)(r=e[a])&&(n=(o?r(t,i,n):r(n))||n);return o&&n&&qe(t,i,n),n};exports.JupiterFormField=class extends e.LitElement{constructor(){super(...arguments),this.defaultUnits=[],this.value=null,this.disabled=!1,this.locale="en-US",this.numberLocale="nl-NL",this.hideLabel=!1,this.mode="inputForm",this.globalDecimals="INF",this.typedMemberValues={},this._errors=[],this._xbrlErrors=[],this._touched=!1,this._showPeriodPopup=!1,this._availableUnits=[],this._numericDraftValue=null,this._focused=!1}willUpdate(e){var t;(e.has("value")||e.has("field"))&&this._validateField(),e.has("unit")&&this.unit&&(this.unit,this.conceptId,this.columnId,this.dispatchEvent(new CustomEvent("unit-change",{detail:{fieldId:null==(t=this.field)?void 0:t.id,conceptId:this.conceptId,columnId:this.columnId,unit:this.unit},bubbles:!0,composed:!0}))),e.has("field")&&this.field&&(this.conceptId.includes("DescriptionLocationNL")||this.columnId.startsWith("col-"))&&(this.conceptId,this.columnId,this.field.periodType,this.field.periodStartDate,this.field.periodEndDate,this.field.periodInstantDate)}_validateField(){var e;(null==(e=this.field)?void 0:e.validation)&&(this._errors=$.validateField(this.field.id,this.conceptId,this.columnId,this.value,this.field.type,this.field.validation))}_isRoundingLevelConcept(){return!!this.conceptId&&this.conceptId.includes("DocumentIntendedRoundingLevel")}_renderLockIcon(){const t=this.prefilledTooltip||E.t("field.prefilledLocked");return e.html`
23
+ <svg class="lock-icon" viewBox="0 0 24 24" role="img" aria-label="${t}">
24
+ <title>${t}</title>
25
+ <path fill="currentColor" d="M12 1a5 5 0 0 0-5 5v3H6a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V11a2 2 0 0 0-2-2h-1V6a5 5 0 0 0-5-5zm-3 8V6a3 3 0 0 1 6 0v3z"/>
26
+ </svg>
27
+ `}_isNumericField(){var e;return Le(je(this.conceptType,this.datatypes).fieldType||(null==(e=this.field)?void 0:e.type)||"text")||"number"===this._getInputType()}_isIntermediateNumericValue(e){return"-"===e||"."===e||"-."===e||","===e||"-,"===e}_getNumberParseOptions(){const e=je(this.conceptType,this.datatypes),t=void 0===e.min||"number"==typeof e.min&&e.min<0;return{locale:this.numberLocale,allowDecimals:!1!==e.allowDecimals,allowNegative:t}}_numberParseErrorMessage(e,t){switch(e){case"decimalsNotAllowed":return E.t("field.noDecimalsAllowed");case"negativeNotAllowed":return E.t("field.negativeNotAllowed");case"ambiguous":return E.t("field.ambiguousNumber",{value:t});default:return E.t("field.invalidNumber",{value:t})}}_handleInput(e){const t=e.target;if(t instanceof HTMLInputElement&&("date"===t.type||"datetime-local"===t.type)){if("change"!==e.type)return}else if("INPUT"===t.tagName&&"checkbox"!==t.type&&"change"===e.type)return;const i=this.value;let o=t.value;if(this._isNumericField()){const e=t.value;if(this._numericDraftValue=e,""===e||this._isIntermediateNumericValue(e))o=null;else{const t=Ue(e,this._getNumberParseOptions());o=t.ok?t.value:null}}else"boolean"===this.field.type?(o=t.checked,this._numericDraftValue=null):this._numericDraftValue=null;this.value=o,this._touched=!0,this.dispatchEvent(new CustomEvent("field-change",{detail:{fieldId:this.field.id,conceptId:this.conceptId,columnId:this.columnId,value:o,oldValue:i},bubbles:!0}))}_handleFocus(){this._focused=!0,this.dispatchEvent(new CustomEvent("field-focus",{detail:{fieldId:this.field.id,conceptId:this.conceptId,columnId:this.columnId},bubbles:!0}))}_handleBlur(){this._focused=!1;let e=!1,t=null;if(this._isNumericField()&&null!==this._numericDraftValue){e=!0;const i=this._numericDraftValue;if(""===i||this._isIntermediateNumericValue(i))this.value=null,this._numericDraftValue=null;else{const e=Ue(i,this._getNumberParseOptions());e.ok?(this.value=e.value,this._numericDraftValue=null):(this.value=null,t={type:"invalidNumber",message:this._numberParseErrorMessage(e.reason,i)})}}if(this._isPercentItemType()&&e&&null!==this.value&&void 0!==this.value){const e=Number(this.value);if(!isNaN(e)&&Math.abs(e)>1){this.value=e/100;const t=e;this.dispatchEvent(new CustomEvent("field-change",{detail:{fieldId:this.field.id,conceptId:this.conceptId,columnId:this.columnId,value:this.value,oldValue:t},bubbles:!0}))}}this._touched=!0,this._validateXBRLDatatype(),this._validateUnitSelection(),t&&(this._xbrlErrors=[t,...this._xbrlErrors]),this.field.id,this.conceptId,this.columnId,this._xbrlErrors,this.value,this.dispatchEvent(new CustomEvent("field-blur",{detail:{fieldId:this.field.id,conceptId:this.conceptId,columnId:this.columnId,xbrlValidationErrors:this._xbrlErrors},bubbles:!0,composed:!0})),this._xbrlErrors.length}_isMonetaryType(){if(!this.conceptType||!this.datatypes)return!1;if(this.conceptType.includes("monetary")||this.conceptType.includes("Monetary"))return!0;return Ve(this.conceptType,this.datatypes).some(e=>e.includes("monetary")||e.includes("Monetary"))}_isPercentItemType(){if(!this.conceptType)return!1;if(this.conceptType.toLowerCase().includes("percent"))return!0;if(!this.datatypes)return!1;return Ve(this.conceptType,this.datatypes).some(e=>e.toLowerCase().includes("percent"))}_handleKeyDown(e){const t=e.target;if(!this._isNumericField())return;if(["Backspace","Delete","Tab","Escape","Enter","ArrowLeft","ArrowRight","ArrowUp","ArrowDown","Home","End"].includes(e.key))return;if(e.ctrlKey||e.metaKey)return;const i=je(this.conceptType,this.datatypes),o=void 0===i.min||"number"==typeof i.min&&i.min<0;("-"!==e.key||!o||t.value.includes("-")||0!==t.selectionStart&&0!==t.value.length)&&("."!==e.key||!1===i.allowDecimals||t.value.includes("."))&&","!==e.key&&"€"!==e.key&&"("!==e.key&&")"!==e.key&&" "!==e.key&&(e.key>="0"&&e.key<="9"||e.preventDefault())}_validateXBRLDatatype(){if(this._xbrlErrors=[],null===this.value||void 0===this.value||""===this.value)return;if(!this.conceptType||!this.datatypes||0===this.datatypes.length)return;const e=Je.validateConceptValue(this.conceptType,this.value,this.datatypes);e.valid?this.conceptId:(this._xbrlErrors=e.errors,this.conceptId,this.conceptType,this.value,this._xbrlErrors)}_validateUnitSelection(){if(null===this.value||void 0===this.value||""===this.value)return;const e=this._collectUnitsForConceptType();if(0===e.length)return;if(this.unit)return;const t=e.find(e=>!0===e.isDefault)??(1===e.length?e[0]:null);if(t)return this.unit=t.id,this.dispatchEvent(new CustomEvent("unit-change",{detail:{fieldId:this.field.id,conceptId:this.conceptId,columnId:this.columnId,unit:this.unit},bubbles:!0,composed:!0})),this.unit,void this.conceptId;this._xbrlErrors=[...this._xbrlErrors,{type:"unit",message:E.t("validation.unitRequired"),expectedValue:e.map(e=>e.label).join(", "),actualValue:""}],this.conceptId}_handlePeriodIconClick(){if(!this._isRoundingLevelConcept()){if(this._availableUnits=this._collectUnitsForConceptType(),this._availableUnits.length,this.conceptId,this._availableUnits,this.unit,this.conceptId,this.columnId,!this.unit&&this._availableUnits.length>0){let e=null;const t=this._availableUnits.find(e=>!0===e.isDefault);t?(e=t.id,t.id,t.label):1===this._availableUnits.length&&(e=this._availableUnits[0].id),e&&(this.unit=e,this.dispatchEvent(new CustomEvent("unit-change",{detail:{fieldId:this.field.id,conceptId:this.conceptId,columnId:this.columnId,unit:this.unit},bubbles:!0,composed:!0})))}else this.unit&&(this.unit,this.dispatchEvent(new CustomEvent("unit-change",{detail:{fieldId:this.field.id,conceptId:this.conceptId,columnId:this.columnId,unit:this.unit},bubbles:!0,composed:!0})));this._showPeriodPopup=!0}}_collectUnitsForConceptType(){if(!this.conceptType||!this.datatypes)return[];const e=Ve(this.conceptType,this.datatypes);this.conceptId,this.conceptType;for(const t of e){const e=this.datatypes.find(e=>e.type===t);if(e&&e.units&&Array.isArray(e.units)&&e.units.length>0)return e.units.length,e.units}return this.conceptId,[]}_closePeriodPopup(){this._showPeriodPopup=!1}_handleUnitChange(e){const t=e.target.value;this.conceptId,this.columnId,this.unit,this.unit=t,this.unit;const i={fieldId:this.field.id,conceptId:this.conceptId,columnId:this.columnId,unit:this.unit};this.dispatchEvent(new CustomEvent("unit-change",{detail:i,bubbles:!0,composed:!0}))}_handleDecimalsChange(e){const t=e.target.value.trim(),i=parseFloat(t),o=t&&!isNaN(i)?String(Math.abs(i)):""===t?"":t;this.decimals=o||void 0,this.dispatchEvent(new CustomEvent("decimals-change",{detail:{conceptId:this.conceptId,columnId:this.columnId,decimals:this.decimals},bubbles:!0,composed:!0}))}_handlePopupOverlayClick(e){e.target===e.currentTarget&&this._closePeriodPopup()}_ensureTextDialogStyles(){if(document.getElementById("jdf-text-dialog-styles"))return;const e=document.createElement("style");e.id="jdf-text-dialog-styles",e.textContent="\n dialog.jdf-text-entry-dialog {\n border: none; border-radius: 8px; padding: 0;\n max-width: 600px; width: 90vw;\n box-shadow: 0 8px 32px rgba(0,0,0,0.2); overflow: hidden;\n font-family: inherit;\n /* JDF-118: don't rely on the UA's default margin:auto centering — a host page's\n * { margin: 0 } reset wins over it and pins the dialog to the top-left corner.\n Position explicitly instead, independent of any margin. */\n position: fixed; top: 50%; left: 50%; transform: translate(-50%, -50%); margin: 0;\n }\n dialog.jdf-text-entry-dialog::backdrop { background: rgba(0,0,0,0.35); }\n .jdf-text-dialog-header {\n background: #f0f2f5; padding: 14px 20px;\n display: flex; align-items: center; justify-content: space-between;\n border-bottom: 1px solid #ddd;\n }\n .jdf-text-dialog-title {\n font-size: 15px; font-weight: 600; color: #333; margin: 0;\n font-family: inherit; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;\n }\n .jdf-text-dialog-close {\n flex-shrink: 0; width: 28px; height: 28px; border: none; background: transparent;\n font-size: 20px; line-height: 1; cursor: pointer; color: #666;\n border-radius: 4px; display: flex; align-items: center; justify-content: center;\n padding: 0; font-family: inherit; margin-left: 8px;\n }\n .jdf-text-dialog-close:hover { background: #ddd; color: #333; }\n .jdf-text-dialog-body { padding: 20px 20px 12px; }\n .jdf-text-dialog-textarea {\n /* JDF-118: at least 60vh tall by default, growing further with content (up to 75vh,\n see the input listener below), instead of the old cramped 200px/50vh cap. */\n width: 100%; min-height: 60vh; max-height: 75vh;\n padding: 10px 12px; font-size: 14px; font-family: inherit;\n border: 1px solid #ddd; border-radius: 4px;\n box-sizing: border-box; resize: vertical; line-height: 1.5;\n color: #333; background: #fff;\n }\n .jdf-text-dialog-textarea:focus {\n outline: none; border-color: #1976d2;\n box-shadow: 0 0 0 2px rgba(25,118,210,0.2);\n }\n .jdf-text-dialog-char-count {\n margin-top: 4px; font-size: 12px; color: #888; text-align: right;\n font-family: inherit;\n }\n .jdf-text-dialog-actions {\n display: flex; justify-content: flex-end; gap: 8px;\n padding: 12px 20px 16px; border-top: 1px solid #eee;\n }\n .jdf-text-dialog-cancel {\n padding: 7px 18px; border: 1px solid #ddd; border-radius: 4px;\n background: transparent; color: #555; font-size: 14px;\n cursor: pointer; font-family: inherit;\n }\n .jdf-text-dialog-cancel:hover { background: #f5f5f5; }\n .jdf-text-dialog-save {\n padding: 7px 18px; border: none; border-radius: 4px;\n background: #1976d2; color: #fff; font-size: 14px;\n cursor: pointer; font-family: inherit; font-weight: 500;\n }\n .jdf-text-dialog-save:hover { background: #1565c0; }\n ",document.head.appendChild(e)}_openTextDialog(e,t){var i;this._ensureTextDialogStyles(),null==(i=document.getElementById("jdf-text-entry-dialog"))||i.remove();const o=document.createElement("dialog");o.id="jdf-text-entry-dialog",o.className="jdf-text-entry-dialog",o.setAttribute("role","dialog"),o.setAttribute("aria-modal","true"),o.setAttribute("aria-labelledby","jdf-text-dialog-title"),o.innerHTML='\n <div class="jdf-text-dialog-header">\n <h3 class="jdf-text-dialog-title" id="jdf-text-dialog-title"></h3>\n <button class="jdf-text-dialog-close" type="button" aria-label="Close">×</button>\n </div>\n <div class="jdf-text-dialog-body">\n <textarea class="jdf-text-dialog-textarea" spellcheck="true"></textarea>\n <div class="jdf-text-dialog-char-count"></div>\n </div>\n <div class="jdf-text-dialog-actions">\n <button class="jdf-text-dialog-cancel" type="button"></button>\n <button class="jdf-text-dialog-save" type="button"></button>\n </div>\n ';const r=t,n=o.querySelector(".jdf-text-dialog-title");n.textContent=r||t,n.title=r||t,o.querySelector(".jdf-text-dialog-cancel").textContent=E.t("field.cancel"),o.querySelector(".jdf-text-dialog-save").textContent=E.t("field.save");const a=o.querySelector(".jdf-text-dialog-textarea"),s=o.querySelector(".jdf-text-dialog-char-count");a.value=e,s.textContent=`${e.length} ${E.t("field.characters")}`;const l=()=>{a.style.height="auto";const e=.75*window.innerHeight;a.style.height=`${Math.min(a.scrollHeight,e)}px`};a.addEventListener("input",()=>{s.textContent=`${a.value.length} ${E.t("field.characters")}`,l()}),l(),o.querySelector(".jdf-text-dialog-close").addEventListener("click",()=>o.close()),o.querySelector(".jdf-text-dialog-cancel").addEventListener("click",()=>o.close()),o.querySelector(".jdf-text-dialog-save").addEventListener("click",()=>{const e=a.value,t=this.value;this.value=e,this._touched=!0,this.dispatchEvent(new CustomEvent("field-change",{detail:{fieldId:this.field.id,conceptId:this.conceptId,columnId:this.columnId,value:e,oldValue:t},bubbles:!0})),o.close()}),o.addEventListener("click",e=>{const t=o.getBoundingClientRect();(e.clientX<t.left||e.clientX>t.right||e.clientY<t.top||e.clientY>t.bottom)&&o.close()}),o.addEventListener("close",()=>o.remove()),document.body.appendChild(o),o.showModal(),a.focus()}_renderTextDialogTrigger(t,i,o=!1){const r=null!=t&&""!==String(t).trim(),n=r?String(t):"";return i?e.html`
28
+ <span class="text-readonly-label ${r?"":"empty"} ${o?"locked":""}"
29
+ title="${n}">${r?n:"—"}</span>
30
+ ${o?this._renderLockIcon():""}
31
+ `:r?e.html`
26
32
  <div class="text-filled">
27
- <span class="text-filled-label" title="${r}"
28
- @click="${()=>{var e;return this._openTextDialog(r,(null==(e=this.field)?void 0:e.label)||"")}}">
29
- ${r}
33
+ <span class="text-filled-label" title="${n}"
34
+ @click="${()=>{var e;return this._openTextDialog(n,(null==(e=this.field)?void 0:e.label)||"")}}">
35
+ ${n}
30
36
  </span>
31
37
  <button class="text-edit-btn" type="button"
32
- aria-label="${k.t("field.editText")}"
33
- @click="${()=>{var e;return this._openTextDialog(r,(null==(e=this.field)?void 0:e.label)||"")}}">
34
- ✎ ${k.t("field.editText")}
38
+ aria-label="${E.t("field.editText")}"
39
+ @click="${()=>{var e;return this._openTextDialog(n,(null==(e=this.field)?void 0:e.label)||"")}}">
40
+ ✎ ${E.t("field.editText")}
35
41
  </button>
36
42
  </div>
37
43
  `:e.html`
38
44
  <button class="text-trigger-btn" type="button"
39
- aria-label="${k.t("field.addText")}"
45
+ aria-label="${E.t("field.addText")}"
40
46
  @click="${()=>{var e;return this._openTextDialog("",(null==(e=this.field)?void 0:e.label)||"")}}">
41
- + ${k.t("field.addText")}
47
+ <span class="text-trigger-plus" aria-hidden="true">+</span>
48
+ <span class="text-trigger-label">${E.t("field.addText")}</span>
42
49
  </button>
43
- `}_handlePeriodChange(e,t){const i=e.target.value;console.log(`📅 [FormField] Period change detected: type=${t}, value=${i}, conceptId=${this.conceptId}, columnId=${this.columnId}`),"instant"===t?this.periodInstantDate=i:"start"===t?this.periodStartDate=i:"end"===t&&(this.periodEndDate=i),console.log(`📅 [FormField] Updated local period values: startDate=${this.periodStartDate}, endDate=${this.periodEndDate}, instantDate=${this.periodInstantDate}`),this.dispatchEvent(new CustomEvent("period-change",{detail:{fieldId:this.field.id,conceptId:this.conceptId,columnId:this.columnId,periodType:this.field.periodType,periodStartDate:this.periodStartDate,periodEndDate:this.periodEndDate,periodInstantDate:this.periodInstantDate,unit:this.unit},bubbles:!0,composed:!0})),console.log("🚀 [FormField] Dispatched period-change event with detail:",{conceptId:this.conceptId,columnId:this.columnId,periodType:this.field.periodType})}_handleCrossRoleTypedMemberChange(e,t){const i=e.target.value;this.typedMemberValues={...this.typedMemberValues,[t]:i},this.dispatchEvent(new CustomEvent("typed-member-change",{detail:{columnId:this.columnId,conceptId:this.conceptId,axisId:t,value:i},bubbles:!0,composed:!0}))}_renderReadonlyValue(t){const i=Me(this.conceptType,this.datatypes),o=i.fieldType||this.field.type||"text";let r;if("boolean"===o||Pe(o))r=t?k.t("form.yes"):k.t("form.no");else if("select"===o||"select"===this.field.type){const e=(i.enumerations||this.field.options||[]).find(e=>e.value===t);r=e?e.label||e.value:t??""}else r=null!=t?String(t):"";const n=""===r||null==r,a=this._isMonetaryType();return e.html`<span class="readonly-value ${n?"empty":""} ${a?"monetary":""}">${n?"—":r}</span>`}_renderInput(t=this.value,i=this.disabled){if("readonly"===this.mode)return this._renderReadonlyValue(t);const o=this._errors.some(e=>"error"===e.severity),r=this._errors.some(e=>"warning"===e.severity),n=`field-input ${o?"error":r?"warning":""} ${this._isMonetaryType()?"monetary":""}`,a=`${this.conceptId}__${this.columnId}`,s=`data[${this.conceptId}][${this.columnId}]`,l=Me(this.conceptType,this.datatypes);this.conceptType;const d=l.fieldType||this.field.type||"text";if("textarea"===d||Ae(d))return this._renderTextDialogTrigger(t,i||this.field.disabled||!1);if("select"===d||"select"===this.field.type){const o=l.enumerations||this.field.options||[];return e.html`
50
+ `}_handlePeriodChange(e,t){const i=e.target.value;this.conceptId,this.columnId,"instant"===t?this.periodInstantDate=i:"start"===t?this.periodStartDate=i:"end"===t&&(this.periodEndDate=i),this.periodStartDate,this.periodEndDate,this.periodInstantDate,this.dispatchEvent(new CustomEvent("period-change",{detail:{fieldId:this.field.id,conceptId:this.conceptId,columnId:this.columnId,periodType:this.field.periodType,periodStartDate:this.periodStartDate,periodEndDate:this.periodEndDate,periodInstantDate:this.periodInstantDate,unit:this.unit},bubbles:!0,composed:!0})),this.conceptId,this.columnId,this.field.periodType}_handleCrossRoleTypedMemberChange(e,t){const i=e.target.value;this.typedMemberValues={...this.typedMemberValues,[t]:i},this.dispatchEvent(new CustomEvent("typed-member-change",{detail:{columnId:this.columnId,conceptId:this.conceptId,axisId:t,value:i},bubbles:!0,composed:!0}))}_renderReadonlyValue(t){const i=je(this.conceptType,this.datatypes),o=i.fieldType||this.field.type||"text";let r;if("boolean"===o||Pe(o))r=t?E.t("form.yes"):E.t("form.no");else if("select"===o||"select"===this.field.type){const e=(i.enumerations||this.field.options||[]).find(e=>e.value===t);r=e?e.label||e.value:t??""}else r=null!=t?String(t):"";const n=""===r||null==r,a=this._isMonetaryType();return e.html`<span class="readonly-value ${n?"empty":""} ${a?"monetary":""}">${n?"—":r}</span>`}_renderInput(t=this.value,i=this.disabled,o=!1){if("readonly"===this.mode)return this._renderReadonlyValue(t);const r=this._errors.some(e=>"error"===e.severity),n=this._errors.some(e=>"warning"===e.severity),a=`field-input ${r?"error":n?"warning":""} ${this._isMonetaryType()?"monetary":""} ${o?"locked":""}`,s=`${this.conceptId}__${this.columnId}`,l=`data[${this.conceptId}][${this.columnId}]`,d=je(this.conceptType,this.datatypes);this.conceptType;const c=d.fieldType||this.field.type||"text";if("textarea"===c||Ae(c))return this._renderTextDialogTrigger(t,i||this.field.disabled||!1,o);if("select"===c||"select"===this.field.type){const o=d.enumerations||this.field.options||[];return e.html`
44
51
  <select
45
- id="${a}"
46
- name="${s}"
47
- class="${n}"
52
+ id="${s}"
53
+ name="${l}"
54
+ class="${a}"
48
55
  .value="${t??""}"
49
56
  ?disabled="${i||this.field.disabled}"
50
57
  @change="${this._handleInput}"
51
58
  @focus="${this._handleFocus}"
52
59
  @blur="${this._handleBlur}"
53
60
  >
54
- <option value="">${l.placeholder||k.t("field.select")}</option>
61
+ <option value="">${E.t("field.emptyOption")}</option>
55
62
  ${o.map(i=>{const o=i.value,r=i.label||i.value,n=i.disabled||!1;return e.html`
56
63
  <option
57
64
  value="${o}"
@@ -62,11 +69,11 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
62
69
  </option>
63
70
  `})}
64
71
  </select>
65
- `}if("boolean"===d||Pe(d))return e.html`
72
+ `}if("boolean"===c||Pe(c))return e.html`
66
73
  <div class="checkbox-container">
67
74
  <input
68
- id="${a}"
69
- name="${s}"
75
+ id="${s}"
76
+ name="${l}"
70
77
  type="checkbox"
71
78
  class="field-input"
72
79
  .checked="${Boolean(t)}"
@@ -77,19 +84,20 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
77
84
  />
78
85
  <span>${this.field.label}</span>
79
86
  </div>
80
- `;const c=l.htmlInputType||this._getInputType(),p=void 0!==l.step?l.step:je(d)?"any":void 0,u=l.min,h=l.max;let m;return m=this._isNumericField()&&null!==this._numericDraftValue?this._numericDraftValue:"percentage"===d&&null!=t&&""!==t?Number(t).toFixed(4):t??"","date"===c||"datetime-local"===c?e.html`
87
+ `;const p=d.htmlInputType||this._getInputType(),u=void 0!==d.step?d.step:Le(c)?"any":void 0,h=d.min,m=d.max;let f;f=this._isNumericField()&&null!==this._numericDraftValue?this._numericDraftValue:"percentage"===c&&null!=t&&""!==t?Number(t).toFixed(4):t??"";const b=d.placeholder||this.field.placeholder||"",g=`${s}-hint`,v=b?e.html`<span id="${g}" class="field-hint-sr-only">${b}</span>`:"";return"date"===p||"datetime-local"===p?e.html`
81
88
  <div class="date-wrapper">
82
89
  <input
83
- id="${a}"
84
- name="${s}"
85
- type="${c}"
86
- inputmode="${l.inputMode||""}"
87
- class="${n}"
88
- .value="${m}"
90
+ id="${s}"
91
+ name="${l}"
92
+ type="${p}"
93
+ inputmode="${d.inputMode||""}"
94
+ class="${a}"
95
+ .value="${f}"
89
96
  ?disabled="${i||this.field.disabled}"
90
- placeholder="${l.placeholder||this.field.placeholder||""}"
91
- min="${void 0!==u?u:""}"
92
- max="${void 0!==h?h:""}"
97
+ placeholder="${this._focused?b:""}"
98
+ aria-describedby="${b?g:e.nothing}"
99
+ min="${void 0!==h?h:""}"
100
+ max="${void 0!==m?m:""}"
93
101
  @input="${this._handleInput}"
94
102
  @change="${this._handleInput}"
95
103
  @focus="${this._handleFocus}"
@@ -100,29 +108,31 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
100
108
  a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14
101
109
  a2 2 0 0 0 2-2V6a2 2 0 0 0-2-2zm0 16H5V9h14z"/>
102
110
  </svg>
111
+ ${v}
103
112
  </div>
104
113
  `:e.html`
105
114
  <input
106
- id="${a}"
107
- name="${s}"
108
- type="${c}"
109
- inputmode="${l.inputMode||""}"
110
- class="${n}"
111
- .value="${m}"
115
+ id="${s}"
116
+ name="${l}"
117
+ type="${p}"
118
+ inputmode="${d.inputMode||""}"
119
+ class="${a}"
120
+ .value="${f}"
112
121
  ?disabled="${i||this.field.disabled}"
113
- placeholder="${l.placeholder||this.field.placeholder||""}"
114
- step="${void 0!==p?p:""}"
115
- min="${void 0!==u?u:""}"
116
- max="${void 0!==h?h:""}"
122
+ placeholder="${this._focused?b:""}"
123
+ aria-describedby="${b?g:e.nothing}"
124
+ step="${void 0!==u?u:""}"
125
+ min="${void 0!==h?h:""}"
126
+ max="${void 0!==m?m:""}"
117
127
  @input="${this._handleInput}"
118
128
  @change="${this._handleInput}"
119
129
  @focus="${this._handleFocus}"
120
130
  @blur="${this._handleBlur}"
121
131
  @keydown="${this._handleKeyDown}"
122
- />
123
- `}_getInputType(){switch(this.field.type){case"number":case"decimal":case"currency":case"percentage":default:return"text";case"date":return"date";case"datetime":return"datetime-local";case"email":return"email";case"url":return"url";case"tel":return"tel"}}_extractBaseConceptId(e){const t=e.split("__");return t.length>1?t.slice(0,-1).join("__"):e}_renderPeriodControls(){return"nl-cd_DescriptionLocationNL__a64trl"===this.conceptId&&console.log(`🔍 [FormField Render] Concept: ${this.conceptId}, ColumnId: ${this.columnId}, Field periodType: ${this.field.periodType}, Field periodStartDate: ${this.field.periodStartDate}, Field periodEndDate: ${this.field.periodEndDate}`),this.field.periodType?"instant"===this.field.periodType?e.html`
132
+ />${v}
133
+ `}_getInputType(){switch(this.field.type){case"number":case"decimal":case"currency":case"percentage":default:return"text";case"date":return"date";case"datetime":return"datetime-local";case"email":return"email";case"url":return"url";case"tel":return"tel"}}_extractBaseConceptId(e){const t=e.split("__");return t.length>1?t.slice(0,-1).join("__"):e}_renderPeriodControls(){return"nl-cd_DescriptionLocationNL__a64trl"===this.conceptId&&(this.conceptId,this.columnId,this.field.periodType,this.field.periodStartDate,this.field.periodEndDate),this.field.periodType?"instant"===this.field.periodType?e.html`
124
134
  <div class="period-controls">
125
- <label>${k.t("field.date")}:</label>
135
+ <label>${E.t("field.date")}:</label>
126
136
  <div class="date-wrapper">
127
137
  <input
128
138
  type="date"
@@ -141,7 +151,7 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
141
151
  </div>
142
152
  `:"duration"===this.field.periodType?e.html`
143
153
  <div class="period-controls">
144
- <label>${k.t("field.from")}:</label>
154
+ <label>${E.t("field.from")}:</label>
145
155
  <div class="date-wrapper">
146
156
  <input
147
157
  type="date"
@@ -157,7 +167,7 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
157
167
  a2 2 0 0 0 2-2V6a2 2 0 0 0-2-2zm0 16H5V9h14z"/>
158
168
  </svg>
159
169
  </div>
160
- <label>${k.t("field.to")}:</label>
170
+ <label>${E.t("field.to")}:</label>
161
171
  <div class="date-wrapper">
162
172
  <input
163
173
  type="date"
@@ -174,11 +184,11 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
174
184
  </svg>
175
185
  </div>
176
186
  </div>
177
- `:e.html``:e.html``}_renderPeriodPopup(){return e.html`
178
- <div class="period-popup-overlay" @click="${this._handlePopupOverlayClick}">
187
+ `:e.html``:e.html``}_handlePeriodPopupKeydown(e){"Escape"===e.key&&(e.stopPropagation(),this._closePeriodPopup())}_renderPeriodPopup(){return e.html`
188
+ <div class="period-popup-overlay" @click="${this._handlePopupOverlayClick}" @keydown="${this._handlePeriodPopupKeydown}">
179
189
  <div class="period-popup" @click="${e=>e.stopPropagation()}">
180
190
  <div class="period-popup-header">
181
- <div class="period-popup-title">${k.t("field.editPeriod")}</div>
191
+ <div class="period-popup-title">${E.t("field.editPeriod")}</div>
182
192
  <button class="period-popup-close" @click="${this._closePeriodPopup}">
183
193
  ×
184
194
  </button>
@@ -187,7 +197,7 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
187
197
  <div class="period-popup-content">
188
198
  ${"instant"===this.field.periodType?e.html`
189
199
  <div class="period-controls">
190
- <label>${k.t("field.date")}:</label>
200
+ <label>${E.t("field.date")}:</label>
191
201
  <div class="date-wrapper">
192
202
  <input
193
203
  type="date"
@@ -206,7 +216,7 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
206
216
  </div>
207
217
  `:e.html`
208
218
  <div class="period-controls">
209
- <label>${k.t("field.from")}:</label>
219
+ <label>${E.t("field.from")}:</label>
210
220
  <div class="date-wrapper">
211
221
  <input
212
222
  type="date"
@@ -226,7 +236,7 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
226
236
  </div>
227
237
  </div>
228
238
  <div class="period-controls">
229
- <label>${k.t("field.to")}:</label>
239
+ <label>${E.t("field.to")}:</label>
230
240
  <div class="date-wrapper">
231
241
  <input
232
242
  type="date"
@@ -247,14 +257,14 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
247
257
 
248
258
  ${this._availableUnits.length>0?e.html`
249
259
  <div class="period-controls">
250
- <label>${k.t("field.unit")}:</label>
260
+ <label>${E.t("field.unit")}:</label>
251
261
  <select
252
262
  .value="${this.unit||""}"
253
263
  @change="${this._handleUnitChange}"
254
264
  ?disabled="${this.disabled}"
255
265
  class="unit-select"
256
266
  >
257
- <option value="">${k.t("field.selectUnit")}</option>
267
+ <option value="">${E.t("field.selectUnit")}</option>
258
268
  ${this._availableUnits.map(t=>e.html`
259
269
  <option value="${t.id}" ?selected="${this.unit===t.id}">
260
270
  ${t.label||t.id}
@@ -266,12 +276,12 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
266
276
 
267
277
  ${this._isMonetaryType()?e.html`
268
278
  <div class="period-controls">
269
- <label>${k.t("field.scale")}:</label>
279
+ <label>${E.t("field.scale")}:</label>
270
280
  <input
271
281
  type="number"
272
282
  min="0"
273
283
  class="typed-member-input"
274
- placeholder="${k.t("field.leaveBlankForInf")}"
284
+ placeholder="${E.t("field.leaveBlankForInf")}"
275
285
  .value="${void 0!==this.decimals&&null!==this.decimals&&""!==this.decimals?this.decimals:"INF"!==this.globalDecimals?this.globalDecimals:""}"
276
286
  @input="${this._handleDecimalsChange}"
277
287
  ?disabled="${this.disabled}"
@@ -296,30 +306,35 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
296
306
  </div>
297
307
  </div>
298
308
  </div>
299
- `}render(){var t,i;if(!this.field)return console.error("[FormField] No field provided!",{conceptId:this.conceptId,columnId:this.columnId}),e.html`<div>Error: No field data</div>`;const o=!this.hideLabel&&"boolean"!==this.field.type,r=this.field.periodType&&("instant"===this.field.periodType||"duration"===this.field.periodType),n=this._extractBaseConceptId(this.conceptId),a="admin"!==this.mode&&this.masterData&&n in this.masterData,s=this._isRoundingLevelConcept();let l=null;if(this.facts&&this.facts.length>0&&!a){const e={conceptId:n,columnId:this.columnId,periodStartDate:this.periodStartDate||this.field.periodStartDate,periodEndDate:this.periodEndDate||this.field.periodEndDate,periodInstantDate:this.periodInstantDate||this.field.periodInstantDate,periodType:this.field.periodType,unit:this.unit,dimensionData:null==(t=this.column)?void 0:t.dimensionData},o=n.includes("BalanceSheet")||n.includes("CostsIncorporation")||n.includes("Assets");o&&this.facts.length>0&&console.log("🔍 [FormField] Attempting fact match for concept with dimensions:",{conceptId:n,columnId:this.columnId,factsCount:this.facts.length,cellContext:{period:"instant"===e.periodType?e.periodInstantDate:`${e.periodStartDate} / ${e.periodEndDate}`,dimensionData:e.dimensionData},facts:this.facts.map(e=>{var t;return{value:e.value,period:e.period,dimensions:null==(t=e.dimensions)?void 0:t.map(e=>`${e.dimension}:${e.member}`)}})});const r=De.findMatchingFact(this.facts,e);r?(l=r.value,(o||n.includes("StreetName"))&&console.log("✅ [FormField] Fact matched:",{conceptId:n,columnId:this.columnId,factValue:r.value,period:r.period,dimensions:null==(i=r.dimensions)?void 0:i.map(e=>`${e.dimension}:${e.member}`)})):o&&this.facts.length>0&&console.log("❌ [FormField] No fact match found for:",{conceptId:n,columnId:this.columnId,factsAvailable:this.facts.length})}const d=null!==this.value&&void 0!==this.value,c=a?this.masterData[n]:d?this.value:l,p=a||s||this.disabled||"readonly"===this.mode;return e.html`
309
+ `}render(){var t,i;if(!this.field)return console.error("[FormField] No field provided!",{conceptId:this.conceptId,columnId:this.columnId}),e.html`<div>Error: No field data</div>`;const o=!this.hideLabel&&"boolean"!==this.field.type,r=this.field.periodType&&("instant"===this.field.periodType||"duration"===this.field.periodType),n=this._extractBaseConceptId(this.conceptId),a="admin"!==this.mode&&this.masterData&&n in this.masterData,s=this._isRoundingLevelConcept();let l=null;if(this.facts&&this.facts.length>0&&!a){const e={conceptId:n,columnId:this.columnId,periodStartDate:this.periodStartDate||this.field.periodStartDate,periodEndDate:this.periodEndDate||this.field.periodEndDate,periodInstantDate:this.periodInstantDate||this.field.periodInstantDate,periodType:this.field.periodType,unit:this.unit,dimensionData:null==(t=this.column)?void 0:t.dimensionData},o=n.includes("BalanceSheet")||n.includes("CostsIncorporation")||n.includes("Assets");o&&this.facts.length>0&&(this.columnId,this.facts.length,"instant"===e.periodType?e.periodInstantDate:(e.periodStartDate,e.periodEndDate),e.dimensionData,this.facts.map(e=>{var t;return{value:e.value,period:e.period,dimensions:null==(t=e.dimensions)?void 0:t.map(e=>`${e.dimension}:${e.member}`)}}));const r=De.findMatchingFact(this.facts,e);r?(l=r.value,(o||n.includes("StreetName"))&&(this.columnId,r.value,r.period,null==(i=r.dimensions)||i.map(e=>`${e.dimension}:${e.member}`))):o&&this.facts.length>0&&(this.columnId,this.facts.length)}const d=null!==this.value&&void 0!==this.value,c=a?this.masterData[n]:d?this.value:l,p=a||s||this.disabled||"readonly"===this.mode,u=(a||s)&&"readonly"!==this.mode,h=je(this.conceptType,this.datatypes).fieldType||this.field.type||"text",m="textarea"===h||Ae(h);return e.html`
300
310
  <div class="field-container">
301
311
  ${o?e.html`
302
312
  <label class="field-label ${this.field.required?"required":""}">
303
313
  ${this.field.label}
304
314
  </label>
305
315
  `:""}
306
-
316
+
307
317
  <div class="field-wrapper">
308
- ${this._renderInput(c,p)}
309
-
310
- ${r&&"readonly"!==this.mode&&!s?e.html`
311
- <button
312
- class="period-icon-btn"
313
- type="button"
314
- tabindex="-1"
315
- @click="${this._handlePeriodIconClick}"
316
- title="Edit period"
317
- >
318
- 📅
319
- </button>
318
+ ${this._renderInput(c,p,u)}
319
+
320
+ ${u&&!m||r&&"readonly"!==this.mode&&!s?e.html`
321
+ <div class="field-trailing-icons">
322
+ ${u&&!m?this._renderLockIcon():""}
323
+ ${r&&"readonly"!==this.mode&&!s?e.html`
324
+ <button
325
+ class="period-icon-btn"
326
+ type="button"
327
+ tabindex="-1"
328
+ @click="${this._handlePeriodIconClick}"
329
+ title="Edit period"
330
+ >
331
+ 📅
332
+ </button>
333
+ `:""}
334
+ </div>
320
335
  `:""}
321
336
  </div>
322
-
337
+
323
338
  ${this._errors.length>0&&this._touched?e.html`
324
339
  <div class="field-errors">
325
340
  ${this._errors.map(t=>e.html`
@@ -379,6 +394,25 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
379
394
  overflow: hidden;
380
395
  }
381
396
 
397
+ /* JDF-110: holds the lock icon and/or the period icon together on the wrapper's right edge
398
+ (same rail regardless of the sibling input's own width — the date-wrapper next to it sizes
399
+ to its dd/mm/yyyy content, which is narrower than a full-width text/select input). Only one
400
+ auto-margin is needed to push the whole group right, however many icons it contains. */
401
+ .field-trailing-icons {
402
+ display: flex;
403
+ align-items: center;
404
+ gap: 2px;
405
+ margin-left: auto;
406
+ flex-shrink: 0;
407
+ }
408
+
409
+ .lock-icon {
410
+ width: 15px;
411
+ height: 15px;
412
+ color: var(--jupiter-locked-text, #6b6b6b);
413
+ flex-shrink: 0;
414
+ }
415
+
382
416
  .period-icon-btn {
383
417
  background: transparent;
384
418
  border: none;
@@ -391,10 +425,6 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
391
425
  border-radius: 4px;
392
426
  transition: background-color 0.2s;
393
427
  opacity: 0.7;
394
- /* Keep this icon on the wrapper's right edge (same rail as every other field type)
395
- regardless of the sibling input's own width — the date-wrapper next to it sizes to
396
- its dd/mm/yyyy content, which is narrower than a full-width text/select input. */
397
- margin-left: auto;
398
428
  flex-shrink: 0;
399
429
  }
400
430
 
@@ -582,6 +612,21 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
582
612
  cursor: not-allowed;
583
613
  }
584
614
 
615
+ /* JDF-109: screen-reader-only hint — the visible placeholder only shows on focus, but a
616
+ screen-reader user isn't shown "this cell looks empty" the way sighted users are, so the
617
+ hint stays available via aria-describedby regardless of focus. */
618
+ .field-hint-sr-only {
619
+ position: absolute;
620
+ width: 1px;
621
+ height: 1px;
622
+ padding: 0;
623
+ margin: -1px;
624
+ overflow: hidden;
625
+ clip: rect(0, 0, 0, 0);
626
+ white-space: nowrap;
627
+ border: 0;
628
+ }
629
+
585
630
  .field-input {
586
631
  width: 100%;
587
632
  padding: 6px 8px; /* Reduced padding for table cells */
@@ -606,6 +651,18 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
606
651
  cursor: not-allowed;
607
652
  }
608
653
 
654
+ /* JDF-110: a locked (masterData-prefilled / rounding-level) value must not look like the
655
+ greyed-out placeholder text a generic :disabled input gets — normal dark text on a subtly
656
+ tinted background instead, so it clearly reads as "filled" rather than "empty". Two classes
657
+ + :disabled beats the plain :disabled rule above on specificity. */
658
+ .field-input.locked:disabled {
659
+ /* !important: .field-input itself forces background: transparent !important, which would
660
+ otherwise always win over this tint regardless of selector specificity. */
661
+ background: var(--jupiter-locked-background, #eef2f7) !important;
662
+ color: var(--jupiter-locked-text, #333);
663
+ cursor: default;
664
+ }
665
+
609
666
  .field-input.error {
610
667
  border-color: var(--jupiter-error-color, #d32f2f);
611
668
  }
@@ -718,26 +775,52 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
718
775
  border-color: var(--jupiter-primary-color, #1976d2);
719
776
  }
720
777
 
721
- /* Text dialog trigger — empty state */
778
+ /* JDF-109: Text dialog trigger — empty state. A subtle "+" at rest (no dashed box, since an
779
+ empty cell should look empty) that expands to the full "Add text" label on hover/focus,
780
+ so the affordance is discoverable without every empty text cell shouting for attention. */
722
781
  .text-trigger-btn {
782
+ display: inline-flex;
783
+ align-items: center;
723
784
  flex: 1;
724
785
  min-width: 0;
725
786
  padding: 5px 8px;
726
- border: 1px dashed var(--jupiter-border-color, #bbb);
787
+ border: 1px solid transparent;
727
788
  border-radius: 4px;
728
789
  background: transparent;
729
- color: var(--jupiter-text-secondary, #888);
730
- font-size: 12px;
790
+ color: var(--jupiter-text-secondary, #999);
791
+ font-size: 13px;
731
792
  cursor: pointer;
732
- text-align: center;
733
793
  font-family: inherit;
734
794
  box-sizing: border-box;
735
795
  }
736
796
 
737
- .text-trigger-btn:hover {
797
+ .text-trigger-plus {
798
+ font-size: 14px;
799
+ line-height: 1;
800
+ }
801
+
802
+ .text-trigger-label {
803
+ display: inline-block;
804
+ max-width: 0;
805
+ overflow: hidden;
806
+ white-space: nowrap;
807
+ opacity: 0;
808
+ transition: max-width 0.15s ease, opacity 0.15s ease, margin-left 0.15s ease;
809
+ }
810
+
811
+ .text-trigger-btn:hover,
812
+ .text-trigger-btn:focus-visible {
738
813
  border-color: var(--jupiter-primary-color, #1976d2);
739
814
  color: var(--jupiter-primary-color, #1976d2);
740
815
  background: rgba(25, 118, 210, 0.04);
816
+ outline: none;
817
+ }
818
+
819
+ .text-trigger-btn:hover .text-trigger-label,
820
+ .text-trigger-btn:focus-visible .text-trigger-label {
821
+ max-width: 160px;
822
+ opacity: 1;
823
+ margin-left: 6px;
741
824
  }
742
825
 
743
826
  /* Text dialog trigger — filled state */
@@ -796,6 +879,15 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
796
879
  min-width: 0;
797
880
  }
798
881
 
882
+ /* JDF-110: same treatment as .field-input.locked, for masterData-prefilled/rounding-level
883
+ text-block cells (rendered as a plain label rather than an <input>). */
884
+ .text-readonly-label.locked {
885
+ background: var(--jupiter-locked-background, #eef2f7);
886
+ color: var(--jupiter-locked-text, #333);
887
+ padding: 5px 8px;
888
+ border-radius: 4px;
889
+ }
890
+
799
891
  .text-readonly-label.empty {
800
892
  color: var(--jupiter-text-secondary, #999);
801
893
  font-style: italic;
@@ -809,7 +901,7 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
809
901
  :host(.concept-highlight) {
810
902
  animation: concept-highlight-pulse 10s ease-out forwards;
811
903
  }
812
- `,Be([w({type:Object})],exports.JupiterFormField.prototype,"field",2),Be([w({type:String})],exports.JupiterFormField.prototype,"conceptId",2),Be([w({type:String})],exports.JupiterFormField.prototype,"conceptType",2),Be([w({type:Array})],exports.JupiterFormField.prototype,"datatypes",2),Be([w({type:Array})],exports.JupiterFormField.prototype,"defaultUnits",2),Be([w({type:String})],exports.JupiterFormField.prototype,"columnId",2),Be([w()],exports.JupiterFormField.prototype,"value",2),Be([w({type:Boolean})],exports.JupiterFormField.prototype,"disabled",2),Be([w({type:String})],exports.JupiterFormField.prototype,"locale",2),Be([w({type:Boolean})],exports.JupiterFormField.prototype,"hideLabel",2),Be([w({type:String})],exports.JupiterFormField.prototype,"mode",2),Be([w({type:Object})],exports.JupiterFormField.prototype,"masterData",2),Be([w({type:Array})],exports.JupiterFormField.prototype,"facts",2),Be([w({type:Object})],exports.JupiterFormField.prototype,"column",2),Be([w({type:String})],exports.JupiterFormField.prototype,"periodStartDate",2),Be([w({type:String})],exports.JupiterFormField.prototype,"periodEndDate",2),Be([w({type:String})],exports.JupiterFormField.prototype,"periodInstantDate",2),Be([w({type:String})],exports.JupiterFormField.prototype,"unit",2),Be([w({type:String})],exports.JupiterFormField.prototype,"decimals",2),Be([w({type:String})],exports.JupiterFormField.prototype,"globalDecimals",2),Be([w({type:Object})],exports.JupiterFormField.prototype,"typedMemberValues",2),Be([S()],exports.JupiterFormField.prototype,"_errors",2),Be([S()],exports.JupiterFormField.prototype,"_xbrlErrors",2),Be([S()],exports.JupiterFormField.prototype,"_touched",2),Be([S()],exports.JupiterFormField.prototype,"_showPeriodPopup",2),Be([S()],exports.JupiterFormField.prototype,"_availableUnits",2),Be([S()],exports.JupiterFormField.prototype,"_numericDraftValue",2),exports.JupiterFormField=Be([t("jupiter-form-field")],exports.JupiterFormField);var qe=Object.defineProperty,He=Object.getOwnPropertyDescriptor,Ke=(e,t,i,o)=>{for(var r,n=o>1?void 0:o?He(t,i):t,a=e.length-1;a>=0;a--)(r=e[a])&&(n=(o?r(t,i,n):r(n))||n);return o&&n&&qe(t,i,n),n};exports.JupiterConceptTree=class extends e.LitElement{constructor(){super(...arguments),this.columns=[],this.formData={},this.periodData={},this.unitData={},this.decimalsData={},this.globalDecimals="INF",this.defaultUnits=[],this.disabled=!1,this.locale="en-US",this.expandedConcepts=new Set,this.mode="inputForm",this.typedMemberData={},this.showAddButton=!1,this.showRemoveButton=!1,this.language="en",this.rowFocused=!1,this._expanded=!0}connectedCallback(){super.connectedCallback(),this._expanded=this.expandedConcepts.has(this.concept.id)}willUpdate(e){super.willUpdate(e),e.has("expandedConcepts")&&(this._expanded=this.expandedConcepts.has(this.concept.id))}_toggleExpanded(){this._expanded=!this._expanded,this.dispatchEvent(new CustomEvent("concept-expand",{detail:{conceptId:this.concept.id,expanded:this._expanded},bubbles:!0}))}_getFieldForColumn(e){var t;return null==(t=this.concept.fields)?void 0:t.find(t=>t.columnId===e)}_getFieldValue(e){var t;return null==(t=this.formData[this.concept.id])?void 0:t[e.columnId]}_handleFieldChange(e){e.stopPropagation(),this.dispatchEvent(new CustomEvent("field-change",{detail:e.detail,bubbles:!0}))}_handleAddRepeat(){this.dispatchEvent(new CustomEvent("add-concept-repeat",{detail:{conceptId:this.concept.id},bubbles:!0,composed:!0}))}_handleRemoveRepeat(){this.dispatchEvent(new CustomEvent("remove-concept-repeat",{detail:{conceptId:this.concept.id},bubbles:!0,composed:!0}))}_handleFieldFocus(e){e.stopPropagation(),this.dispatchEvent(new CustomEvent("field-focus",{detail:e.detail,bubbles:!0}))}_handlePeriodChange(e){console.log("🌲 [ConceptTree] Received period-change event:",e.detail),e.stopPropagation(),this.dispatchEvent(new CustomEvent("period-change",{detail:e.detail,bubbles:!0,composed:!0})),console.log("🌲 [ConceptTree] Forwarded period-change event to form-section")}_getDocLabel(){const e=this.concept.conceptMetadata;if(!e)return"";const t=this.language||this.locale.split("-")[0];return e.documentationLabels[t]||e.documentationLabels.en||e.documentationLabels.nl||""}_escapeHtml(e){return e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}_ensureDialogStyles(){if(document.getElementById("jdf-concept-info-dialog-styles"))return;const e=document.createElement("style");e.id="jdf-concept-info-dialog-styles",e.textContent="\n dialog.jdf-concept-info-dialog {\n border: none; border-radius: 8px; padding: 0;\n max-width: 480px; width: 90vw;\n box-shadow: 0 8px 32px rgba(0,0,0,0.2); overflow: hidden;\n }\n dialog.jdf-concept-info-dialog::backdrop { background: rgba(0,0,0,0.35); }\n .jdf-dialog-header {\n background: #f0f2f5; padding: 14px 20px;\n display: flex; align-items: center; justify-content: space-between;\n border-bottom: 1px solid #ddd;\n }\n .jdf-dialog-title { font-size: 15px; font-weight: 600; color: #333; margin: 0; font-family: inherit; }\n .jdf-dialog-close-btn {\n width: 28px; height: 28px; border: none; background: transparent;\n font-size: 20px; line-height: 1; cursor: pointer; color: #666;\n border-radius: 4px; display: flex; align-items: center; justify-content: center;\n padding: 0; font-family: inherit;\n }\n .jdf-dialog-close-btn:hover { background: #ddd; color: #333; }\n .jdf-dialog-body { padding: 20px; }\n .jdf-info-table { width: 100%; border-collapse: collapse; font-size: 14px; font-family: inherit; }\n .jdf-info-table tr:not(:last-child) td { border-bottom: 1px solid #f0f0f0; }\n .jdf-info-table td { padding: 9px 4px; vertical-align: top; }\n .jdf-info-label { font-weight: 600; color: #666; width: 40%; white-space: nowrap; padding-right: 16px; }\n .jdf-info-value { color: #333; word-break: break-all; }\n .jdf-info-value.doc-text { font-style: italic; color: #555; line-height: 1.5; word-break: normal; }\n .jdf-period-pill { display: inline-block; padding: 2px 8px; border-radius: 10px; font-size: 12px; font-weight: 600; }\n .jdf-period-pill.instant { background: rgba(25,118,210,0.1); color: #1565c0; border: 1px solid rgba(25,118,210,0.3); }\n .jdf-period-pill.duration { background: rgba(56,142,60,0.1); color: #2e7d32; border: 1px solid rgba(56,142,60,0.3); }\n .jdf-balance-pill { display: inline-block; padding: 2px 8px; border-radius: 10px; font-size: 12px; font-weight: 600; text-transform: capitalize; }\n .jdf-balance-pill.debit { background: rgba(211,47,47,0.1); color: #c62828; border: 1px solid rgba(211,47,47,0.3); }\n .jdf-balance-pill.credit { background: rgba(56,142,60,0.1); color: #2e7d32; border: 1px solid rgba(56,142,60,0.3); }\n ",document.head.appendChild(e)}_openInfoDialog(e){var t;e.stopPropagation(),this._ensureDialogStyles();const i=this.concept.conceptMetadata,o=this._getDocLabel(),r=(null==i?void 0:i.periodType)||this.concept.periodType,n=(null==i?void 0:i.balance)||this.concept.balance,a="instant"===r?k.t("conceptInfo.instant"):k.t("conceptInfo.duration"),s=[{label:k.t("conceptInfo.conceptName"),valueHtml:this._escapeHtml((null==i?void 0:i.conceptName)||this.concept.name)},{label:k.t("conceptInfo.type"),valueHtml:this._escapeHtml((null==i?void 0:i.type)||this.concept.type||"—")}];(null==i?void 0:i.substitutionGroup)&&s.push({label:k.t("conceptInfo.substitutionGroup"),valueHtml:this._escapeHtml(i.substitutionGroup)}),s.push({label:k.t("conceptInfo.periodType"),valueHtml:`<span class="jdf-period-pill ${r}">${this._escapeHtml(a)}</span>`}),n&&s.push({label:k.t("conceptInfo.balance"),valueHtml:`<span class="jdf-balance-pill ${n}">${this._escapeHtml(n)}</span>`}),o&&s.push({label:k.t("conceptInfo.documentation"),valueHtml:this._escapeHtml(o),isDoc:!0});const l=s.map(e=>`\n <tr>\n <td class="jdf-info-label">${this._escapeHtml(e.label)}</td>\n <td class="jdf-info-value${e.isDoc?" doc-text":""}">${e.valueHtml}</td>\n </tr>\n `).join(""),d=document.createElement("dialog");d.className="jdf-concept-info-dialog",d.innerHTML=`\n <div class="jdf-dialog-header">\n <h3 class="jdf-dialog-title">${this._escapeHtml(k.t("conceptInfo.title"))}</h3>\n <button class="jdf-dialog-close-btn" type="button" aria-label="${this._escapeHtml(k.t("conceptInfo.close"))}">×</button>\n </div>\n <div class="jdf-dialog-body">\n <table class="jdf-info-table">${l}</table>\n </div>\n `,document.body.appendChild(d),null==(t=d.querySelector(".jdf-dialog-close-btn"))||t.addEventListener("click",()=>d.close()),d.addEventListener("click",e=>{const t=d.getBoundingClientRect();(e.clientX<t.left||e.clientX>t.right||e.clientY<t.top||e.clientY>t.bottom)&&d.close()}),d.addEventListener("close",()=>document.body.removeChild(d)),d.showModal()}_ensureCalcWarningDialogStyles(){if(document.getElementById("jdf-calc-warning-dialog-styles"))return;const e=document.createElement("style");e.id="jdf-calc-warning-dialog-styles",e.textContent="\n dialog.jdf-calc-warning-dialog {\n border: none; border-radius: 8px; padding: 0;\n max-width: 480px; width: 90vw;\n box-shadow: 0 8px 32px rgba(0,0,0,0.2); overflow: hidden;\n }\n dialog.jdf-calc-warning-dialog::backdrop { background: rgba(0,0,0,0.35); }\n .jdf-calc-warning-header {\n background: #fff3e0; padding: 14px 20px;\n display: flex; align-items: center; justify-content: space-between;\n border-bottom: 1px solid #ffcc80;\n }\n .jdf-calc-warning-title { font-size: 15px; font-weight: 600; color: #e65100; margin: 0; font-family: inherit; }\n .jdf-calc-warning-close-btn {\n width: 28px; height: 28px; border: none; background: transparent;\n font-size: 20px; line-height: 1; cursor: pointer; color: #666;\n border-radius: 4px; display: flex; align-items: center; justify-content: center;\n padding: 0; font-family: inherit;\n }\n .jdf-calc-warning-close-btn:hover { background: #ffe0b2; color: #e65100; }\n .jdf-calc-warning-body { padding: 20px; font-family: inherit; font-size: 13px; color: #333; }\n .jdf-calc-warning-summary { margin: 0 0 12px 0; font-weight: 600; }\n .jdf-calc-warning-table { width: 100%; border-collapse: collapse; font-size: 13px; font-family: inherit; }\n .jdf-calc-warning-table tr:not(:last-child) td { border-bottom: 1px solid #f0f0f0; }\n .jdf-calc-warning-table td { padding: 6px 4px; vertical-align: top; }\n .jdf-calc-warning-sign { font-weight: 600; white-space: nowrap; }\n .jdf-calc-warning-sign.added { color: #2e7d32; }\n .jdf-calc-warning-sign.subtracted { color: #c62828; }\n ",document.head.appendChild(e)}_openCalculationWarningDialog(e,t){var i;e.stopPropagation(),this._ensureCalcWarningDialogStyles();const o=t.children.map(e=>`\n <tr>\n <td>${this._escapeHtml(e.label)}</td>\n <td>${this._escapeHtml(String(e.value))}</td>\n <td>${this._escapeHtml(e.balance||"—")}</td>\n <td class="jdf-calc-warning-sign ${1===e.weight?"added":"subtracted"}">\n ${this._escapeHtml(1===e.weight?k.t("calculationWarning.added"):k.t("calculationWarning.subtracted"))}\n </td>\n </tr>\n `).join(""),r=document.createElement("dialog");r.className="jdf-calc-warning-dialog",r.innerHTML=`\n <div class="jdf-calc-warning-header">\n <h3 class="jdf-calc-warning-title">⚠️ ${this._escapeHtml(k.t("calculationWarning.title"))}</h3>\n <button class="jdf-calc-warning-close-btn" type="button" aria-label="${this._escapeHtml(k.t("conceptInfo.close"))}">×</button>\n </div>\n <div class="jdf-calc-warning-body">\n <p class="jdf-calc-warning-summary">${this._escapeHtml(t.message)}</p>\n <table class="jdf-calc-warning-table">${o}</table>\n </div>\n `,document.body.appendChild(r),null==(i=r.querySelector(".jdf-calc-warning-close-btn"))||i.addEventListener("click",()=>r.close()),r.addEventListener("click",e=>{const t=r.getBoundingClientRect();(e.clientX<t.left||e.clientX>t.right||e.clientY<t.top||e.clientY>t.bottom)&&r.close()}),r.addEventListener("close",()=>document.body.removeChild(r)),r.showModal()}render(){const t=this.concept.children&&this.concept.children.length>0,i=this.concept.level||0,o=this.concept.abstract||!1,r=E(this.concept.preferredLabel);return e.html`
904
+ `,We([S({type:Object})],exports.JupiterFormField.prototype,"field",2),We([S({type:String})],exports.JupiterFormField.prototype,"conceptId",2),We([S({type:String})],exports.JupiterFormField.prototype,"conceptType",2),We([S({type:Array})],exports.JupiterFormField.prototype,"datatypes",2),We([S({type:Array})],exports.JupiterFormField.prototype,"defaultUnits",2),We([S({type:String})],exports.JupiterFormField.prototype,"columnId",2),We([S()],exports.JupiterFormField.prototype,"value",2),We([S({type:Boolean})],exports.JupiterFormField.prototype,"disabled",2),We([S({type:String})],exports.JupiterFormField.prototype,"locale",2),We([S({type:String})],exports.JupiterFormField.prototype,"numberLocale",2),We([S({type:Boolean})],exports.JupiterFormField.prototype,"hideLabel",2),We([S({type:String})],exports.JupiterFormField.prototype,"mode",2),We([S({type:Object})],exports.JupiterFormField.prototype,"masterData",2),We([S({type:String})],exports.JupiterFormField.prototype,"prefilledTooltip",2),We([S({type:Array})],exports.JupiterFormField.prototype,"facts",2),We([S({type:Object})],exports.JupiterFormField.prototype,"column",2),We([S({type:String})],exports.JupiterFormField.prototype,"periodStartDate",2),We([S({type:String})],exports.JupiterFormField.prototype,"periodEndDate",2),We([S({type:String})],exports.JupiterFormField.prototype,"periodInstantDate",2),We([S({type:String})],exports.JupiterFormField.prototype,"unit",2),We([S({type:String})],exports.JupiterFormField.prototype,"decimals",2),We([S({type:String})],exports.JupiterFormField.prototype,"globalDecimals",2),We([S({type:Object})],exports.JupiterFormField.prototype,"typedMemberValues",2),We([C()],exports.JupiterFormField.prototype,"_errors",2),We([C()],exports.JupiterFormField.prototype,"_xbrlErrors",2),We([C()],exports.JupiterFormField.prototype,"_touched",2),We([C()],exports.JupiterFormField.prototype,"_showPeriodPopup",2),We([C()],exports.JupiterFormField.prototype,"_availableUnits",2),We([C()],exports.JupiterFormField.prototype,"_numericDraftValue",2),We([C()],exports.JupiterFormField.prototype,"_focused",2),exports.JupiterFormField=We([t("jupiter-form-field")],exports.JupiterFormField);var Ke=Object.defineProperty,Ye=Object.getOwnPropertyDescriptor,Qe=(e,t,i,o)=>{for(var r,n=o>1?void 0:o?Ye(t,i):t,a=e.length-1;a>=0;a--)(r=e[a])&&(n=(o?r(t,i,n):r(n))||n);return o&&n&&Ke(t,i,n),n};exports.JupiterConceptTree=class extends e.LitElement{constructor(){super(...arguments),this.columns=[],this.formData={},this.periodData={},this.unitData={},this.decimalsData={},this.globalDecimals="INF",this.defaultUnits=[],this.disabled=!1,this.locale="en-US",this.numberLocale="nl-NL",this.expandedConcepts=new Set,this.mode="inputForm",this.typedMemberData={},this.showAddButton=!1,this.showRemoveButton=!1,this.language="en",this.rowFocused=!1,this._expanded=!0}connectedCallback(){super.connectedCallback(),this._expanded=this.expandedConcepts.has(this.concept.id)}willUpdate(e){super.willUpdate(e),e.has("expandedConcepts")&&(this._expanded=this.expandedConcepts.has(this.concept.id))}_toggleExpanded(){this._expanded=!this._expanded,this.dispatchEvent(new CustomEvent("concept-expand",{detail:{conceptId:this.concept.id,expanded:this._expanded},bubbles:!0}))}_getFieldForColumn(e){var t;return null==(t=this.concept.fields)?void 0:t.find(t=>t.columnId===e)}_getFieldValue(e){var t;return null==(t=this.formData[this.concept.id])?void 0:t[e.columnId]}_handleFieldChange(e){e.stopPropagation(),this.dispatchEvent(new CustomEvent("field-change",{detail:e.detail,bubbles:!0}))}_handleAddRepeat(){this.dispatchEvent(new CustomEvent("add-concept-repeat",{detail:{conceptId:this.concept.id},bubbles:!0,composed:!0}))}_handleRemoveRepeat(){this.dispatchEvent(new CustomEvent("remove-concept-repeat",{detail:{conceptId:this.concept.id},bubbles:!0,composed:!0}))}_handleFieldFocus(e){e.stopPropagation(),this.dispatchEvent(new CustomEvent("field-focus",{detail:e.detail,bubbles:!0}))}_handlePeriodChange(e){e.detail,e.stopPropagation(),this.dispatchEvent(new CustomEvent("period-change",{detail:e.detail,bubbles:!0,composed:!0}))}_getDocLabel(){const e=this.concept.conceptMetadata;if(!e)return"";const t=this.language||this.locale.split("-")[0];return e.documentationLabels[t]||e.documentationLabels.en||e.documentationLabels.nl||""}_escapeHtml(e){return e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}_ensureDialogStyles(){if(document.getElementById("jdf-concept-info-dialog-styles"))return;const e=document.createElement("style");e.id="jdf-concept-info-dialog-styles",e.textContent="\n dialog.jdf-concept-info-dialog {\n border: none; border-radius: 8px; padding: 0;\n max-width: 480px; width: 90vw;\n box-shadow: 0 8px 32px rgba(0,0,0,0.2); overflow: hidden;\n /* JDF-118: don't rely on the UA's default margin:auto centering — a host page's\n * { margin: 0 } reset (index.html has one) wins over it and pins the dialog to the\n top-left corner. Position explicitly instead, independent of any margin. */\n position: fixed; top: 50%; left: 50%; transform: translate(-50%, -50%); margin: 0;\n }\n dialog.jdf-concept-info-dialog::backdrop { background: rgba(0,0,0,0.35); }\n .jdf-dialog-header {\n background: #f0f2f5; padding: 14px 20px;\n display: flex; align-items: center; justify-content: space-between;\n border-bottom: 1px solid #ddd;\n }\n .jdf-dialog-title { font-size: 15px; font-weight: 600; color: #333; margin: 0; font-family: inherit; }\n .jdf-dialog-close-btn {\n width: 28px; height: 28px; border: none; background: transparent;\n font-size: 20px; line-height: 1; cursor: pointer; color: #666;\n border-radius: 4px; display: flex; align-items: center; justify-content: center;\n padding: 0; font-family: inherit;\n }\n .jdf-dialog-close-btn:hover { background: #ddd; color: #333; }\n .jdf-dialog-body { padding: 20px; }\n .jdf-info-table { width: 100%; border-collapse: collapse; font-size: 14px; font-family: inherit; }\n .jdf-info-table tr:not(:last-child) td { border-bottom: 1px solid #f0f0f0; }\n .jdf-info-table td { padding: 9px 4px; vertical-align: top; }\n .jdf-info-label { font-weight: 600; color: #666; width: 40%; white-space: nowrap; padding-right: 16px; }\n .jdf-info-value { color: #333; word-break: break-all; }\n .jdf-info-value.doc-text { font-style: italic; color: #555; line-height: 1.5; word-break: normal; }\n .jdf-period-pill { display: inline-block; padding: 2px 8px; border-radius: 10px; font-size: 12px; font-weight: 600; }\n .jdf-period-pill.instant { background: rgba(25,118,210,0.1); color: #1565c0; border: 1px solid rgba(25,118,210,0.3); }\n .jdf-period-pill.duration { background: rgba(56,142,60,0.1); color: #2e7d32; border: 1px solid rgba(56,142,60,0.3); }\n .jdf-balance-pill { display: inline-block; padding: 2px 8px; border-radius: 10px; font-size: 12px; font-weight: 600; text-transform: capitalize; }\n .jdf-balance-pill.debit { background: rgba(211,47,47,0.1); color: #c62828; border: 1px solid rgba(211,47,47,0.3); }\n .jdf-balance-pill.credit { background: rgba(56,142,60,0.1); color: #2e7d32; border: 1px solid rgba(56,142,60,0.3); }\n ",document.head.appendChild(e)}_openInfoDialog(e){var t;e.stopPropagation(),this._ensureDialogStyles();const i=this.concept.conceptMetadata,o=this._getDocLabel(),r=(null==i?void 0:i.periodType)||this.concept.periodType,n=(null==i?void 0:i.balance)||this.concept.balance,a="instant"===r?E.t("conceptInfo.instant"):E.t("conceptInfo.duration"),s=[{label:E.t("conceptInfo.conceptName"),valueHtml:this._escapeHtml((null==i?void 0:i.conceptName)||this.concept.name)},{label:E.t("conceptInfo.type"),valueHtml:this._escapeHtml((null==i?void 0:i.type)||this.concept.type||"—")}];(null==i?void 0:i.substitutionGroup)&&s.push({label:E.t("conceptInfo.substitutionGroup"),valueHtml:this._escapeHtml(i.substitutionGroup)}),s.push({label:E.t("conceptInfo.periodType"),valueHtml:`<span class="jdf-period-pill ${r}">${this._escapeHtml(a)}</span>`}),n&&s.push({label:E.t("conceptInfo.balance"),valueHtml:`<span class="jdf-balance-pill ${n}">${this._escapeHtml(n)}</span>`}),o&&s.push({label:E.t("conceptInfo.documentation"),valueHtml:this._escapeHtml(o),isDoc:!0});const l=s.map(e=>`\n <tr>\n <td class="jdf-info-label">${this._escapeHtml(e.label)}</td>\n <td class="jdf-info-value${e.isDoc?" doc-text":""}">${e.valueHtml}</td>\n </tr>\n `).join(""),d=document.createElement("dialog");d.className="jdf-concept-info-dialog",d.innerHTML=`\n <div class="jdf-dialog-header">\n <h3 class="jdf-dialog-title">${this._escapeHtml(E.t("conceptInfo.title"))}</h3>\n <button class="jdf-dialog-close-btn" type="button" aria-label="${this._escapeHtml(E.t("conceptInfo.close"))}">×</button>\n </div>\n <div class="jdf-dialog-body">\n <table class="jdf-info-table">${l}</table>\n </div>\n `,document.body.appendChild(d),null==(t=d.querySelector(".jdf-dialog-close-btn"))||t.addEventListener("click",()=>d.close()),d.addEventListener("click",e=>{const t=d.getBoundingClientRect();(e.clientX<t.left||e.clientX>t.right||e.clientY<t.top||e.clientY>t.bottom)&&d.close()}),d.addEventListener("close",()=>document.body.removeChild(d)),d.showModal()}_ensureCalcWarningDialogStyles(){if(document.getElementById("jdf-calc-warning-dialog-styles"))return;const e=document.createElement("style");e.id="jdf-calc-warning-dialog-styles",e.textContent="\n dialog.jdf-calc-warning-dialog {\n border: none; border-radius: 8px; padding: 0;\n max-width: 480px; width: 90vw;\n box-shadow: 0 8px 32px rgba(0,0,0,0.2); overflow: hidden;\n /* JDF-118: see jdf-concept-info-dialog above — explicit centering, immune to host margin resets. */\n position: fixed; top: 50%; left: 50%; transform: translate(-50%, -50%); margin: 0;\n }\n dialog.jdf-calc-warning-dialog::backdrop { background: rgba(0,0,0,0.35); }\n .jdf-calc-warning-header {\n background: #fff3e0; padding: 14px 20px;\n display: flex; align-items: center; justify-content: space-between;\n border-bottom: 1px solid #ffcc80;\n }\n .jdf-calc-warning-title { font-size: 15px; font-weight: 600; color: #e65100; margin: 0; font-family: inherit; }\n .jdf-calc-warning-close-btn {\n width: 28px; height: 28px; border: none; background: transparent;\n font-size: 20px; line-height: 1; cursor: pointer; color: #666;\n border-radius: 4px; display: flex; align-items: center; justify-content: center;\n padding: 0; font-family: inherit;\n }\n .jdf-calc-warning-close-btn:hover { background: #ffe0b2; color: #e65100; }\n .jdf-calc-warning-body { padding: 20px; font-family: inherit; font-size: 13px; color: #333; }\n .jdf-calc-warning-summary { margin: 0 0 12px 0; font-weight: 600; }\n .jdf-calc-warning-table { width: 100%; border-collapse: collapse; font-size: 13px; font-family: inherit; }\n .jdf-calc-warning-table tr:not(:last-child) td { border-bottom: 1px solid #f0f0f0; }\n .jdf-calc-warning-table td { padding: 6px 4px; vertical-align: top; }\n .jdf-calc-warning-sign { font-weight: 600; white-space: nowrap; }\n .jdf-calc-warning-sign.added { color: #2e7d32; }\n .jdf-calc-warning-sign.subtracted { color: #c62828; }\n ",document.head.appendChild(e)}_openCalculationWarningDialog(e,t){var i;e.stopPropagation(),this._ensureCalcWarningDialogStyles();const o=t.children.map(e=>`\n <tr>\n <td>${this._escapeHtml(e.label)}</td>\n <td>${this._escapeHtml(String(e.value))}</td>\n <td>${this._escapeHtml(e.balance||"—")}</td>\n <td class="jdf-calc-warning-sign ${1===e.weight?"added":"subtracted"}">\n ${this._escapeHtml(1===e.weight?E.t("calculationWarning.added"):E.t("calculationWarning.subtracted"))}\n </td>\n </tr>\n `).join(""),r=document.createElement("dialog");r.className="jdf-calc-warning-dialog",r.innerHTML=`\n <div class="jdf-calc-warning-header">\n <h3 class="jdf-calc-warning-title">⚠️ ${this._escapeHtml(E.t("calculationWarning.title"))}</h3>\n <button class="jdf-calc-warning-close-btn" type="button" aria-label="${this._escapeHtml(E.t("conceptInfo.close"))}">×</button>\n </div>\n <div class="jdf-calc-warning-body">\n <p class="jdf-calc-warning-summary">${this._escapeHtml(t.message)}</p>\n <table class="jdf-calc-warning-table">${o}</table>\n </div>\n `,document.body.appendChild(r),null==(i=r.querySelector(".jdf-calc-warning-close-btn"))||i.addEventListener("click",()=>r.close()),r.addEventListener("click",e=>{const t=r.getBoundingClientRect();(e.clientX<t.left||e.clientX>t.right||e.clientY<t.top||e.clientY>t.bottom)&&r.close()}),r.addEventListener("close",()=>document.body.removeChild(r)),r.showModal()}render(){const t=this.concept.children&&this.concept.children.length>0,i=this.concept.level||0,o=this.concept.abstract||!1,r=F(this.concept.preferredLabel);return e.html`
813
905
  <!-- Concept Name Cell (Left Column) -->
814
906
  <td class="concept-name-cell ${o?"abstract":t?"":"leaf"} ${this.rowFocused?"row-focused":""}">
815
907
  <div class="concept-content" style="--level: ${i}">
@@ -826,7 +918,7 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
826
918
  ${this.concept.balance?e.html`
827
919
  <div class="concept-balance ${this.concept.balance}">${this.concept.balance}</div>
828
920
  `:""}
829
- <button class="concept-info-btn" type="button" tabindex="-1" title="${k.t("conceptInfo.title")}"
921
+ <button class="concept-info-btn" type="button" tabindex="-1" title="${E.t("conceptInfo.title")}"
830
922
  @click="${this._openInfoDialog}">ℹ</button>
831
923
  ${this.showAddButton?e.html`
832
924
  <button class="repeat-btn" type="button" tabindex="-1" title="Add row"
@@ -868,9 +960,11 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
868
960
  .periodInstantDate="${d.periodInstantDate||("instant"===d.periodType?d.periodEndDate||d.periodStartDate:void 0)}"
869
961
  .disabled="${this.disabled}"
870
962
  .locale="${this.locale}"
963
+ .numberLocale="${this.numberLocale}"
871
964
  .hideLabel="${!0}"
872
965
  .mode="${this.mode}"
873
966
  .masterData="${this.masterData}"
967
+ .prefilledTooltip="${this.prefilledTooltip}"
874
968
  .facts="${this.facts}"
875
969
  .column="${t}"
876
970
  .typedMemberValues="${this.typedMemberData[`${this.concept.id}__${t.id}`]||{}}"
@@ -1180,13 +1274,13 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
1180
1274
  animation: concept-row-highlight-pulse 10s ease-out forwards;
1181
1275
  }
1182
1276
 
1183
- `,Ke([w({type:Object})],exports.JupiterConceptTree.prototype,"concept",2),Ke([w({type:Array})],exports.JupiterConceptTree.prototype,"columns",2),Ke([w({type:Object})],exports.JupiterConceptTree.prototype,"formData",2),Ke([w({type:Object})],exports.JupiterConceptTree.prototype,"periodData",2),Ke([w({type:Object})],exports.JupiterConceptTree.prototype,"unitData",2),Ke([w({type:Object})],exports.JupiterConceptTree.prototype,"decimalsData",2),Ke([w({type:String})],exports.JupiterConceptTree.prototype,"globalDecimals",2),Ke([w({type:Array})],exports.JupiterConceptTree.prototype,"defaultUnits",2),Ke([w({type:Boolean})],exports.JupiterConceptTree.prototype,"disabled",2),Ke([w({type:String})],exports.JupiterConceptTree.prototype,"locale",2),Ke([w({type:Set})],exports.JupiterConceptTree.prototype,"expandedConcepts",2),Ke([w({type:Array})],exports.JupiterConceptTree.prototype,"datatypes",2),Ke([w({type:String})],exports.JupiterConceptTree.prototype,"mode",2),Ke([w({type:Object})],exports.JupiterConceptTree.prototype,"masterData",2),Ke([w({type:Array})],exports.JupiterConceptTree.prototype,"facts",2),Ke([w({type:Object})],exports.JupiterConceptTree.prototype,"typedMemberData",2),Ke([w({type:Boolean})],exports.JupiterConceptTree.prototype,"showAddButton",2),Ke([w({type:Boolean})],exports.JupiterConceptTree.prototype,"showRemoveButton",2),Ke([w({type:String})],exports.JupiterConceptTree.prototype,"highlightType",2),Ke([w({type:String})],exports.JupiterConceptTree.prototype,"highlightColumnId",2),Ke([w({type:Object})],exports.JupiterConceptTree.prototype,"calculationMismatches",2),Ke([w({type:String})],exports.JupiterConceptTree.prototype,"language",2),Ke([w({type:Boolean})],exports.JupiterConceptTree.prototype,"rowFocused",2),Ke([S()],exports.JupiterConceptTree.prototype,"_expanded",2),exports.JupiterConceptTree=Ke([t("jupiter-concept-tree")],exports.JupiterConceptTree);var Ye=Object.defineProperty,We=Object.getOwnPropertyDescriptor,Qe=(e,t,i,o)=>{for(var r,n=o>1?void 0:o?We(t,i):t,a=e.length-1;a>=0;a--)(r=e[a])&&(n=(o?r(t,i,n):r(n))||n);return o&&n&&Ye(t,i,n),n};exports.JupiterAddColumnDialog=class extends e.LitElement{constructor(){super(...arguments),this.periodType="duration",this.open=!1,this.availableDimensions=[],this.periodStartDate="",this.periodEndDate="",this._startDate="",this._endDate="",this._instantDate="",this._selectedType="duration",this._selectedDimensions=new Map,this._typedValueErrors={}}updated(e){e.has("open")&&this.open&&this._resetForm(),e.has("availableDimensions")}connectedCallback(){super.connectedCallback(),this._resetForm()}willUpdate(e){super.willUpdate(e),e.has("open")&&this.open&&this._resetForm()}_handleCancel(){this.open=!1,this.dispatchEvent(new CustomEvent("dialog-cancel",{bubbles:!0}))}_handleConfirm(){if(!this._isFormValid())return;const e={periodType:"mixed"===this.periodType?"duration":this.periodType};"instant"===this.periodType?e.instantDate=this._instantDate:(e.startDate=this._startDate,e.endDate=this._endDate),this._selectedDimensions.size>0&&(e.selectedDimensions=Array.from(this._selectedDimensions.values())),this.dispatchEvent(new CustomEvent("column-add",{detail:e,bubbles:!0}))}_isFormValid(){return"mixed"===this.periodType||"duration"===this.periodType?!!this._startDate&&!!this._endDate&&this._startDate<=this._endDate:"instant"===this.periodType&&!!this._instantDate}_handleStartDateChange(e){this._startDate=e.target.value}_handleEndDateChange(e){this._endDate=e.target.value}_handleSelectedTypeChange(e){this._selectedType=e.target.value}_handleInstantDateChange(e){this._instantDate=e.target.value}_handleDimensionToggle(e,t){var i,o;if(t.target.checked){const t=this.availableDimensions.find(t=>t.id===e);if(t){const r={axisId:t.id,axisLabel:t.axisLabel,isTyped:!(!t.typedMember||t.members&&0!==t.members.length),dataType:null==(i=t.typedMember)?void 0:i.dataType,validation:null==(o=t.typedMember)?void 0:o.validation};this._selectedDimensions.set(e,r)}}else this._selectedDimensions.delete(e);this.requestUpdate()}_handleMemberSelection(e,t,i){const o=this._selectedDimensions.get(e);o&&(o.memberId=t,o.memberLabel=i,this._selectedDimensions.set(e,o),this.requestUpdate())}_handleTypedValueChange(e,t){const i=t.target,o=i instanceof HTMLInputElement&&"checkbox"===i.type?String(i.checked):i.value,r=this._selectedDimensions.get(e);r&&(r.typedValue=o,this._selectedDimensions.set(e,r))}_validateTypedValue(e,t,i,o){const r=e in this._typedValueErrors;if(!o){if(r){const t={...this._typedValueErrors};delete t[e],this._typedValueErrors=t}return}const n=i?ze.validateAgainstRules(o,i):ze.validateConceptValue(t,o,this.datatypes);if(n.valid){if(r){const t={...this._typedValueErrors};delete t[e],this._typedValueErrors=t}}else this._typedValueErrors={...this._typedValueErrors,[e]:n.errors}}_handleTypedValueBlur(e,t,i,o){const r=o.target,n=r instanceof HTMLInputElement&&"checkbox"===r.type?String(r.checked):r.value;this._validateTypedValue(e,t,i,n)}_renderTypedValueErrors(t){const i=this._typedValueErrors[t];return i&&0!==i.length?e.html`
1277
+ `,Qe([S({type:Object})],exports.JupiterConceptTree.prototype,"concept",2),Qe([S({type:Array})],exports.JupiterConceptTree.prototype,"columns",2),Qe([S({type:Object})],exports.JupiterConceptTree.prototype,"formData",2),Qe([S({type:Object})],exports.JupiterConceptTree.prototype,"periodData",2),Qe([S({type:Object})],exports.JupiterConceptTree.prototype,"unitData",2),Qe([S({type:Object})],exports.JupiterConceptTree.prototype,"decimalsData",2),Qe([S({type:String})],exports.JupiterConceptTree.prototype,"globalDecimals",2),Qe([S({type:Array})],exports.JupiterConceptTree.prototype,"defaultUnits",2),Qe([S({type:Boolean})],exports.JupiterConceptTree.prototype,"disabled",2),Qe([S({type:String})],exports.JupiterConceptTree.prototype,"locale",2),Qe([S({type:String})],exports.JupiterConceptTree.prototype,"numberLocale",2),Qe([S({type:Set})],exports.JupiterConceptTree.prototype,"expandedConcepts",2),Qe([S({type:Array})],exports.JupiterConceptTree.prototype,"datatypes",2),Qe([S({type:String})],exports.JupiterConceptTree.prototype,"mode",2),Qe([S({type:Object})],exports.JupiterConceptTree.prototype,"masterData",2),Qe([S({type:String})],exports.JupiterConceptTree.prototype,"prefilledTooltip",2),Qe([S({type:Array})],exports.JupiterConceptTree.prototype,"facts",2),Qe([S({type:Object})],exports.JupiterConceptTree.prototype,"typedMemberData",2),Qe([S({type:Boolean})],exports.JupiterConceptTree.prototype,"showAddButton",2),Qe([S({type:Boolean})],exports.JupiterConceptTree.prototype,"showRemoveButton",2),Qe([S({type:String})],exports.JupiterConceptTree.prototype,"highlightType",2),Qe([S({type:String})],exports.JupiterConceptTree.prototype,"highlightColumnId",2),Qe([S({type:Object})],exports.JupiterConceptTree.prototype,"calculationMismatches",2),Qe([S({type:String})],exports.JupiterConceptTree.prototype,"language",2),Qe([S({type:Boolean})],exports.JupiterConceptTree.prototype,"rowFocused",2),Qe([C()],exports.JupiterConceptTree.prototype,"_expanded",2),exports.JupiterConceptTree=Qe([t("jupiter-concept-tree")],exports.JupiterConceptTree);var Ge=Object.defineProperty,Xe=Object.getOwnPropertyDescriptor,Ze=(e,t,i,o)=>{for(var r,n=o>1?void 0:o?Xe(t,i):t,a=e.length-1;a>=0;a--)(r=e[a])&&(n=(o?r(t,i,n):r(n))||n);return o&&n&&Ge(t,i,n),n};exports.JupiterAddColumnDialog=class extends e.LitElement{constructor(){super(...arguments),this.periodType="duration",this.open=!1,this.availableDimensions=[],this.periodStartDate="",this.periodEndDate="",this._startDate="",this._endDate="",this._instantDate="",this._selectedType="duration",this._selectedDimensions=new Map,this._typedValueErrors={}}updated(e){e.has("open")&&this.open&&this._resetForm(),e.has("availableDimensions")}connectedCallback(){super.connectedCallback(),this._resetForm()}willUpdate(e){super.willUpdate(e),e.has("open")&&this.open&&this._resetForm()}_handleCancel(){this.open=!1,this.dispatchEvent(new CustomEvent("dialog-cancel",{bubbles:!0}))}_handleConfirm(){if(!this._isFormValid())return;const e={periodType:"mixed"===this.periodType?"duration":this.periodType};"instant"===this.periodType?e.instantDate=this._instantDate:(e.startDate=this._startDate,e.endDate=this._endDate),this._selectedDimensions.size>0&&(e.selectedDimensions=Array.from(this._selectedDimensions.values())),this.dispatchEvent(new CustomEvent("column-add",{detail:e,bubbles:!0}))}_isFormValid(){return"mixed"===this.periodType||"duration"===this.periodType?!!this._startDate&&!!this._endDate&&this._startDate<=this._endDate:"instant"===this.periodType&&!!this._instantDate}_handleStartDateChange(e){this._startDate=e.target.value}_handleEndDateChange(e){this._endDate=e.target.value}_handleSelectedTypeChange(e){this._selectedType=e.target.value}_handleInstantDateChange(e){this._instantDate=e.target.value}_handleDimensionToggle(e,t){var i,o;if(t.target.checked){const t=this.availableDimensions.find(t=>t.id===e);if(t){const r={axisId:t.id,axisLabel:t.axisLabel,isTyped:!(!t.typedMember||t.members&&0!==t.members.length),dataType:null==(i=t.typedMember)?void 0:i.dataType,validation:null==(o=t.typedMember)?void 0:o.validation};this._selectedDimensions.set(e,r)}}else this._selectedDimensions.delete(e);this.requestUpdate()}_handleMemberSelection(e,t,i){const o=this._selectedDimensions.get(e);o&&(o.memberId=t,o.memberLabel=i,this._selectedDimensions.set(e,o),this.requestUpdate())}_handleTypedValueChange(e,t){const i=t.target,o=i instanceof HTMLInputElement&&"checkbox"===i.type?String(i.checked):i.value,r=this._selectedDimensions.get(e);r&&(r.typedValue=o,this._selectedDimensions.set(e,r))}_validateTypedValue(e,t,i,o){const r=e in this._typedValueErrors;if(!o){if(r){const t={...this._typedValueErrors};delete t[e],this._typedValueErrors=t}return}const n=i?Je.validateAgainstRules(o,i):Je.validateConceptValue(t,o,this.datatypes);if(n.valid){if(r){const t={...this._typedValueErrors};delete t[e],this._typedValueErrors=t}}else this._typedValueErrors={...this._typedValueErrors,[e]:n.errors}}_handleTypedValueBlur(e,t,i,o){const r=o.target,n=r instanceof HTMLInputElement&&"checkbox"===r.type?String(r.checked):r.value;this._validateTypedValue(e,t,i,n)}_renderTypedValueErrors(t){const i=this._typedValueErrors[t];return i&&0!==i.length?e.html`
1184
1278
  <div class="typed-input-errors">
1185
1279
  ${i.map(t=>e.html`<span class="typed-input-error">${t.message}</span>`)}
1186
1280
  </div>
1187
- `:""}_getTypedValueInputConfig(e){return Me(e,this.datatypes)}_renderTypedValueInput(t,i,o,r){var n;const a=this._getTypedValueInputConfig(i),s="typed-input "+(!!(null==(n=this._typedValueErrors[t])?void 0:n.length)?"has-error":""),l=e=>this._handleTypedValueChange(t,e),d=e=>this._handleTypedValueBlur(t,i,o,e);if("select"===a.fieldType||Le(a.fieldType)){const t=a.enumerations||[];return e.html`
1281
+ `:""}_getTypedValueInputConfig(e){return je(e,this.datatypes)}_renderTypedValueInput(t,i,o,r){var n;const a=this._getTypedValueInputConfig(i),s="typed-input "+(!!(null==(n=this._typedValueErrors[t])?void 0:n.length)?"has-error":""),l=e=>this._handleTypedValueChange(t,e),d=e=>this._handleTypedValueBlur(t,i,o,e);if("select"===a.fieldType||Ne(a.fieldType)){const t=a.enumerations||[];return e.html`
1188
1282
  <select class="${s}" .value="${r}" @change="${l}" @blur="${d}">
1189
- <option value="">${a.placeholder||k.t("field.select")}</option>
1283
+ <option value="">${a.placeholder||E.t("field.select")}</option>
1190
1284
  ${t.map(t=>e.html`
1191
1285
  <option value="${t.value}" ?selected="${r===t.value}">
1192
1286
  ${t.label||t.value}
@@ -1212,19 +1306,19 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
1212
1306
  step="${void 0!==a.step?a.step:""}"
1213
1307
  @input="${l}"
1214
1308
  @blur="${d}"
1215
- placeholder="${a.placeholder||k.t("column.enterValuePlaceholder")}"
1309
+ placeholder="${a.placeholder||E.t("column.enterValuePlaceholder")}"
1216
1310
  />
1217
- `}_resetForm(){this._startDate=this.periodStartDate||"",this._endDate=this.periodEndDate||"",this._instantDate=this.periodEndDate||this.periodStartDate||"",this._selectedType="instant"===this.periodType?"instant":"duration",this._selectedDimensions.clear(),this._typedValueErrors={},this._autoSelectSingleMemberDimensions(),this.requestUpdate()}_autoSelectSingleMemberDimensions(){this.availableDimensions.forEach(e=>{var t,i;if(e.members&&e.members.length>0){const t=e.members[0],i={axisId:e.id,axisLabel:e.axisLabel,memberId:t.id,memberLabel:t.label,isTyped:!1};this._selectedDimensions.set(e.id,i),console.log(`🎯 Auto-selected default member: ${e.axisLabel} -> ${t.label}`)}else if(e.typedMember&&(!e.members||0===e.members.length)){const o={axisId:e.id,axisLabel:e.axisLabel,isTyped:!0,dataType:null==(t=e.typedMember)?void 0:t.dataType,validation:null==(i=e.typedMember)?void 0:i.validation};this._selectedDimensions.set(e.id,o),console.log(`🎯 Auto-selected typed dimension: ${e.axisLabel} (value will be entered in column header)`)}})}render(){if(!this.open)return e.html``;const t=this._isFormValid();return e.html`
1311
+ `}_resetForm(){this._startDate=this.periodStartDate||"",this._endDate=this.periodEndDate||"",this._instantDate=this.periodEndDate||this.periodStartDate||"",this._selectedType="instant"===this.periodType?"instant":"duration",this._selectedDimensions.clear(),this._typedValueErrors={},this._autoSelectSingleMemberDimensions(),this.requestUpdate()}_autoSelectSingleMemberDimensions(){this.availableDimensions.forEach(e=>{var t,i;if(e.members&&e.members.length>0){const t=e.members[0],i={axisId:e.id,axisLabel:e.axisLabel,memberId:t.id,memberLabel:t.label,isTyped:!1};this._selectedDimensions.set(e.id,i),e.axisLabel,t.label}else if(e.typedMember&&(!e.members||0===e.members.length)){const o={axisId:e.id,axisLabel:e.axisLabel,isTyped:!0,dataType:null==(t=e.typedMember)?void 0:t.dataType,validation:null==(i=e.typedMember)?void 0:i.validation};this._selectedDimensions.set(e.id,o),e.axisLabel}})}render(){if(!this.open)return e.html``;const t=this._isFormValid();return e.html`
1218
1312
  <div class="dialog" @click="${e=>e.stopPropagation()}">
1219
1313
  <div class="dialog-header">
1220
- <h2 class="dialog-title">${k.t("column.addColumn")}</h2>
1314
+ <h2 class="dialog-title">${E.t("column.addColumn")}</h2>
1221
1315
 
1222
1316
  </div>
1223
1317
 
1224
1318
  <div class="dialog-content">
1225
1319
  ${"instant"===this.periodType?e.html`
1226
1320
  <div class="form-group">
1227
- <label class="form-label required">${k.t("column.instantDate")}</label>
1321
+ <label class="form-label required">${E.t("column.instantDate")}</label>
1228
1322
  <div class="date-wrapper">
1229
1323
  <input
1230
1324
  type="date"
@@ -1245,7 +1339,7 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
1245
1339
  `:e.html`
1246
1340
  <div class="form-group date-row">
1247
1341
  <div class="date-field">
1248
- <label class="form-label required">${k.t("column.startPeriodDate")}</label>
1342
+ <label class="form-label required">${E.t("column.startPeriodDate")}</label>
1249
1343
  <div class="date-wrapper">
1250
1344
  <input
1251
1345
  type="date"
@@ -1264,7 +1358,7 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
1264
1358
  </div>
1265
1359
  </div>
1266
1360
  <div class="date-field">
1267
- <label class="form-label required">${k.t("column.endPeriodDate")}</label>
1361
+ <label class="form-label required">${E.t("column.endPeriodDate")}</label>
1268
1362
  <div class="date-wrapper">
1269
1363
  <input
1270
1364
  type="date"
@@ -1288,8 +1382,8 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
1288
1382
  <!-- Dimensions Section -->
1289
1383
  ${this.availableDimensions.length>0?e.html`
1290
1384
  <div class="dimensions-section">
1291
- <h3>${k.t("column.availableDimensions")}</h3>
1292
- <p class="form-description">${k.t("column.dimensionsDescription")}</p>
1385
+ <h3>${E.t("column.availableDimensions")}</h3>
1386
+ <p class="form-description">${E.t("column.dimensionsDescription")}</p>
1293
1387
 
1294
1388
  ${this.availableDimensions.map(t=>{var i,o;const r=this._selectedDimensions.has(t.id),n=this._selectedDimensions.get(t.id),a=!(!t.typedMember||t.members&&0!==t.members.length);return e.html`
1295
1389
  <div class="dimension-item">
@@ -1311,7 +1405,7 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
1311
1405
  ${a?e.html`
1312
1406
  <!-- Typed Dimension Input -->
1313
1407
  <div class="member-selection">
1314
- <label>${k.t("column.enterValue")} ${t.conceptName}:</label>
1408
+ <label>${E.t("column.enterValue")} ${t.conceptName}:</label>
1315
1409
  ${this._renderTypedValueInput(t.id,null==(i=t.typedMember)?void 0:i.dataType,null==(o=t.typedMember)?void 0:o.validation,(null==n?void 0:n.typedValue)||"")}
1316
1410
  ${this._renderTypedValueErrors(t.id)}
1317
1411
  </div>
@@ -1319,7 +1413,7 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
1319
1413
  <!-- Domain Members Selection -->
1320
1414
  ${t.members&&t.members.length>0?e.html`
1321
1415
  <div class="member-selection">
1322
- <label>${k.t("column.selectMember")}</label>
1416
+ <label>${E.t("column.selectMember")}</label>
1323
1417
  <div class="member-list">
1324
1418
  ${t.members.map(i=>e.html`
1325
1419
  <div class="member-option">
@@ -1338,7 +1432,7 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
1338
1432
  </div>
1339
1433
  </div>
1340
1434
  `:e.html`
1341
- <p class="form-description">${k.t("column.noMembersAvailable")}</p>
1435
+ <p class="form-description">${E.t("column.noMembersAvailable")}</p>
1342
1436
  `}
1343
1437
  `}
1344
1438
  </div>
@@ -1351,14 +1445,14 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
1351
1445
 
1352
1446
  <div class="dialog-actions">
1353
1447
  <button class="btn btn-cancel" @click="${this._handleCancel}">
1354
- ${k.t("column.cancel")}
1448
+ ${E.t("column.cancel")}
1355
1449
  </button>
1356
1450
  <button
1357
1451
  class="btn btn-primary"
1358
1452
  ?disabled="${!t}"
1359
1453
  @click="${this._handleConfirm}"
1360
1454
  >
1361
- ${k.t("column.addColumn")}
1455
+ ${E.t("column.addColumn")}
1362
1456
  </button>
1363
1457
  </div>
1364
1458
  </div>
@@ -1679,19 +1773,36 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
1679
1773
  margin: 0 0 12px 0;
1680
1774
  line-height: 1.4;
1681
1775
  }
1682
- `,Qe([w({type:String})],exports.JupiterAddColumnDialog.prototype,"periodType",2),Qe([w({type:Boolean})],exports.JupiterAddColumnDialog.prototype,"open",2),Qe([w({type:Array})],exports.JupiterAddColumnDialog.prototype,"availableDimensions",2),Qe([w({type:String})],exports.JupiterAddColumnDialog.prototype,"periodStartDate",2),Qe([w({type:String})],exports.JupiterAddColumnDialog.prototype,"periodEndDate",2),Qe([w({type:Array})],exports.JupiterAddColumnDialog.prototype,"datatypes",2),Qe([S()],exports.JupiterAddColumnDialog.prototype,"_startDate",2),Qe([S()],exports.JupiterAddColumnDialog.prototype,"_endDate",2),Qe([S()],exports.JupiterAddColumnDialog.prototype,"_instantDate",2),Qe([S()],exports.JupiterAddColumnDialog.prototype,"_selectedType",2),Qe([S()],exports.JupiterAddColumnDialog.prototype,"_selectedDimensions",2),Qe([S()],exports.JupiterAddColumnDialog.prototype,"_typedValueErrors",2),exports.JupiterAddColumnDialog=Qe([t("jupiter-add-column-dialog")],exports.JupiterAddColumnDialog);var Ge=Object.defineProperty,Xe=Object.getOwnPropertyDescriptor,Ze=(e,t,i,o)=>{for(var r,n=o>1?void 0:o?Xe(t,i):t,a=e.length-1;a>=0;a--)(r=e[a])&&(n=(o?r(t,i,n):r(n))||n);return o&&n&&Ge(t,i,n),n};exports.JupiterFormSection=class extends e.LitElement{constructor(){super(...arguments),this.columns=[],this.formData={},this.periodData={},this.unitData={},this.decimalsData={},this.globalDecimals="INF",this.typedMemberData={},this.repeatCounts={},this.defaultUnits=[],this.disabled=!1,this.collapsible=!0,this.locale="en-US",this.isFirstSection=!1,this.availableDimensions=[],this.hideHeader=!1,this.mode="inputForm",this.showFactsOnly=!1,this.periodStartDate="",this.periodEndDate="",this.language="en",this.calculationEnabled=!1,this.totalManuallyEditedData={},this._expanded=!0,this._showAddColumnDialog=!1,this._sectionPeriodType="duration",this._openMenuColumnId=null,this._insertAfterColumnId=null,this._typedMemberErrors={},this._boundFieldBlur=e=>{if(this._clearHighlights(),this._focusedConceptId=null,"readonly"===this.mode||!this.calculationEnabled)return;const t=e.detail;(null==t?void 0:t.conceptId)&&(null==t?void 0:t.columnId)&&this._runCalculationCheck(t.conceptId,t.columnId)},this._expandedConcepts=new Set,this._allTreeExpanded=!1,this._highlightMap=new Map,this._focusedConceptId=null,this._calculationMismatches=new Map,this._totalChildrenMap=new Map,this._memberParentMap=new Map,this._totalConceptMap=new Map,this._totalChildConceptsMap=new Map,this._sessionManuallyEditedTotals=new Set}connectedCallback(){super.connectedCallback(),this._expanded=!1!==this.section.expanded,this._determinePeriodType(),this._checkAndExpandFirstSection(),document.addEventListener("click",()=>this._closeColumnMenu()),this.addEventListener("field-blur",this._boundFieldBlur)}disconnectedCallback(){super.disconnectedCallback(),document.removeEventListener("click",()=>this._closeColumnMenu()),this.removeEventListener("field-blur",this._boundFieldBlur)}updated(e){var t;super.updated(e),(e.has("isFirstSection")||e.has("section"))&&this._checkAndExpandFirstSection(),(e.has("section")||e.has("calculationEnabled"))&&(this.calculationEnabled&&(null==(t=this.section)?void 0:t.concepts)?this._buildTotalMaps(this.section.concepts):this._clearCalculationState()),e.has("totalManuallyEditedData")&&this._sessionManuallyEditedTotals.clear()}_checkAndExpandFirstSection(){this.isFirstSection&&this.section&&this.section.concepts&&(this._expanded=!0,setTimeout(()=>{this._expandAllTrees(),console.log("🎯 First section detected - expanded section and tree by default")},0))}_determinePeriodType(){const e=this._getAllNonAbstractConcepts(this.section.concepts);if(0===e.length)return this._sectionPeriodType="duration",void console.log(`📊 Section ${this.section.id}: No concepts, defaulting to duration`);const t=new Set(e.map(e=>e.periodType).filter(Boolean));if(0===t.size)this._sectionPeriodType="duration";else if(1===t.size){const e=Array.from(t)[0];this._sectionPeriodType="instant"===e?"instant":"duration"}else this._sectionPeriodType="mixed"}_getAllNonAbstractConcepts(e){const t=[];for(const i of e)i.abstract||t.push(i),i.children&&t.push(...this._getAllNonAbstractConcepts(i.children));return t}_toggleExpanded(){this.collapsible&&(this._expanded=!this._expanded,this._expanded&&this._expandAllTrees(),this.dispatchEvent(new CustomEvent("section-expand",{detail:{sectionId:this.section.id,expanded:this._expanded},bubbles:!0})))}async revealConcept(e){var t;const i=this._findAncestorIds((null==(t=this.section)?void 0:t.concepts)??[],e);if(!i)return!1;this._expanded||(this._expanded=!0,this._expandAllTrees(),this.dispatchEvent(new CustomEvent("section-expand",{detail:{sectionId:this.section.id,expanded:!0},bubbles:!0})));const o=new Set([...this._expandedConcepts,...i]);if(o.size!==this._expandedConcepts.size){this._expandedConcepts=o;const e=this._getAllConceptIds(this.section.concepts||[]);this._allTreeExpanded=e.length>0&&e.every(e=>o.has(e))}return await this.updateComplete,!0}_findAncestorIds(e,t,i=[]){var o;for(const r of e){if(r.id===t)return i;if(null==(o=r.children)?void 0:o.length){const e=this._findAncestorIds(r.children,t,[...i,r.id]);if(e)return e}}return null}_handleRemoveColumn(e){this._openMenuColumnId=null,this.dispatchEvent(new CustomEvent("column-remove",{detail:{columnId:e,sectionId:this.section.id},bubbles:!0}))}_handleHideColumn(e){this._openMenuColumnId=null,this.dispatchEvent(new CustomEvent("column-hide",{detail:{columnId:e,sectionId:this.section.id},bubbles:!0}))}_handleShowColumn(e){this.dispatchEvent(new CustomEvent("column-show",{detail:{columnId:e,sectionId:this.section.id},bubbles:!0}))}_toggleColumnMenu(e,t){t.stopPropagation(),this._openMenuColumnId=this._openMenuColumnId===e?null:e}_closeColumnMenu(){this._openMenuColumnId=null}_handleAddColumnFromMenu(e,t){t.stopPropagation(),this._openMenuColumnId=null,this._insertAfterColumnId=e,this._handleAddColumn()}_handleAddColumn(){const e=this._determineButtonPeriodType();this._sectionPeriodType=e,this._showAddColumnDialog=!0}_determineButtonPeriodType(){const e=this._getAllNonAbstractConcepts(this.section.concepts);if(0===e.length)return"duration";const t=new Set(e.map(e=>e.periodType).filter(e=>null!=e));if(0===t.size)return"duration";if(1===t.size){return"instant"===Array.from(t)[0]?"instant":"duration"}return"mixed"}_getConceptsWithFields(e){const t=[];for(const i of e)!i.abstract&&i.fields&&i.fields.length>0&&t.push(i),i.children&&t.push(...this._getConceptsWithFields(i.children));return t}_handleDialogCancel(){this._showAddColumnDialog=!1}_handleColumnAdd(e){e.stopPropagation(),this._showAddColumnDialog=!1,this.dispatchEvent(new CustomEvent("column-add-request",{detail:{sectionId:this.section.id,columnRequest:e.detail,insertAfterColumnId:this._insertAfterColumnId},bubbles:!0})),this._insertAfterColumnId=null}_handleFieldChange(e){e.stopPropagation();const{conceptId:t,columnId:i}=e.detail||{};t&&i&&this._totalConceptMap.has(t)&&(this._sessionManuallyEditedTotals.add(`${t}__${i}`),this.dispatchEvent(new CustomEvent("total-manually-edited",{detail:{conceptId:t,columnId:i},bubbles:!0,composed:!0}))),this.dispatchEvent(new CustomEvent("field-change",{detail:e.detail,bubbles:!0,composed:!0}))}_handlePeriodChange(e){console.log("📋 [FormSection] Received period-change event:",e.detail),e.stopPropagation(),this.dispatchEvent(new CustomEvent("period-change",{detail:e.detail,bubbles:!0,composed:!0})),console.log("📋 [FormSection] Forwarded period-change event to dynamic-form")}_flattenConcepts(e,t=new Set){const i=[];for(const o of e)if(i.push(o),o.children&&o.children.length>0&&t.has(o.id)){const e=this._flattenConcepts(o.children,t);i.push(...e)}return i}_isTotalManuallyEdited(e,t){var i,o;const r=`${e}__${t}`;return!!this._sessionManuallyEditedTotals.has(r)||!0===(null==(o=null==(i=this.totalManuallyEditedData)?void 0:i[e])?void 0:o[t])}_isConceptRowBlank(e){var t;for(const i of this.columns){const o=null==(t=this.formData[e.id])?void 0:t[i.id];if(null!=o&&""!==o)return!1}return!0}_getAllConceptIds(e){const t=[];for(const i of e)i.children&&i.children.length>0&&(t.push(i.id),t.push(...this._getAllConceptIds(i.children)));return t}_expandAllTrees(){const e=this._getAllConceptIds(this.section.concepts||[]);this._expandedConcepts=new Set([...this._expandedConcepts,...e]),this._allTreeExpanded=!0}_collapseAllTrees(){this._expandedConcepts=new Set,this._allTreeExpanded=!1}_handleConceptExpand(e){e.stopPropagation();const{conceptId:t,expanded:i}=e.detail,o=new Set(this._expandedConcepts);i?o.add(t):o.delete(t),this._expandedConcepts=o;const r=this._getAllConceptIds(this.section.concepts||[]);this._allTreeExpanded=r.length>0&&r.every(e=>o.has(e)),this.dispatchEvent(new CustomEvent("concept-expand",{detail:e.detail,bubbles:!0}))}_buildTotalMaps(e){this._totalChildrenMap.clear(),this._memberParentMap.clear(),this._totalConceptMap.clear(),this._totalChildConceptsMap.clear(),this._traverseTotalGroups(e)}_clearCalculationState(){this._totalChildrenMap.clear(),this._memberParentMap.clear(),this._totalConceptMap.clear(),this._totalChildConceptsMap.clear();for(const e of Array.from(this._calculationMismatches.keys()))this._clearCalculationMismatch(e)}static _isTotalLabel(e){return E(e)}static _isNegatedTotalLabel(e){return!!(null==e?void 0:e.toLowerCase().includes("negatedtotallabel"))}static _resolveValueConcept(e,t=0){var i;if(!e.abstract)return e;if(t>5||!(null==(i=e.children)?void 0:i.length))return null;const o=e.children.find(e=>exports.JupiterFormSection._isTotalLabel(e.preferredLabel));return o?exports.JupiterFormSection._resolveValueConcept(o,t+1):null}_registerTotalGroup(e,t){const i=t.map(e=>exports.JupiterFormSection._resolveValueConcept(e)).filter(e=>null!==e);if(0===i.length)return;const o=i.map(e=>e.id);this._totalChildrenMap.set(e.id,o),this._totalConceptMap.set(e.id,e),this._totalChildConceptsMap.set(e.id,i);for(const r of o)this._memberParentMap.set(r,e.id)}_resolveTotalGroupMembers(e,t,i,o){if(i<0)return o;const r=e[t];if(exports.JupiterFormSection._isNegatedTotalLabel(r.preferredLabel))return o.length>0?o:[e[i]];if(o.length>0)return[e[i],...o];if(exports.JupiterFormSection._isNegatedTotalLabel(e[i].preferredLabel)){let t=-1;for(let o=i-1;o>=0;o--)if(exports.JupiterFormSection._isTotalLabel(e[o].preferredLabel)){t=o;break}return t>=0?[e[t],e[i]]:[e[i]]}return[e[i]]}_traverseTotalGroups(e){var t,i;for(let o=0;o<e.length;o++){const r=e[o];if(exports.JupiterFormSection._isTotalLabel(r.preferredLabel))if(null==(t=r.children)?void 0:t.length)this._registerTotalGroup(r,r.children);else{let t=-1;for(let r=o-1;r>=0;r--)if(exports.JupiterFormSection._isTotalLabel(e[r].preferredLabel)){t=r;break}const i=e.slice(t+1,o),n=this._resolveTotalGroupMembers(e,o,t,i);n.length>0&&this._registerTotalGroup(r,n)}(null==(i=r.children)?void 0:i.length)&&this._traverseTotalGroups(r.children)}}_runCalculationCheck(e,t){const i=new Set;this._totalConceptMap.has(e)&&i.add(e);const o=this._memberParentMap.get(e);o&&i.add(o);for(const r of i)this._evaluateTotal(r,t)}_evaluateTotal(e,t){var i,o;const r=this._totalConceptMap.get(e),n=`${e}__${t}`,a=this._totalChildConceptsMap.get(e)||[],{calculatedSum:s,hasAnyValue:l,breakdown:d}=this._buildCalculationBreakdown(a,this.formData,t,r.balance);if(!this._isTotalManuallyEdited(e,t)){if(l){const o=null==(i=this.formData[e])?void 0:i[t],r=parseFloat(o);(null==o||""===o||isNaN(r)||!exports.JupiterFormSection._checkTotal(r,s))&&this._dispatchCalculationTotalAutoPopulated(e,t,s)}return void this._clearCalculationMismatch(n)}const c=null==(o=this.formData[e])?void 0:o[t];if(null==c||""===c)return void this._clearCalculationMismatch(n);const p=parseFloat(c);if(isNaN(p))return void this._clearCalculationMismatch(n);if(!l||exports.JupiterFormSection._checkTotal(p,s))return void this._clearCalculationMismatch(n);const u={totalConceptId:e,totalLabel:r.label,columnId:t,sectionId:this.section.id,enteredTotal:p,calculatedSum:s,children:d},h={...u,message:exports.JupiterFormSection._buildMismatchMessage(u)},m=new Map(this._calculationMismatches);m.set(n,h),this._calculationMismatches=m,this._dispatchCalculationMismatchChanged(n,h)}_dispatchCalculationTotalAutoPopulated(e,t,i){this.dispatchEvent(new CustomEvent("calculation-total-auto-populated",{detail:{conceptId:e,columnId:t,value:i,sectionId:this.section.id},bubbles:!0,composed:!0}))}_clearCalculationMismatch(e){if(!this._calculationMismatches.has(e))return;const t=new Map(this._calculationMismatches);t.delete(e),this._calculationMismatches=t,this._dispatchCalculationMismatchChanged(e,null)}_dispatchCalculationMismatchChanged(e,t){this.dispatchEvent(new CustomEvent("calculation-mismatch-changed",{detail:{key:e,mismatch:t},bubbles:!0,composed:!0}))}static _resolveWeight(e,t){return e&&t&&e!==t?-1:1}_resolveMemberContributions(e,t,i,o,r,n=0){var a;const s=parseFloat(null==(a=i[e.id])?void 0:a[o]);if(!isNaN(s))return[{conceptId:e.id,label:e.label,value:s,balance:e.balance,weight:t}];if(n>=5||r.has(e.id))return[];const l=this._totalChildConceptsMap.get(e.id);if(!l)return[];const d=new Set(r).add(e.id),c=[];for(const p of l){const r=t*exports.JupiterFormSection._resolveWeight(e.balance,p.balance);c.push(...this._resolveMemberContributions(p,r,i,o,d,n+1))}return c}_buildCalculationBreakdown(e,t,i,o){let r=0,n=!1;const a=[];for(const s of e){const e=exports.JupiterFormSection._resolveWeight(o,s.balance),l=this._resolveMemberContributions(s,e,t,i,new Set);for(const t of l)r+=t.weight*t.value,n=!0,a.push(t)}return{calculatedSum:r,hasAnyValue:n,breakdown:a}}static _checkTotal(e,t){return Math.abs(t-e)<M}static _formatNumber(e){return Number.isInteger(e)?String(e):e.toFixed(2)}static _buildMismatchMessage(e){const t=k.t("calculationWarning.summaryLine",{label:e.totalLabel,calculated:exports.JupiterFormSection._formatNumber(e.calculatedSum),entered:exports.JupiterFormSection._formatNumber(e.enteredTotal)});if(0===e.children.length)return t;const i=e.children.map(e=>k.t(1===e.weight?"calculationWarning.childAdded":"calculationWarning.childSubtracted",{label:e.label,value:exports.JupiterFormSection._formatNumber(e.value)}));return`${t} ${k.t("calculationWarning.childrenPrefix")} ${i.join("; ")}`}_handleFieldFocusForHighlight(e){var t,i;const o=null==(t=e.detail)?void 0:t.conceptId,r=null==(i=e.detail)?void 0:i.columnId;if(!o||!r)return;this._focusedConceptId=o;const n=new Map;if(this._totalChildrenMap.has(o)){n.set(o,{type:"total",columnId:r});for(const e of this._totalChildrenMap.get(o))n.set(e,{type:"member",columnId:r})}else{const e=this._memberParentMap.get(o);if(e){n.set(e,{type:"total",columnId:r});for(const t of this._totalChildrenMap.get(e))n.set(t,{type:"member",columnId:r})}}this._highlightMap=n}_clearHighlights(){this._highlightMap.size>0&&(this._highlightMap=new Map)}_getTypedMemberHeaderValue(e,t){var i;return(null==(i=this.typedMemberData[e])?void 0:i[t])||""}_columnHasAnyValue(e){return Object.keys(this.formData).some(t=>{var i;const o=null==(i=this.formData[t])?void 0:i[e];return null!=o&&""!==o})}_getTypedMemberInputConfig(e){return Me(e.type,this.datatypes)}_typedMemberErrorKey(e,t){return`${e}::${t}`}_validateTypedMemberValue(e,t,i){const o=this._typedMemberErrorKey(e,t.axisId),r=o in this._typedMemberErrors;if(!i){if(r){const e={...this._typedMemberErrors};delete e[o],this._typedMemberErrors=e}return}const n=t.validation?ze.validateAgainstRules(i,t.validation):ze.validateConceptValue(t.type,i,this.datatypes);if(n.valid){if(r){const e={...this._typedMemberErrors};delete e[o],this._typedMemberErrors=e}}else this._typedMemberErrors={...this._typedMemberErrors,[o]:n.errors}}_handleTypedMemberHeaderBlur(e,t,i){const o=e.target,r=o instanceof HTMLInputElement&&"checkbox"===o.type?String(o.checked):o.value;this._validateTypedMemberValue(t,i,r)}_renderTypedMemberHeaderErrors(t,i){const o=this._typedMemberErrors[this._typedMemberErrorKey(t,i)];return o&&0!==o.length?e.html`
1776
+ `,Ze([S({type:String})],exports.JupiterAddColumnDialog.prototype,"periodType",2),Ze([S({type:Boolean})],exports.JupiterAddColumnDialog.prototype,"open",2),Ze([S({type:Array})],exports.JupiterAddColumnDialog.prototype,"availableDimensions",2),Ze([S({type:String})],exports.JupiterAddColumnDialog.prototype,"periodStartDate",2),Ze([S({type:String})],exports.JupiterAddColumnDialog.prototype,"periodEndDate",2),Ze([S({type:Array})],exports.JupiterAddColumnDialog.prototype,"datatypes",2),Ze([C()],exports.JupiterAddColumnDialog.prototype,"_startDate",2),Ze([C()],exports.JupiterAddColumnDialog.prototype,"_endDate",2),Ze([C()],exports.JupiterAddColumnDialog.prototype,"_instantDate",2),Ze([C()],exports.JupiterAddColumnDialog.prototype,"_selectedType",2),Ze([C()],exports.JupiterAddColumnDialog.prototype,"_selectedDimensions",2),Ze([C()],exports.JupiterAddColumnDialog.prototype,"_typedValueErrors",2),exports.JupiterAddColumnDialog=Ze([t("jupiter-add-column-dialog")],exports.JupiterAddColumnDialog);var et=Object.defineProperty,tt=Object.getOwnPropertyDescriptor,it=(e,t,i,o)=>{for(var r,n=o>1?void 0:o?tt(t,i):t,a=e.length-1;a>=0;a--)(r=e[a])&&(n=(o?r(t,i,n):r(n))||n);return o&&n&&et(t,i,n),n};function ot(e,t){if(!e)return 0;const i=e.toLowerCase(),o=t.toLowerCase(),r=o.indexOf(i);if(-1!==r){const e=o[r-1];return 1e4-r+(0===r||!e||/[^a-z0-9]/.test(e)?500:0)}let n=0,a=0,s=0;for(let l=0;l<o.length&&n<i.length;l++)o[l]===i[n]?(n++,a++,s+=a):a=0;return n===i.length?s:-1}exports.JupiterFormSection=class extends e.LitElement{constructor(){super(...arguments),this.columns=[],this.formData={},this.periodData={},this.unitData={},this.decimalsData={},this.globalDecimals="INF",this.typedMemberData={},this.repeatCounts={},this.defaultUnits=[],this.disabled=!1,this.collapsible=!0,this.locale="en-US",this.numberLocale="nl-NL",this.isFirstSection=!1,this.availableDimensions=[],this.hideHeader=!1,this.mode="inputForm",this.showFactsOnly=!1,this.periodStartDate="",this.periodEndDate="",this.language="en",this.calculationEnabled=!1,this.totalManuallyEditedData={},this._expanded=!0,this._showAddColumnDialog=!1,this._sectionPeriodType="duration",this._openMenuColumnId=null,this._insertAfterColumnId=null,this._typedMemberErrors={},this._boundFieldBlur=e=>{if(this._clearHighlights(),this._focusedConceptId=null,"readonly"===this.mode||!this.calculationEnabled)return;const t=e.detail;(null==t?void 0:t.conceptId)&&(null==t?void 0:t.columnId)&&this._runCalculationCheck(t.conceptId,t.columnId)},this._expandedConcepts=new Set,this._allTreeExpanded=!1,this._highlightMap=new Map,this._focusedConceptId=null,this._calculationMismatches=new Map,this._balanceCheckTotals=null,this._totalChildrenMap=new Map,this._memberParentMap=new Map,this._totalConceptMap=new Map,this._totalChildConceptsMap=new Map,this._sessionManuallyEditedTotals=new Set}connectedCallback(){super.connectedCallback(),this._expanded=!1!==this.section.expanded,this._determinePeriodType(),this._checkAndExpandFirstSection(),document.addEventListener("click",()=>this._closeColumnMenu()),this.addEventListener("field-blur",this._boundFieldBlur)}disconnectedCallback(){super.disconnectedCallback(),document.removeEventListener("click",()=>this._closeColumnMenu()),this.removeEventListener("field-blur",this._boundFieldBlur)}willUpdate(e){var t;super.willUpdate(e),(e.has("section")||e.has("calculationEnabled"))&&(this._balanceCheckTotals=this.calculationEnabled&&(null==(t=this.section)?void 0:t.concepts)?function(e){let t,i;const o=e=>{var r,n;for(const a of e){if(F(a.preferredLabel)){const e=(null==(r=a.conceptMetadata)?void 0:r.conceptName)??a.name;"jenv-bw2-i:Assets"===e?t=a.id:"jenv-bw2-i:EquityAndLiabilities"===e&&(i=a.id)}(null==(n=a.children)?void 0:n.length)&&o(a.children)}};return o(e),t&&i?{assetsConceptId:t,equityConceptId:i}:null}(this.section.concepts):null)}updated(e){var t;super.updated(e),(e.has("isFirstSection")||e.has("section"))&&this._checkAndExpandFirstSection(),(e.has("section")||e.has("calculationEnabled"))&&(this.calculationEnabled&&(null==(t=this.section)?void 0:t.concepts)?this._buildTotalMaps(this.section.concepts):this._clearCalculationState()),e.has("totalManuallyEditedData")&&this._sessionManuallyEditedTotals.clear()}_checkAndExpandFirstSection(){this.isFirstSection&&this.section&&this.section.concepts&&(this._expanded=!0,setTimeout(()=>{this._expandAllTrees()},0))}_determinePeriodType(){const e=this._getAllNonAbstractConcepts(this.section.concepts);if(0===e.length)return this._sectionPeriodType="duration",void this.section.id;const t=new Set(e.map(e=>e.periodType).filter(Boolean));if(0===t.size)this._sectionPeriodType="duration";else if(1===t.size){const e=Array.from(t)[0];this._sectionPeriodType="instant"===e?"instant":"duration"}else this._sectionPeriodType="mixed"}_getAllNonAbstractConcepts(e){const t=[];for(const i of e)i.abstract||t.push(i),i.children&&t.push(...this._getAllNonAbstractConcepts(i.children));return t}_toggleExpanded(){this.collapsible&&(this._expanded=!this._expanded,this._expanded&&this._expandAllTrees(),this.dispatchEvent(new CustomEvent("section-expand",{detail:{sectionId:this.section.id,expanded:this._expanded},bubbles:!0})))}async revealConcept(e){var t;const i=this._findAncestorIds((null==(t=this.section)?void 0:t.concepts)??[],e);if(!i)return!1;this._expanded||(this._expanded=!0,this._expandAllTrees(),this.dispatchEvent(new CustomEvent("section-expand",{detail:{sectionId:this.section.id,expanded:!0},bubbles:!0})));const o=new Set([...this._expandedConcepts,...i]);if(o.size!==this._expandedConcepts.size){this._expandedConcepts=o;const e=this._getAllConceptIds(this.section.concepts||[]);this._allTreeExpanded=e.length>0&&e.every(e=>o.has(e))}return await this.updateComplete,!0}_findAncestorIds(e,t,i=[]){var o;for(const r of e){if(r.id===t)return i;if(null==(o=r.children)?void 0:o.length){const e=this._findAncestorIds(r.children,t,[...i,r.id]);if(e)return e}}return null}_handleRemoveColumn(e){this._openMenuColumnId=null,this.dispatchEvent(new CustomEvent("column-remove",{detail:{columnId:e,sectionId:this.section.id},bubbles:!0}))}_handleHideColumn(e){this._openMenuColumnId=null,this.dispatchEvent(new CustomEvent("column-hide",{detail:{columnId:e,sectionId:this.section.id},bubbles:!0}))}_handleShowColumn(e){this.dispatchEvent(new CustomEvent("column-show",{detail:{columnId:e,sectionId:this.section.id},bubbles:!0}))}_toggleColumnMenu(e,t){t.stopPropagation(),this._openMenuColumnId=this._openMenuColumnId===e?null:e}_closeColumnMenu(){this._openMenuColumnId=null}_handleAddColumnFromMenu(e,t){t.stopPropagation(),this._openMenuColumnId=null,this._insertAfterColumnId=e,this._handleAddColumn()}_handleAddColumn(){const e=this._determineButtonPeriodType();this._sectionPeriodType=e,this._showAddColumnDialog=!0}_determineButtonPeriodType(){const e=this._getAllNonAbstractConcepts(this.section.concepts);if(0===e.length)return"duration";const t=new Set(e.map(e=>e.periodType).filter(e=>null!=e));if(0===t.size)return"duration";if(1===t.size){return"instant"===Array.from(t)[0]?"instant":"duration"}return"mixed"}_getConceptsWithFields(e){const t=[];for(const i of e)!i.abstract&&i.fields&&i.fields.length>0&&t.push(i),i.children&&t.push(...this._getConceptsWithFields(i.children));return t}_handleDialogCancel(){this._showAddColumnDialog=!1}_handleColumnAdd(e){e.stopPropagation(),this._showAddColumnDialog=!1,this.dispatchEvent(new CustomEvent("column-add-request",{detail:{sectionId:this.section.id,columnRequest:e.detail,insertAfterColumnId:this._insertAfterColumnId},bubbles:!0})),this._insertAfterColumnId=null}_handleFieldChange(e){e.stopPropagation();const{conceptId:t,columnId:i}=e.detail||{};t&&i&&this._totalConceptMap.has(t)&&(this._sessionManuallyEditedTotals.add(`${t}__${i}`),this.dispatchEvent(new CustomEvent("total-manually-edited",{detail:{conceptId:t,columnId:i},bubbles:!0,composed:!0}))),this.dispatchEvent(new CustomEvent("field-change",{detail:e.detail,bubbles:!0,composed:!0}))}_handlePeriodChange(e){e.detail,e.stopPropagation(),this.dispatchEvent(new CustomEvent("period-change",{detail:e.detail,bubbles:!0,composed:!0}))}_flattenConcepts(e,t=new Set){const i=[];for(const o of e)if(i.push(o),o.children&&o.children.length>0&&t.has(o.id)){const e=this._flattenConcepts(o.children,t);i.push(...e)}return i}_isTotalManuallyEdited(e,t){var i,o;const r=`${e}__${t}`;return!!this._sessionManuallyEditedTotals.has(r)||!0===(null==(o=null==(i=this.totalManuallyEditedData)?void 0:i[e])?void 0:o[t])}_isConceptRowBlank(e){var t;for(const i of this.columns){const o=null==(t=this.formData[e.id])?void 0:t[i.id];if(null!=o&&""!==o)return!1}return!0}_getAllConceptIds(e){const t=[];for(const i of e)i.children&&i.children.length>0&&(t.push(i.id),t.push(...this._getAllConceptIds(i.children)));return t}_expandAllTrees(){const e=this._getAllConceptIds(this.section.concepts||[]);this._expandedConcepts=new Set([...this._expandedConcepts,...e]),this._allTreeExpanded=!0}_collapseAllTrees(){this._expandedConcepts=new Set,this._allTreeExpanded=!1}_handleConceptExpand(e){e.stopPropagation();const{conceptId:t,expanded:i}=e.detail,o=new Set(this._expandedConcepts);i?o.add(t):o.delete(t),this._expandedConcepts=o;const r=this._getAllConceptIds(this.section.concepts||[]);this._allTreeExpanded=r.length>0&&r.every(e=>o.has(e)),this.dispatchEvent(new CustomEvent("concept-expand",{detail:e.detail,bubbles:!0}))}_buildTotalMaps(e){this._totalChildrenMap.clear(),this._memberParentMap.clear(),this._totalConceptMap.clear(),this._totalChildConceptsMap.clear(),this._traverseTotalGroups(e)}_clearCalculationState(){this._totalChildrenMap.clear(),this._memberParentMap.clear(),this._totalConceptMap.clear(),this._totalChildConceptsMap.clear();for(const e of Array.from(this._calculationMismatches.keys()))this._clearCalculationMismatch(e)}static _isTotalLabel(e){return F(e)}static _isNegatedTotalLabel(e){return!!(null==e?void 0:e.toLowerCase().includes("negatedtotallabel"))}static _resolveValueConcept(e,t=0){var i;if(!e.abstract)return e;if(t>5||!(null==(i=e.children)?void 0:i.length))return null;const o=e.children.find(e=>exports.JupiterFormSection._isTotalLabel(e.preferredLabel));return o?exports.JupiterFormSection._resolveValueConcept(o,t+1):null}_registerTotalGroup(e,t){const i=t.map(e=>exports.JupiterFormSection._resolveValueConcept(e)).filter(e=>null!==e);if(0===i.length)return;const o=i.map(e=>e.id);this._totalChildrenMap.set(e.id,o),this._totalConceptMap.set(e.id,e),this._totalChildConceptsMap.set(e.id,i);for(const r of o)this._memberParentMap.set(r,e.id)}_resolveTotalGroupMembers(e,t,i,o){if(i<0)return o;const r=e[t];if(exports.JupiterFormSection._isNegatedTotalLabel(r.preferredLabel))return o.length>0?o:[e[i]];if(o.length>0)return[e[i],...o];if(exports.JupiterFormSection._isNegatedTotalLabel(e[i].preferredLabel)){let t=-1;for(let o=i-1;o>=0;o--)if(exports.JupiterFormSection._isTotalLabel(e[o].preferredLabel)){t=o;break}return t>=0?[e[t],e[i]]:[e[i]]}return[e[i]]}_traverseTotalGroups(e){var t,i;for(let o=0;o<e.length;o++){const r=e[o];if(exports.JupiterFormSection._isTotalLabel(r.preferredLabel))if(null==(t=r.children)?void 0:t.length)this._registerTotalGroup(r,r.children);else{let t=-1;for(let r=o-1;r>=0;r--)if(exports.JupiterFormSection._isTotalLabel(e[r].preferredLabel)){t=r;break}const i=e.slice(t+1,o),n=this._resolveTotalGroupMembers(e,o,t,i);n.length>0&&this._registerTotalGroup(r,n)}(null==(i=r.children)?void 0:i.length)&&this._traverseTotalGroups(r.children)}}_runCalculationCheck(e,t){const i=new Set;this._totalConceptMap.has(e)&&i.add(e);const o=this._memberParentMap.get(e);o&&i.add(o);for(const r of i)this._evaluateTotal(r,t)}_evaluateTotal(e,t){var i,o;const r=this._totalConceptMap.get(e),n=`${e}__${t}`,a=this._totalChildConceptsMap.get(e)||[],{calculatedSum:s,hasAnyValue:l,breakdown:d}=this._buildCalculationBreakdown(a,this.formData,t,r.balance);if(!this._isTotalManuallyEdited(e,t)){if(l){const o=null==(i=this.formData[e])?void 0:i[t],r=parseFloat(o);(null==o||""===o||isNaN(r)||!exports.JupiterFormSection._checkTotal(r,s))&&this._dispatchCalculationTotalAutoPopulated(e,t,s)}return void this._clearCalculationMismatch(n)}const c=null==(o=this.formData[e])?void 0:o[t];if(null==c||""===c)return void this._clearCalculationMismatch(n);const p=parseFloat(c);if(isNaN(p))return void this._clearCalculationMismatch(n);if(!l||exports.JupiterFormSection._checkTotal(p,s))return void this._clearCalculationMismatch(n);const u={totalConceptId:e,totalLabel:r.label,columnId:t,sectionId:this.section.id,enteredTotal:p,calculatedSum:s,children:d},h={...u,message:exports.JupiterFormSection._buildMismatchMessage(u)},m=new Map(this._calculationMismatches);m.set(n,h),this._calculationMismatches=m,this._dispatchCalculationMismatchChanged(n,h)}_dispatchCalculationTotalAutoPopulated(e,t,i){this.dispatchEvent(new CustomEvent("calculation-total-auto-populated",{detail:{conceptId:e,columnId:t,value:i,sectionId:this.section.id},bubbles:!0,composed:!0}))}_clearCalculationMismatch(e){if(!this._calculationMismatches.has(e))return;const t=new Map(this._calculationMismatches);t.delete(e),this._calculationMismatches=t,this._dispatchCalculationMismatchChanged(e,null)}_dispatchCalculationMismatchChanged(e,t){this.dispatchEvent(new CustomEvent("calculation-mismatch-changed",{detail:{key:e,mismatch:t},bubbles:!0,composed:!0}))}static _resolveWeight(e,t){return e&&t&&e!==t?-1:1}_resolveMemberContributions(e,t,i,o,r,n=0){var a;const s=parseFloat(null==(a=i[e.id])?void 0:a[o]);if(!isNaN(s))return[{conceptId:e.id,label:e.label,value:s,balance:e.balance,weight:t}];if(n>=5||r.has(e.id))return[];const l=this._totalChildConceptsMap.get(e.id);if(!l)return[];const d=new Set(r).add(e.id),c=[];for(const p of l){const r=t*exports.JupiterFormSection._resolveWeight(e.balance,p.balance);c.push(...this._resolveMemberContributions(p,r,i,o,d,n+1))}return c}_buildCalculationBreakdown(e,t,i,o){let r=0,n=!1;const a=[];for(const s of e){const e=exports.JupiterFormSection._resolveWeight(o,s.balance),l=this._resolveMemberContributions(s,e,t,i,new Set);for(const t of l)r+=t.weight*t.value,n=!0,a.push(t)}return{calculatedSum:r,hasAnyValue:n,breakdown:a}}static _checkTotal(e,t){return Math.abs(t-e)<M}static _formatNumber(e){return Number.isInteger(e)?String(e):e.toFixed(2)}static _buildMismatchMessage(e){const t=E.t("calculationWarning.summaryLine",{label:e.totalLabel,calculated:exports.JupiterFormSection._formatNumber(e.calculatedSum),entered:exports.JupiterFormSection._formatNumber(e.enteredTotal)});if(0===e.children.length)return t;const i=e.children.map(e=>E.t(1===e.weight?"calculationWarning.childAdded":"calculationWarning.childSubtracted",{label:e.label,value:exports.JupiterFormSection._formatNumber(e.value)}));return`${t} ${E.t("calculationWarning.childrenPrefix")} ${i.join("; ")}`}_handleFieldFocusForHighlight(e){var t,i;const o=null==(t=e.detail)?void 0:t.conceptId,r=null==(i=e.detail)?void 0:i.columnId;if(!o||!r)return;this._focusedConceptId=o;const n=new Map;if(this._totalChildrenMap.has(o)){n.set(o,{type:"total",columnId:r});for(const e of this._totalChildrenMap.get(o))n.set(e,{type:"member",columnId:r})}else{const e=this._memberParentMap.get(o);if(e){n.set(e,{type:"total",columnId:r});for(const t of this._totalChildrenMap.get(e))n.set(t,{type:"member",columnId:r})}}this._highlightMap=n}_clearHighlights(){this._highlightMap.size>0&&(this._highlightMap=new Map)}_handleBalanceCheckClick(e){var t,i,o;if(!this._balanceCheckTotals)return;const{assetsConceptId:r,equityConceptId:n}=this._balanceCheckTotals,a=new Map(this._highlightMap);a.set(r,{type:"total",columnId:e}),a.set(n,{type:"total",columnId:e}),this._highlightMap=a;const s=Array.from((null==(t=this.shadowRoot)?void 0:t.querySelectorAll("jupiter-concept-tree"))??[]);let l=null;for(const c of s){if(l=Array.from((null==(i=c.shadowRoot)?void 0:i.querySelectorAll("jupiter-form-field"))??[]).find(t=>t.conceptId===r&&t.columnId===e),l)break}if(!l)return;l.scrollIntoView({behavior:"smooth",block:"center"});const d=null==(o=this.shadowRoot)?void 0:o.querySelector(".table-container");if(d&&d.scrollWidth>d.clientWidth){const e=l.getBoundingClientRect(),t=d.getBoundingClientRect(),i=Math.max(0,e.left-t.left+d.scrollLeft-d.clientWidth/2+e.width/2);d.scrollTo({left:i,behavior:"smooth"})}}_formatBalanceDifferenceAmount(e){try{return new Intl.NumberFormat(this.locale,{maximumFractionDigits:2}).format(Math.abs(e))}catch{return exports.JupiterFormSection._formatNumber(Math.abs(e))}}_renderBalanceCheckStrip(){if(!this.calculationEnabled||!this._balanceCheckTotals)return"";const t=function(e,t,i){var o,r;const n=[];for(const a of t){if(a.hidden)continue;const t=parseFloat(null==(o=e[i.assetsConceptId])?void 0:o[a.id]),s=parseFloat(null==(r=e[i.equityConceptId])?void 0:r[a.id]);if(isNaN(t)||isNaN(s))continue;const l=t-s,d=a.description&&a.description!==a.title?`${a.title} ${a.description}`:a.title;n.push({columnId:a.id,columnLabel:d,assetsValue:t,equityValue:s,difference:l,balanced:Math.abs(l)<M})}return n}(this.formData,this.columns,this._balanceCheckTotals);return 0===t.length?"":e.html`
1777
+ <div class="balance-check-strip">
1778
+ ${t.map(t=>t.balanced?e.html`
1779
+ <span class="balance-check-chip balanced" title="${t.columnLabel}">
1780
+ ✓ ${E.t("balanceCheck.balanced",{column:t.columnLabel})}
1781
+ </span>
1782
+ `:e.html`
1783
+ <button
1784
+ type="button"
1785
+ class="balance-check-chip unbalanced"
1786
+ title="${t.columnLabel}"
1787
+ @click="${()=>this._handleBalanceCheckClick(t.columnId)}"
1788
+ >
1789
+ ${E.t("balanceCheck.difference",{column:t.columnLabel,amount:this._formatBalanceDifferenceAmount(t.difference)})}
1790
+ </button>
1791
+ `)}
1792
+ </div>
1793
+ `}_scopedColumnKey(e){return`${this.section.id}__${e}`}_getTypedMemberHeaderValue(e,t){var i,o;const r=null==(i=this.typedMemberData[this._scopedColumnKey(e)])?void 0:i[t];return void 0!==r?r:(null==(o=this.typedMemberData[e])?void 0:o[t])||""}_columnHasAnyValue(e){return Object.keys(this.formData).some(t=>{var i;const o=null==(i=this.formData[t])?void 0:i[e];return null!=o&&""!==o})}_getTypedMemberInputConfig(e){return je(e.type,this.datatypes)}_typedMemberErrorKey(e,t){return`${e}::${t}`}_validateTypedMemberValue(e,t,i){const o=this._typedMemberErrorKey(e,t.axisId),r=o in this._typedMemberErrors;if(!i){if(r){const e={...this._typedMemberErrors};delete e[o],this._typedMemberErrors=e}return}const n=t.validation?Je.validateAgainstRules(i,t.validation):Je.validateConceptValue(t.type,i,this.datatypes);if(n.valid){if(r){const e={...this._typedMemberErrors};delete e[o],this._typedMemberErrors=e}}else this._typedMemberErrors={...this._typedMemberErrors,[o]:n.errors}}_handleTypedMemberHeaderBlur(e,t,i){const o=e.target,r=o instanceof HTMLInputElement&&"checkbox"===o.type?String(o.checked):o.value;this._validateTypedMemberValue(t,i,r)}_renderTypedMemberHeaderErrors(t,i){const o=this._typedMemberErrors[this._typedMemberErrorKey(t,i)];return o&&0!==o.length?e.html`
1683
1794
  <div class="typed-member-header-errors">
1684
1795
  ${o.map(t=>e.html`<span class="typed-member-header-error">${t.message}</span>`)}
1685
1796
  </div>
1686
- `:""}_handleTypedMemberHeaderChange(e,t,i){const o=e.target,r=o instanceof HTMLInputElement&&"checkbox"===o.type?String(o.checked):o.value;console.log(`🔍 [FormSection] Typed member header change: columnId=${t}, axisId=${i}, value=${r}`),this.dispatchEvent(new CustomEvent("typed-member-change",{detail:{columnId:t,axisId:i,value:r},bubbles:!0}))}_renderTypedMemberHeaderInput(t,i,o){var r;const n=this._getTypedMemberInputConfig(i),a=this._getTypedMemberHeaderValue(t,i.axisId),s=`typed-member-header-field ${o?"required-field":""} ${!!(null==(r=this._typedMemberErrors[this._typedMemberErrorKey(t,i.axisId)])?void 0:r.length)?"has-error":""}`,l=o?k.t("validation.typedMemberRequired"):"",d=e=>this._handleTypedMemberHeaderChange(e,t,i.axisId),c=e=>this._handleTypedMemberHeaderBlur(e,t,i);if("select"===n.fieldType||Le(n.fieldType)){const t=n.enumerations||[];return e.html`
1797
+ `:""}_handleTypedMemberHeaderChange(e,t,i){const o=e.target,r=o instanceof HTMLInputElement&&"checkbox"===o.type?String(o.checked):o.value;this.section.id,this.dispatchEvent(new CustomEvent("typed-member-change",{detail:{sectionId:this.section.id,columnId:t,axisId:i,value:r},bubbles:!0}))}_renderTypedMemberHeaderInput(t,i,o){var r;const n=this._getTypedMemberInputConfig(i),a=this._getTypedMemberHeaderValue(t,i.axisId),s=`typed-member-header-field ${o?"required-field":""} ${!!(null==(r=this._typedMemberErrors[this._typedMemberErrorKey(t,i.axisId)])?void 0:r.length)?"has-error":""}`,l=o?E.t("validation.typedMemberRequired"):"",d=[i.axisLabel,l].filter(Boolean).join(" — "),c=e=>this._handleTypedMemberHeaderChange(e,t,i.axisId),p=e=>this._handleTypedMemberHeaderBlur(e,t,i);if("select"===n.fieldType||Ne(n.fieldType)){const t=n.enumerations||[];return e.html`
1687
1798
  <select
1688
1799
  class="${s}"
1689
1800
  .value="${a}"
1690
- title="${l}"
1691
- @change="${d}"
1692
- @blur="${c}"
1801
+ title="${d}"
1802
+ @change="${c}"
1803
+ @blur="${p}"
1693
1804
  >
1694
- <option value="">${n.placeholder||k.t("field.select")}</option>
1805
+ <option value="">${n.placeholder||E.t("field.select")}</option>
1695
1806
  ${t.map(t=>e.html`
1696
1807
  <option value="${t.value}" ?selected="${a===t.value}">
1697
1808
  ${t.label||t.value}
@@ -1703,23 +1814,23 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
1703
1814
  type="checkbox"
1704
1815
  class="${s}"
1705
1816
  .checked="${"true"===a}"
1706
- title="${l}"
1707
- @change="${d}"
1708
- @blur="${c}"
1817
+ title="${d}"
1818
+ @change="${c}"
1819
+ @blur="${p}"
1709
1820
  />
1710
- `;const p=n.htmlInputType||"text",u=`${n.placeholder||k.t("section.enterPlaceholder")} ${i.axisLabel}`;return e.html`
1821
+ `;const u=n.htmlInputType||"text",h=`${n.placeholder||E.t("section.enterPlaceholder")} ${i.axisLabel}`;return e.html`
1711
1822
  <input
1712
- type="${p}"
1823
+ type="${u}"
1713
1824
  inputmode="${n.inputMode||""}"
1714
1825
  class="${s}"
1715
- placeholder="${u}"
1826
+ placeholder="${h}"
1716
1827
  .value="${a}"
1717
1828
  min="${void 0!==n.min?n.min:""}"
1718
1829
  max="${void 0!==n.max?n.max:""}"
1719
1830
  step="${void 0!==n.step?n.step:""}"
1720
- title="${l}"
1721
- @input="${d}"
1722
- @blur="${c}"
1831
+ title="${d}"
1832
+ @input="${c}"
1833
+ @blur="${p}"
1723
1834
  />
1724
1835
  `}_handleAddRepeat(e){e.stopPropagation(),this.dispatchEvent(new CustomEvent("add-concept-repeat",{detail:e.detail,bubbles:!0}))}_handleRemoveRepeat(e){e.stopPropagation(),this.dispatchEvent(new CustomEvent("remove-concept-repeat",{detail:e.detail,bubbles:!0}))}_renderConceptRows(t){var i;const o="readonly"!==this.mode&&!t.abstract&&(null==(i=t.fields)?void 0:i.some(e=>{var t;return(null==(t=e.crossRoleTypedMembers)?void 0:t.length)>0})),r=o&&this.repeatCounts[t.id]||0,n=(t,i)=>{var o,r;return e.html`
1725
1836
  <jupiter-concept-tree
@@ -1734,10 +1845,12 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
1734
1845
  .defaultUnits="${this.defaultUnits}"
1735
1846
  .disabled="${this.disabled}"
1736
1847
  .locale="${this.locale}"
1848
+ .numberLocale="${this.numberLocale}"
1737
1849
  .language="${this.language}"
1738
1850
  .expandedConcepts="${this._expandedConcepts}"
1739
1851
  .mode="${this.mode}"
1740
1852
  .masterData="${this.masterData}"
1853
+ .prefilledTooltip="${this.prefilledTooltip}"
1741
1854
  .facts="${t.facts}"
1742
1855
  .typedMemberData="${this.typedMemberData}"
1743
1856
  .showAddButton="${i.showAdd||!1}"
@@ -1757,8 +1870,7 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
1757
1870
  <tr>${n(t,{showAdd:o})}</tr>
1758
1871
  `];for(let s=1;s<=r;s++){const i={...t,id:`${t.id}__repeat_${s}`,label:"",children:[],abstract:!1};a.push(e.html`
1759
1872
  <tr>${n(i,{showRemove:!0})}</tr>
1760
- `)}return a}render(){return this.section.concepts&&0!==this.section.concepts.length?e.html`
1761
- ${this.hideHeader?"":e.html`
1873
+ `)}return a}render(){if(!this.section.concepts||0===this.section.concepts.length)return e.html`
1762
1874
  <div class="section-header ${this.collapsible?"":"not-collapsible"}"
1763
1875
  @click="${this._toggleExpanded}">
1764
1876
  <div>
@@ -1773,32 +1885,56 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
1773
1885
  </div>
1774
1886
  </div>
1775
1887
  </div>
1888
+
1889
+ <div class="section-content ${this._expanded?"":"collapsed"}">
1890
+ <div class="empty-section">
1891
+ No concepts defined for this section.
1892
+ </div>
1893
+ </div>
1894
+ `;const{caption:t,perColumnLabel:i}=function(e){const t={},i=new Map;for(const s of e){if("dimension"!==s.type)continue;const e=Re(s.dimensionData);e.length>0&&i.set(s.id,e)}const o=e.filter(e=>i.has(e.id));if(o.length<2){for(const i of e)t[i.id]=i.title;return{caption:"",perColumnLabel:t}}const r=i.get(o[0].id),n=new Set(r.filter(e=>o.every(t=>{const o=i.get(t.id).find(t=>t.key===e.key);return(null==o?void 0:o.label)===e.label})).map(e=>e.key)),a=r.filter(e=>n.has(e.key)).map(e=>e.label).join(" · ");for(const s of e){const e=i.get(s.id);t[s.id]=e?e.filter(e=>!n.has(e.key)).map(e=>e.label).join(" · "):s.title}return{caption:a,perColumnLabel:t}}(this.columns);return e.html`
1895
+ ${this.hideHeader?"":e.html`
1896
+ <div class="section-header ${this.collapsible?"":"not-collapsible"}"
1897
+ @click="${this._toggleExpanded}">
1898
+ <div>
1899
+ <h3 class="section-title">${this.section.title}</h3>
1900
+ ${this.section.description?e.html`
1901
+ <p class="section-description">${this.section.description}</p>
1902
+ `:""}
1903
+ </div>
1904
+ <div class="section-header-controls">
1905
+ <div class="section-toggle ${this.collapsible?this._expanded?"expanded":"":"hidden"}">
1906
+ ${this.collapsible?"▶":""}
1907
+ </div>
1908
+ </div>
1909
+ </div>
1776
1910
  `}
1777
1911
 
1778
1912
  <div class="section-content ${this._expanded?"":"collapsed"}">
1913
+ ${t?e.html`<div class="column-caption">${t}</div>`:""}
1914
+ ${this._renderBalanceCheckStrip()}
1779
1915
  <div class="table-container">
1780
1916
  <table class="form-table">
1781
1917
  <thead class="table-header">
1782
1918
  <tr class="header-row">
1783
1919
  <th class="header-cell concept-column"></th>
1784
- ${this.columns.map(t=>{var i,o,r;return t.hidden?e.html`
1920
+ ${this.columns.map(t=>{var o,r,n;return t.hidden?e.html`
1785
1921
  <th
1786
1922
  class="header-cell hidden-column"
1787
- title="${k.t("column.showColumn")}"
1923
+ title="${E.t("column.showColumn")}"
1788
1924
  @dblclick="${()=>this._handleShowColumn(t.id)}"
1789
1925
  ></th>
1790
1926
  `:e.html`
1791
- <th class="header-cell ${t.removable?"removable":""}">
1927
+ <th class="header-cell ${t.removable?"removable":""}" title="${t.title}">
1792
1928
  <div class="column-header-content">
1793
1929
  <div class="column-title">
1794
- ${t.title}
1930
+ ${i[t.id]}
1795
1931
  ${t.description?e.html`<div style="font-weight: normal; font-size: 12px; color: var(--jupiter-text-secondary, #666);">${t.description}</div>`:""}
1796
1932
  </div>
1797
1933
 
1798
1934
  <!-- Typed member input fields in column header -->
1799
- ${(null==(i=t.dimensionData)?void 0:i.hasTypedMembers)?e.html`
1935
+ ${(null==(o=t.dimensionData)?void 0:o.hasTypedMembers)?e.html`
1800
1936
  <div class="typed-members-header">
1801
- ${null==(r=null==(o=t.dimensionData)?void 0:o.typedMembers)?void 0:r.map(i=>{const o=!this._getTypedMemberHeaderValue(t.id,i.axisId)&&this._columnHasAnyValue(t.id);return e.html`
1937
+ ${null==(n=null==(r=t.dimensionData)?void 0:r.typedMembers)?void 0:n.map(i=>{const o=!this._getTypedMemberHeaderValue(t.id,i.axisId)&&this._columnHasAnyValue(t.id);return e.html`
1802
1938
  <div class="typed-member-header-input">
1803
1939
  ${"readonly"===this.mode?e.html`
1804
1940
  <span class="typed-member-header-field" style="display:block;padding:4px 0;">
@@ -1807,7 +1943,7 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
1807
1943
  `:e.html`
1808
1944
  <div class="typed-member-input-wrapper">
1809
1945
  ${this._renderTypedMemberHeaderInput(t.id,i,o)}
1810
- ${o?e.html`<span class="typed-member-required-asterisk" title="${k.t("validation.typedMemberRequired")}">*</span>`:""}
1946
+ ${o?e.html`<span class="typed-member-required-asterisk" title="${E.t("validation.typedMemberRequired")}">*</span>`:""}
1811
1947
  </div>
1812
1948
  ${this._renderTypedMemberHeaderErrors(t.id,i.axisId)}
1813
1949
  `}
@@ -1822,7 +1958,7 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
1822
1958
  <div
1823
1959
  class="column-menu-icon"
1824
1960
  @click="${e=>this._toggleColumnMenu(t.id,e)}"
1825
- title="${k.t("column.columnOptions")}"
1961
+ title="${E.t("column.columnOptions")}"
1826
1962
  >⋮</div>
1827
1963
 
1828
1964
  <!-- Context menu -->
@@ -1832,14 +1968,14 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
1832
1968
  class="column-context-menu-item"
1833
1969
  @click="${e=>this._handleAddColumnFromMenu(t.id,e)}"
1834
1970
  >
1835
- ${k.t("column.addColumn")}
1971
+ ${E.t("column.addColumn")}
1836
1972
  </button>
1837
1973
  ${t.removable?e.html`
1838
1974
  <button
1839
1975
  class="column-context-menu-item remove"
1840
1976
  @click="${e=>{e.stopPropagation(),this._handleRemoveColumn(t.id)}}"
1841
1977
  >
1842
- ${k.t("column.removeColumn")}
1978
+ ${E.t("column.removeColumn")}
1843
1979
  </button>
1844
1980
  `:""}
1845
1981
  ${!t.removable&&this.columns.filter(e=>!e.hidden).length>1?e.html`
@@ -1847,7 +1983,7 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
1847
1983
  class="column-context-menu-item remove"
1848
1984
  @click="${e=>{e.stopPropagation(),this._handleHideColumn(t.id)}}"
1849
1985
  >
1850
- ${k.t("column.hideColumn")}
1986
+ ${E.t("column.hideColumn")}
1851
1987
  </button>
1852
1988
  `:""}
1853
1989
  </div>
@@ -1875,28 +2011,7 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
1875
2011
  @dialog-cancel="${this._handleDialogCancel}"
1876
2012
  @column-add="${this._handleColumnAdd}"
1877
2013
  ></jupiter-add-column-dialog>
1878
- `:e.html`
1879
- <div class="section-header ${this.collapsible?"":"not-collapsible"}"
1880
- @click="${this._toggleExpanded}">
1881
- <div>
1882
- <h3 class="section-title">${this.section.title}</h3>
1883
- ${this.section.description?e.html`
1884
- <p class="section-description">${this.section.description}</p>
1885
- `:""}
1886
- </div>
1887
- <div class="section-header-controls">
1888
- <div class="section-toggle ${this.collapsible?this._expanded?"expanded":"":"hidden"}">
1889
- ${this.collapsible?"▶":""}
1890
- </div>
1891
- </div>
1892
- </div>
1893
-
1894
- <div class="section-content ${this._expanded?"":"collapsed"}">
1895
- <div class="empty-section">
1896
- No concepts defined for this section.
1897
- </div>
1898
- </div>
1899
- `}},exports.JupiterFormSection.styles=e.css`
2014
+ `}},exports.JupiterFormSection.styles=e.css`
1900
2015
  :host {
1901
2016
  display: block;
1902
2017
  margin-bottom: 16px;
@@ -1980,6 +2095,53 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
1980
2095
  overflow-x: auto;
1981
2096
  }
1982
2097
 
2098
+ /* JDF-113: caption for dimension members shared by every column in the role (e.g.
2099
+ "Geconsolideerd · Commercieel"), so they don't also repeat inside every column header. */
2100
+ .column-caption {
2101
+ font-size: 13px;
2102
+ font-weight: 600;
2103
+ color: var(--jupiter-text-secondary, #666);
2104
+ padding: 4px 0 8px 0;
2105
+ }
2106
+
2107
+ /* JDF-095: live, read-only balance-difference strip (Activa = Passiva). */
2108
+ .balance-check-strip {
2109
+ display: flex;
2110
+ flex-wrap: wrap;
2111
+ gap: 8px;
2112
+ padding: 8px 0 12px 0;
2113
+ position: sticky;
2114
+ left: 0;
2115
+ }
2116
+
2117
+ .balance-check-chip {
2118
+ display: inline-flex;
2119
+ align-items: center;
2120
+ gap: 6px;
2121
+ padding: 6px 12px;
2122
+ border-radius: 16px;
2123
+ font-size: 13px;
2124
+ font-weight: 600;
2125
+ border: none;
2126
+ font-family: inherit;
2127
+ }
2128
+
2129
+ .balance-check-chip.balanced {
2130
+ background: var(--jupiter-success-light, #e8f5e9);
2131
+ color: var(--jupiter-success-color, #4caf50);
2132
+ }
2133
+
2134
+ .balance-check-chip.unbalanced {
2135
+ background: var(--jupiter-warning-light, #fff3e0);
2136
+ color: var(--jupiter-warning-color, #ff9800);
2137
+ cursor: pointer;
2138
+ }
2139
+
2140
+ .balance-check-chip.unbalanced:hover {
2141
+ background: var(--jupiter-warning-color, #ff9800);
2142
+ color: #fff;
2143
+ }
2144
+
1983
2145
  .form-table {
1984
2146
  width: 100%;
1985
2147
  table-layout: fixed;
@@ -2205,7 +2367,7 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
2205
2367
  color: var(--jupiter-text-secondary, #666);
2206
2368
  font-style: italic;
2207
2369
  }
2208
- `,Ze([w({type:Object})],exports.JupiterFormSection.prototype,"section",2),Ze([w({type:Array})],exports.JupiterFormSection.prototype,"columns",2),Ze([w({type:Array})],exports.JupiterFormSection.prototype,"datatypes",2),Ze([w({type:Object})],exports.JupiterFormSection.prototype,"formData",2),Ze([w({type:Object})],exports.JupiterFormSection.prototype,"periodData",2),Ze([w({type:Object})],exports.JupiterFormSection.prototype,"unitData",2),Ze([w({type:Object})],exports.JupiterFormSection.prototype,"decimalsData",2),Ze([w({type:String})],exports.JupiterFormSection.prototype,"globalDecimals",2),Ze([w({type:Object})],exports.JupiterFormSection.prototype,"typedMemberData",2),Ze([w({type:Object})],exports.JupiterFormSection.prototype,"repeatCounts",2),Ze([w({type:Array})],exports.JupiterFormSection.prototype,"defaultUnits",2),Ze([w({type:Boolean})],exports.JupiterFormSection.prototype,"disabled",2),Ze([w({type:Boolean})],exports.JupiterFormSection.prototype,"collapsible",2),Ze([w({type:String})],exports.JupiterFormSection.prototype,"locale",2),Ze([w({type:Boolean})],exports.JupiterFormSection.prototype,"isFirstSection",2),Ze([w({type:Array})],exports.JupiterFormSection.prototype,"availableDimensions",2),Ze([w({type:Boolean})],exports.JupiterFormSection.prototype,"hideHeader",2),Ze([w({type:String})],exports.JupiterFormSection.prototype,"mode",2),Ze([w({type:Boolean})],exports.JupiterFormSection.prototype,"showFactsOnly",2),Ze([w({type:Object})],exports.JupiterFormSection.prototype,"conceptMatchIds",2),Ze([w({type:Object})],exports.JupiterFormSection.prototype,"masterData",2),Ze([w({type:String})],exports.JupiterFormSection.prototype,"periodStartDate",2),Ze([w({type:String})],exports.JupiterFormSection.prototype,"periodEndDate",2),Ze([w({type:String})],exports.JupiterFormSection.prototype,"language",2),Ze([w({type:Boolean})],exports.JupiterFormSection.prototype,"calculationEnabled",2),Ze([w({type:Object})],exports.JupiterFormSection.prototype,"totalManuallyEditedData",2),Ze([S()],exports.JupiterFormSection.prototype,"_expanded",2),Ze([S()],exports.JupiterFormSection.prototype,"_showAddColumnDialog",2),Ze([S()],exports.JupiterFormSection.prototype,"_sectionPeriodType",2),Ze([S()],exports.JupiterFormSection.prototype,"_openMenuColumnId",2),Ze([S()],exports.JupiterFormSection.prototype,"_insertAfterColumnId",2),Ze([S()],exports.JupiterFormSection.prototype,"_typedMemberErrors",2),Ze([S()],exports.JupiterFormSection.prototype,"_expandedConcepts",2),Ze([S()],exports.JupiterFormSection.prototype,"_allTreeExpanded",2),Ze([S()],exports.JupiterFormSection.prototype,"_highlightMap",2),Ze([S()],exports.JupiterFormSection.prototype,"_focusedConceptId",2),Ze([S()],exports.JupiterFormSection.prototype,"_calculationMismatches",2),exports.JupiterFormSection=Ze([t("jupiter-form-section")],exports.JupiterFormSection);var et=Object.defineProperty,tt=Object.getOwnPropertyDescriptor,it=(e,t,i,o)=>{for(var r,n=o>1?void 0:o?tt(t,i):t,a=e.length-1;a>=0;a--)(r=e[a])&&(n=(o?r(t,i,n):r(n))||n);return o&&n&&et(t,i,n),n};exports.JupiterAdvancedFilter=class extends e.LitElement{constructor(){super(...arguments),this.showFactsOnly=!1,this.conceptSearchText="",this._localConceptSearchText=""}updated(e){e.has("conceptSearchText")&&this.conceptSearchText!==this._localConceptSearchText&&(this._localConceptSearchText=this.conceptSearchText)}_handleShowFactsOnlyChange(e){const t=e.target.checked;this.dispatchEvent(new CustomEvent("filter-change",{detail:{showFactsOnly:t,conceptSearchText:this._localConceptSearchText},bubbles:!0,composed:!0}))}_sanitizeSearchText(e){return e.replace(/[''‚‛′‵]/g,"'").replace(/[""„‟″‶]/g,'"').replace(/[​‌‍­]/g,"").replace(/\s+/g," ").trim()}_handleConceptSearchInput(e){this._localConceptSearchText=this._sanitizeSearchText(e.target.value),this.dispatchEvent(new CustomEvent("filter-change",{detail:{showFactsOnly:this.showFactsOnly,conceptSearchText:this._localConceptSearchText},bubbles:!0,composed:!0}))}_clearConceptSearch(){var e;this._localConceptSearchText="";const t=null==(e=this.shadowRoot)?void 0:e.querySelector(".concept-search-input");t&&(t.value="",t.focus()),this.dispatchEvent(new CustomEvent("filter-change",{detail:{showFactsOnly:this.showFactsOnly,conceptSearchText:""},bubbles:!0,composed:!0}))}render(){return e.html`
2370
+ `,it([S({type:Object})],exports.JupiterFormSection.prototype,"section",2),it([S({type:Array})],exports.JupiterFormSection.prototype,"columns",2),it([S({type:Array})],exports.JupiterFormSection.prototype,"datatypes",2),it([S({type:Object})],exports.JupiterFormSection.prototype,"formData",2),it([S({type:Object})],exports.JupiterFormSection.prototype,"periodData",2),it([S({type:Object})],exports.JupiterFormSection.prototype,"unitData",2),it([S({type:Object})],exports.JupiterFormSection.prototype,"decimalsData",2),it([S({type:String})],exports.JupiterFormSection.prototype,"globalDecimals",2),it([S({type:Object})],exports.JupiterFormSection.prototype,"typedMemberData",2),it([S({type:Object})],exports.JupiterFormSection.prototype,"repeatCounts",2),it([S({type:Array})],exports.JupiterFormSection.prototype,"defaultUnits",2),it([S({type:Boolean})],exports.JupiterFormSection.prototype,"disabled",2),it([S({type:Boolean})],exports.JupiterFormSection.prototype,"collapsible",2),it([S({type:String})],exports.JupiterFormSection.prototype,"locale",2),it([S({type:String})],exports.JupiterFormSection.prototype,"numberLocale",2),it([S({type:Boolean})],exports.JupiterFormSection.prototype,"isFirstSection",2),it([S({type:Array})],exports.JupiterFormSection.prototype,"availableDimensions",2),it([S({type:Boolean})],exports.JupiterFormSection.prototype,"hideHeader",2),it([S({type:String})],exports.JupiterFormSection.prototype,"mode",2),it([S({type:Boolean})],exports.JupiterFormSection.prototype,"showFactsOnly",2),it([S({type:Object})],exports.JupiterFormSection.prototype,"conceptMatchIds",2),it([S({type:Object})],exports.JupiterFormSection.prototype,"masterData",2),it([S({type:String})],exports.JupiterFormSection.prototype,"prefilledTooltip",2),it([S({type:String})],exports.JupiterFormSection.prototype,"periodStartDate",2),it([S({type:String})],exports.JupiterFormSection.prototype,"periodEndDate",2),it([S({type:String})],exports.JupiterFormSection.prototype,"language",2),it([S({type:Boolean})],exports.JupiterFormSection.prototype,"calculationEnabled",2),it([S({type:Object})],exports.JupiterFormSection.prototype,"totalManuallyEditedData",2),it([C()],exports.JupiterFormSection.prototype,"_expanded",2),it([C()],exports.JupiterFormSection.prototype,"_showAddColumnDialog",2),it([C()],exports.JupiterFormSection.prototype,"_sectionPeriodType",2),it([C()],exports.JupiterFormSection.prototype,"_openMenuColumnId",2),it([C()],exports.JupiterFormSection.prototype,"_insertAfterColumnId",2),it([C()],exports.JupiterFormSection.prototype,"_typedMemberErrors",2),it([C()],exports.JupiterFormSection.prototype,"_expandedConcepts",2),it([C()],exports.JupiterFormSection.prototype,"_allTreeExpanded",2),it([C()],exports.JupiterFormSection.prototype,"_highlightMap",2),it([C()],exports.JupiterFormSection.prototype,"_focusedConceptId",2),it([C()],exports.JupiterFormSection.prototype,"_calculationMismatches",2),exports.JupiterFormSection=it([t("jupiter-form-section")],exports.JupiterFormSection);var rt=Object.defineProperty,nt=Object.getOwnPropertyDescriptor,at=(e,t,i,o)=>{for(var r,n=o>1?void 0:o?nt(t,i):t,a=e.length-1;a>=0;a--)(r=e[a])&&(n=(o?r(t,i,n):r(n))||n);return o&&n&&rt(t,i,n),n};exports.JupiterAdvancedFilter=class extends e.LitElement{constructor(){super(...arguments),this.showFactsOnly=!1,this.conceptSearchText="",this.availableRoles=[],this._localConceptSearchText="",this._conceptOptions=[],this._suggestions=[],this._showSuggestions=!1,this._activeSuggestionIndex=-1}updated(e){e.has("conceptSearchText")&&this.conceptSearchText!==this._localConceptSearchText&&(this._localConceptSearchText=this.conceptSearchText),e.has("availableRoles")&&(this._conceptOptions=this._buildConceptOptions())}_buildConceptOptions(){const e=new Set,t=[],i=o=>{var r;if(o)for(const n of o){const o=n.originalConceptId||n.id;!o||n.abstract||e.has(o)||(e.add(o),t.push({id:o,name:n.label||n.name||o})),(null==(r=n.children)?void 0:r.length)&&i(n.children)}};for(const o of this.availableRoles)i(o.concepts);return t}_computeSuggestions(e){const t=e.trim();if(!t||0===this._conceptOptions.length)return[];const i=[];for(const o of this._conceptOptions){const e=Math.max(ot(t,o.name),ot(t,o.id));e>=0&&i.push({option:o,score:e})}return i.sort((e,t)=>t.score-e.score),i.slice(0,8).map(e=>e.option)}_selectSuggestion(e){var t;this._localConceptSearchText=e.name,this._showSuggestions=!1,this._activeSuggestionIndex=-1,this.dispatchEvent(new CustomEvent("filter-change",{detail:{showFactsOnly:this.showFactsOnly,conceptSearchText:this._localConceptSearchText},bubbles:!0,composed:!0}));const i=null==(t=this.shadowRoot)?void 0:t.querySelector(".concept-search-input");null==i||i.focus()}_handleConceptSearchFocus(){this._localConceptSearchText.trim()&&(this._suggestions=this._computeSuggestions(this._localConceptSearchText),this._showSuggestions=this._suggestions.length>0)}_handleConceptSearchBlur(){this._showSuggestions=!1,this._activeSuggestionIndex=-1}_renderHighlighted(t,i){const o=i.trim().toLowerCase();if(!o)return t;const r=t.toLowerCase().indexOf(o);return-1===r?t:e.html`${t.slice(0,r)}<mark>${t.slice(r,r+o.length)}</mark>${t.slice(r+o.length)}`}_handleShowFactsOnlyChange(e){const t=e.target.checked;this.dispatchEvent(new CustomEvent("filter-change",{detail:{showFactsOnly:t,conceptSearchText:this._localConceptSearchText},bubbles:!0,composed:!0}))}_sanitizeSearchText(e){return e.replace(/[''‚‛′‵]/g,"'").replace(/[""„‟″‶]/g,'"').replace(/[​‌‍­]/g,"").replace(/\s+/g," ").trim()}_handleConceptSearchInput(e){this._localConceptSearchText=this._sanitizeSearchText(e.target.value),this._suggestions=this._computeSuggestions(this._localConceptSearchText),this._showSuggestions=this._suggestions.length>0,this._activeSuggestionIndex=-1,this.dispatchEvent(new CustomEvent("filter-change",{detail:{showFactsOnly:this.showFactsOnly,conceptSearchText:this._localConceptSearchText},bubbles:!0,composed:!0}))}_handleConceptSearchKeydown(e){if(this._showSuggestions&&this._suggestions.length>0){if("ArrowDown"===e.key)return e.preventDefault(),void(this._activeSuggestionIndex=(this._activeSuggestionIndex+1)%this._suggestions.length);if("ArrowUp"===e.key)return e.preventDefault(),void(this._activeSuggestionIndex=this._activeSuggestionIndex<=0?this._suggestions.length-1:this._activeSuggestionIndex-1);if("Escape"===e.key)return this._showSuggestions=!1,void(this._activeSuggestionIndex=-1);if("Enter"===e.key&&this._activeSuggestionIndex>=0)return e.preventDefault(),void this._selectSuggestion(this._suggestions[this._activeSuggestionIndex])}"Enter"===e.key&&(e.preventDefault(),this._showSuggestions=!1,this.dispatchEvent(new CustomEvent("filter-apply",{bubbles:!0,composed:!0})))}_clearConceptSearch(){var e;this._localConceptSearchText="",this._suggestions=[],this._showSuggestions=!1,this._activeSuggestionIndex=-1;const t=null==(e=this.shadowRoot)?void 0:e.querySelector(".concept-search-input");t&&(t.value="",t.focus()),this.dispatchEvent(new CustomEvent("filter-change",{detail:{showFactsOnly:this.showFactsOnly,conceptSearchText:""},bubbles:!0,composed:!0}))}render(){return e.html`
2209
2371
  <div class="filter-options">
2210
2372
  <label class="filter-option clickable">
2211
2373
  <input
@@ -2214,30 +2376,53 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
2214
2376
  @change="${this._handleShowFactsOnlyChange}"
2215
2377
  />
2216
2378
  <div class="filter-option-body">
2217
- <div class="filter-option-label">${k.t("filter.showFactsOnly")}</div>
2218
- <p class="filter-option-description">${k.t("filter.showFactsOnlyDescription")}</p>
2379
+ <div class="filter-option-label">${E.t("filter.showFactsOnly")}</div>
2380
+ <p class="filter-option-description">${E.t("filter.showFactsOnlyDescription")}</p>
2219
2381
  </div>
2220
2382
  </label>
2221
2383
 
2222
2384
  <div class="filter-option">
2223
2385
  <div class="filter-option-body">
2224
- <div class="filter-option-label">${k.t("filter.searchByConcept")}</div>
2225
- <p class="filter-option-description">${k.t("filter.searchByConceptDescription")}</p>
2386
+ <div class="filter-option-label">${E.t("filter.searchByConcept")}</div>
2387
+ <p class="filter-option-description">${E.t("filter.searchByConceptDescription")}</p>
2226
2388
  <div class="concept-search-input-wrapper">
2227
2389
  <input
2228
2390
  type="text"
2229
2391
  class="concept-search-input"
2230
- placeholder="${k.t("filter.searchByConceptPlaceholder")}"
2392
+ placeholder="${E.t("filter.searchByConceptPlaceholder")}"
2231
2393
  .value="${this._localConceptSearchText}"
2394
+ autocomplete="off"
2395
+ role="combobox"
2396
+ aria-expanded="${this._showSuggestions}"
2397
+ aria-autocomplete="list"
2232
2398
  @input="${this._handleConceptSearchInput}"
2399
+ @keydown="${this._handleConceptSearchKeydown}"
2400
+ @focus="${this._handleConceptSearchFocus}"
2401
+ @blur="${this._handleConceptSearchBlur}"
2233
2402
  />
2234
2403
  ${this._localConceptSearchText?e.html`
2235
2404
  <button
2236
2405
  class="concept-search-clear"
2237
2406
  @click="${this._clearConceptSearch}"
2238
- title="${k.t("filter.clearSearch")}"
2407
+ title="${E.t("filter.clearSearch")}"
2239
2408
  >×</button>
2240
2409
  `:""}
2410
+ ${this._showSuggestions?e.html`
2411
+ <ul class="concept-suggestions" role="listbox">
2412
+ ${this._suggestions.map((t,i)=>e.html`
2413
+ <li
2414
+ class="concept-suggestion-item ${i===this._activeSuggestionIndex?"active":""}"
2415
+ role="option"
2416
+ aria-selected="${i===this._activeSuggestionIndex}"
2417
+ @mousedown="${e=>e.preventDefault()}"
2418
+ @click="${()=>this._selectSuggestion(t)}"
2419
+ >
2420
+ <span class="concept-suggestion-name">${this._renderHighlighted(t.name,this._localConceptSearchText)}</span>
2421
+ <span class="concept-suggestion-id">${t.id}</span>
2422
+ </li>
2423
+ `)}
2424
+ </ul>
2425
+ `:""}
2241
2426
  </div>
2242
2427
  </div>
2243
2428
  </div>
@@ -2341,14 +2526,64 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
2341
2526
  .concept-search-clear:hover {
2342
2527
  color: var(--primaryTextColor, var(--jupiter-text-primary, #333));
2343
2528
  }
2344
- `,it([w({type:Boolean})],exports.JupiterAdvancedFilter.prototype,"showFactsOnly",2),it([w({type:String})],exports.JupiterAdvancedFilter.prototype,"conceptSearchText",2),it([S()],exports.JupiterAdvancedFilter.prototype,"_localConceptSearchText",2),exports.JupiterAdvancedFilter=it([t("jupiter-advanced-filter")],exports.JupiterAdvancedFilter);var ot=Object.defineProperty,rt=Object.getOwnPropertyDescriptor,nt=(e,t,i,o)=>{for(var r,n=o>1?void 0:o?rt(t,i):t,a=e.length-1;a>=0;a--)(r=e[a])&&(n=(o?r(t,i,n):r(n))||n);return o&&n&&ot(t,i,n),n};let at=!1;exports.JupiterFilterRolesDialog=class extends e.LitElement{constructor(){super(...arguments),this.open=!1,this.availableRoles=[],this.selectedRoleIds=[],this.periodPreferences={},this.mode="inputForm",this.hypercubeData=null,this.showFactsOnly=!1,this.conceptSearchText="",this._tempSelectedRoles=new Set,this._searchQuery="",this._filteredRoles=[],this._tempPeriodPreferences={},this._selectedAvailableRole=null,this._selectedChosenRole=null,this._chosenSearchQuery="",this._draggedRoleId=null,this._dragOverRoleId=null,this._chosenRoleOrder=[],this._showAdvancedFilter=!1,this._showFactsOnly=!1,this._conceptSearchText="",this._collapsedRoles=new Set}connectedCallback(){super.connectedCallback(),this._initializeTempSelection(),this._initializePeriodPreferences()}updated(e){(e.has("selectedRoleIds")||e.has("open"))&&this._initializeTempSelection(),(e.has("availableRoles")||e.has("_searchQuery"))&&this._updateFilteredRoles(),(e.has("availableRoles")||e.has("periodPreferences")||e.has("open"))&&this._initializePeriodPreferences(),e.has("open")&&this.open&&(this._showAdvancedFilter=at,this._showFactsOnly=this.showFactsOnly,this._conceptSearchText=this.conceptSearchText)}_updateFilteredRoles(){if(!this._searchQuery.trim())return void(this._filteredRoles=[...this.availableRoles]);const e=this._searchQuery.toLowerCase().trim(),t=this.availableRoles.filter(t=>{var i;const o=t.title.toLowerCase().includes(e),r=t.id.toLowerCase().includes(e),n=(null==(i=t.description)?void 0:i.toLowerCase().includes(e))||!1,a=this._searchInRoleURI(t,e);return o||r||n||a});this._filteredRoles=t}_searchInRoleURI(e,t){var i;if(null==(i=e.metadata)?void 0:i.roleURI)return e.metadata.roleURI.toLowerCase().includes(t);const o=/https?:\/\/[^\s]+/i,r=o.test(e.title),n=o.test(e.id);return r||n?e.title.toLowerCase().includes(t)||e.id.toLowerCase().includes(t):!!(e.id.includes(".")||e.id.includes("/")||e.id.includes(":"))&&e.id.toLowerCase().includes(t)}_handleSearchInput(e){const t=e.target;this._searchQuery=t.value}_clearSearch(){var e;this._searchQuery="";const t=null==(e=this.shadowRoot)?void 0:e.querySelector(".search-input");t&&(t.value="",t.focus())}_handleChosenSearchInput(e){const t=e.target;this._chosenSearchQuery=t.value}_clearChosenSearch(){var e;this._chosenSearchQuery="";const t=null==(e=this.shadowRoot)?void 0:e.querySelector(".chosen-search-input");t&&(t.value="",t.focus())}_highlightSearchTerm(e){if(!this._searchQuery.trim())return e;const t=this._searchQuery.trim(),i=new RegExp(`(${t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")})`,"gi");return e.replace(i,"<mark>$1</mark>")}_renderHighlightedText(e){return e}_getSelectedFilteredCount(){return this._filteredRoles.filter(e=>this._tempSelectedRoles.has(e.id)).length}_initializeTempSelection(){this._tempSelectedRoles=new Set(this.selectedRoleIds),this._chosenRoleOrder=[...this.selectedRoleIds]}_initializePeriodPreferences(){const e={};this.availableRoles.forEach(t=>{const i=this.periodPreferences[t.id];if(i)e[t.id]={...i};else{const i=!0===t.showPeriodControl;let o,r;void 0!==t.duration||void 0!==t.instant?(o=!0===t.duration,r=!0===t.instant):(o=i||this._hasConceptsWithPeriodType(t,"duration"),r=i||this._hasConceptsWithPeriodType(t,"instant")),e[t.id]={showDuration:o,showInstant:r,showPreviousYear:!0===t.showPreviousYear}}const o=this._getDimensionsForRole(t.id);o.length>0&&!(null==i?void 0:i.dimensionSelections)&&(e[t.id].dimensionSelections||(e[t.id].dimensionSelections=[]),o.forEach(i=>{var o,r;const n=this._getAllDimensionMembers(i.members);if(n.length>0){const a=(null==(r=null==(o=i.labels)?void 0:o.find(e=>"http://www.xbrl.org/2003/role/label"===e.role))?void 0:r.label)||i.conceptName,s=n.map(e=>e.id),l={dimensionId:i.id,dimensionLabel:a,selectedMemberIds:s};e[t.id].dimensionSelections.push(l),console.log(`✅ Auto-selected all ${s.length} members for dimension: ${a}`)}}))}),this._tempPeriodPreferences=e}_hasConceptsWithPeriodType(e,t){const i=e=>e.some(e=>!e.abstract&&e.periodType===t||!!e.children&&i(e.children));return i(e.concepts)}_handlePeriodCheckboxChange(e,t,i){e.stopPropagation();const o=e.target,r={...this._tempPeriodPreferences};r[t]||(r[t]={showDuration:!0,showInstant:!0,showPreviousYear:!1}),"duration"===i?r[t].showDuration=o.checked:"instant"===i?r[t].showInstant=o.checked:"previousYear"===i&&(r[t].showPreviousYear=o.checked),this._tempPeriodPreferences=r,this.requestUpdate()}_enforceSingleMemberSelectionsForRole(e,t){const i=this._getDimensionsForRole(e);if(0===i.length)return t;const o={...t},r=o[e]?{...o[e]}:{showDuration:!0,showInstant:!0,showPreviousYear:!1,dimensionSelections:[]},n=r.dimensionSelections?[...r.dimensionSelections]:[];return i.forEach(e=>{var t,i;if(!this._isSingleMemberDimension(e))return;const o=this._getAllDimensionMembers(e.members);if(1!==o.length)return;const r=o[0].id,a=(null==(i=null==(t=e.labels)?void 0:t.find(e=>"http://www.xbrl.org/2003/role/label"===e.role))?void 0:i.label)||e.conceptName||e.id,s=n.findIndex(t=>t.dimensionId===e.id);-1!==s?n[s]={...n[s],dimensionLabel:a,selectedMemberIds:[r]}:n.push({dimensionId:e.id,dimensionLabel:a,selectedMemberIds:[r]})}),r.dimensionSelections=n,o[e]=r,o}_enforceSingleMemberSelectionsForSelectedRoles(e,t=this._tempSelectedRoles){let i={...e};for(const o of t)i=this._enforceSingleMemberSelectionsForRole(o,i);return i}_handleCheckboxChange(e,t){const i=e.target,o=new Set(this._tempSelectedRoles);let r={...this._tempPeriodPreferences};i.checked?(o.add(t),r=this._enforceSingleMemberSelectionsForRole(t,r)):o.delete(t),this._tempSelectedRoles=o,this._tempPeriodPreferences=r,this.requestUpdate()}_selectAll(){const e=new Set(this._tempSelectedRoles);this._filteredRoles.forEach(t=>e.add(t.id)),this._tempSelectedRoles=e,this._tempPeriodPreferences=this._enforceSingleMemberSelectionsForSelectedRoles(this._tempPeriodPreferences,e),this.requestUpdate()}_selectNone(){const e=new Set(this._tempSelectedRoles);this._filteredRoles.forEach(t=>e.delete(t.id)),this._tempSelectedRoles=e,this.requestUpdate()}_selectAllGlobal(){const e=new Set(this.availableRoles.map(e=>e.id));this._tempSelectedRoles=e,this._tempPeriodPreferences=this._enforceSingleMemberSelectionsForSelectedRoles(this._tempPeriodPreferences,e),this.requestUpdate()}_selectNoneGlobal(){this._tempSelectedRoles=new Set,this.requestUpdate()}_resetToOriginal(){this._tempSelectedRoles=new Set(this.selectedRoleIds),this._tempPeriodPreferences=this._enforceSingleMemberSelectionsForSelectedRoles(this._tempPeriodPreferences,this._tempSelectedRoles),this.requestUpdate()}_handleCancel(){this._initializeTempSelection(),this.dispatchEvent(new CustomEvent("dialog-cancel",{bubbles:!0}))}_handleApply(){const e=this._enforceSingleMemberSelectionsForSelectedRoles(this._tempPeriodPreferences,this._tempSelectedRoles);this._tempPeriodPreferences=e;const t=this._chosenRoleOrder.filter(e=>this._tempSelectedRoles.has(e)),i=Array.from(this._tempSelectedRoles).filter(e=>!this._chosenRoleOrder.includes(e));this._chosenRoleOrder=[...t,...i];const o=this._chosenRoleOrder.map((e,t)=>{var i;const o=this.availableRoles.find(t=>t.id===e);return{roleId:e,roleURI:(null==(i=null==o?void 0:o.metadata)?void 0:i.roleURI)||"",order:t}});console.log("✅ Apply Filter - Enhanced structure being emitted:",o),console.log("📋 Order array:",this._chosenRoleOrder),console.log("📊 Dimension preferences being emitted:",e),this.dispatchEvent(new CustomEvent("roles-filter-apply",{detail:{selectedRoleIds:o,periodPreferences:e},bubbles:!0}))}_getDimensionsForRole(e){var t,i;if(console.log("🔍 [getDimensionsForRole] Called with roleId:",e),console.log("🔍 [getDimensionsForRole] hypercubeData exists:",!!this.hypercubeData),console.log("🔍 [getDimensionsForRole] hypercubeData type:",typeof this.hypercubeData),console.log("🔍 [getDimensionsForRole] hypercubeData value:",this.hypercubeData),!this.hypercubeData)return console.error("❌ [getDimensionsForRole] CRITICAL: hypercubeData is null/undefined/false"),console.error("❌ Parent component must pass hypercubeData property to filter dialog!"),console.error('❌ Example: <jupiter-filter-roles-dialog .hypercubeData="${hypercubeData}">'),[];let o=this.hypercubeData;if(Array.isArray(this.hypercubeData)&&this.hypercubeData.length>0&&(console.log("📦 [getDimensionsForRole] Detected array-wrapped format, unwrapping..."),o=this.hypercubeData[0]),console.log("🔍 [getDimensionsForRole] hypercubeDataObj.roles exists:",!!(null==o?void 0:o.roles)),!(null==o?void 0:o.roles))return console.warn("⚠️ [getDimensionsForRole] No roles found in hypercube data structure"),console.warn("⚠️ Expected structure: { roles: [...] } or [{ roles: [...] }]"),[];console.log("🔍 [getDimensionsForRole] Available hypercube roles:",o.roles.map(e=>e.roleId));const r=o.roles.find(t=>t.roleId===e);if(console.log("🔍 [getDimensionsForRole] Found hypercube role:",!!r),!(null==(t=null==r?void 0:r.items)?void 0:t.length))return console.warn("⚠️ [getDimensionsForRole] No items found in hypercube role for:",e),[];console.log("🔍 [getDimensionsForRole] Items count:",r.items.length);const n=(null==(i=r.items[0])?void 0:i.dimensions)||[];console.log("🔍 [getDimensionsForRole] Total dimensions found:",n.length),console.log("🔍 [getDimensionsForRole] Dimension details:",n.map(e=>{var t;return{id:e.id,type:e.dimensionType,hasMembers:!!(e.members&&e.members.length>0),membersCount:(null==(t=e.members)?void 0:t.length)||0}}));const a=n.filter(e=>"explicit"===e.dimensionType&&e.members&&Array.isArray(e.members)&&e.members.length>0);return console.log("✅ [getDimensionsForRole] Filtered dimensions count:",a.length),console.log("✅ [getDimensionsForRole] Filtered dimension IDs:",a.map(e=>e.id)),a}_getAllDimensionMembers(e){if(!e||!Array.isArray(e))return[];const t=[];return e.forEach(e=>{t.push(e),e.children&&e.children.length>0&&t.push(...this._getAllDimensionMembers(e.children))}),t}_isSingleMemberDimension(e){return 1===this._getAllDimensionMembers(e.members).length}_handleDimensionMemberChange(e,t,i,o){var r,n;e.stopPropagation();const a=e.target,s={...this._tempPeriodPreferences};s[t]||(s[t]={showDuration:!0,showInstant:!0,showPreviousYear:!1,dimensionSelections:[]}),s[t].dimensionSelections||(s[t].dimensionSelections=[]);let l=s[t].dimensionSelections.find(e=>e.dimensionId===i);if(!l){const e=this._getDimensionsForRole(t).find(e=>e.id===i),o=(null==(n=null==(r=null==e?void 0:e.labels)?void 0:r.find(e=>"http://www.xbrl.org/2003/role/label"===e.role))?void 0:n.label)||i;l={dimensionId:i,dimensionLabel:o,selectedMemberIds:[]},s[t].dimensionSelections.push(l)}a.checked?l.selectedMemberIds.includes(o)||l.selectedMemberIds.push(o):l.selectedMemberIds=l.selectedMemberIds.filter(e=>e!==o);const d=this._getDimensionsForRole(t).find(e=>e.id===i);if(d&&this._tempSelectedRoles.has(t)&&this._isSingleMemberDimension(d)){const e=this._getAllDimensionMembers(d.members);1===e.length&&(l.selectedMemberIds=[e[0].id],a.checked=!0)}this._tempPeriodPreferences=s,console.log("📊 Updated dimension selections:",s[t].dimensionSelections),this.requestUpdate()}_isDimensionMemberSelected(e,t,i){const o=this._tempPeriodPreferences[e];if(!(null==o?void 0:o.dimensionSelections))return!1;const r=o.dimensionSelections.find(e=>e.dimensionId===t);return(null==r?void 0:r.selectedMemberIds.includes(i))||!1}_selectAllDimensionMembers(e,t){var i,o;const r=this._getDimensionsForRole(e).find(e=>e.id===t);if(!r)return;const n=this._getAllDimensionMembers(r.members).map(e=>e.id),a={...this._tempPeriodPreferences};a[e]||(a[e]={showDuration:!0,showInstant:!0,showPreviousYear:!1,dimensionSelections:[]}),a[e].dimensionSelections||(a[e].dimensionSelections=[]);let s=a[e].dimensionSelections.find(e=>e.dimensionId===t);if(!s){const n=(null==(o=null==(i=r.labels)?void 0:i.find(e=>"http://www.xbrl.org/2003/role/label"===e.role))?void 0:o.label)||t;s={dimensionId:t,dimensionLabel:n,selectedMemberIds:[]},a[e].dimensionSelections.push(s)}s.selectedMemberIds=n,this._tempPeriodPreferences=a,this.requestUpdate()}_deselectAllDimensionMembers(e,t){var i;const o={...this._tempPeriodPreferences};if(!(null==(i=o[e])?void 0:i.dimensionSelections))return;const r=o[e].dimensionSelections.find(e=>e.dimensionId===t);r&&(r.selectedMemberIds=[]),this._tempPeriodPreferences=o,this.requestUpdate()}_toggleRoleCollapse(e){const t=new Set(this._collapsedRoles);t.has(e)?t.delete(e):t.add(e),this._collapsedRoles=t}_switchToAdvancedFilter(){at=!0,this._showAdvancedFilter=!0,this._searchQuery=""}_switchToFilterRoles(){at=!1,this._showAdvancedFilter=!1}_handleFilterChange(e){this._showFactsOnly=e.detail.showFactsOnly,this._conceptSearchText=e.detail.conceptSearchText??""}_handleAdvancedFilterApply(){this.dispatchEvent(new CustomEvent("advanced-filter-apply",{detail:{showFactsOnly:this._showFactsOnly,conceptSearchText:this._conceptSearchText},bubbles:!0}))}_handleAdvancedFilterReset(){this._showFactsOnly=!1,this._conceptSearchText="",this.dispatchEvent(new CustomEvent("advanced-filter-apply",{detail:{showFactsOnly:!1,conceptSearchText:""},bubbles:!0}))}_handleBackdropClick(e){e.target===this&&this._handleCancel()}_handleAvailableRoleClick(e){this._selectedAvailableRole=e,this._selectedChosenRole=null,this.requestUpdate()}_handleChosenRoleClick(e){this._selectedChosenRole=e,this._selectedAvailableRole=null,this.requestUpdate()}_moveToChosen(){if(!this._selectedAvailableRole)return;const e=new Set(this._tempSelectedRoles);e.add(this._selectedAvailableRole),this._tempSelectedRoles=e,this._tempPeriodPreferences=this._enforceSingleMemberSelectionsForRole(this._selectedAvailableRole,this._tempPeriodPreferences),this._chosenRoleOrder.includes(this._selectedAvailableRole)||(this._chosenRoleOrder=[...this._chosenRoleOrder,this._selectedAvailableRole]),this._selectedAvailableRole=null,this.requestUpdate()}_moveToAvailable(){if(!this._selectedChosenRole)return;const e=new Set(this._tempSelectedRoles);e.delete(this._selectedChosenRole),this._tempSelectedRoles=e,this._chosenRoleOrder=this._chosenRoleOrder.filter(e=>e!==this._selectedChosenRole),this._selectedChosenRole=null,this.requestUpdate()}_moveAllToChosen(){const e=new Set(this._tempSelectedRoles);this._filteredRoles.forEach(t=>{e.add(t.id),this._chosenRoleOrder.includes(t.id)||this._chosenRoleOrder.push(t.id)}),this._tempSelectedRoles=e,this._tempPeriodPreferences=this._enforceSingleMemberSelectionsForSelectedRoles(this._tempPeriodPreferences,e),this._selectedAvailableRole=null,this.requestUpdate()}_moveAllToAvailable(){this._tempSelectedRoles=new Set,this._chosenRoleOrder=[],this._selectedChosenRole=null,this.requestUpdate()}_getAvailableRoles(){return this._filteredRoles.filter(e=>!this._tempSelectedRoles.has(e.id))}_getChosenRoles(){const e=this.availableRoles.filter(e=>this._tempSelectedRoles.has(e.id)),t=[...this._chosenRoleOrder.map(t=>e.find(e=>e.id===t)).filter(e=>void 0!==e),...e.filter(e=>!this._chosenRoleOrder.includes(e.id))];if(!this._chosenSearchQuery.trim())return t;const i=this._chosenSearchQuery.toLowerCase().trim();return t.filter(e=>{var t;const o=e.title.toLowerCase().includes(i),r=e.id.toLowerCase().includes(i),n=(null==(t=e.description)?void 0:t.toLowerCase().includes(i))||!1,a=this._searchInRoleURI(e,i);return o||r||n||a})}_handleDragStart(e,t){this._draggedRoleId=t,e.dataTransfer&&(e.dataTransfer.effectAllowed="move",e.dataTransfer.setData("text/plain",t)),this.requestUpdate()}_handleDragOver(e,t){e.preventDefault(),e.dataTransfer&&(e.dataTransfer.dropEffect="move"),this._draggedRoleId&&this._draggedRoleId!==t&&(this._dragOverRoleId=t,this.requestUpdate())}_handleDragLeave(e){this._dragOverRoleId=null,this.requestUpdate()}_handleDrop(e,t){if(e.preventDefault(),!this._draggedRoleId||this._draggedRoleId===t)return this._draggedRoleId=null,this._dragOverRoleId=null,void this.requestUpdate();const i=[...this._chosenRoleOrder],o=i.indexOf(this._draggedRoleId),r=i.indexOf(t);if(-1!==o&&-1!==r){i.splice(o,1);const e=o<r?r-1:r;i.splice(e,0,this._draggedRoleId),this._chosenRoleOrder=i,console.log("🔄 Reordered roles:",this._chosenRoleOrder)}this._draggedRoleId=null,this._dragOverRoleId=null,this.requestUpdate()}_handleDragEnd(e){this._draggedRoleId=null,this._dragOverRoleId=null,this.requestUpdate()}render(){const t=this._tempSelectedRoles.size,i=this.availableRoles.length,o=this._filteredRoles.length,r=this._searchQuery.trim().length>0;return e.html`
2529
+
2530
+ .concept-suggestions {
2531
+ position: absolute;
2532
+ top: calc(100% + 4px);
2533
+ left: 0;
2534
+ right: 0;
2535
+ z-index: 20;
2536
+ margin: 0;
2537
+ padding: 4px;
2538
+ list-style: none;
2539
+ max-height: 260px;
2540
+ overflow-y: auto;
2541
+ background: var(--jupiter-background, #fff);
2542
+ border: 1px solid var(--primaryTextColor, var(--jupiter-border-color, #ddd));
2543
+ border-radius: 4px;
2544
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
2545
+ }
2546
+
2547
+ .concept-suggestion-item {
2548
+ display: flex;
2549
+ flex-direction: column;
2550
+ gap: 2px;
2551
+ padding: 6px 8px;
2552
+ border-radius: 3px;
2553
+ cursor: pointer;
2554
+ }
2555
+
2556
+ .concept-suggestion-item:hover,
2557
+ .concept-suggestion-item.active {
2558
+ background: var(--menuBgColorLighter, var(--jupiter-hover-background, #f5f5f5));
2559
+ }
2560
+
2561
+ .concept-suggestion-name {
2562
+ font-size: 13px;
2563
+ color: var(--primaryTextColor, var(--jupiter-text-primary, #333));
2564
+ }
2565
+
2566
+ .concept-suggestion-name mark {
2567
+ background: var(--jupiter-primary-color, #1976d2);
2568
+ color: white;
2569
+ padding: 0 1px;
2570
+ border-radius: 2px;
2571
+ font-weight: 500;
2572
+ }
2573
+
2574
+ .concept-suggestion-id {
2575
+ font-size: 11px;
2576
+ color: var(--primaryTextColor, var(--jupiter-text-secondary, #999));
2577
+ word-break: break-all;
2578
+ }
2579
+ `,at([S({type:Boolean})],exports.JupiterAdvancedFilter.prototype,"showFactsOnly",2),at([S({type:String})],exports.JupiterAdvancedFilter.prototype,"conceptSearchText",2),at([S({type:Array})],exports.JupiterAdvancedFilter.prototype,"availableRoles",2),at([C()],exports.JupiterAdvancedFilter.prototype,"_localConceptSearchText",2),at([C()],exports.JupiterAdvancedFilter.prototype,"_conceptOptions",2),at([C()],exports.JupiterAdvancedFilter.prototype,"_suggestions",2),at([C()],exports.JupiterAdvancedFilter.prototype,"_showSuggestions",2),at([C()],exports.JupiterAdvancedFilter.prototype,"_activeSuggestionIndex",2),exports.JupiterAdvancedFilter=at([t("jupiter-advanced-filter")],exports.JupiterAdvancedFilter);var st=Object.defineProperty,lt=Object.getOwnPropertyDescriptor,dt=(e,t,i,o)=>{for(var r,n=o>1?void 0:o?lt(t,i):t,a=e.length-1;a>=0;a--)(r=e[a])&&(n=(o?r(t,i,n):r(n))||n);return o&&n&&st(t,i,n),n};let ct=!1;exports.JupiterFilterRolesDialog=class extends e.LitElement{constructor(){super(...arguments),this.open=!1,this.availableRoles=[],this.selectedRoleIds=[],this.periodPreferences={},this.mode="inputForm",this.hypercubeData=null,this.showFactsOnly=!1,this.conceptSearchText="",this._tempSelectedRoles=new Set,this._searchQuery="",this._filteredRoles=[],this._tempPeriodPreferences={},this._selectedAvailableRole=null,this._selectedChosenRole=null,this._chosenSearchQuery="",this._draggedRoleId=null,this._dragOverRoleId=null,this._chosenRoleOrder=[],this._showAdvancedFilter=!1,this._showFactsOnly=!1,this._conceptSearchText="",this._collapsedRoles=new Set}connectedCallback(){super.connectedCallback(),this._initializeTempSelection(),this._initializePeriodPreferences()}updated(e){(e.has("selectedRoleIds")||e.has("open"))&&this._initializeTempSelection(),(e.has("availableRoles")||e.has("_searchQuery"))&&this._updateFilteredRoles(),(e.has("availableRoles")||e.has("periodPreferences")||e.has("open"))&&this._initializePeriodPreferences(),e.has("open")&&this.open&&(this._showAdvancedFilter=ct,this._showFactsOnly=this.showFactsOnly,this._conceptSearchText=this.conceptSearchText)}_updateFilteredRoles(){if(!this._searchQuery.trim())return void(this._filteredRoles=[...this.availableRoles]);const e=this._searchQuery.toLowerCase().trim(),t=this.availableRoles.filter(t=>{var i;const o=t.title.toLowerCase().includes(e),r=t.id.toLowerCase().includes(e),n=(null==(i=t.description)?void 0:i.toLowerCase().includes(e))||!1,a=this._searchInRoleURI(t,e);return o||r||n||a});this._filteredRoles=t}_searchInRoleURI(e,t){var i;if(null==(i=e.metadata)?void 0:i.roleURI)return e.metadata.roleURI.toLowerCase().includes(t);const o=/https?:\/\/[^\s]+/i,r=o.test(e.title),n=o.test(e.id);return r||n?e.title.toLowerCase().includes(t)||e.id.toLowerCase().includes(t):!!(e.id.includes(".")||e.id.includes("/")||e.id.includes(":"))&&e.id.toLowerCase().includes(t)}_handleSearchInput(e){const t=e.target;this._searchQuery=t.value}_clearSearch(){var e;this._searchQuery="";const t=null==(e=this.shadowRoot)?void 0:e.querySelector(".search-input");t&&(t.value="",t.focus())}_handleChosenSearchInput(e){const t=e.target;this._chosenSearchQuery=t.value}_clearChosenSearch(){var e;this._chosenSearchQuery="";const t=null==(e=this.shadowRoot)?void 0:e.querySelector(".chosen-search-input");t&&(t.value="",t.focus())}_highlightSearchTerm(e){if(!this._searchQuery.trim())return e;const t=this._searchQuery.trim(),i=new RegExp(`(${t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")})`,"gi");return e.replace(i,"<mark>$1</mark>")}_renderHighlightedText(e){return e}_getSelectedFilteredCount(){return this._filteredRoles.filter(e=>this._tempSelectedRoles.has(e.id)).length}_initializeTempSelection(){this._tempSelectedRoles=new Set(this.selectedRoleIds),this._chosenRoleOrder=[...this.selectedRoleIds]}_initializePeriodPreferences(){const e={};this.availableRoles.forEach(t=>{const i=this.periodPreferences[t.id];if(i)e[t.id]={...i};else{const i=!0===t.showPeriodControl;let o,r;void 0!==t.duration||void 0!==t.instant?(o=!0===t.duration,r=!0===t.instant):(o=i||this._hasConceptsWithPeriodType(t,"duration"),r=i||this._hasConceptsWithPeriodType(t,"instant")),e[t.id]={showDuration:o,showInstant:r,showPreviousYear:!0===t.showPreviousYear}}const o=this._getDimensionsForRole(t.id);o.length>0&&!(null==i?void 0:i.dimensionSelections)&&(e[t.id].dimensionSelections||(e[t.id].dimensionSelections=[]),o.forEach(i=>{var o,r;const n=this._getAllDimensionMembers(i.members);if(n.length>0){const a=(null==(r=null==(o=i.labels)?void 0:o.find(e=>"http://www.xbrl.org/2003/role/label"===e.role))?void 0:r.label)||i.conceptName,s=n.map(e=>e.id),l={dimensionId:i.id,dimensionLabel:a,selectedMemberIds:s};e[t.id].dimensionSelections.push(l),s.length}}))}),this._tempPeriodPreferences=e}_hasConceptsWithPeriodType(e,t){const i=e=>e.some(e=>!e.abstract&&e.periodType===t||!!e.children&&i(e.children));return i(e.concepts)}_handlePeriodCheckboxChange(e,t,i){e.stopPropagation();const o=e.target,r={...this._tempPeriodPreferences};r[t]||(r[t]={showDuration:!0,showInstant:!0,showPreviousYear:!1}),"duration"===i?r[t].showDuration=o.checked:"instant"===i?r[t].showInstant=o.checked:"previousYear"===i&&(r[t].showPreviousYear=o.checked),this._tempPeriodPreferences=r,this.requestUpdate()}_enforceSingleMemberSelectionsForRole(e,t){const i=this._getDimensionsForRole(e);if(0===i.length)return t;const o={...t},r=o[e]?{...o[e]}:{showDuration:!0,showInstant:!0,showPreviousYear:!1,dimensionSelections:[]},n=r.dimensionSelections?[...r.dimensionSelections]:[];return i.forEach(e=>{var t,i;if(!this._isSingleMemberDimension(e))return;const o=this._getAllDimensionMembers(e.members);if(1!==o.length)return;const r=o[0].id,a=(null==(i=null==(t=e.labels)?void 0:t.find(e=>"http://www.xbrl.org/2003/role/label"===e.role))?void 0:i.label)||e.conceptName||e.id,s=n.findIndex(t=>t.dimensionId===e.id);-1!==s?n[s]={...n[s],dimensionLabel:a,selectedMemberIds:[r]}:n.push({dimensionId:e.id,dimensionLabel:a,selectedMemberIds:[r]})}),r.dimensionSelections=n,o[e]=r,o}_enforceSingleMemberSelectionsForSelectedRoles(e,t=this._tempSelectedRoles){let i={...e};for(const o of t)i=this._enforceSingleMemberSelectionsForRole(o,i);return i}_handleCheckboxChange(e,t){const i=e.target,o=new Set(this._tempSelectedRoles);let r={...this._tempPeriodPreferences};i.checked?(o.add(t),r=this._enforceSingleMemberSelectionsForRole(t,r)):o.delete(t),this._tempSelectedRoles=o,this._tempPeriodPreferences=r,this.requestUpdate()}_selectAll(){const e=new Set(this._tempSelectedRoles);this._filteredRoles.forEach(t=>e.add(t.id)),this._tempSelectedRoles=e,this._tempPeriodPreferences=this._enforceSingleMemberSelectionsForSelectedRoles(this._tempPeriodPreferences,e),this.requestUpdate()}_selectNone(){const e=new Set(this._tempSelectedRoles);this._filteredRoles.forEach(t=>e.delete(t.id)),this._tempSelectedRoles=e,this.requestUpdate()}_selectAllGlobal(){const e=new Set(this.availableRoles.map(e=>e.id));this._tempSelectedRoles=e,this._tempPeriodPreferences=this._enforceSingleMemberSelectionsForSelectedRoles(this._tempPeriodPreferences,e),this.requestUpdate()}_selectNoneGlobal(){this._tempSelectedRoles=new Set,this.requestUpdate()}_resetToOriginal(){this._tempSelectedRoles=new Set(this.selectedRoleIds),this._tempPeriodPreferences=this._enforceSingleMemberSelectionsForSelectedRoles(this._tempPeriodPreferences,this._tempSelectedRoles),this.requestUpdate()}_handleCancel(){this._initializeTempSelection(),this.dispatchEvent(new CustomEvent("dialog-cancel",{bubbles:!0}))}_handleApply(){const e=this._enforceSingleMemberSelectionsForSelectedRoles(this._tempPeriodPreferences,this._tempSelectedRoles);this._tempPeriodPreferences=e;const t=this._chosenRoleOrder.filter(e=>this._tempSelectedRoles.has(e)),i=Array.from(this._tempSelectedRoles).filter(e=>!this._chosenRoleOrder.includes(e));this._chosenRoleOrder=[...t,...i];const o=this._chosenRoleOrder.map((e,t)=>{var i;const o=this.availableRoles.find(t=>t.id===e);return{roleId:e,roleURI:(null==(i=null==o?void 0:o.metadata)?void 0:i.roleURI)||"",order:t}});this._chosenRoleOrder,this.dispatchEvent(new CustomEvent("roles-filter-apply",{detail:{selectedRoleIds:o,periodPreferences:e},bubbles:!0}))}_getDimensionsForRole(e){var t,i;if(this.hypercubeData,this.hypercubeData,this.hypercubeData,!this.hypercubeData)return console.error("❌ [getDimensionsForRole] CRITICAL: hypercubeData is null/undefined/false"),console.error("❌ Parent component must pass hypercubeData property to filter dialog!"),console.error('❌ Example: <jupiter-filter-roles-dialog .hypercubeData="${hypercubeData}">'),[];let o=this.hypercubeData;if(Array.isArray(this.hypercubeData)&&this.hypercubeData.length>0&&(o=this.hypercubeData[0]),null==o||o.roles,!(null==o?void 0:o.roles))return console.warn("⚠️ [getDimensionsForRole] No roles found in hypercube data structure"),console.warn("⚠️ Expected structure: { roles: [...] } or [{ roles: [...] }]"),[];o.roles.map(e=>e.roleId);const r=o.roles.find(t=>t.roleId===e);if(!(null==(t=null==r?void 0:r.items)?void 0:t.length))return console.warn("⚠️ [getDimensionsForRole] No items found in hypercube role for:",e),[];r.items.length;const n=(null==(i=r.items[0])?void 0:i.dimensions)||[];n.length,n.map(e=>{var t;return{id:e.id,type:e.dimensionType,hasMembers:!!(e.members&&e.members.length>0),membersCount:(null==(t=e.members)?void 0:t.length)||0}});const a=n.filter(e=>"explicit"===e.dimensionType&&e.members&&Array.isArray(e.members)&&e.members.length>0);return a.length,a.map(e=>e.id),a}_getAllDimensionMembers(e){if(!e||!Array.isArray(e))return[];const t=[];return e.forEach(e=>{t.push(e),e.children&&e.children.length>0&&t.push(...this._getAllDimensionMembers(e.children))}),t}_isSingleMemberDimension(e){return 1===this._getAllDimensionMembers(e.members).length}_handleDimensionMemberChange(e,t,i,o){var r,n;e.stopPropagation();const a=e.target,s={...this._tempPeriodPreferences};s[t]||(s[t]={showDuration:!0,showInstant:!0,showPreviousYear:!1,dimensionSelections:[]}),s[t].dimensionSelections||(s[t].dimensionSelections=[]);let l=s[t].dimensionSelections.find(e=>e.dimensionId===i);if(!l){const e=this._getDimensionsForRole(t).find(e=>e.id===i),o=(null==(n=null==(r=null==e?void 0:e.labels)?void 0:r.find(e=>"http://www.xbrl.org/2003/role/label"===e.role))?void 0:n.label)||i;l={dimensionId:i,dimensionLabel:o,selectedMemberIds:[]},s[t].dimensionSelections.push(l)}a.checked?l.selectedMemberIds.includes(o)||l.selectedMemberIds.push(o):l.selectedMemberIds=l.selectedMemberIds.filter(e=>e!==o);const d=this._getDimensionsForRole(t).find(e=>e.id===i);if(d&&this._tempSelectedRoles.has(t)&&this._isSingleMemberDimension(d)){const e=this._getAllDimensionMembers(d.members);1===e.length&&(l.selectedMemberIds=[e[0].id],a.checked=!0)}this._tempPeriodPreferences=s,s[t].dimensionSelections,this.requestUpdate()}_isDimensionMemberSelected(e,t,i){const o=this._tempPeriodPreferences[e];if(!(null==o?void 0:o.dimensionSelections))return!1;const r=o.dimensionSelections.find(e=>e.dimensionId===t);return(null==r?void 0:r.selectedMemberIds.includes(i))||!1}_selectAllDimensionMembers(e,t){var i,o;const r=this._getDimensionsForRole(e).find(e=>e.id===t);if(!r)return;const n=this._getAllDimensionMembers(r.members).map(e=>e.id),a={...this._tempPeriodPreferences};a[e]||(a[e]={showDuration:!0,showInstant:!0,showPreviousYear:!1,dimensionSelections:[]}),a[e].dimensionSelections||(a[e].dimensionSelections=[]);let s=a[e].dimensionSelections.find(e=>e.dimensionId===t);if(!s){const n=(null==(o=null==(i=r.labels)?void 0:i.find(e=>"http://www.xbrl.org/2003/role/label"===e.role))?void 0:o.label)||t;s={dimensionId:t,dimensionLabel:n,selectedMemberIds:[]},a[e].dimensionSelections.push(s)}s.selectedMemberIds=n,this._tempPeriodPreferences=a,this.requestUpdate()}_deselectAllDimensionMembers(e,t){var i;const o={...this._tempPeriodPreferences};if(!(null==(i=o[e])?void 0:i.dimensionSelections))return;const r=o[e].dimensionSelections.find(e=>e.dimensionId===t);r&&(r.selectedMemberIds=[]),this._tempPeriodPreferences=o,this.requestUpdate()}_toggleRoleCollapse(e){const t=new Set(this._collapsedRoles);t.has(e)?t.delete(e):t.add(e),this._collapsedRoles=t}_switchToAdvancedFilter(){ct=!0,this._showAdvancedFilter=!0,this._searchQuery=""}_switchToFilterRoles(){ct=!1,this._showAdvancedFilter=!1}_handleFilterChange(e){this._showFactsOnly=e.detail.showFactsOnly,this._conceptSearchText=e.detail.conceptSearchText??""}_handleAdvancedFilterApply(){this.dispatchEvent(new CustomEvent("advanced-filter-apply",{detail:{showFactsOnly:this._showFactsOnly,conceptSearchText:this._conceptSearchText},bubbles:!0}))}_handleAdvancedFilterReset(){this._showFactsOnly=!1,this._conceptSearchText="",this.dispatchEvent(new CustomEvent("advanced-filter-apply",{detail:{showFactsOnly:!1,conceptSearchText:""},bubbles:!0}))}_handleBackdropClick(e){e.target===this&&this._handleCancel()}_handleAvailableRoleClick(e){this._selectedAvailableRole=e,this._selectedChosenRole=null,this.requestUpdate()}_handleChosenRoleClick(e){this._selectedChosenRole=e,this._selectedAvailableRole=null,this.requestUpdate()}_moveToChosen(){if(!this._selectedAvailableRole)return;const e=new Set(this._tempSelectedRoles);e.add(this._selectedAvailableRole),this._tempSelectedRoles=e,this._tempPeriodPreferences=this._enforceSingleMemberSelectionsForRole(this._selectedAvailableRole,this._tempPeriodPreferences),this._chosenRoleOrder.includes(this._selectedAvailableRole)||(this._chosenRoleOrder=[...this._chosenRoleOrder,this._selectedAvailableRole]),this._selectedAvailableRole=null,this.requestUpdate()}_moveToAvailable(){if(!this._selectedChosenRole)return;const e=new Set(this._tempSelectedRoles);e.delete(this._selectedChosenRole),this._tempSelectedRoles=e,this._chosenRoleOrder=this._chosenRoleOrder.filter(e=>e!==this._selectedChosenRole),this._selectedChosenRole=null,this.requestUpdate()}_moveAllToChosen(){const e=new Set(this._tempSelectedRoles);this._filteredRoles.forEach(t=>{e.add(t.id),this._chosenRoleOrder.includes(t.id)||this._chosenRoleOrder.push(t.id)}),this._tempSelectedRoles=e,this._tempPeriodPreferences=this._enforceSingleMemberSelectionsForSelectedRoles(this._tempPeriodPreferences,e),this._selectedAvailableRole=null,this.requestUpdate()}_moveAllToAvailable(){this._tempSelectedRoles=new Set,this._chosenRoleOrder=[],this._selectedChosenRole=null,this.requestUpdate()}_getAvailableRoles(){return this._filteredRoles.filter(e=>!this._tempSelectedRoles.has(e.id))}_getChosenRoles(){const e=this.availableRoles.filter(e=>this._tempSelectedRoles.has(e.id)),t=[...this._chosenRoleOrder.map(t=>e.find(e=>e.id===t)).filter(e=>void 0!==e),...e.filter(e=>!this._chosenRoleOrder.includes(e.id))];if(!this._chosenSearchQuery.trim())return t;const i=this._chosenSearchQuery.toLowerCase().trim();return t.filter(e=>{var t;const o=e.title.toLowerCase().includes(i),r=e.id.toLowerCase().includes(i),n=(null==(t=e.description)?void 0:t.toLowerCase().includes(i))||!1,a=this._searchInRoleURI(e,i);return o||r||n||a})}_handleDragStart(e,t){this._draggedRoleId=t,e.dataTransfer&&(e.dataTransfer.effectAllowed="move",e.dataTransfer.setData("text/plain",t)),this.requestUpdate()}_handleDragOver(e,t){e.preventDefault(),e.dataTransfer&&(e.dataTransfer.dropEffect="move"),this._draggedRoleId&&this._draggedRoleId!==t&&(this._dragOverRoleId=t,this.requestUpdate())}_handleDragLeave(e){this._dragOverRoleId=null,this.requestUpdate()}_handleDrop(e,t){if(e.preventDefault(),!this._draggedRoleId||this._draggedRoleId===t)return this._draggedRoleId=null,this._dragOverRoleId=null,void this.requestUpdate();const i=[...this._chosenRoleOrder],o=i.indexOf(this._draggedRoleId),r=i.indexOf(t);if(-1!==o&&-1!==r){i.splice(o,1);const e=o<r?r-1:r;i.splice(e,0,this._draggedRoleId),this._chosenRoleOrder=i,this._chosenRoleOrder}this._draggedRoleId=null,this._dragOverRoleId=null,this.requestUpdate()}_handleDragEnd(e){this._draggedRoleId=null,this._dragOverRoleId=null,this.requestUpdate()}render(){const t=this._tempSelectedRoles.size,i=this.availableRoles.length,o=this._filteredRoles.length,r=this._searchQuery.trim().length>0;return e.html`
2345
2580
  <div class="dialog" @click="${e=>e.stopPropagation()}">
2346
2581
  <!-- Dialog Header -->
2347
2582
  <div class="dialog-header">
2348
2583
  <svg class="filter-icon" viewBox="0 0 24 24">
2349
2584
  <path d="M10 18h4v-2h-4v2zM3 6v2h18V6H3zm3 7h12v-2H6v2z"/>
2350
2585
  </svg>
2351
- <h2 class="dialog-title">${k.t("filter.title")}</h2>
2586
+ <h2 class="dialog-title">${E.t("filter.title")}</h2>
2352
2587
  <button class="close-button" @click="${this._handleCancel}">×</button>
2353
2588
  </div>
2354
2589
 
@@ -2360,19 +2595,19 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
2360
2595
  <!-- Available Roles Panel -->
2361
2596
  <div class="picklist-panel">
2362
2597
  <div class="picklist-header">
2363
- ${k.t("filter.availableRoles")} (${this._getAvailableRoles().length})
2598
+ ${E.t("filter.availableRoles")} (${this._getAvailableRoles().length})
2364
2599
  </div>
2365
2600
  <div class="picklist-search">
2366
2601
  <div class="search-container">
2367
2602
  <input
2368
2603
  type="text"
2369
2604
  class="search-input"
2370
- placeholder="${k.t("filter.searchPlaceholder")}"
2605
+ placeholder="${E.t("filter.searchPlaceholder")}"
2371
2606
  .value="${this._searchQuery}"
2372
2607
  @input="${this._handleSearchInput}"
2373
2608
  />
2374
2609
  ${this._searchQuery?e.html`
2375
- <button class="clear-search" @click="${this._clearSearch}" title="${k.t("filter.clearSearch")}">
2610
+ <button class="clear-search" @click="${this._clearSearch}" title="${E.t("filter.clearSearch")}">
2376
2611
  ×
2377
2612
  </button>
2378
2613
  `:e.html`
@@ -2397,7 +2632,7 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
2397
2632
  `})}
2398
2633
  </div>
2399
2634
  <div class="picklist-count">
2400
- ${this._getAvailableRoles().length} ${k.t("filter.roleCount")}
2635
+ ${this._getAvailableRoles().length} ${E.t("filter.roleCount")}
2401
2636
  </div>
2402
2637
  </div>
2403
2638
 
@@ -2407,7 +2642,7 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
2407
2642
  class="picklist-button"
2408
2643
  @click="${this._moveToChosen}"
2409
2644
  ?disabled="${!this._selectedAvailableRole}"
2410
- title="${k.t("filter.addSelectedRole")}"
2645
+ title="${E.t("filter.addSelectedRole")}"
2411
2646
  >
2412
2647
 
2413
2648
  </button>
@@ -2415,7 +2650,7 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
2415
2650
  class="picklist-button"
2416
2651
  @click="${this._moveAllToChosen}"
2417
2652
  ?disabled="${0===this._getAvailableRoles().length}"
2418
- title="${k.t("filter.addAllRoles")}"
2653
+ title="${E.t("filter.addAllRoles")}"
2419
2654
  >
2420
2655
  »
2421
2656
  </button>
@@ -2423,7 +2658,7 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
2423
2658
  class="picklist-button"
2424
2659
  @click="${this._moveToAvailable}"
2425
2660
  ?disabled="${!this._selectedChosenRole}"
2426
- title="${k.t("filter.removeSelectedRole")}"
2661
+ title="${E.t("filter.removeSelectedRole")}"
2427
2662
  >
2428
2663
 
2429
2664
  </button>
@@ -2431,7 +2666,7 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
2431
2666
  class="picklist-button"
2432
2667
  @click="${this._moveAllToAvailable}"
2433
2668
  ?disabled="${0===this._tempSelectedRoles.size}"
2434
- title="${k.t("filter.removeAllRoles")}"
2669
+ title="${E.t("filter.removeAllRoles")}"
2435
2670
  >
2436
2671
  «
2437
2672
  </button>
@@ -2440,19 +2675,19 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
2440
2675
  <!-- Chosen Roles Panel -->
2441
2676
  <div class="picklist-panel">
2442
2677
  <div class="picklist-header">
2443
- ${k.t("filter.chosenRoles")} (${this._tempSelectedRoles.size})
2678
+ ${E.t("filter.chosenRoles")} (${this._tempSelectedRoles.size})
2444
2679
  </div>
2445
2680
  <div class="picklist-search">
2446
2681
  <div class="search-container">
2447
2682
  <input
2448
2683
  type="text"
2449
2684
  class="search-input chosen-search-input"
2450
- placeholder="${k.t("filter.searchPlaceholder")}"
2685
+ placeholder="${E.t("filter.searchPlaceholder")}"
2451
2686
  .value="${this._chosenSearchQuery}"
2452
2687
  @input="${this._handleChosenSearchInput}"
2453
2688
  />
2454
2689
  ${this._chosenSearchQuery?e.html`
2455
- <button class="clear-search" @click="${this._clearChosenSearch}" title="${k.t("filter.clearSearch")}">
2690
+ <button class="clear-search" @click="${this._clearChosenSearch}" title="${E.t("filter.clearSearch")}">
2456
2691
  ×
2457
2692
  </button>
2458
2693
  `:e.html`
@@ -2483,19 +2718,21 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
2483
2718
  `})}
2484
2719
  </div>
2485
2720
  <div class="picklist-count">
2486
- ${this._tempSelectedRoles.size} ${k.t("filter.rolesSelected")}
2721
+ ${this._tempSelectedRoles.size} ${E.t("filter.rolesSelected")}
2487
2722
  </div>
2488
2723
  </div>
2489
2724
  </div>
2490
2725
  `:this._showAdvancedFilter?e.html`
2491
2726
  <jupiter-advanced-filter
2727
+ .availableRoles="${this.availableRoles}"
2492
2728
  .showFactsOnly="${this._showFactsOnly}"
2493
2729
  .conceptSearchText="${this._conceptSearchText}"
2494
2730
  @filter-change="${this._handleFilterChange}"
2731
+ @filter-apply="${this._handleAdvancedFilterApply}"
2495
2732
  ></jupiter-advanced-filter>
2496
2733
  `:e.html`
2497
2734
  <p class="description">
2498
- ${k.t("filter.description")}
2735
+ ${E.t("filter.description")}
2499
2736
  </p>
2500
2737
 
2501
2738
  <!-- Search Input -->
@@ -2503,12 +2740,12 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
2503
2740
  <input
2504
2741
  type="text"
2505
2742
  class="search-input"
2506
- placeholder="${k.t("filter.searchPlaceholder")}"
2743
+ placeholder="${E.t("filter.searchPlaceholder")}"
2507
2744
  .value="${this._searchQuery}"
2508
2745
  @input="${this._handleSearchInput}"
2509
2746
  />
2510
2747
  ${this._searchQuery?e.html`
2511
- <button class="clear-search" @click="${this._clearSearch}" title="${k.t("filter.clearSearch")}">
2748
+ <button class="clear-search" @click="${this._clearSearch}" title="${E.t("filter.clearSearch")}">
2512
2749
  ×
2513
2750
  </button>
2514
2751
  `:e.html`
@@ -2521,8 +2758,8 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
2521
2758
  <!-- Search Results Info -->
2522
2759
  ${r?e.html`
2523
2760
  <div class="search-results-info">
2524
- ${k.t("filter.showingResults")} ${o} ${k.t("filter.of")} ${i} ${k.t("filter.roles")}
2525
- ${o!==i?e.html`${k.t("filter.matching")} "${this._searchQuery}"`:""}
2761
+ ${E.t("filter.showingResults")} ${o} ${E.t("filter.of")} ${i} ${E.t("filter.roles")}
2762
+ ${o!==i?e.html`${E.t("filter.matching")} "${this._searchQuery}"`:""}
2526
2763
  </div>
2527
2764
  `:""}
2528
2765
 
@@ -2530,27 +2767,27 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
2530
2767
  <div class="selection-controls">
2531
2768
  ${r?e.html`
2532
2769
  <button class="selection-control" @click="${this._selectAll}">
2533
- ${k.t("filter.selectFiltered")} (${o})
2770
+ ${E.t("filter.selectFiltered")} (${o})
2534
2771
  </button>
2535
2772
  <button class="selection-control" @click="${this._selectNone}">
2536
- ${k.t("filter.deselectFiltered")}
2773
+ ${E.t("filter.deselectFiltered")}
2537
2774
  </button>
2538
2775
  <button class="selection-control" @click="${this._selectAllGlobal}">
2539
- ${k.t("filter.selectAll")} (${i})
2776
+ ${E.t("filter.selectAll")} (${i})
2540
2777
  </button>
2541
2778
  <button class="selection-control" @click="${this._selectNoneGlobal}">
2542
- ${k.t("filter.deselectAll")}
2779
+ ${E.t("filter.deselectAll")}
2543
2780
  </button>
2544
2781
  `:e.html`
2545
2782
  <button class="selection-control" @click="${this._selectAll}">
2546
- ${k.t("filter.selectAll")}
2783
+ ${E.t("filter.selectAll")}
2547
2784
  </button>
2548
2785
  <button class="selection-control" @click="${this._selectNone}">
2549
- ${k.t("filter.selectNone")}
2786
+ ${E.t("filter.selectNone")}
2550
2787
  </button>
2551
2788
  `}
2552
2789
  <button class="selection-control" @click="${this._resetToOriginal}">
2553
- ${k.t("filter.reset")}
2790
+ ${E.t("filter.reset")}
2554
2791
  </button>
2555
2792
  </div>
2556
2793
 
@@ -2559,10 +2796,10 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
2559
2796
  ${0===this._filteredRoles.length?e.html`
2560
2797
  <div class="no-results">
2561
2798
  ${r?e.html`
2562
- ${k.t("filter.noRolesFound")} "${this._searchQuery}".<br>
2563
- ${k.t("filter.tryDifferentSearch")}
2799
+ ${E.t("filter.noRolesFound")} "${this._searchQuery}".<br>
2800
+ ${E.t("filter.tryDifferentSearch")}
2564
2801
  `:e.html`
2565
- ${k.t("filter.noRolesAvailable")}
2802
+ ${E.t("filter.noRolesAvailable")}
2566
2803
  `}
2567
2804
  </div>
2568
2805
  `:e.html`
@@ -2587,7 +2824,7 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
2587
2824
  ${a?"":e.html`
2588
2825
  <div class="role-item-body">
2589
2826
  <div class="period-controls">
2590
- <p class="period-controls-label">${k.t("filter.additionalOptions")}</p>
2827
+ <p class="period-controls-label">${E.t("filter.additionalOptions")}</p>
2591
2828
  <div class="period-checkboxes">
2592
2829
  <label class="period-checkbox-item">
2593
2830
  <input
@@ -2596,14 +2833,14 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
2596
2833
  .checked="${o.showPreviousYear}"
2597
2834
  @change="${e=>this._handlePeriodCheckboxChange(e,t.id,"previousYear")}"
2598
2835
  />
2599
- <span class="period-checkbox-label">${k.t("filter.showPreviousYear")}</span>
2836
+ <span class="period-checkbox-label">${E.t("filter.showPreviousYear")}</span>
2600
2837
  </label>
2601
2838
  </div>
2602
2839
  </div>
2603
2840
 
2604
2841
  ${n?e.html`
2605
2842
  <div class="dimension-section">
2606
- <div class="dimension-header">📊 ${k.t("filter.dimensionMemberSelection")}</div>
2843
+ <div class="dimension-header">📊 ${E.t("filter.dimensionMemberSelection")}</div>
2607
2844
  ${r.map(i=>{var o,r;const n=this._getAllDimensionMembers(i.members);if(0===n.length)return e.html``;const a=(null==(r=null==(o=i.labels)?void 0:o.find(e=>"http://www.xbrl.org/2003/role/label"===e.role))?void 0:r.label)||i.conceptName;return e.html`
2608
2845
  <div class="dimension-group">
2609
2846
  <div class="dimension-label">${a}</div>
@@ -2625,13 +2862,13 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
2625
2862
  class="member-select-btn"
2626
2863
  @click="${()=>this._selectAllDimensionMembers(t.id,i.id)}"
2627
2864
  >
2628
- ${k.t("filter.selectAllMembers")}
2865
+ ${E.t("filter.selectAllMembers")}
2629
2866
  </button>
2630
2867
  <button
2631
2868
  class="member-select-btn"
2632
2869
  @click="${()=>this._deselectAllDimensionMembers(t.id,i.id)}"
2633
2870
  >
2634
- ${k.t("filter.clearMembers")}
2871
+ ${E.t("filter.clearMembers")}
2635
2872
  </button>
2636
2873
  </div>
2637
2874
  </div>
@@ -2652,25 +2889,25 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
2652
2889
  ${"admin"!==this.mode&&"readonly"!==this.mode?e.html`
2653
2890
  ${this._showAdvancedFilter?e.html`
2654
2891
  <button class="btn-text" @click="${this._switchToFilterRoles}">
2655
- ${k.t("filter.backToFilterRoles")}
2892
+ ${E.t("filter.backToFilterRoles")}
2656
2893
  </button>
2657
2894
  ${this._showFactsOnly||this._conceptSearchText.trim().length>0?e.html`
2658
2895
  <button class="btn-text" @click="${this._handleAdvancedFilterReset}">
2659
- ${k.t("filter.resetFilter")}
2896
+ ${E.t("filter.resetFilter")}
2660
2897
  </button>
2661
2898
  `:""}
2662
2899
  `:e.html`
2663
2900
  <button class="btn-text" @click="${this._switchToAdvancedFilter}">
2664
- ${k.t("filter.advancedFilter")}
2901
+ ${E.t("filter.advancedFilter")}
2665
2902
  </button>
2666
2903
  `}
2667
2904
  `:""}
2668
2905
  <button class="btn-secondary" @click="${this._handleCancel}">
2669
- ${k.t("filter.cancel")}
2906
+ ${E.t("filter.cancel")}
2670
2907
  </button>
2671
2908
  ${this._showAdvancedFilter?e.html`
2672
2909
  <button class="btn-primary" @click="${this._handleAdvancedFilterApply}">
2673
- ${k.t("filter.applyFilter")}
2910
+ ${E.t("filter.applyFilter")}
2674
2911
  </button>
2675
2912
  `:e.html`
2676
2913
  <button
@@ -2678,7 +2915,7 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
2678
2915
  @click="${this._handleApply}"
2679
2916
  ?disabled="${0===t}"
2680
2917
  >
2681
- ${k.t("filter.applyFilter")} (${t})
2918
+ ${E.t("filter.applyFilter")} (${t})
2682
2919
  </button>
2683
2920
  `}
2684
2921
  </div>
@@ -3284,14 +3521,14 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
3284
3521
  .btn-text:hover {
3285
3522
  background: var(--menuBgColorLighter, var(--jupiter-hover-background, #f5f5f5));
3286
3523
  }
3287
- `,nt([w({type:Boolean,reflect:!0})],exports.JupiterFilterRolesDialog.prototype,"open",2),nt([w({type:Array})],exports.JupiterFilterRolesDialog.prototype,"availableRoles",2),nt([w({type:Array})],exports.JupiterFilterRolesDialog.prototype,"selectedRoleIds",2),nt([w({type:Object})],exports.JupiterFilterRolesDialog.prototype,"periodPreferences",2),nt([w({type:String})],exports.JupiterFilterRolesDialog.prototype,"mode",2),nt([w({type:Object})],exports.JupiterFilterRolesDialog.prototype,"hypercubeData",2),nt([w({type:Boolean})],exports.JupiterFilterRolesDialog.prototype,"showFactsOnly",2),nt([w({type:String})],exports.JupiterFilterRolesDialog.prototype,"conceptSearchText",2),nt([S()],exports.JupiterFilterRolesDialog.prototype,"_tempSelectedRoles",2),nt([S()],exports.JupiterFilterRolesDialog.prototype,"_searchQuery",2),nt([S()],exports.JupiterFilterRolesDialog.prototype,"_filteredRoles",2),nt([S()],exports.JupiterFilterRolesDialog.prototype,"_tempPeriodPreferences",2),nt([S()],exports.JupiterFilterRolesDialog.prototype,"_selectedAvailableRole",2),nt([S()],exports.JupiterFilterRolesDialog.prototype,"_selectedChosenRole",2),nt([S()],exports.JupiterFilterRolesDialog.prototype,"_chosenSearchQuery",2),nt([S()],exports.JupiterFilterRolesDialog.prototype,"_draggedRoleId",2),nt([S()],exports.JupiterFilterRolesDialog.prototype,"_dragOverRoleId",2),nt([S()],exports.JupiterFilterRolesDialog.prototype,"_chosenRoleOrder",2),nt([S()],exports.JupiterFilterRolesDialog.prototype,"_showAdvancedFilter",2),nt([S()],exports.JupiterFilterRolesDialog.prototype,"_showFactsOnly",2),nt([S()],exports.JupiterFilterRolesDialog.prototype,"_conceptSearchText",2),nt([S()],exports.JupiterFilterRolesDialog.prototype,"_collapsedRoles",2),exports.JupiterFilterRolesDialog=nt([t("jupiter-filter-roles-dialog")],exports.JupiterFilterRolesDialog);var st=Object.defineProperty,lt=Object.getOwnPropertyDescriptor,dt=(e,t,i,o)=>{for(var r,n=o>1?void 0:o?lt(t,i):t,a=e.length-1;a>=0;a--)(r=e[a])&&(n=(o?r(t,i,n):r(n))||n);return o&&n&&st(t,i,n),n};exports.JupiterFormulaValidationDialog=class extends e.LitElement{constructor(){super(...arguments),this.results=[],this.open=!1,this._collapsedGroups=new Set,this._boundHandleKeydown=this._handleKeydown.bind(this)}connectedCallback(){super.connectedCallback(),window.addEventListener("keydown",this._boundHandleKeydown)}disconnectedCallback(){window.removeEventListener("keydown",this._boundHandleKeydown),super.disconnectedCallback()}_handleKeydown(e){this.open&&"Escape"===e.key&&this._handleClose()}_handleClose(){this.open=!1,this.dispatchEvent(new CustomEvent("dialog-cancel",{bubbles:!0}))}_toggleGroup(e){this._collapsedGroups.has(e)?this._collapsedGroups.delete(e):this._collapsedGroups.add(e),this.requestUpdate()}_handleConceptLinkClick(e){this.dispatchEvent(new CustomEvent("formula-concept-click",{detail:{conceptId:e.conceptId,conceptQName:e.conceptQName,columnId:e.columnId},bubbles:!0,composed:!0}))}_renderMessage(t){const i=t.message??"",o=new Map((t.conceptLinks??[]).map(e=>[e.label,e])),r=i.split(/(`[^`]+`)/g);return e.html`${r.map(t=>{const i=/^`([^`]+)`$/.exec(t);if(!i)return t;const r=o.get(i[1]);return r?e.html`<button type="button" class="concept-link" @click="${()=>this._handleConceptLinkClick(r)}">${i[1]}</button>`:i[1]})}`}_groupByRole(e){const t=e.reduce((e,t)=>{var i;return(e[i=t.roleLabel]??(e[i]=[])).push(t),e},{});return Object.entries(t)}render(){if(!this.open)return e.html``;const t=this.results.filter(e=>!e.skipped&&!e.satisfied),i=this._groupByRole(t),o=this.summary;return e.html`
3524
+ `,dt([S({type:Boolean,reflect:!0})],exports.JupiterFilterRolesDialog.prototype,"open",2),dt([S({type:Array})],exports.JupiterFilterRolesDialog.prototype,"availableRoles",2),dt([S({type:Array})],exports.JupiterFilterRolesDialog.prototype,"selectedRoleIds",2),dt([S({type:Object})],exports.JupiterFilterRolesDialog.prototype,"periodPreferences",2),dt([S({type:String})],exports.JupiterFilterRolesDialog.prototype,"mode",2),dt([S({type:Object})],exports.JupiterFilterRolesDialog.prototype,"hypercubeData",2),dt([S({type:Boolean})],exports.JupiterFilterRolesDialog.prototype,"showFactsOnly",2),dt([S({type:String})],exports.JupiterFilterRolesDialog.prototype,"conceptSearchText",2),dt([C()],exports.JupiterFilterRolesDialog.prototype,"_tempSelectedRoles",2),dt([C()],exports.JupiterFilterRolesDialog.prototype,"_searchQuery",2),dt([C()],exports.JupiterFilterRolesDialog.prototype,"_filteredRoles",2),dt([C()],exports.JupiterFilterRolesDialog.prototype,"_tempPeriodPreferences",2),dt([C()],exports.JupiterFilterRolesDialog.prototype,"_selectedAvailableRole",2),dt([C()],exports.JupiterFilterRolesDialog.prototype,"_selectedChosenRole",2),dt([C()],exports.JupiterFilterRolesDialog.prototype,"_chosenSearchQuery",2),dt([C()],exports.JupiterFilterRolesDialog.prototype,"_draggedRoleId",2),dt([C()],exports.JupiterFilterRolesDialog.prototype,"_dragOverRoleId",2),dt([C()],exports.JupiterFilterRolesDialog.prototype,"_chosenRoleOrder",2),dt([C()],exports.JupiterFilterRolesDialog.prototype,"_showAdvancedFilter",2),dt([C()],exports.JupiterFilterRolesDialog.prototype,"_showFactsOnly",2),dt([C()],exports.JupiterFilterRolesDialog.prototype,"_conceptSearchText",2),dt([C()],exports.JupiterFilterRolesDialog.prototype,"_collapsedRoles",2),exports.JupiterFilterRolesDialog=dt([t("jupiter-filter-roles-dialog")],exports.JupiterFilterRolesDialog);var pt=Object.defineProperty,ut=Object.getOwnPropertyDescriptor,ht=(e,t,i,o)=>{for(var r,n=o>1?void 0:o?ut(t,i):t,a=e.length-1;a>=0;a--)(r=e[a])&&(n=(o?r(t,i,n):r(n))||n);return o&&n&&pt(t,i,n),n};exports.JupiterFormulaValidationDialog=class extends e.LitElement{constructor(){super(...arguments),this.results=[],this.open=!1,this._collapsedGroups=new Set,this._boundHandleKeydown=this._handleKeydown.bind(this)}connectedCallback(){super.connectedCallback(),window.addEventListener("keydown",this._boundHandleKeydown)}disconnectedCallback(){window.removeEventListener("keydown",this._boundHandleKeydown),super.disconnectedCallback()}_handleKeydown(e){this.open&&"Escape"===e.key&&this._handleClose()}_handleClose(){this.open=!1,this.dispatchEvent(new CustomEvent("dialog-cancel",{bubbles:!0}))}_toggleGroup(e){this._collapsedGroups.has(e)?this._collapsedGroups.delete(e):this._collapsedGroups.add(e),this.requestUpdate()}_handleConceptLinkClick(e){this.dispatchEvent(new CustomEvent("formula-concept-click",{detail:{conceptId:e.conceptId,conceptQName:e.conceptQName,columnId:e.columnId},bubbles:!0,composed:!0}))}_renderMessage(t){const i=t.message??"",o=new Map((t.conceptLinks??[]).map(e=>[e.label,e])),r=i.split(/(`[^`]+`)/g);return e.html`${r.map(t=>{const i=/^`([^`]+)`$/.exec(t);if(!i)return t;const r=o.get(i[1]);return r?e.html`<button type="button" class="concept-link" @click="${()=>this._handleConceptLinkClick(r)}">${i[1]}</button>`:i[1]})}`}_groupByRole(e){const t=e.reduce((e,t)=>{var i;return(e[i=t.roleLabel]??(e[i]=[])).push(t),e},{});return Object.entries(t)}render(){if(!this.open)return e.html``;const t=this.results.filter(e=>!e.skipped&&!e.satisfied),i=this._groupByRole(t),o=this.summary;return e.html`
3288
3525
  <div class="dialog" @click="${e=>e.stopPropagation()}">
3289
3526
  <div class="dialog-header">
3290
- <h2 class="dialog-title">${k.t("formulaValidation.dialogTitle")}</h2>
3527
+ <h2 class="dialog-title">${E.t("formulaValidation.dialogTitle")}</h2>
3291
3528
  ${o?e.html`
3292
3529
  <p class="dialog-summary">
3293
- ${k.t("formulaValidation.summaryCount",{failed:o.failed,total:o.totalAssertions})}
3294
- ${o.failed>0?e.html`— ${k.t("formulaValidation.summaryCountBreakdown",{warnings:o.failedWarnings,errors:o.failedErrors})}`:""}
3530
+ ${E.t("formulaValidation.summaryCount",{failed:o.failed,total:o.totalAssertions})}
3531
+ ${o.failed>0?e.html`— ${E.t("formulaValidation.summaryCountBreakdown",{warnings:o.failedWarnings,errors:o.failedErrors})}`:""}
3295
3532
  </p>
3296
3533
  `:""}
3297
3534
  </div>
@@ -3300,7 +3537,7 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
3300
3537
  ${0===t.length?e.html`
3301
3538
  <div class="all-passed">
3302
3539
  <div class="all-passed-icon">✓</div>
3303
- <div class="all-passed-text">${k.t("formulaValidation.allPassed")}</div>
3540
+ <div class="all-passed-text">${E.t("formulaValidation.allPassed")}</div>
3304
3541
  </div>
3305
3542
  `:i.map(([t,i])=>{const o=this._collapsedGroups.has(t);return e.html`
3306
3543
  <div class="role-group">
@@ -3314,7 +3551,7 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
3314
3551
  ${i.map(t=>e.html`
3315
3552
  <div class="assertion-row">
3316
3553
  <span class="severity-badge ${"ERROR"===t.severity?"error":"warning"}">
3317
- ${"ERROR"===t.severity?k.t("formulaValidation.severityError"):k.t("formulaValidation.severityWarning")}
3554
+ ${"ERROR"===t.severity?E.t("formulaValidation.severityError"):E.t("formulaValidation.severityWarning")}
3318
3555
  </span>
3319
3556
  <span class="assertion-message">${this._renderMessage(t)}</span>
3320
3557
  </div>
@@ -3327,7 +3564,7 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
3327
3564
 
3328
3565
  <div class="dialog-actions">
3329
3566
  <button class="btn btn-primary" @click="${this._handleClose}">
3330
- ${k.t("formulaValidation.close")}
3567
+ ${E.t("formulaValidation.close")}
3331
3568
  </button>
3332
3569
  </div>
3333
3570
  </div>
@@ -3552,7 +3789,7 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
3552
3789
  .btn-primary:hover {
3553
3790
  opacity: 0.9;
3554
3791
  }
3555
- `,dt([w({type:Array})],exports.JupiterFormulaValidationDialog.prototype,"results",2),dt([w({type:Object})],exports.JupiterFormulaValidationDialog.prototype,"summary",2),dt([w({type:Boolean,reflect:!0})],exports.JupiterFormulaValidationDialog.prototype,"open",2),dt([S()],exports.JupiterFormulaValidationDialog.prototype,"_collapsedGroups",2),exports.JupiterFormulaValidationDialog=dt([t("jupiter-formula-validation-dialog")],exports.JupiterFormulaValidationDialog);var ct=Object.defineProperty,pt=Object.getOwnPropertyDescriptor,ut=(e,t,i,o)=>{for(var r,n=o>1?void 0:o?pt(t,i):t,a=e.length-1;a>=0;a--)(r=e[a])&&(n=(o?r(t,i,n):r(n))||n);return o&&n&&ct(t,i,n),n};exports.JupiterConfirmDialog=class extends e.LitElement{constructor(){super(...arguments),this.open=!1,this.heading="",this.message="",this.confirmLabel="OK",this.cancelLabel="Cancel",this._boundHandleKeydown=this._handleKeydown.bind(this)}connectedCallback(){super.connectedCallback(),window.addEventListener("keydown",this._boundHandleKeydown)}disconnectedCallback(){window.removeEventListener("keydown",this._boundHandleKeydown),super.disconnectedCallback()}updated(e){var t,i;e.has("open")&&this.open&&(null==(i=null==(t=this.shadowRoot)?void 0:t.querySelector(".btn-primary"))||i.focus())}_handleKeydown(e){this.open&&"Escape"===e.key&&this._handleCancel()}_handleConfirm(){this.open=!1,this.dispatchEvent(new CustomEvent("dialog-confirm",{bubbles:!0}))}_handleCancel(){this.open=!1,this.dispatchEvent(new CustomEvent("dialog-cancel",{bubbles:!0}))}render(){return this.open?e.html`
3792
+ `,ht([S({type:Array})],exports.JupiterFormulaValidationDialog.prototype,"results",2),ht([S({type:Object})],exports.JupiterFormulaValidationDialog.prototype,"summary",2),ht([S({type:Boolean,reflect:!0})],exports.JupiterFormulaValidationDialog.prototype,"open",2),ht([C()],exports.JupiterFormulaValidationDialog.prototype,"_collapsedGroups",2),exports.JupiterFormulaValidationDialog=ht([t("jupiter-formula-validation-dialog")],exports.JupiterFormulaValidationDialog);var mt=Object.defineProperty,ft=Object.getOwnPropertyDescriptor,bt=(e,t,i,o)=>{for(var r,n=o>1?void 0:o?ft(t,i):t,a=e.length-1;a>=0;a--)(r=e[a])&&(n=(o?r(t,i,n):r(n))||n);return o&&n&&mt(t,i,n),n};exports.JupiterConfirmDialog=class extends e.LitElement{constructor(){super(...arguments),this.open=!1,this.heading="",this.message="",this.confirmLabel="OK",this.cancelLabel="Cancel",this._boundHandleKeydown=this._handleKeydown.bind(this)}connectedCallback(){super.connectedCallback(),window.addEventListener("keydown",this._boundHandleKeydown)}disconnectedCallback(){window.removeEventListener("keydown",this._boundHandleKeydown),super.disconnectedCallback()}updated(e){var t,i;e.has("open")&&this.open&&(null==(i=null==(t=this.shadowRoot)?void 0:t.querySelector(".btn-primary"))||i.focus())}_handleKeydown(e){this.open&&"Escape"===e.key&&this._handleCancel()}_handleConfirm(){this.open=!1,this.dispatchEvent(new CustomEvent("dialog-confirm",{bubbles:!0}))}_handleCancel(){this.open=!1,this.dispatchEvent(new CustomEvent("dialog-cancel",{bubbles:!0}))}render(){return this.open?e.html`
3556
3793
  <div class="dialog" role="alertdialog" aria-modal="true" aria-labelledby="title" aria-describedby="message"
3557
3794
  @click="${e=>e.stopPropagation()}">
3558
3795
  <h2 class="dialog-title" id="title">${this.heading}</h2>
@@ -3652,11 +3889,20 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
3652
3889
  .btn-secondary:hover {
3653
3890
  background: var(--jupiter-hover-background, #f5f5f5);
3654
3891
  }
3655
- `,ut([w({type:Boolean,reflect:!0})],exports.JupiterConfirmDialog.prototype,"open",2),ut([w({type:String})],exports.JupiterConfirmDialog.prototype,"heading",2),ut([w({type:String})],exports.JupiterConfirmDialog.prototype,"message",2),ut([w({type:String})],exports.JupiterConfirmDialog.prototype,"confirmLabel",2),ut([w({type:String})],exports.JupiterConfirmDialog.prototype,"cancelLabel",2),exports.JupiterConfirmDialog=ut([t("jupiter-confirm-dialog")],exports.JupiterConfirmDialog);var ht=Object.defineProperty,mt=Object.getOwnPropertyDescriptor,ft=(e,t,i,o)=>{for(var r,n=o>1?void 0:o?mt(t,i):t,a=e.length-1;a>=0;a--)(r=e[a])&&(n=(o?r(t,i,n):r(n))||n);return o&&n&&ht(t,i,n),n};exports.JupiterDynamicForm=class extends e.LitElement{constructor(){super(...arguments),this.config={},this.initialData={},this.disabled=!1,this.readonly=!1,this.calculationEnabled=!1,this.formulaEnabled=!1,this.tableLayoutEnabled=!1,this.periodStartDate="2025-01-01",this.periodEndDate="2025-12-31",this.language="en",this.reportingLanguage="en",this.display="accordion",this.mode="inputForm",this.roleFilterAxes=[],this.showLastValidationResultBtn=!1,this.isDraftSaving=!1,this.hasUnsavedChanges=!1,this.defaultUnits=[],this.decimals="INF",this._formData={},this._draftLoaded=!1,this._preservedFormData={},this._periodData={},this._preservedPeriodData={},this._unitData={},this._preservedUnitData={},this._decimalsData={},this._totalManuallyEditedData={},this._effectiveMasterData=void 0,this._typedMemberData={},this._preservedTypedMemberData={},this._repeatCounts={},this._hiddenColumnIds=new Map,this._columns=[],this._errors=[],this._touched=new Set,this._dirty=!1,this._valid=!0,this._submitted=!1,this._xbrlFormErrors=[],this._calculationWarnings=new Map,this._showErrorPopup=!1,this._submitDisabled=!1,this._allSections=[],this._selectedRoleIds=[],this._showFilterDialog=!1,this._revealRolePrompt=null,this._showFactsOnly=!1,this._conceptSearchText="",this._periodPreferences={},this._activeSidePanelRoleId=null,this._sidePanelSearchQuery="",this._sidePanelCollapsed=!1,this._adminRoleConfigs={},this._roleBorderStatuses=new Map,this._roleCompletedStates=new Map,this._showRoleContextMenu=!1,this._contextMenuX=0,this._contextMenuY=0,this._contextMenuRoleId=null,this._validationStatus="idle",this._formulaValidationResults=[],this._showFormulaValidationDialog=!1,this._formulaValidationService=new _e,this._skipDraftLoading=!1,this._skipPeriodPreferencesRestore=!1,this._autoSaveTimer=null,this._lastAutoSaveSnapshot="",this._autoSaveBaselineSeeded=!1,this._lastSavedDraftSnapshot=""}connectedCallback(){super.connectedCallback(),this.addEventListener("period-change",e=>{console.log("🌍 [GLOBAL DynamicForm] Caught period-change event on element:",e);const t=e;console.log("🌍 [GLOBAL DynamicForm] Event detail:",t.detail),this._handlePeriodChange(t)}),this.addEventListener("unit-change",e=>{console.log("🏷️ [GLOBAL DynamicForm] Caught unit-change event on element:",e);const t=e;console.log("🏷️ [GLOBAL DynamicForm] Event detail:",t.detail),this._handleUnitChange(t)}),this.addEventListener("decimals-change",e=>{this._handleDecimalsChange(e)}),this.addEventListener("field-blur",e=>{console.log("🚨 [DynamicForm] field-blur event listener triggered!",e);const t=e;this._handleFieldBlur(t)}),this.addEventListener("calculation-mismatch-changed",e=>{this._handleCalculationMismatchChanged(e)}),this.addEventListener("total-manually-edited",e=>{const{conceptId:t,columnId:i}=e.detail,o={...this._totalManuallyEditedData};o[t]={...o[t],[i]:!0},this._totalManuallyEditedData=o}),this.addEventListener("calculation-total-auto-populated",e=>{const{conceptId:t,columnId:i,value:o}=e.detail,r=this._writeFormDataValue(t,i,o);this._touched.add(`${t}-${i}`),this._dirty=!0,this.hasUnsavedChanges=!0,this._validateForm(),this.requestUpdate(),this.dispatchEvent(new CustomEvent("field-change",{detail:{fieldId:t,conceptId:t,columnId:i,value:o,oldValue:r,source:"auto-calculated"},bubbles:!0}))}),document.addEventListener("click",()=>{this._showRoleContextMenu&&(this._showRoleContextMenu=!1,this.requestUpdate())}),this._autoSaveTimer=setInterval(()=>{const e=JSON.stringify(this._formData);if(!this._autoSaveBaselineSeeded)return this._lastAutoSaveSnapshot=e,this._autoSaveBaselineSeeded=!0,void console.log("ℹ️ [Auto Save] Baseline initialized on first tick (fallback); no draft save emitted.");e!==this._lastAutoSaveSnapshot?(this._lastAutoSaveSnapshot=e,this._handleSaveDraft("auto")):console.log("ℹ️ [Auto Save] No form state change detected; skipping draft save emit.")},3e4),this._initializeForm()}disconnectedCallback(){super.disconnectedCallback(),null!==this._autoSaveTimer&&(clearInterval(this._autoSaveTimer),this._autoSaveTimer=null),this._settleRevealRolePrompt(!1)}_seedAutoSaveBaseline(){this._lastAutoSaveSnapshot=JSON.stringify(this._formData),this._autoSaveBaselineSeeded=!0,console.log("ℹ️ [Auto Save] Baseline seeded from loaded form state.")}updated(e){e.has("hasUnsavedChanges")&&this.dispatchEvent(new CustomEvent("has-unsaved-changes-change",{detail:{hasUnsavedChanges:this.hasUnsavedChanges},bubbles:!0})),(e.has("decimals")||e.has("masterData"))&&this._computeEffectiveMasterData(),e.has("language")&&k.setLanguage(this.language),(e.has("xbrlInput")||e.has("defaultUnits"))&&this.xbrlInput&&this.defaultUnits&&this.defaultUnits.length>0&&this._applyDefaultUnitsToDatatypes(),(e.has("xbrlInput")||e.has("schema")||e.has("language")||e.has("periodStartDate")||e.has("periodEndDate")||e.has("roleFilterAxes"))&&this._initializeForm()}_applyDefaultUnitsToDatatypes(){var e;if(!(null==(e=this.xbrlInput)?void 0:e.datatypes)||!this.defaultUnits||0===this.defaultUnits.length)return;console.log("🔧 [DynamicForm] Applying defaultUnits to datatypes:",this.defaultUnits);const t=Array.isArray(this.xbrlInput.datatypes)?this.xbrlInput.datatypes:this.xbrlInput.datatypes.concepts;t&&0!==t.length?this.defaultUnits.forEach(e=>{Object.entries(e).forEach(([e,i])=>{const o=t.find(t=>t.type===e||t.id===e);if(o&&o.units&&o.units.length>0){const t=o.units.find(e=>e.id===i);t?(o.units.forEach(e=>e.isDefault=!1),t.isDefault=!0,console.log(`✅ [DynamicForm] Set isDefault=true for unit "${i}" in datatype "${e}"`)):console.warn(`⚠️ [DynamicForm] Unit "${i}" not found in datatype "${e}"`)}else console.warn(`⚠️ [DynamicForm] Datatype "${e}" not found or has no units`)})}):console.warn("⚠️ [DynamicForm] No datatypes found to apply defaults to")}_initializeForm(){var e;if(this._draftStorageService||(this._draftStorageService=new R(!1)),this.xbrlInput)try{if(console.log("🔄 Initializing form from XBRL input:",this.xbrlInput),console.log("📅 Using period dates:",this.periodStartDate,"to",this.periodEndDate),console.log("🌐 Using language:",this.language),this._initializePeriodPreferencesFromData(),this._applyAxisFilterToPeriodPreferences(),this._applyDimensionShowPreviousYear(),console.log("⚙️ Using period preferences:",this._periodPreferences),this._currentSchema=T.buildFormSchema(this.xbrlInput,this.periodStartDate,this.periodEndDate,this.language,this._periodPreferences),console.log("✅ Generated schema with sections:",this._currentSchema.sections.length),this._allSections=[...this._currentSchema.sections],Array.isArray(this._selectedRoleIds)&&this._selectedRoleIds.length>0&&"object"==typeof this._selectedRoleIds[0]){console.log("🔄 Applying custom role order to _allSections from _selectedRoleIds");const e=this._selectedRoleIds,t=new Map;e.forEach(e=>{t.set(e.roleId,e.order)}),this._allSections=[...this._allSections].sort((e,i)=>(t.get(e.id)??999)-(t.get(i.id)??999)),console.log("✅ Custom order applied to _allSections:",this._allSections.map(e=>e.title))}if(0===this._selectedRoleIds.length){const e=this.roleFilterAxes&&this.roleFilterAxes.length>0?this._filterRolesByAxisConfig(this._allSections):this._allSections;this._selectedRoleIds=e.map(e=>e.id),console.log(`✅ Auto-selected ${this._selectedRoleIds.length} roles (of ${this._allSections.length} total)`)}this._applyRoleFilter(),this._columns=[{id:"base",title:"Value",description:"Base values for concepts",type:"base",order:0,removable:!1}]}catch(t){console.error("❌ Error building form from XBRL input:",t),this._currentSchema=this._getDefaultSchema(),this._allSections=[],this._selectedRoleIds=[],this._columns=this._getDefaultColumns()}else this.schema?(this._currentSchema=this.schema,this._allSections=[...this.schema.sections],this._selectedRoleIds=this._allSections.map(e=>e.id),this._columns=this._getDefaultColumns()):(this._currentSchema=this._getDefaultSchema(),this._allSections=[],this._selectedRoleIds=[],this._columns=this._getDefaultColumns());this._formData={...this.initialData},(null==(e=this.xbrlInput)?void 0:e.initialData)&&(this._formData={...this._formData,...this.xbrlInput.initialData}),this._initializeGlobalDecimalsFromRoundingData(),this._extractTypedMembersFromFacts(),this._skipDraftLoading?(console.log("⏭️ Skipping draft loading during preference update"),this._seedAutoSaveBaseline(),this._analyzeAllVisibleRoles()):this._loadDraftIfExists().then(()=>{this._seedAutoSaveBaseline(),this._analyzeAllVisibleRoles()}).catch(()=>{this._seedAutoSaveBaseline(),this._analyzeAllVisibleRoles()}),this._validateForm()}_extractTypedMembersFromFacts(){var e;(null==(e=this._currentSchema)?void 0:e.sections)&&(this._currentSchema.sections.forEach(e=>{this._extractTypedMembersFromConcepts(e.concepts||[],e)}),console.log("✅ [DynamicForm] Typed member data populated:",this._typedMemberData))}_extractTypedMembersFromConcepts(e,t){e.forEach(e=>{e.facts&&e.facts.length>0&&(console.log(`🔍 [DynamicForm] Checking concept ${e.id} with ${e.facts.length} facts`),e.facts.forEach(i=>{if(i.dimensions&&Array.isArray(i.dimensions)){const o=i.dimensions.filter(e=>"typed"===e.dimensionType&&e.typedMemberValue);if(o.length>0){console.log(`📝 [DynamicForm] Found ${o.length} typed dimensions in fact:`,{factName:i.name,typedDimensions:o.map(e=>({dimension:e.dimension,typedMemberValue:e.typedMemberValue}))});const r=this._findColumnWithTypedMembers(i,e,t);r?(console.log(`✅ [DynamicForm] Found matching column: ${r.id}`),o.forEach(i=>{var o,n;const a=this._normalizeAxisId(i.dimension),s=null==(n=null==(o=r.dimensionData)?void 0:o.typedMembers)?void 0:n.find(e=>e.axisId===a||this._normalizeAxisId(e.axisId)===a);if(s){this._typedMemberData[r.id]||(this._typedMemberData[r.id]={});const o=s.axisId;this._typedMemberData[r.id][o]=i.typedMemberValue,console.log("✅ [DynamicForm] Set typed member value:",{sectionId:t.id,conceptId:e.id,columnId:r.id,axisKey:o,typedMemberValue:i.typedMemberValue})}else console.warn(`⚠️ [DynamicForm] Typed member not found for axis: ${a}`)})):console.warn("⚠️ [DynamicForm] No matching column found for fact with typed dimensions")}}})),e.children&&e.children.length>0&&this._extractTypedMembersFromConcepts(e.children,t)})}_findColumnWithTypedMembers(e,t,i){var o;if(!t.fields||0===t.fields.length)return null;const r=i.columns||[];if(0===r.length)return null;for(const n of t.fields){const t=r.find(e=>e.id===n.columnId);if(t&&(null==(o=t.dimensionData)?void 0:o.hasTypedMembers)){const i=(e.dimensions||[]).filter(e=>"explicit"===e.dimensionType),o=t.dimensionData.combinations||[];if(0===i.length||i.length===o.length&&i.every(e=>o.some(t=>this._normalizeAxisId(e.dimension)===this._normalizeAxisId(t.axisId)&&this._normalizeMemberId(e.member)===this._normalizeMemberId(t.memberId))))return t}}return null}_findColumnForFactDimensions(e,t,i){if(!t.fields||0===t.fields.length)return console.log(`⚠️ [DynamicForm] No fields for concept: ${t.id}`),null;const o=i.columns||[];if(0===o.length)return console.log(`⚠️ [DynamicForm] No columns in section: ${i.id}`),null;for(const r of t.fields){const t=o.find(e=>e.id===r.columnId);if(t&&t.dimensionData){const i=e.dimensions||[],o=t.dimensionData.combinations||[];console.log(`🔍 [DynamicForm] Checking column ${t.id}:`,{factDimensions:i.map(e=>({axis:e.dimension,member:e.member,type:e.dimensionType})),columnDimensions:o.map(e=>({axis:e.axisId,member:e.memberId}))});if(o.every(e=>i.some(t=>{const i=this._normalizeAxisId(t.dimension)===this._normalizeAxisId(e.axisId);if("explicit"===t.dimensionType){const o=this._normalizeMemberId(t.member)===this._normalizeMemberId(e.memberId);return i&&o}return"typed"===t.dimensionType&&i})))return t}}return null}_normalizeAxisId(e){return e?e.includes(":")?e.split(":").pop()||e:e.includes("_")&&e.split("_").pop()||e:""}_normalizeMemberId(e){return e?e.includes(":")?e.split(":").pop()||e:e.includes("_")&&e.split("_").pop()||e:""}_getDefaultSchema(){return{version:"1.0",formId:"default-form",title:"Dynamic Form",description:"Please provide form schema or XBRL input data",sections:[]}}_getDefaultColumns(){return[{id:"base",title:"Value",description:"Base values for concepts",type:"base",order:0,removable:!1}]}_initializePeriodPreferencesFromData(){var e,t,i;if(!(null==(i=null==(t=null==(e=this.xbrlInput)?void 0:e.presentation)?void 0:t[0])?void 0:i.roles))return;const o={...this._periodPreferences};this.xbrlInput.presentation[0].roles.forEach(e=>{if(!o[e.id]){const t=!0===e.showPreviousYear,i=void 0===e.instant||!0===e.instant,r=void 0===e.duration||!0===e.duration;o[e.id]={showDuration:r,showInstant:i,showPreviousYear:t}}}),this._periodPreferences=o}_applyAxisFilterToPeriodPreferences(){var e,t,i,o;if(!this.roleFilterAxes||0===this.roleFilterAxes.length)return;if(!(null==(i=null==(t=null==(e=this.xbrlInput)?void 0:e.hypercubes)?void 0:t[0])?void 0:i.roles))return;const r=this.xbrlInput.hypercubes[0].roles,n={...this._periodPreferences};for(const a of r){const e=a.roleId,t=n[e];if((null==t?void 0:t.dimensionSelections)&&t.dimensionSelections.length>0)continue;const i=[];for(const r of this.roleFilterAxes)for(const e of a.items||[]){if(null==(o=e.dimensions)?void 0:o.find(e=>e.id===r.id||r.conceptName&&e.conceptName===r.conceptName)){i.push({dimensionId:r.id,dimensionLabel:r.conceptName||r.id,selectedMemberIds:r.members.filter(e=>!0===e.available).map(e=>e.id)});break}}i.length>0&&(n[e]={showDuration:(null==t?void 0:t.showDuration)??!0,showInstant:(null==t?void 0:t.showInstant)??!0,showPreviousYear:(null==t?void 0:t.showPreviousYear)??!1,dimensionSelections:i})}this._periodPreferences=n}_applyDimensionShowPreviousYear(){var e,t,i,o,r,n;if("admin"!==this.mode)return;const a=!(!this.dynaformsFacts||!this.dynaformsMetadata),s=(null==(e=this._draftStorageService)?void 0:e.hasDraft())??!1;if(a||s)return;const l=new Set;null==(r=null==(o=null==(i=null==(t=this.xbrlInput)?void 0:t.presentation)?void 0:i[0])?void 0:o.roles)||r.forEach(e=>{!1===e.showPreviousYear&&l.add(e.id)});const d={...this._periodPreferences};let c=!1;for(const p of Object.keys(d)){if(l.has(p))continue;const e=d[p];if(e.showPreviousYear)continue;((null==(n=e.dimensionSelections)?void 0:n.some(e=>e.selectedMemberIds&&e.selectedMemberIds.length>0))??!1)&&(d[p]={...e,showPreviousYear:!0},c=!0,console.log(`📅 [JDF-010] Auto-enabled showPreviousYear for role "${p}" (has dimension members)`))}c&&(this._periodPreferences=d)}_getRoleIdsArray(){return Array.isArray(this._selectedRoleIds)&&0!==this._selectedRoleIds.length?"string"==typeof this._selectedRoleIds[0]?this._selectedRoleIds:this._selectedRoleIds.map(e=>e.roleId):[]}_applyRoleFilter(){if(!this._currentSchema||!this._allSections.length)return;const e=this._getRoleIdsArray();if(console.log(`🔍 Applying role filter: ${e.length} selected out of ${this._allSections.length} total`),0===e.length)return console.log("📝 No roles selected - showing empty form"),this._currentSchema={...this._currentSchema,sections:[]},void this.requestUpdate();this._preserveDataForHiddenSections();const t=this._allSections.filter(t=>e.includes(t.id)),i=this._sortSectionsByCustomOrder(t);console.log(`📊 Filtered sections: ${i.length}`),console.log("📋 Custom order applied:",i.map(e=>e.title)),this._restoreDataForVisibleSections(i),this._currentSchema={...this._currentSchema,sections:i},console.log(`✅ Schema updated with custom order. Current sections count: ${this._currentSchema.sections.length}`),this.requestUpdate()}_sortSectionsByCustomOrder(e){if(Array.isArray(this._selectedRoleIds)&&this._selectedRoleIds.length>0&&"object"==typeof this._selectedRoleIds[0]){const t=this._selectedRoleIds,i=new Map;return t.forEach(e=>{i.set(e.roleId,e.order)}),[...e].sort((e,t)=>(i.get(e.id)??999)-(i.get(t.id)??999))}return e}_filterRolesByAxisConfig(e){var t;if(!this.roleFilterAxes||0===this.roleFilterAxes.length)return e;if(!(null==(t=this.xbrlInput)?void 0:t.hypercubes)||0===this.xbrlInput.hypercubes.length)return e;const i=this.xbrlInput.hypercubes[0];return e.filter(e=>{var t;const o=null==(t=i.roles)?void 0:t.find(t=>t.roleId===e.id);if(!o||!o.items||0===o.items.length)return!0;for(const i of this.roleFilterAxes){const e=new Set(i.members.filter(e=>!0===e.available).map(e=>e.id));let t=!1,r=!1;for(const n of o.items){if(!n.dimensions||0===n.dimensions.length)continue;const o=n.dimensions.find(e=>e.id===i.id||i.conceptName&&e.conceptName===i.conceptName);if(o){if(t=!0,o.members)for(const t of o.members)if(e.has(t.id)){r=!0;break}if(r)break}}if(t&&!r)return!1}return!0})}_preserveDataForHiddenSections(){var e;const t=(null==(e=this._currentSchema)?void 0:e.sections.map(e=>e.id))||[],i=this._getRoleIdsArray();t.filter(e=>!i.includes(e)).forEach(e=>{const t=this._allSections.find(t=>t.id===e);t&&this._preserveSectionData(t)})}_restoreDataForVisibleSections(e){e.forEach(e=>{this._restoreSectionData(e)}),console.log(`🔄 Restored data for ${e.length} visible sections`)}_preserveSectionData(e){e.concepts.forEach(e=>{this._preserveConceptData(e)})}_preserveConceptData(e){this._formData[e.id]&&(this._preservedFormData[e.id]={...this._formData[e.id]}),e.fields.forEach(t=>{this._typedMemberData[t.columnId]&&(this._preservedTypedMemberData[t.columnId]={...this._typedMemberData[t.columnId]});const i=`${e.id}__${t.columnId}`;this._typedMemberData[i]&&(this._preservedTypedMemberData[i]={...this._typedMemberData[i]})}),e.children&&e.children.forEach(e=>{this._preserveConceptData(e)})}_restoreSectionData(e){e.concepts.forEach(e=>{this._restoreConceptData(e)})}_restoreConceptData(e){this._preservedFormData[e.id]&&(this._formData[e.id]={...this._preservedFormData[e.id]}),e.fields.forEach(t=>{this._preservedTypedMemberData[t.columnId]&&(this._typedMemberData[t.columnId]={...this._preservedTypedMemberData[t.columnId]});const i=`${e.id}__${t.columnId}`;this._preservedTypedMemberData[i]&&(this._typedMemberData[i]={...this._preservedTypedMemberData[i]})}),e.children&&e.children.forEach(e=>{this._restoreConceptData(e)})}_shouldShowFilterButton(){return!0}get _hasActiveAdvancedFilters(){return this._showFactsOnly||this._conceptSearchText.trim().length>0}_handleClearAdvancedFilters(){this._showFactsOnly=!1,this._conceptSearchText=""}_handleFilterRolesClick(){this._showFilterDialog=!0}_handleAdvancedFilterApply(e){this._showFactsOnly=e.detail.showFactsOnly,this._conceptSearchText=e.detail.conceptSearchText??"",this._showFilterDialog=!1}_handleFilterDialogCancel(){this._showFilterDialog=!1;const e=this._getRoleIdsArray().length;console.log(`🚫 Filter dialog cancelled. Current selection: ${e}/${this._allSections.length}`)}_handleFormulaValidationDialogCancel(){this._showFormulaValidationDialog=!1}_handleFormulaConceptClick(e){this._showFormulaValidationDialog=!1,this.scrollToConcept(e.detail.conceptQName,void 0,void 0,e.detail.columnId,e.detail.conceptId)}_handleRoleFilterApply(e){const{selectedRoleIds:t,periodPreferences:i}=e.detail;this._applyRoleSelection(t,i,"filterDialog")}_applyRoleSelection(e,t,i){var o,r;console.log("🎯 Filter apply triggered"),console.log("📊 Old _selectedRoleIds:",this._selectedRoleIds),console.log("📊 New selectedRoleIds from dialog:",e),this._selectedRoleIds=e,this._periodPreferences=t,console.log("📊 Updated _selectedRoleIds:",this._selectedRoleIds),console.log("📊 New period preferences (including dimension selections):",this._periodPreferences),console.log("💾 Capturing current form data before reinitialization...");const n=this._generateSubmissionData(),a=this._draftStorageService.createMetadataSnapshot(this.periodStartDate,this.periodEndDate,this.language,this._selectedRoleIds,this._allSections,this._typedMemberData,this._periodPreferences,this._periodData,this._unitData,this.reportingLanguage,this._repeatCounts,this._decimalsData,void 0,this._getHiddenColumnsForMetadata(),this._totalManuallyEditedData);this._draftStorageService.saveDraft(n,a),console.log("✅ Current form data saved to draft storage with NEW preferences"),this.dynaformsFacts=n,this.dynaformsMetadata=a,this._skipPeriodPreferencesRestore=!0,this._skipDraftLoading=!0,console.log("🔄 Reinitializing form with new filter settings..."),this._initializeForm(),this._skipDraftLoading=!1,this._skipPeriodPreferencesRestore=!1,console.log("📊 After _initializeForm, _currentSchema.sections.length:",null==(o=this._currentSchema)?void 0:o.sections.length),console.log("📊 Section IDs:",null==(r=this._currentSchema)?void 0:r.sections.map(e=>e.id)),console.log("📥 Restoring form data from draft after reinitialization...");const s=this._loadDraftIfExists().then(()=>{this._seedAutoSaveBaseline(),console.log("✅ Form data restored successfully after reinitialization")}).catch(e=>{console.error("❌ Error restoring form data after reinitialization:",e)});this._showFilterDialog=!1;const l=Array.isArray(this._selectedRoleIds)&&this._selectedRoleIds.length>0?(this._selectedRoleIds[0],this._selectedRoleIds.length):0;return console.log(`🎯 Applied role filter: ${l}/${this._allSections.length} roles selected`),console.log("📋 Enhanced selectedRoleIds structure:",this._selectedRoleIds),this.dispatchEvent(new CustomEvent("roles-filter-changed",{detail:{selectedRoleIds:e,totalRoles:this._allSections.length,visibleRoles:l,periodPreferences:t,source:i},bubbles:!0})),s}_confirmRevealHiddenRole(e){var t;return null==(t=this._revealRolePrompt)||t.resolve(!1),new Promise(t=>{this._revealRolePrompt={section:e,resolve:t}})}_settleRevealRolePrompt(e){const t=this._revealRolePrompt;this._revealRolePrompt=null,null==t||t.resolve(e)}_revealRole(e){var t;const i=this._selectedRoleIds;let o;if(i.length>0&&"object"==typeof i[0]){const r=i,n=Math.max(-1,...r.map(e=>e.order))+1;o=[...r,{roleId:e.id,roleURI:(null==(t=e.metadata)?void 0:t.roleURI)||"",order:n}]}else o=[...i,e.id];return this._applyRoleSelection(o,this._periodPreferences,"scrollToConcept")}_haveDimensionSelectionsChanged(e){var t;const i=new Set([...Object.keys(this._periodPreferences||{}),...Object.keys(e||{})]);for(const o of i){const i=null==(t=this._periodPreferences)?void 0:t[o],r=null==e?void 0:e[o],n=(null==i?void 0:i.dimensionSelections)||[],a=(null==r?void 0:r.dimensionSelections)||[];if(JSON.stringify(n.sort((e,t)=>e.dimensionId.localeCompare(t.dimensionId)))!==JSON.stringify(a.sort((e,t)=>e.dimensionId.localeCompare(t.dimensionId))))return console.log(`🔍 Dimension selection changed for role: ${o}`),console.log(" Old:",n),console.log(" New:",a),!0}return!1}_validateForm(){var e;const t=[],i=this._currentSchema;if(i){for(const o of i.sections)for(const i of o.concepts)for(const o of i.fields){const r=null==(e=this._formData[i.id])?void 0:e[o.columnId],n=C.validateField(o.id,i.id,o.columnId,r,o.type,o.validation||[]);t.push(...n)}t.push(...Array.from(this._calculationWarnings.values())),this._errors=t,this._valid=0===t.filter(e=>"error"===e.severity).length}}_handleCalculationMismatchChanged(e){const{key:t,mismatch:i}=e.detail,o=new Map(this._calculationWarnings);i?o.set(t,{fieldId:`${i.totalConceptId}__${i.columnId}`,conceptId:i.totalConceptId,columnId:i.columnId,message:i.message,severity:"warning",rule:{type:"custom",message:i.message,severity:"warning"},details:i}):o.delete(t),this._calculationWarnings=o,this._validateForm()}_writeFormDataValue(e,t,i){const o={...this._formData};o[e]||(o[e]={});const r=o[e][t];return o[e]={...o[e],[t]:i},this._formData=o,r}_handleFieldChange(e){const{fieldId:t,conceptId:i,columnId:o,value:r}=e.detail;console.log(`📝 Field change: conceptId=${i}, columnId=${o}, value=${r}, fieldId=${t}`);const n=this._writeFormDataValue(i,o,r);console.log(`💾 Updated formData[${i}]:`,this._formData[i]),this._touched.add(`${i}-${o}`),this._dirty=!0,this.hasUnsavedChanges=!0,this._validateForm(),this.requestUpdate(),this.dispatchEvent(new CustomEvent("field-change",{detail:{fieldId:t,conceptId:i,columnId:o,value:r,oldValue:n},bubbles:!0}))}_handlePeriodChange(e){console.log("🎯 [DynamicForm] _handlePeriodChange called with event:",e),console.log("🎯 [DynamicForm] Event detail:",e.detail);const{conceptId:t,columnId:i,periodType:o,periodStartDate:r,periodEndDate:n,periodInstantDate:a,unit:s}=e.detail;console.log(`📅 Period change received: conceptId=${t}, columnId=${i}, periodType=${o}, startDate=${r}, endDate=${n}, instantDate=${a}, unit=${s}`);const l={...this._periodData};l[t]||(l[t]={}),l[t]={...l[t],[i]:{startDate:r,endDate:n,instantDate:a}},this._periodData=l,console.log(`💾 Period data stored for [${t}][${i}]:`,this._periodData[t][i]),console.log("📦 Full period data state:",JSON.stringify(this._periodData,null,2)),s&&this._storeUnit(t,i,s),this._dirty=!0,this.hasUnsavedChanges=!0,this.requestUpdate()}_handleUnitChange(e){console.log("🏷️ [DynamicForm] _handleUnitChange called with event:",e),console.log("🏷️ [DynamicForm] Event detail:",e.detail);const{conceptId:t,columnId:i,unit:o}=e.detail;console.log(`🏷️ Unit change received: conceptId=${t}, columnId=${i}, unit=${o}`),this._storeUnit(t,i,o),this._dirty=!0,this.hasUnsavedChanges=!0,this.requestUpdate()}_storeUnit(e,t,i){console.log(`🔧 [_storeUnit] Called with conceptId=${e}, columnId=${t}, unit=${i}`),console.log("🔧 [_storeUnit] Current _unitData before update:",JSON.stringify(this._unitData,null,2));const o={...this._unitData};o[e]||(console.log(`🔧 [_storeUnit] Creating new entry for conceptId: ${e}`),o[e]={}),o[e]={...o[e],[t]:i},this._unitData=o,console.log(`💾 [_storeUnit] Unit data stored for [${e}][${t}]:`,this._unitData[e][t]),console.log("📦 [_storeUnit] Full unit data state after update:",JSON.stringify(this._unitData,null,2))}_handleDecimalsChange(e){const{conceptId:t,columnId:i,decimals:o}=e.detail;t&&i&&(this._storeDecimals(t,i,o),this._dirty=!0,this.hasUnsavedChanges=!0,this.requestUpdate())}_computeEffectiveMasterData(){const e="rj-i_DocumentIntendedRoundingLevel";if("INF"!==this.decimals){const t=parseFloat(this.decimals);if(!isNaN(t))return void(this._effectiveMasterData={...this.masterData||{},[e]:String(-t)})}this._effectiveMasterData=this.masterData?{...this.masterData}:void 0}_initializeGlobalDecimalsFromRoundingData(){if(this._hasValidGlobalDecimals())return;const e=this._findRoundingLevelFactValue(this._allSections)??this._findRoundingLevelValueInFormData(this._formData);if(null==e||""===e)return;const t=parseFloat(String(e));isNaN(t)||(this.decimals=String(Math.abs(t)))}_findRoundingLevelValueInFormData(e){if(e)for(const t of Object.keys(e)){if(!this._isRoundingLevelConcept(t))continue;const i=e[t]||{};for(const e of Object.keys(i)){const t=i[e];if(null!=t&&""!==t)return t}}}_findRoundingLevelFactValue(e){for(const t of e){const e=this._findRoundingLevelFactValueInConcepts(t.concepts||[]);if(null!=e&&""!==e)return e}}_findRoundingLevelFactValueInConcepts(e){for(const t of e){const e=t.originalConceptId||t.id;if(this._isRoundingLevelConcept(e)){const e=t.facts||[];for(const t of e)if(void 0!==(null==t?void 0:t.value)&&null!==(null==t?void 0:t.value)&&""!==(null==t?void 0:t.value))return t.value}if(t.children&&t.children.length>0){const e=this._findRoundingLevelFactValueInConcepts(t.children);if(null!=e&&""!==e)return e}}}_hasValidGlobalDecimals(){if(void 0===this.decimals||null===this.decimals)return!1;if("INF"===this.decimals)return!1;const e=parseFloat(this.decimals);return!isNaN(e)}_isRoundingLevelConcept(e){return!!e&&("rj-i_DocumentIntendedRoundingLevel"===e||e.includes("DocumentIntendedRoundingLevel"))}_findFactValueForField(e,t,i){var o,r;if(!e.facts||0===e.facts.length)return;const n=this._findColumnByIdInSection(t.columnId,i),a=null==(o=this._periodData[e.id])?void 0:o[t.columnId],s=(null==a?void 0:a.startDate)||(null==n?void 0:n.periodStartDate)||t.periodStartDate||this.periodStartDate,l=(null==a?void 0:a.endDate)||(null==n?void 0:n.periodEndDate)||t.periodEndDate||this.periodEndDate,d=(null==a?void 0:a.instantDate)||t.periodInstantDate||l||s,c=null==(r=this._unitData[e.id])?void 0:r[t.columnId],p={conceptId:e.originalConceptId||t.conceptId||e.id,columnId:t.columnId,periodStartDate:s,periodEndDate:l,periodInstantDate:d,periodType:t.periodType,unit:c,dimensionData:null==n?void 0:n.dimensionData},u=De.findMatchingFact(e.facts,p);return null==u?void 0:u.value}_storeDecimals(e,t,i){const o={...this._decimalsData};o[e]||(o[e]={}),o[e]={...o[e],[t]:i??""},this._decimalsData=o}_generateUniqueConceptKey(e,t){return`${e}::${t}`}_extractOriginalConceptId(e){const t=e.split("::");return t.length>1?t[1]:e}_handleAddConceptRepeat(e){const{conceptId:t}=e.detail;this._repeatCounts={...this._repeatCounts,[t]:(this._repeatCounts[t]||0)+1},this._dirty=!0,this.hasUnsavedChanges=!0}_handleRemoveConceptRepeat(e){const{conceptId:t}=e.detail,i=t.match(/^(.+)__repeat_(\d+)$/),o=i?i[1]:t,r=i?parseInt(i[2]):this._repeatCounts[t]||0,n=this._repeatCounts[o]||0;if(n<=0||r<1||r>n)return;const a={...this._formData},s={...this._typedMemberData},l={...this._unitData},d={...this._periodData};for(let u=r;u<n;u++){const e=`${o}__repeat_${u+1}`,t=`${o}__repeat_${u}`;void 0!==a[e]?a[t]=a[e]:delete a[t];const i=`${t}__`,r=`${e}__`,n=Object.keys(s).filter(e=>e.startsWith(r));Object.keys(s).filter(e=>e.startsWith(i)).forEach(e=>delete s[e]),n.forEach(e=>{s[`${t}__${e.slice(r.length)}`]=s[e]}),n.forEach(e=>delete s[e]),void 0!==l[e]?l[t]=l[e]:delete l[t],void 0!==d[e]?d[t]=d[e]:delete d[t]}const c=`${o}__repeat_${n}`;delete a[c],delete l[c],delete d[c];const p=`${c}__`;Object.keys(s).filter(e=>e.startsWith(p)).forEach(e=>delete s[e]),this._formData=a,this._typedMemberData=s,this._unitData=l,this._periodData=d,this._repeatCounts={...this._repeatCounts,[o]:n-1},this._dirty=!0,this.hasUnsavedChanges=!0}_handleTypedMemberChange(e){const{columnId:t,axisId:i,value:o,conceptId:r}=e.detail,n=r?`${r}__${t}`:t;console.log(`🔍 [DynamicForm] Typed member change: storageKey=${n}, axisId=${i}, value=${o}`);const a={...this._typedMemberData};a[n]||(a[n]={}),a[n]={...a[n],[i]:o},this._typedMemberData=a,this._dirty=!0,this.hasUnsavedChanges=!0,this.requestUpdate(),this.dispatchEvent(new CustomEvent("typed-member-change",{detail:{columnId:t,axisId:i,value:o},bubbles:!0}))}_handleFieldBlur(e){var t;console.log("🟧 [DynamicForm] _handleFieldBlur received event:",e),console.log("🟧 [DynamicForm] Event detail:",e.detail);const{fieldId:i,conceptId:o,columnId:r,xbrlValidationErrors:n}=e.detail;console.log(`🟧 [DynamicForm] Extracted - fieldId: ${i}, conceptId: ${o}, columnId: ${r}`),console.log("🟧 [DynamicForm] xbrlValidationErrors:",n);let a="";const s=e.composedPath();console.log(`🟧 [DynamicForm] Event path length: ${s.length}`);for(const l of s){const e=l;if("JUPITER-FORM-SECTION"===e.tagName){a=e.getAttribute("section-id")||"",console.log(`🟧 [DynamicForm] Found section element with id: ${a}`);break}}if(console.log(`🟧 [DynamicForm] Found sectionId: ${a}`),console.log(`🟧 [DynamicForm] Processing errors - has errors: ${n&&n.length>0}`),n&&n.length>0){console.log(`🟧 [DynamicForm] Adding/updating error for fieldId: ${i}, sectionId: ${a}`);const e=(null==(t=this._formData[o])?void 0:t[r])||"",s=this._xbrlFormErrors.findIndex(e=>e.fieldId===i&&e.sectionId===a),l={sectionId:a,fieldId:i,conceptId:o,columnId:r,value:e,errors:n};console.log("🟧 [DynamicForm] New error object:",l),console.log(`🟧 [DynamicForm] Existing index: ${s}`),s>=0?(this._xbrlFormErrors=[...this._xbrlFormErrors.slice(0,s),l,...this._xbrlFormErrors.slice(s+1)],console.log(`🟧 [DynamicForm] Updated existing error at index ${s}`)):(this._xbrlFormErrors=[...this._xbrlFormErrors,l],console.log("🟧 [DynamicForm] Added new error"))}else{console.log(`🟧 [DynamicForm] Removing error (if exists) for fieldId: ${i}, sectionId: ${a}`);const e=this._xbrlFormErrors.length;this._xbrlFormErrors=this._xbrlFormErrors.filter(e=>!(e.fieldId===i&&e.sectionId===a)),console.log(`🟧 [DynamicForm] Removed ${e-this._xbrlFormErrors.length} errors`)}console.log(`🔍 [Validation] Total errors: ${this._xbrlFormErrors.length}`,this._xbrlFormErrors)}_getSectionTitle(e){console.log(`🔍 [_getSectionTitle] Looking for sectionId: "${e}"`),console.log("🔍 [_getSectionTitle] Available sections:",this._allSections.map(e=>({id:e.id,title:e.title})));const t=this._allSections.find(t=>t.id===e),i=(null==t?void 0:t.title)||e||"(Unknown Section)";return console.log(`🔍 [_getSectionTitle] Result: "${i}"`),i}_roleHasErrors(e){return this._xbrlFormErrors.some(t=>t.sectionId===e)}async _handleErrorFieldClick(e,t,i){var o,r,n,a,s,l,d;if(console.log(`🎯 [Error Click] Attempting to focus field: ${e}__${t} in section: ${i}`),this._showErrorPopup=!1,this.requestUpdate(),await this.updateComplete,!(null==(o=this._currentSchema)?void 0:o.sections.some(e=>e.id===i))){const e=this._allSections.find(e=>e.id===i);if(!e||!(await this._confirmRevealHiddenRole(e)))return;await this._revealRole(e)}(null==(r=this._hiddenColumnIds.get(i))?void 0:r.has(t))&&(this._showColumn(i,t),await this.updateComplete),"sidePanel"===this.display&&this._activeSidePanelRoleId!==i&&(console.log(`🔀 Switching to section: ${i} (currently on: ${this._activeSidePanelRoleId})`),this._activeSidePanelRoleId=i,this.requestUpdate(),await this.updateComplete,await new Promise(e=>setTimeout(e,500)));const c=null==(n=this.shadowRoot)?void 0:n.querySelectorAll("jupiter-form-section");let p=null;if(null==c||c.forEach(e=>{var t;(null==(t=e.section)?void 0:t.id)===i&&(p=e)}),!p)return void console.warn(`⚠️ Section not found: ${i}`);if(console.log("✅ Found section element:",p),await p.updateComplete,await(null==(a=p.revealConcept)?void 0:a.call(p,e))&&await Promise.all(Array.from((null==(s=p.shadowRoot)?void 0:s.querySelectorAll("jupiter-concept-tree"))??[]).map(e=>e.updateComplete)),await new Promise(e=>setTimeout(e,100)),console.log(`🔍 Section shadow DOM exists: ${!!p.shadowRoot}`),p.shadowRoot){console.log(`🔍 Shadow DOM innerHTML length: ${(null==(l=p.shadowRoot.innerHTML)?void 0:l.length)||0}`);const e=p.shadowRoot.querySelectorAll("*");console.log(`🔍 Total elements in shadow DOM: ${e.length}`);const t=Array.from(e).filter(e=>{const t=e;return!(!t.tagName||!t.tagName.includes("-"))});console.log("🔍 Custom elements found:",t.map(e=>e.tagName).join(", "))}const u=`${e}_${t}_field`;console.log(`🔍 Looking for input with fieldId: ${u}`),console.log(`🔍 Looking for field with conceptId: ${e} AND columnId: ${t}`);const h=null==(d=p.shadowRoot)?void 0:d.querySelectorAll("jupiter-concept-tree");let m=null;if(console.log(`🔍 Found ${(null==h?void 0:h.length)||0} concept-tree elements`),h&&h.forEach((i,o)=>{var r;if(m)return;const n=null==(r=i.shadowRoot)?void 0:r.querySelectorAll("jupiter-form-field");console.log(`🔍 Concept tree ${o}: Found ${(null==n?void 0:n.length)||0} form-field elements`),null==n||n.forEach((i,o)=>{var r;if(!m&&(console.log(` Field ${o}: conceptId=${i.conceptId}, columnId=${i.columnId}`),i.conceptId===e&&i.columnId===t)){const e=null==(r=i.shadowRoot)?void 0:r.querySelector("input, textarea");console.log(` -> Matched! Input element found: ${!!e}`),e&&(m=e,console.log("✅ Found input element in form-field"))}})}),!m)return void console.warn(`⚠️ Input field not found for: ${u}`);const f=m;p.scrollIntoView({behavior:"smooth",block:"start"}),await new Promise(e=>setTimeout(e,300)),f.focus(),"INPUT"!==f.tagName&&"TEXTAREA"!==f.tagName||f.select(),f.style.boxShadow="0 0 0 3px rgba(220, 38, 38, 0.5)",setTimeout(()=>{f.style.boxShadow=""},2e3),console.log(`✅ Successfully focused field: ${e}__${t}`)}_handleSectionExpand(e){this.dispatchEvent(new CustomEvent("section-expand",{detail:e.detail,bubbles:!0}))}_handleConceptExpand(e){this.dispatchEvent(new CustomEvent("concept-expand",{detail:e.detail,bubbles:!0}))}_handleColumnRemove(e){const{columnId:t,sectionId:i}=e.detail;if(this._currentSchema&&i){const e=this._currentSchema.sections.find(e=>e.id===i);e&&e.columns&&(e.columns=e.columns.filter(e=>e.id!==t))}else this._columns=this._columns.filter(e=>e.id!==t),this._currentSchema&&this._currentSchema.sections.forEach(e=>{e.columns&&(e.columns=e.columns.filter(e=>e.id!==t))});this._removeColumnData(t,i),this._dirty=!0,this.hasUnsavedChanges=!0,this._validateForm(),this.requestUpdate(),this.dispatchEvent(new CustomEvent("column-remove",{detail:{columnId:t,sectionId:i},bubbles:!0}))}_handleColumnHide(e){const{columnId:t,sectionId:i}=e.detail;i&&t&&(this._hiddenColumnIds.has(i)||this._hiddenColumnIds.set(i,new Set),this._hiddenColumnIds.get(i).add(t),this._dirty=!0,this.hasUnsavedChanges=!0,this.requestUpdate(),this.dispatchEvent(new CustomEvent("column-hide",{detail:{columnId:t,sectionId:i},bubbles:!0})))}_handleColumnShow(e){const{columnId:t,sectionId:i}=e.detail;i&&t&&this._showColumn(i,t)}_showColumn(e,t){var i;null==(i=this._hiddenColumnIds.get(e))||i.delete(t),this._dirty=!0,this.hasUnsavedChanges=!0,this.requestUpdate(),this.dispatchEvent(new CustomEvent("column-show",{detail:{columnId:t,sectionId:e},bubbles:!0}))}_getColumnsWithHiddenFlags(e){const t=e.columns||this._columns,i=this._hiddenColumnIds.get(e.id);return i&&0!==i.size?t.map(e=>i.has(e.id)?{...e,hidden:!0}:e):t}_getHiddenColumnsForMetadata(){if(0===this._hiddenColumnIds.size)return;const e={};return this._hiddenColumnIds.forEach((t,i)=>{t.size>0&&(e[i]=Array.from(t))}),Object.keys(e).length>0?e:void 0}_handleColumnAddRequest(e){const{sectionId:t,columnRequest:i,insertAfterColumnId:o}=e.detail;this._addColumnFromRequest(i,t,o)}_getAvailableDimensionsForSection(e){var t,i,o;if(!(null==(i=null==(t=this.xbrlInput)?void 0:t.hypercubes)?void 0:i[0]))return[];const r=this.xbrlInput.hypercubes[0].roles.find(t=>t.roleId===e);if(!(null==(o=null==r?void 0:r.items)?void 0:o.length))return console.log(`❌ No hypercube items found for role: ${e}`),[];const n=[],a=this.language||"en",s=(e,t)=>{var i;return(null==(i=(null==e?void 0:e.find(e=>e.lang===a&&"http://www.xbrl.org/2003/role/label"===e.role))||(null==e?void 0:e.find(e=>"en"===e.lang&&"http://www.xbrl.org/2003/role/label"===e.role))||(null==e?void 0:e.find(e=>"http://www.xbrl.org/2003/role/label"===e.role)))?void 0:i.label)||t};return r.items.forEach(e=>{e.dimensions&&e.dimensions.length>0&&e.dimensions.forEach(e=>{if(!n.find(t=>t.id===e.id)){const t=s(e.labels,e.conceptName),i={id:e.id,conceptName:e.conceptName,axisLabel:t};e.members&&e.members.length>0&&(i.members=e.members.map(e=>({id:e.id,label:s(e.labels,e.conceptName||e.id)}))),e.typedMember&&(i.typedMember={id:e.typedMember.id,dataType:e.typedMember.type||"string",validation:e.typedMember.validation}),n.push(i)}})}),n}_formatPeriodDisplay(e,t){if(!e||!t)return`${e||""} / ${t||""}`;const i=e.substring(0,4);return i===t.substring(0,4)?i:`${e} / ${t}`}_resolveSubmissionInstantDate(e,t,i,o){const r=this._getEffectivePeriodRole(e);if(null==r?void 0:r.includes("periodStartLabel")){const e=(null==i?void 0:i.startDate)||(null==o?void 0:o.periodStartDate)||t.periodStartDate||this.periodStartDate,n=(null==i?void 0:i.endDate)||(null==o?void 0:o.periodEndDate)||t.periodEndDate||this.periodEndDate;return this._resolveInstantDate(r,void 0,e,n)}return(null==i?void 0:i.instantDate)||(null==i?void 0:i.endDate)||t.periodInstantDate||(null==o?void 0:o.periodEndDate)||t.periodEndDate||t.periodStartDate||this.periodStartDate}_getEffectivePeriodRole(e){return e.effectivePeriodRole??e.preferredLabel}_resolveInstantDate(e,t,i,o){if(null==e?void 0:e.includes("periodStartLabel")){const e=i||"2025-01-01";try{const t=new Date(e);return t.setDate(t.getDate()-1),t.toISOString().split("T")[0]}catch{return e}}return t||o||i||"2025-01-01"}_correctLegacyPeriodStartInstantDates(){this._allSections.forEach(e=>{this._correctPeriodStartInstantDatesInConcepts(e.concepts,e)})}_correctPeriodStartInstantDatesInConcepts(e,t){e.forEach(e=>{var i,o;(null==(i=this._getEffectivePeriodRole(e))?void 0:i.includes("periodStartLabel"))&&"instant"===e.periodType&&(null==(o=e.fields)?void 0:o.length)&&e.fields.forEach(i=>{this._correctFieldPeriodStartInstantDate(e,i,e.id,t);const o=this._repeatCounts[e.id]||0;for(let r=1;r<=o;r++)this._correctFieldPeriodStartInstantDate(e,i,`${e.id}__repeat_${r}`,t)}),e.children&&this._correctPeriodStartInstantDatesInConcepts(e.children,t)})}_correctFieldPeriodStartInstantDate(e,t,i,o){var r;const n=this._findColumnByIdInSection(t.columnId,o),a=null==(r=this._periodData[i])?void 0:r[t.columnId],s=(null==a?void 0:a.startDate)||(null==n?void 0:n.periodStartDate)||t.periodStartDate||this.periodStartDate,l=(null==a?void 0:a.endDate)||(null==n?void 0:n.periodEndDate)||t.periodEndDate||this.periodEndDate,d=this._resolveInstantDate(this._getEffectivePeriodRole(e),void 0,s,l);a&&a.instantDate!==d&&(console.log(`🩹 [Legacy Period Correction] ${i}/${t.columnId}: instantDate ${a.instantDate} → ${d}`),a.instantDate=d),t.periodInstantDate!==d&&(console.log(`🩹 [Legacy Period Correction] field ${e.id}/${t.columnId}: periodInstantDate ${t.periodInstantDate} → ${d}`),t.periodInstantDate=d)}_addColumnFromRequest(e,t,i){var o,r,n,a,s;const l=`col-${Date.now()}`;let d="",c="";"instant"===e.periodType?(d=e.instantDate||"",c=""):"duration"!==e.periodType&&"mixed"!==e.periodType||(d=this._formatPeriodDisplay(e.startDate,e.endDate),c="");let p={dimensionId:"period",memberValue:"instant"===e.periodType?`instant-${e.instantDate}`:`duration-${e.startDate}-${e.endDate}`,memberLabel:d};if(e.selectedDimensions&&e.selectedDimensions.length>0){const t=[],i=[];for(const o of e.selectedDimensions)o.isTyped&&o.typedValue?(t.push(`${o.axisLabel}: ${o.typedValue}`),i.push(`${o.axisId}|${o.typedValue}`)):o.memberId&&o.memberLabel&&(t.push(o.memberLabel),i.push(`${o.axisId}|${o.memberId}`));t.length>0&&(d=t.join(" | "),c="instant"===e.periodType?e.instantDate||"":this._formatPeriodDisplay(e.startDate,e.endDate),p={dimensionId:l,memberValue:t.join(" | "),memberLabel:t.join(" | "),memberKey:t.join(" | "),dimensionIdKey:i.join("::"),selectedDimensions:e.selectedDimensions},console.log(`📊 Applied selected dimensions to new column: ${p.memberKey}`))}else if(null==(r=null==(o=this.xbrlInput)?void 0:o.hypercubes)?void 0:r[0]){const i=this.xbrlInput.hypercubes[0].roles.find(e=>e.roleId===t);if(1===(null==(n=null==i?void 0:i.items)?void 0:n.length)){const t=i.items[0];if(1===t.dimensions.length){const i=t.dimensions[0];if(i.members&&i.members.length>0){const t=(null==(a=i.labels.find(e=>"http://www.xbrl.org/2003/role/label"===e.role))?void 0:a.label)||i.conceptName,o=i.members[0],r=(null==(s=o.labels.find(e=>"http://www.xbrl.org/2003/role/label"===e.role))?void 0:s.label)||o.conceptName;d=r,c="instant"===e.periodType?e.instantDate||"":this._formatPeriodDisplay(e.startDate,e.endDate),p={dimensionId:l,axisId:i.id,memberId:o.id,memberValue:r,memberLabel:r,axis:t,axisLabel:t,memberKey:`${t} | ${r}`,dimensionIdKey:`${i.id} | ${o.id}`},console.log(`📊 Applied hypercube dimension to new column: ${p.memberKey}`)}}}}const u={id:l,title:d,description:c,type:(p.memberKey,"dimension"),order:this._columns.length,removable:!0,dimensionData:p,periodStartDate:"instant"===e.periodType?e.instantDate:e.startDate,periodEndDate:"instant"===e.periodType?e.instantDate:e.endDate};if(e.selectedDimensions&&e.selectedDimensions.length>0){const t={};let i=!1;for(const o of e.selectedDimensions)o.isTyped&&(t[o.axisId]=o.typedValue||"",i=!0);i&&(this._typedMemberData[l]=t,u.dimensionData&&(u.dimensionData.hasTypedMembers=!0,u.dimensionData.typedMembers=e.selectedDimensions.filter(e=>e.isTyped).map(e=>({axisId:e.axisId,axisLabel:e.axisLabel,typedMemberId:e.axisId,memberLabel:e.axisLabel,type:e.dataType,validation:e.validation}))))}if(this._currentSchema){const e=this._currentSchema.sections.find(e=>e.id===t);if(e)if(e.columns||(e.columns=[...this._columns]),i){const t=e.columns.findIndex(e=>e.id===i);e.columns=-1!==t?[...e.columns.slice(0,t+1),u,...e.columns.slice(t+1)]:[...e.columns,u]}else e.columns=[...e.columns,u]}this._replicateFieldsForNewColumn(l,e,t),this._dirty=!0,this.hasUnsavedChanges=!0,this.requestUpdate(),this.dispatchEvent(new CustomEvent("column-add",{detail:{column:u},bubbles:!0}))}_removeColumnData(e,t){if(this._currentSchema)if(t){const i=this._currentSchema.sections.find(e=>e.id===t);i&&this._removeColumnDataFromConcepts(i.concepts,e)}else for(const i in this._formData)void 0!==this._formData[i][e]&&delete this._formData[i][e]}_removeColumnDataFromConcepts(e,t){e.forEach(e=>{this._formData[e.id]&&void 0!==this._formData[e.id][t]&&delete this._formData[e.id][t],e.fields&&(e.fields=e.fields.filter(e=>e.columnId!==t)),e.children&&this._removeColumnDataFromConcepts(e.children,t)})}_shouldCreateFieldForConcept(e,t){if(e.abstract)return!1;if(!(t.selectedDimensions&&t.selectedDimensions.length>0)&&e.periodType){if("instant"===t.periodType&&"instant"!==e.periodType)return!1;if("duration"===t.periodType&&"duration"!==e.periodType)return!1}return!0}_replicateFieldsForNewColumn(e,t,i){if(!this._currentSchema)return;const o=new T,r=this._currentSchema.sections.find(e=>e.id===i);r&&this._replicateFieldsForSection(r.concepts,e,t,o)}_replicateFieldsForSection(e,t,i,o){e.forEach(e=>{var r;if(this._shouldCreateFieldForConcept(e,i)){const o=null==(r=e.fields)?void 0:r[0];let n;const a="instant"===i.periodType?i.instantDate:i.startDate,s="instant"===i.periodType?i.instantDate:i.endDate,l=this._resolveInstantDate(this._getEffectivePeriodRole(e),i.instantDate,a,s);n=o?{id:`${e.id}_${t}`,conceptId:e.id,columnId:t,type:o.type,label:o.label,placeholder:o.placeholder,required:o.required,disabled:o.disabled,validation:o.validation,defaultValue:o.defaultValue,periodType:e.periodType,conceptType:e.type,periodStartDate:a,periodEndDate:s,periodInstantDate:"instant"===e.periodType?l:void 0}:{id:`${e.id}_${t}`,conceptId:e.id,columnId:t,type:"text",label:e.label||e.name,placeholder:`Enter ${e.name}`,required:!1,disabled:!1,validation:[],defaultValue:"",periodType:e.periodType,conceptType:e.type,periodStartDate:a,periodEndDate:s,periodInstantDate:"instant"===e.periodType?l:void 0},e.fields||(e.fields=[]),e.fields.push(n)}e.children&&this._replicateFieldsForSection(e.children,t,i,o)})}_addColumn(){const e={id:`dim-${Date.now()}`,title:`Dimension ${this._columns.length}`,description:"Additional dimension column",type:"dimension",order:this._columns.length,removable:!0,dimensionData:{dimensionId:"custom",memberValue:"default",memberLabel:"Default Member"}};this._columns=[...this._columns,e],this.requestUpdate(),this.dispatchEvent(new CustomEvent("column-add",{detail:{column:e},bubbles:!0}))}_handleSubmit(){if(console.log("📝 Form submission started..."),this._submitted=!0,this._submitDisabled=!0,"admin"===this.mode)return this._handleSaveDraft(),this._handleAdminModeSubmit(),void(this._submitDisabled=!1);if(console.log("🔵 [Submit] Checking for errors..."),console.log(`🔵 [Submit] _xbrlFormErrors.length: ${this._xbrlFormErrors.length}`),console.log("🔵 [Submit] _xbrlFormErrors:",this._xbrlFormErrors),this._xbrlFormErrors.length>0)return console.log("❌ [Submit] Cannot submit - validation errors present:",this._xbrlFormErrors),this._showErrorPopup=!0,this._submitDisabled=!1,void this.requestUpdate();if(console.log("✅ [Submit] No validation errors, proceeding with submission..."),this._validateForm(),!this._valid)return console.log("❌ [Submit] Cannot submit - form validation errors present:",this._errors),this._showErrorPopup=!0,this._submitDisabled=!1,void this.requestUpdate();this._correctLegacyPeriodStartInstantDates();const e=this._generateSubmissionData();console.log("📊 Form Submission Data:",JSON.stringify(e,null,2)),console.log("📊 Submission Data Summary:"),e.forEach((e,t)=>{console.log(` [${t}] conceptId: ${e.conceptId}, columnId: ${e.columnId}, value: ${e.value}, unit: ${e.unit||"none"}`)}),this.dispatchEvent(new CustomEvent("form-submit",{detail:{data:this._formData,submissionData:e,valid:this._valid,errors:this._errors,reportingLanguage:this.reportingLanguage},bubbles:!0})),console.log("✅ Form submit event dispatched"),setTimeout(()=>{this._submitDisabled=!1},1e3)}_handleQuickValidate(){"admin"!==this.mode&&this._runFormulaValidationPreflight()}_runFormulaValidationPreflight(){var e,t,i,o,r,n,a,s;if(!this.formulaEnabled)return;const l=null==(i=null==(t=null==(e=this.xbrlInput)?void 0:e.formula)?void 0:t[0])?void 0:i.roles;if(!l||0===l.length)return;const d=(null==(r=null==(o=this._currentSchema)?void 0:o.sections)?void 0:r.length)?this._currentSchema.sections:this._allSections;if(!d||0===d.length)return;const c=new Set(d.map(e=>{var t;return(null==(t=e.metadata)?void 0:t.roleURI)||e.id})),p=l.filter(e=>c.has(e.roleURI));if(0===p.length)return;const u=d.map(e=>{var t;return{roleURI:(null==(t=e.metadata)?void 0:t.roleURI)||e.id,concepts:e.concepts,columns:e.columns}}),h=X(this._formData,this._mergeAllSectionColumns(),u,null==(s=null==(a=null==(n=this.xbrlInput)?void 0:n.hypercubes)?void 0:a[0])?void 0:s.roles,this.periodStartDate,this.periodEndDate,this._typedMemberData),m={...this.xbrlInput,formula:[{...this.xbrlInput.formula[0],roles:p}]},f=this._formulaValidationService.evaluate(m,h,this.language),g=this._formulaValidationService.summarize(f);this._formulaValidationResults=f,this._formulaValidationSummary=g;f.some(e=>!e.skipped&&!e.satisfied)&&(this._showFormulaValidationDialog=!0),this.dispatchEvent(new CustomEvent("formula-validation-complete",{detail:{results:f,summary:g},bubbles:!0,composed:!0}))}_mergeAllSectionColumns(){const e=new Map;return this._columns.forEach(t=>e.set(t.id,t)),this._allSections.forEach(t=>{(t.columns||[]).forEach(t=>e.set(t.id,t))}),Array.from(e.values())}_handleSaveDraft(e="manual"){if(console.log("🔵 [Save Draft] Checking for errors..."),console.log(`🔵 [Save Draft] _xbrlFormErrors.length: ${this._xbrlFormErrors.length}`),console.log("🔵 [Save Draft] _xbrlFormErrors:",this._xbrlFormErrors),this._xbrlFormErrors.length>0)return console.log("❌ [Save Draft] Cannot save - validation errors present:",this._xbrlFormErrors),this._showErrorPopup=!0,void this.requestUpdate();console.log("✅ [Save Draft] No validation errors, proceeding with save..."),console.log("💾 Raw form data before submission generation:",this._formData),console.log("🏷️ Unit data before submission generation:",this._unitData),console.log("📋 Enhanced selectedRoleIds with roleURI and order:",this._selectedRoleIds),this._correctLegacyPeriodStartInstantDates();const t=this._generateSubmissionData();console.log("📤 Generated submission data:",t),console.log("📊 Submission data breakdown:"),t.forEach((e,t)=>{console.log(` [${t}] conceptId: ${e.conceptId}, columnId: ${e.columnId}, value: ${e.value}, unit: ${e.unit||"none"}`)});const i=this._roleCompletedStates.size>0?Object.fromEntries(this._roleCompletedStates):void 0,o=this._draftStorageService.createMetadataSnapshot(this.periodStartDate,this.periodEndDate,this.language,this._selectedRoleIds,this._allSections,this._typedMemberData,this._periodPreferences,this._periodData,this._unitData,this.reportingLanguage,this._repeatCounts,this._decimalsData,i,this._getHiddenColumnsForMetadata(),this._totalManuallyEditedData),r=JSON.stringify({draftData:t,metadata:o});if(r===this._lastSavedDraftSnapshot)return console.log(`ℹ️ [Save Draft] No draft content change detected (${e}); skipping event emit.`),void(this.hasUnsavedChanges=!1);this._lastSavedDraftSnapshot=r,this.hasUnsavedChanges=!1;const n=this._draftStorageService.saveDraft(t,o);console.log("💾 [Save Draft] Metadata saved with enhanced selectedRoleIds:",o.selectedRoleIds),this.dynaformsFacts=t,this.dynaformsMetadata=o,this.dispatchEvent(new CustomEvent("form-save-draft",{detail:{data:this._formData,draftData:t,metadata:o,saved:n,valid:this._valid,errors:this._errors,dynaformsFacts:t,dynaformsMetadata:o,reportingLanguage:this.reportingLanguage,source:"auto"==e?"auto":"manual"},bubbles:!0,composed:!0}));const a=this._getRoleIdsArray().length;console.log("💾 Draft saved - localStorage + event emitted",{entries:t.length,saved:n,roles:a,customColumns:o.customColumns.length,eventEmitted:!0,enhancedRoleStructure:Array.isArray(this._selectedRoleIds)&&this._selectedRoleIds.length>0&&"object"==typeof this._selectedRoleIds[0]})}async _loadDraftIfExists(){if(console.log("📋 Checking for saved draft..."),this.dynaformsFacts&&this.dynaformsMetadata){console.log("📦 Using external draft data from properties");const e={formData:this.dynaformsFacts,metadata:this.dynaformsMetadata};return await this._restoreFromDraft(e),this._draftLoaded=!0,this._draftLoadedAt=this.dynaformsMetadata.savedAt||(new Date).toISOString(),this.dispatchEvent(new CustomEvent("form-draft-loaded",{detail:{draft:e,source:"external",compatible:!0,warnings:[]},bubbles:!0,composed:!0})),void console.log("📥 External draft loaded successfully")}if(!this._draftStorageService.hasDraft())return void console.log("ℹ️ No saved draft found");const e=this._draftStorageService.loadDraft();if(!e)return void console.warn("⚠️ Failed to load draft");const{compatible:t,warnings:i}=this._draftStorageService.validateDraftCompatibility(e,this.periodStartDate,this.periodEndDate);i.length>0&&console.warn("⚠️ Draft compatibility warnings:",i),await this._restoreFromDraft(e),this.dispatchEvent(new CustomEvent("form-draft-loaded",{detail:{draft:e,compatible:t,warnings:i},bubbles:!0,composed:!0})),console.log("📥 Draft loaded successfully",{entries:e.formData.length,savedAt:e.metadata.savedAt,age:this._draftStorageService.getDraftAge()})}async _restoreFromDraft(e){var t;const{formData:i,metadata:o}=e;o.selectedRoleIds&&o.selectedRoleIds.length>0&&(this._selectedRoleIds=o.selectedRoleIds,console.log(`🔄 Restored ${this._selectedRoleIds.length} selected roles`)),o.typedMemberData&&(this._typedMemberData=o.typedMemberData,this._preservedTypedMemberData={},console.log("🔄 Restored typed member data")),o.repeatCounts&&(this._repeatCounts=o.repeatCounts,console.log("🔄 Restored repeat counts:",this._repeatCounts)),o.periodData&&(this._periodData=o.periodData,console.log("🔄 Restored custom field-level period data:",Object.keys(this._periodData).length,"concepts")),o.unitData&&(this._unitData=o.unitData,console.log("🔄 Restored custom field-level unit data:",Object.keys(this._unitData).length,"concepts")),o.decimalsData&&(this._decimalsData=o.decimalsData,console.log("🔄 Restored per-fact decimals data:",Object.keys(this._decimalsData).length,"concepts")),o.roleCompletedStates&&(this._roleCompletedStates=new Map(Object.entries(o.roleCompletedStates)),console.log("🔄 Restored role completed states:",Object.keys(o.roleCompletedStates).length,"roles")),o.hiddenColumns&&(this._hiddenColumnIds=new Map(Object.entries(o.hiddenColumns).map(([e,t])=>[e,new Set(t)])),console.log("🔄 Restored hidden columns for",this._hiddenColumnIds.size,"sections")),o.totalManuallyEditedData&&(this._totalManuallyEditedData=o.totalManuallyEditedData,console.log("🔄 Restored total manually-edited data:",Object.keys(this._totalManuallyEditedData).length,"concepts")),o.periodPreferences?this._skipPeriodPreferencesRestore?console.log("⏭️ Skipping period preferences restoration - using new filter selections"):(this._periodPreferences=o.periodPreferences,console.log("🔄 Restored period preferences (including previous year settings):",this._periodPreferences),this.xbrlInput&&(console.log("🔄 Rebuilding schema with restored period preferences..."),this._currentSchema=T.buildFormSchema(this.xbrlInput,this.periodStartDate,this.periodEndDate,this.language,this._periodPreferences),this._allSections=[...this._currentSchema.sections],console.log("✅ Schema rebuilt with restored period preferences"),console.log("🔄 Applying custom period data to schema fields..."),this._applyCustomPeriodDataToFields(),o.customColumns&&o.customColumns.length>0&&(this._mergeAdditionalCustomColumns(o.customColumns),console.log(`🔄 Merged ${o.customColumns.length} additional custom columns`)))):o.customColumns&&o.customColumns.length>0&&(this._restoreCustomColumns(o.customColumns),console.log(`🔄 Restored ${o.customColumns.length} custom columns`));const r={},n={},a={};i.forEach(e=>{let{conceptId:t,draftInstanceId:i,value:o,columnId:s,period:l,unit:d}=e;if(!s&&l&&(s=this._inferColumnIdFromPeriod(l,t),!s))return void console.warn(`⚠️ Could not infer columnId for concept ${t}, skipping...`);const c=i||t,p=c.includes("__repeat_")?c.split("__repeat_")[0]:c,u=this._findActualConceptId(p),h=c.includes("__repeat_")?`${u||p}__repeat_${c.split("__repeat_")[1]}`:u||c;r[h]||(r[h]={}),r[h][s]=o,console.log(`📦 Restored: ${h}[${s}] = ${o}${c!==t?" (repeat instance)":""}`),l&&(n[h]||(n[h]={}),"instant"===l.type?(n[h][s]={instantDate:l.date},console.log(`📅 [Restore Period] Extracted instant date for ${h}/${s}: ${l.date}`)):"duration"===l.type&&(n[h][s]={startDate:l.startDate,endDate:l.endDate},console.log(`📅 [Restore Period] Extracted duration dates for ${h}/${s}: ${l.startDate} - ${l.endDate}`))),d&&(a[h]||(a[h]={}),a[h][s]=d,console.log(`🏷️ [Restore Unit] Extracted unit for ${h}/${s}: ${d}`))}),this._formData={...this._formData,...r},console.log(`🔄 Restored ${Object.keys(r).length} concepts with data`),this._seedLegacyManuallyEditedTotals(r),this._initializeGlobalDecimalsFromRoundingData(),this._periodData={...this._periodData,...o.periodData||{},...n},console.log(`📅 [Period Restore] Merged period data: ${Object.keys(this._periodData).length} concepts with custom periods`),console.log("📅 [Period Restore] Full _periodData after merge:",JSON.stringify(this._periodData,null,2)),this._unitData={...this._unitData,...o.unitData||{},...a},console.log(`🏷️ [Unit Restore] Merged unit data: ${Object.keys(this._unitData).length} concepts with custom units`),console.log("🏷️ [Unit Restore] Full _unitData after merge:",JSON.stringify(this._unitData,null,2)),this._correctLegacyPeriodStartInstantDates(),this._selectedRoleIds.length>0&&this._applyRoleFilter(),this._dirty=!0,this._touched.clear(),this._validateForm(),this._allSections=[...this._allSections],this.requestUpdate(),await this.updateComplete,await new Promise(e=>setTimeout(e,100));const s=(null==(t=this.shadowRoot)?void 0:t.querySelectorAll("input, textarea, select").length)||0;console.log(`🔍 Found ${s} fields in DOM after update`),s>0?this._populateFieldValues(r):console.error("❌ No fields found in DOM even after updateComplete"),console.log("✅ Draft restoration completed")}_findActualConceptId(e){for(const t of this._allSections){const i=this._findActualConceptIdInTree(t.concepts,e);if(i)return i}return null}_findActualConceptIdInTree(e,t){for(const i of e){if(i.originalConceptId===t||i.id===t)return i.id;if(i.children){const e=this._findActualConceptIdInTree(i.children,t);if(e)return e}}return null}_inferColumnIdFromPeriod(e,t){for(const i of this._allSections){if(this._findConceptInSection(i.concepts,t)&&i.columns){for(const o of i.columns){const i="instant"===e.type,r="duration"===e.type;if(i&&e.date){if(o.periodStartDate===e.date||o.periodStartDate===o.periodEndDate&&o.periodStartDate===e.date)return console.log(`✓ Inferred columnId: ${o.id} for concept ${t}`),o.id}else if(r&&e.startDate&&e.endDate&&o.periodStartDate===e.startDate&&o.periodEndDate===e.endDate)return console.log(`✓ Inferred columnId: ${o.id} for concept ${t}`),o.id}if("instant"===e.type){const e=i.columns.find(e=>"instant"===e.id);if(e)return e.id}else{const e=i.columns.find(e=>"duration"===e.id);if(e)return e.id}}}return null}_findConceptInSection(e,t){for(const i of e){if(i.id===t||i.originalConceptId===t)return i;if(i.children){const e=this._findConceptInSection(i.children,t);if(e)return e}}return null}_populateFieldValues(e){let t=0,i=0;console.log("🔍 Starting field population..."),console.log("📦 Form data to populate:",e),Object.keys(e).forEach(o=>{const r=e[o];Object.keys(r).forEach(e=>{var n,a;const s=r[e],l=`${o}__${e}`;console.log(`🔍 Looking for field: ${l}`);const d=null==(n=this.shadowRoot)?void 0:n.querySelector(`#${CSS.escape(l)}`);d?(d instanceof HTMLInputElement||d instanceof HTMLTextAreaElement||d instanceof HTMLSelectElement)&&("checkbox"===d.type?d.checked=Boolean(s):d.value=null!=s?String(s):"",console.log(` ✅ Populated field ${l} with value:`,s),t++):(console.warn(` ❌ Field element NOT FOUND: ${l}`),console.warn(" Available fields in DOM:",Array.from((null==(a=this.shadowRoot)?void 0:a.querySelectorAll("input, textarea, select"))||[]).map(e=>e.id).filter(e=>e.includes(o.split("__")[0]))),i++)})}),console.log(`✅ Field population complete: ${t} populated, ${i} not found`)}_seedLegacyManuallyEditedTotals(e){const t={...this._totalManuallyEditedData};let i=!1;const o=r=>{var n;for(const a of r){if(E(a.preferredLabel)){const o=e[a.id];if(o)for(const e of Object.keys(o)){const r=o[e];null==r||""===r||void 0!==(null==(n=t[a.id])?void 0:n[e])||(t[a.id]={...t[a.id]||{},[e]:!0},i=!0)}}a.children&&a.children.length>0&&o(a.children)}};for(const r of this._allSections)o(r.concepts||[]);i&&(this._totalManuallyEditedData=t,console.log("🔒 [JDF-058] Seeded manual-edit protection for pre-existing total values in legacy draft"))}_restoreCustomColumns(e){const t=new Map;e.forEach(e=>{t.has(e.sectionId)||t.set(e.sectionId,[]),t.get(e.sectionId).push(e)}),this._allSections.forEach(e=>{var i;const o=t.get(e.id);if(o){if(e.columns=o.map(e=>{const t={id:e.columnId,title:e.label,description:e.description,type:e.dimensionData?"dimension":"base",periodStartDate:e.startDate||e.date,periodEndDate:e.endDate||e.date,dimensionData:e.dimensionData,order:0,removable:"duration"!==e.columnId&&"instant"!==e.columnId,periodType:e.periodType};return console.log(`📅 [Draft Restore] Restoring column ${e.columnId}: title=${t.title}, description=${t.description}, startDate=${t.periodStartDate}, endDate=${t.periodEndDate}, periodType=${t.periodType}`),t}),(null==(i=this.xbrlInput)?void 0:i.datatypes)&&!e.datatypes){const t=Array.isArray(this.xbrlInput.datatypes)?this.xbrlInput.datatypes:this.xbrlInput.datatypes.concepts||[];e.datatypes=t,console.log(`✅ [Draft Restore] Attached ${t.length} datatypes to section ${e.id}`)}else e.datatypes?console.log(`ℹ️ [Draft Restore] Section ${e.id} already has ${e.datatypes.length} datatypes`):console.warn(`⚠️ [Draft Restore] No datatypes available for section ${e.id}`);this._regenerateFieldsForSection(e),console.log(` └─ Restored ${o.length} columns for section ${e.id}`)}}),this._currentSchema&&(this._currentSchema={...this._currentSchema,sections:this._allSections})}_mergeAdditionalCustomColumns(e){const t=new Map;e.forEach(e=>{e.columnId.startsWith("col-")&&(t.has(e.sectionId)||t.set(e.sectionId,[]),t.get(e.sectionId).push(e))}),this._allSections.forEach(e=>{var i;const o=t.get(e.id);if(o&&o.length>0){if(e.columns||(e.columns=[]),(null==(i=this.xbrlInput)?void 0:i.datatypes)&&!e.datatypes){const t=Array.isArray(this.xbrlInput.datatypes)?this.xbrlInput.datatypes:this.xbrlInput.datatypes.concepts||[];e.datatypes=t,console.log(`✅ [Merge Custom] Attached ${t.length} datatypes to section ${e.id}`)}else e.datatypes?console.log(`ℹ️ [Merge Custom] Section ${e.id} already has ${e.datatypes.length} datatypes`):console.warn(`⚠️ [Merge Custom] No datatypes available for section ${e.id}`);o.forEach(t=>{console.log(`📅 [Merge Custom Column] Column ${t.columnId}: col.startDate=${t.startDate}, col.endDate=${t.endDate}, col.date=${t.date}, col.periodType=${t.periodType}`);if(!e.columns.find(e=>e.id===t.columnId)){const i={id:t.columnId,title:t.label,description:t.description,type:t.dimensionData?"dimension":"base",periodStartDate:t.startDate||t.date,periodEndDate:t.endDate||t.date,dimensionData:t.dimensionData,order:e.columns.length,removable:!0,periodType:t.periodType};console.log(`📅 [New Column Created] Column ${i.id}: title=${i.title}, description=${i.description}, periodStartDate=${i.periodStartDate}, periodEndDate=${i.periodEndDate}, periodType=${i.periodType}`),e.columns.push(i),console.log(` └─ Added custom column ${t.columnId} to section ${e.id}`)}}),this._regenerateFieldsForSection(e)}}),this._currentSchema&&(this._currentSchema={...this._currentSchema,sections:this._allSections})}_applyCustomPeriodDataToFields(){if(!this._periodData||0===Object.keys(this._periodData).length)return void console.log("ℹ️ No custom period data to apply");let e=0;const t=i=>{i.forEach(i=>{if(this._periodData[i.id]){const t=this._periodData[i.id];i.fields&&i.fields.forEach(o=>{const r=t[o.columnId];r&&(r.startDate&&(o.periodStartDate=r.startDate),r.endDate&&(o.periodEndDate=r.endDate),r.instantDate&&(o.periodInstantDate=r.instantDate),e++,console.log(`✅ [Apply Period] Updated field ${i.id}/${o.columnId}: start=${o.periodStartDate}, end=${o.periodEndDate}, instant=${o.periodInstantDate}`))})}i.children&&i.children.length>0&&t(i.children)})};this._allSections.forEach(e=>{e.concepts&&e.concepts.length>0&&t(e.concepts)}),console.log(`📅 [Apply Period] Applied custom period data to ${e} fields`)}_regenerateFieldsForSection(e){if(!e.columns)return;const t=this._periodPreferences[e.id]||{showDuration:!0,showInstant:!0,showPreviousYear:!1},i=o=>{o.forEach(o=>{o.fields=[];this._shouldShowConceptBasedOnPeriodPreferences(o,t)&&e.columns.forEach(t=>{var i;const r=o.periodType,n=this._inferColumnPeriodType(t);if(o.abstract)return;const a=t.id.startsWith("col-"),s=t.id.startsWith("duration_")||t.id.startsWith("instant_")||t.id.startsWith("typed-"),l=!0===e.showPeriodControl;if(!(!n||"duration"===t.id||"default"===t.id||a&&l||s)&&r&&n&&r!==n)return void console.log(`⏭️ [Field Regeneration] Skipping field for ${o.id} in column ${t.id}: conceptPeriodType=${r}, columnPeriodType=${n}`);const d={id:`${o.id}_${t.id}`,conceptId:o.id,columnId:t.id,type:this._mapConceptTypeToFieldType(o.type),label:o.label,periodType:r,conceptType:o.type,periodStartDate:t.periodStartDate,periodEndDate:t.periodEndDate,periodInstantDate:"instant"===r?this._resolveInstantDate(this._getEffectivePeriodRole(o),void 0,t.periodStartDate,t.periodEndDate):void 0};if(null==(i=this._periodData[o.id])?void 0:i[t.id]){const e=this._periodData[o.id][t.id];e.startDate&&(d.periodStartDate=e.startDate),e.endDate&&(d.periodEndDate=e.endDate),e.instantDate&&(d.periodInstantDate=e.instantDate),console.log(`✅ [Field Regeneration] Applied custom period data to ${o.id}/${t.id}:`,e),console.log(`✅ [Field Regeneration] Field properties after apply: periodStartDate=${d.periodStartDate}, periodEndDate=${d.periodEndDate}, periodInstantDate=${d.periodInstantDate}`)}else console.log(`ℹ️ [Field Regeneration] No custom period data for ${o.id}/${t.id}. Checking _periodData:`,this._periodData[o.id]);(o.id.includes("DescriptionLocationNL")||t.id.startsWith("col-"))&&console.log(`📅 [Field Regeneration] Concept ${o.id}, Column ${t.id}: field.periodStartDate=${d.periodStartDate}, field.periodEndDate=${d.periodEndDate}, column.periodStartDate=${t.periodStartDate}`),o.fields.push(d)}),o.children&&i(o.children)})};i(e.concepts)}_shouldShowConceptBasedOnPeriodPreferences(e,t){return!!e.abstract||(!e.periodType||!("duration"===e.periodType&&!t.showDuration)&&!("instant"===e.periodType&&!t.showInstant))}_inferColumnPeriodType(e){return e.periodType?e.periodType:e.periodStartDate&&e.periodEndDate?e.periodStartDate===e.periodEndDate?"instant":"duration":e.periodStartDate&&!e.periodEndDate?"instant":void 0}_mapConceptTypeToFieldType(e){return e?e.includes("monetary")||e.includes("Monetary")?"number":e.includes("date")||e.includes("Date")?"date":e.includes("boolean")||e.includes("Boolean")?"boolean":e.includes("integer")||e.includes("Integer")||e.includes("decimal")||e.includes("Decimal")?"number":"text":"text"}_generateSubmissionData(){const e=[];if(!this._currentSchema)return e;this._currentSchema.sections.forEach(t=>{this._processConceptsForSubmission(t.concepts,e,t)}),this._includePreservedDataInSubmission(e);return this._removeDuplicateSubmissions(e)}_includePreservedDataInSubmission(e){Object.keys(this._preservedFormData).forEach(t=>{const i=this._preservedFormData[t];i&&Object.keys(i).forEach(o=>{const r=i[o];if(null!=r&&""!==r){const i=this._findConceptInAllSections(t);if(i){const n=this._findSectionForConcept(t);this._addConceptDataToSubmission(i,o,r,e,n||void 0)}}})}),console.log(`📤 Included preserved data in submission. Total entries: ${e.length}`)}_findConceptInAllSections(e){for(const t of this._allSections){const i=this._findConceptInSection(t.concepts,e);if(i)return i}return null}_findSectionForConcept(e){for(const t of this._allSections){if(this._findConceptInSection(t.concepts,e))return t}return null}_addConceptDataToSubmission(e,t,i,o,r){var n,a,s,l,d;const c=e.fields.find(e=>e.columnId===t);if(!c)return;const p="instant"===e.periodType,u=null==(n=this._periodData[e.id])?void 0:n[t],h=null==(a=this._unitData[e.id])?void 0:a[t],m=this._findColumnByIdInAllSections(t);console.log(`🔍 [Submission] Concept: ${e.id}, Column: ${t}, Field Period: ${u?JSON.stringify(u):"none"}, Unit: ${h||"none"}, Column Period: ${(null==m?void 0:m.periodStartDate)||"none"} - ${(null==m?void 0:m.periodEndDate)||"none"}`);const f=(null==u?void 0:u.startDate)||(null==m?void 0:m.periodStartDate)||c.periodStartDate||this.periodStartDate,g=(null==u?void 0:u.endDate)||(null==m?void 0:m.periodEndDate)||c.periodEndDate||this.periodEndDate,b=(null==u?void 0:u.instantDate)||c.periodInstantDate||g||f,v={conceptId:e.originalConceptId||e.id,columnId:t,value:i,period:{type:e.periodType||"duration",...p?{date:b}:{startDate:f,endDate:g}}};h&&(v.unit=h,console.log(`✅ [Submission] Adding unit to entry: ${h} for ${e.id}/${t}`));const y=null==(s=e.type)?void 0:s.toLowerCase().includes("monetary"),x=(null==(l=this._decimalsData[e.id])?void 0:l[t])||("INF"!==this.decimals?this.decimals:void 0);if(y&&x){const e=parseFloat(x);v.decimals=isNaN(e)?x:String(-Math.abs(e))}(null==(d=null==m?void 0:m.dimensionData)?void 0:d.memberLabel)&&(v.dimension=m.dimensionData.memberLabel),console.log("📤 [Submission Entry] Created entry:",JSON.stringify(v,null,2)),o.push(v)}_findColumnByIdInAllSections(e){for(const t of this._allSections)if(t.columns){const i=t.columns.find(t=>t.id===e);if(i)return i}}_removeDuplicateSubmissions(e){const t=new Map;return e.forEach(e=>{const i="instant"===e.period.type?e.period.date:`${e.period.startDate}_${e.period.endDate}`,o=`${e.conceptId}_${e.value}_${e.dimension||"no-dimension"}_${i}`;t.has(o)||t.set(o,e)}),Array.from(t.values())}_findColumnById(e){if(this._currentSchema)for(const t of this._currentSchema.sections)if(t.columns){const i=t.columns.find(t=>t.id===e);if(i)return i}}_findColumnByIdInSection(e,t){if(null==t?void 0:t.columns)return t.columns.find(t=>t.id===e)}_getTypedMemberNameForAxis(e,t){var i,o,r,n;if(!(null==(o=null==(i=this.xbrlInput)?void 0:i.hypercubes)?void 0:o[0]))return null;const a=null==t?void 0:t.id;if(!a)return null;const s=null==(r=this.xbrlInput.hypercubes[0].roles)?void 0:r.find(e=>e.roleId===a);if(!(null==s?void 0:s.items))return null;for(const l of s.items)if(l.dimensions){const t=l.dimensions.find(t=>t.id===e);if(null==(n=null==t?void 0:t.typedMember)?void 0:n.id)return t.typedMember.id}return null}_doesConceptApplyToTypedDimension(e,t,i){var o,r,n;if(!(null==(r=null==(o=this.xbrlInput)?void 0:o.hypercubes)?void 0:r[0]))return!1;const a=null==t?void 0:t.id;if(!a)return!1;const s=this.xbrlInput.hypercubes[0].roles.find(e=>e.roleId===a);if(!(null==(n=null==s?void 0:s.items)?void 0:n.length))return!1;for(const l of s.items){const t=e.originalConceptId||e.id;if(l.conceptIds&&l.conceptIds.includes(t)){const e=l.dimensions.some(e=>e.typedMember);return console.log(`🔍 [DynamicForm] Concept ${t} found in hypercube item. Has typed dimensions:`,e),e}}return console.log(`🔍 [DynamicForm] Concept ${e.originalConceptId||e.id} not found in any hypercube items for role ${a}`),!1}_getApplicableTypedDimensions(e,t){var i,o,r;if(!(null==(o=null==(i=this.xbrlInput)?void 0:i.hypercubes)?void 0:o[0])||!(null==t?void 0:t.id))return[];const n=this.xbrlInput.hypercubes[0].roles.find(e=>e.roleId===t.id);if(!(null==(r=null==n?void 0:n.items)?void 0:r.length))return[];const a=e.originalConceptId||e.id;for(const s of n.items)if(s.conceptIds&&s.conceptIds.includes(a)){const e=s.dimensions.filter(e=>e.typedMember).map(e=>e.id);return console.log(`🔍 [DynamicForm] Found applicable typed dimensions for concept ${a}:`,e),e}return[]}_processConceptsForSubmission(e,t,i){const o="Toelichting op de geconsolideerde jaarrekening - Financiële vaste activa: Deelnemingen: Volledig geconsolideerd: Specificatie",r=(null==i?void 0:i.title)||"Unknown";e.forEach(e=>{if(r===o&&(console.warn(`[DUPLICATE DEBUG] Processing concept ${e.originalConceptId||e.id} in target role`),e.fields&&(console.warn(`[DUPLICATE DEBUG] Concept has ${e.fields.length} fields`),e.fields.forEach((t,i)=>{var o;console.warn(`[DUPLICATE DEBUG] Field ${i}: columnId=${t.columnId}, current value=${null==(o=this._formData[e.id])?void 0:o[t.columnId]}`)}))),e.fields&&e.fields.length>1&&e.fields.forEach((e,t)=>{}),e.fields&&e.fields.length>0){e.fields.forEach(n=>{var a,s,l,d,c,p,u,h;const m=this._formData[e.id];let f=null==m?void 0:m[n.columnId];const g=n.conceptId||e.id.split("__").slice(0,-1).join("__")||e.id;if((null==f||""===f)&&this._isRoundingLevelConcept(g)&&!this._hasValidGlobalDecimals()){const t=this._findFactValueForField(e,n,i);null!=t&&""!==t&&(f=t)}if((null==f||""===f)&&this._effectiveMasterData){const e=null==(a=this._effectiveMasterData)?void 0:a[g];null!=e&&""!==e&&(f=e,console.warn(` 📦 [Submission] Using masterData for: ${g} [${n.columnId}] = ${JSON.stringify(f)}`))}if(null!=f&&""!==f){const a=this._findColumnByIdInSection(n.columnId,i),m=null==(s=this._periodData[e.id])?void 0:s[n.columnId],g={conceptId:e.id,draftInstanceId:e.id,columnId:n.columnId,value:f,period:{type:e.periodType||"duration"}};if("instant"===e.periodType){const t=this._resolveSubmissionInstantDate(e,n,m,a);g.period.date=t}else{const e=(null==m?void 0:m.startDate)||(null==a?void 0:a.periodStartDate)||n.periodStartDate||this.periodStartDate,t=(null==m?void 0:m.endDate)||(null==a?void 0:a.periodEndDate)||n.periodEndDate||this.periodEndDate;g.period.startDate=e,g.period.endDate=t}console.log(`🔍 [Submission] Concept: ${e.id}, Column: ${n.columnId}, Field Period: ${m?JSON.stringify(m):"none"}, Column Period: ${(null==a?void 0:a.periodStartDate)||"none"} - ${(null==a?void 0:a.periodEndDate)||"none"}, Used Period: ${"instant"===g.period.type?g.period.date:`${g.period.startDate} - ${g.period.endDate}`}`);const b=null==(l=this._unitData[e.id])?void 0:l[n.columnId];b?(g.unit=b,console.log(`✅ [Submission] Adding unit to entry: ${b} for ${e.id}/${n.columnId}`)):console.log(`⚠️ [Submission] No unit found in _unitData for ${e.id}/${n.columnId}. _unitData state:`,JSON.stringify(this._unitData,null,2));const v=null==(d=e.type)?void 0:d.toLowerCase().includes("monetary"),y=(null==(c=this._decimalsData[e.id])?void 0:c[n.columnId])||("INF"!==this.decimals?this.decimals:void 0);if(v&&y){const e=parseFloat(y);g.decimals=isNaN(e)?y:String(-Math.abs(e))}if("dimension"===(null==a?void 0:a.type)&&(null==(p=a.dimensionData)?void 0:p.dimensionIdKey)?(g.dimension=a.dimensionData.dimensionIdKey,console.log(`🔍 [DynamicForm] Using dimension key from field's column (${n.columnId}):`,a.dimensionData.dimensionIdKey)):console.log(`🔍 [DynamicForm] No dimension data found for field column ${n.columnId}. Column type: ${null==a?void 0:a.type}, has dimensionData: ${!!(null==a?void 0:a.dimensionData)}`),this._typedMemberData[n.columnId]){const t=this._getApplicableTypedDimensions(e,i);if(console.log(`🔍 [DynamicForm] Concept ${e.id} applicable typed dimensions:`,t),t.length>0){const e={},o=this._typedMemberData[n.columnId];t.forEach(t=>{if(o[t]){const r=this._getTypedMemberNameForAxis(t,i);e[t]={value:o[t],memberName:r||"Unknown"}}}),Object.keys(e).length>0?(g.typedMembers=e,console.log("🔍 [DynamicForm] Adding filtered typed members to submission:",e)):console.log("🔍 [DynamicForm] No typed member values found for applicable dimensions:",t)}else console.log(`🔍 [DynamicForm] Skipping typed members for concept ${e.id} - not applicable to this hypercube`)}else console.log(`🔍 [DynamicForm] No typed member data found for column ${n.columnId}. Available columns:`,Object.keys(this._typedMemberData)),a&&console.log("🔍 [DynamicForm] Column details:",{id:a.id,type:a.type,hasTypedMembers:null==(u=a.dimensionData)?void 0:u.hasTypedMembers,dimensionData:a.dimensionData});if(!g.typedMembers&&(null==(h=n.crossRoleTypedMembers)?void 0:h.length)){const t=`${e.id}__${n.columnId}`,i=this._typedMemberData[t];if(i){const t={};n.crossRoleTypedMembers.forEach(e=>{const o=i[e.axisId];null!=o&&""!==o&&(t[e.axisId]={value:o,memberName:e.typedMemberId})}),Object.keys(t).length>0&&(g.typedMembers=t,console.log(`🔍 [Submission] Adding cross-role typed members for ${e.id}/${n.columnId}:`,t))}}r===o&&console.warn("[DUPLICATE DEBUG] Final submission entry:",g),t.push(g)}});const n=this._repeatCounts[e.id]||0;if(n>0&&e.fields.some(e=>{var t;return null==(t=e.crossRoleTypedMembers)?void 0:t.length}))for(let o=1;o<=n;o++){const r=`${e.id}__repeat_${o}`;e.fields.forEach(o=>{var n,a,s,l,d;const c=null==(n=this._formData[r])?void 0:n[o.columnId];if(null==c||""===c)return;const p=this._findColumnByIdInSection(o.columnId,i),u=null==(a=this._periodData[r])?void 0:a[o.columnId],h={conceptId:e.id,draftInstanceId:r,columnId:o.columnId,value:c,period:{type:e.periodType||"duration"}};"instant"===e.periodType?h.period.date=this._resolveSubmissionInstantDate(e,o,u,p):(h.period.startDate=(null==u?void 0:u.startDate)||(null==p?void 0:p.periodStartDate)||o.periodStartDate||this.periodStartDate,h.period.endDate=(null==u?void 0:u.endDate)||(null==p?void 0:p.periodEndDate)||o.periodEndDate||this.periodEndDate);const m=null==(s=this._unitData[r])?void 0:s[o.columnId];if(m&&(h.unit=m),"dimension"===(null==p?void 0:p.type)&&(null==(l=p.dimensionData)?void 0:l.dimensionIdKey)&&(h.dimension=p.dimensionData.dimensionIdKey),null==(d=o.crossRoleTypedMembers)?void 0:d.length){const e=`${r}__${o.columnId}`,t=this._typedMemberData[e];if(t){const e={};o.crossRoleTypedMembers.forEach(i=>{const o=t[i.axisId];null!=o&&""!==o&&(e[i.axisId]={value:o,memberName:i.typedMemberId})}),Object.keys(e).length>0&&(h.typedMembers=e)}}t.push(h)})}}e.children&&this._processConceptsForSubmission(e.children,t,i)})}_handleReset(){this._formData={...this.initialData},this._touched.clear(),this._dirty=!1,this.hasUnsavedChanges=!1,this._submitted=!1,this._preservedFormData={},this._preservedTypedMemberData={},console.log("🔄 Form reset - all data and preserved data cleared"),this._validateForm(),this.requestUpdate(),this.dispatchEvent(new CustomEvent("form-reset",{detail:{},bubbles:!0}))}_getFormState(){return{data:this._formData,errors:this._errors,touched:this._touched,dirty:this._dirty,valid:this._valid,submitted:this._submitted}}_analyzeAllVisibleRoles(){if(this._currentSchema&&this._currentSchema.sections&&0!==this._currentSchema.sections.length){console.log(`🔍 Analyzing ${this._currentSchema.sections.length} visible roles for initial border status...`);for(const e of this._currentSchema.sections)this._analyzeAndLogRole(e.id);console.log("✅ Initial border status analysis complete for all visible roles")}else console.log("⏭️ No sections to analyze for initial border status")}_handleRoleContextMenu(e,t,i){e.preventDefault(),e.stopPropagation(),this._contextMenuX=e.clientX,this._contextMenuY=e.clientY,this._contextMenuRoleId=t,this._showRoleContextMenu=!0,console.log(`🖱️ Context menu opened for role: ${i} (ID: ${t})`),this.requestUpdate()}_closeRoleContextMenu(){this._showRoleContextMenu=!1,this._contextMenuRoleId=null,this.requestUpdate()}_handleRemoveRole(){if(!this._contextMenuRoleId)return void this._closeRoleContextMenu();const e=this._allSections.find(e=>e.id===this._contextMenuRoleId),t=(null==e?void 0:e.title)||"Unknown";if(console.log("🗑️ Removing role from side panel:"),console.log(` - Role ID: ${this._contextMenuRoleId}`),console.log(` - Role Title: ${t}`),Array.isArray(this._selectedRoleIds)&&(this._selectedRoleIds.length>0&&"object"==typeof this._selectedRoleIds[0]?this._selectedRoleIds=this._selectedRoleIds.filter(e=>e.roleId!==this._contextMenuRoleId):this._selectedRoleIds=this._selectedRoleIds.filter(e=>e!==this._contextMenuRoleId)),console.log(`✅ Role removed from _selectedRoleIds. Remaining roles: ${this._selectedRoleIds.length}`),this._activeSidePanelRoleId===this._contextMenuRoleId){const e=this._getRoleIdsArray();this._activeSidePanelRoleId=e.length>0?e[0]:null,console.log(`📌 Active role changed to: ${this._activeSidePanelRoleId||"None"}`)}this._applyRoleFilter(),this.dispatchEvent(new CustomEvent("role-removed",{detail:{roleId:this._contextMenuRoleId,roleTitle:t,remainingRolesCount:this._selectedRoleIds.length},bubbles:!0,composed:!0})),console.log(`✅ Role "${t}" successfully removed from side panel`),console.log("ℹ️ User can re-add this role using the Filter Roles dialog"),this._closeRoleContextMenu()}_handleRoleCompletedChange(e,t){t?this._roleCompletedStates.set(e,!0):this._roleCompletedStates.delete(e),this._roleCompletedStates=new Map(this._roleCompletedStates),this._handleSaveDraft("auto")}_handleSidePanelRoleClick(e){this._activeSidePanelRoleId&&this._activeSidePanelRoleId!==e&&this._analyzeAndLogRole(this._activeSidePanelRoleId),this._activeSidePanelRoleId=e}_analyzeAndLogRole(e){const t=this._allSections.find(t=>t.id===e);if(!t)return void console.warn(`⚠️ Section not found for roleId: ${e}`);console.warn("\n========================================"),console.warn(`🔍 ANALYZING ROLE: "${t.title}"`),console.warn("========================================"),this.masterData?console.warn("📦 masterData keys:",Object.keys(this.masterData)):console.warn("📦 masterData: NOT PROVIDED");const i=[];this._collectAllFields(t.concepts||[],new Set((t.columns||[]).map(e=>e.id)),t.columns||[],i);const o=this._roleHasErrors(e),r=i.filter(e=>e.isEmpty).length,n=i.filter(e=>!e.isEmpty).length;let a;console.warn("\n📈 SUMMARY:"),console.warn(` Total Fields: ${i.length}`),console.warn(` Filled: ${n}`),console.warn(` Empty: ${r}`),console.warn(` Has Errors: ${o}`),o?(a="INVALID",console.warn("\n🔴 RESULT: INVALID (contains validation errors)")):0===n?(a="UNTOUCHED",console.warn("\n⬜ RESULT: UNTOUCHED (no data entered)")):r>0?(a="INCOMPLETE",console.warn(`\n🟠 RESULT: INCOMPLETE (${r} field(s) blank)`)):(a="COMPLETE",console.warn("\n🟢 RESULT: COMPLETE (all fields filled)")),console.warn("========================================\n"),"INVALID"===a||("UNTOUCHED"===a?(this._roleBorderStatuses.set(e,"untouched"),this._roleBorderStatuses=new Map(this._roleBorderStatuses)):"INCOMPLETE"===a?(this._roleBorderStatuses.set(e,"incomplete"),this._roleBorderStatuses=new Map(this._roleBorderStatuses)):(this._roleBorderStatuses.set(e,"complete"),this._roleBorderStatuses=new Map(this._roleBorderStatuses)))}_collectAllFields(e,t,i,o){var r,n,a;for(const s of e)if(s.abstract)s.children&&s.children.length>0&&this._collectAllFields(s.children,t,i,o);else{if(s.fields&&s.fields.length>0){const e=s.fields.filter(e=>t.has(e.columnId));for(const t of e){const e=s.id,l=t.conceptId;let d=null==(r=this._formData[e])?void 0:r[t.columnId];void 0===d&&e!==l&&(d=null==(n=this._formData[l])?void 0:n[t.columnId]);const c=null==(a=this._effectiveMasterData)?void 0:a[l];(null==d||"string"==typeof d&&""===d.trim())&&void 0!==c&&(d=c,console.warn(` 📦 Using masterData value for: ${l} [${t.columnId}] = ${JSON.stringify(d)}`));let p=null==d||"string"==typeof d&&""===d.trim();if(p&&s.facts&&s.facts.length>0){const e=i.find(e=>e.id===t.columnId),o={conceptId:l,columnId:t.columnId,periodStartDate:t.periodStartDate||(null==e?void 0:e.periodStartDate),periodEndDate:t.periodEndDate||(null==e?void 0:e.periodEndDate),periodInstantDate:t.periodInstantDate||("instant"===t.periodType?t.periodEndDate||t.periodStartDate:void 0),periodType:t.periodType,dimensionData:null==e?void 0:e.dimensionData},r=De.findMatchingFact(s.facts,o);r&&null!==r.value&&void 0!==r.value&&""!==r.value&&(d=r.value,p=!1)}o.push({conceptId:l,columnId:t.columnId,value:d,isEmpty:p})}}s.children&&s.children.length>0&&this._collectAllFields(s.children,t,i,o)}}_handleSidePanelSearchInput(e){const t=e.target;this._sidePanelSearchQuery=t.value}_clearSidePanelSearch(){var e;this._sidePanelSearchQuery="";const t=null==(e=this.shadowRoot)?void 0:e.querySelector(".side-panel-search-input");t&&(t.value="",t.focus())}_toggleSidePanelCollapse(){this._sidePanelCollapsed=!this._sidePanelCollapsed}_isSectionBlank(e){const t=e.columns||this._columns,i=e=>{var o;for(const r of e){if(!r.abstract)for(const e of t){const t=null==(o=this._formData[r.id])?void 0:o[e.id];if(null!=t&&""!==t)return!0}if(r.children&&r.children.length>0&&i(r.children))return!0}return!1};return!i(e.concepts)}_getConceptSearchMatchIds(e){var t,i,o;const r=new Set;if(!e.trim()||!(null==(i=null==(t=this.xbrlInput)?void 0:t.presentation)?void 0:i.length))return r;const n=e.toLowerCase().trim(),a=e=>{var t;for(const i of e)r.add(i.id),(null==(t=i.children)?void 0:t.length)&&a(i.children)},s=e=>{var t,i,o,l;for(const d of e){let e=(null==(t=d.conceptName)?void 0:t.toLowerCase().includes(n))||(null==(i=d.id)?void 0:i.toLowerCase().includes(n));!e&&Array.isArray(d.labels)&&(e=d.labels.some(e=>{var t;return null==(t=e.label)?void 0:t.toLowerCase().includes(n)})),e?(r.add(d.id),(null==(o=d.children)?void 0:o.length)&&a(d.children)):(null==(l=d.children)?void 0:l.length)&&s(d.children)}};for(const l of this.xbrlInput.presentation)for(const e of l.roles||[])s((null==(o=e.presentationLinkbase)?void 0:o.concepts)||[]);return r}_isSectionConceptSearchMatch(e,t){if(0===t.size)return!1;const i=e=>{var o;for(const r of e){if(t.has(r.originalConceptId))return!0;if((null==(o=r.children)?void 0:o.length)&&i(r.children))return!0}return!1};return i(e.concepts)}_filterSidePanelSections(e){if(!this._sidePanelSearchQuery.trim())return e;const t=this._sidePanelSearchQuery.toLowerCase().trim();return e.filter(e=>{var i,o,r;const n=e.title.toLowerCase().includes(t),a=e.id.toLowerCase().includes(t),s=(null==(i=e.description)?void 0:i.toLowerCase().includes(t))||!1,l=(null==(r=null==(o=e.metadata)?void 0:o.roleURI)?void 0:r.toLowerCase().includes(t))||!1;return n||a||s||l})}_renderAdminModeContent(t){var i,o;if(!t)return e.html`
3892
+ `,bt([S({type:Boolean,reflect:!0})],exports.JupiterConfirmDialog.prototype,"open",2),bt([S({type:String})],exports.JupiterConfirmDialog.prototype,"heading",2),bt([S({type:String})],exports.JupiterConfirmDialog.prototype,"message",2),bt([S({type:String})],exports.JupiterConfirmDialog.prototype,"confirmLabel",2),bt([S({type:String})],exports.JupiterConfirmDialog.prototype,"cancelLabel",2),exports.JupiterConfirmDialog=bt([t("jupiter-confirm-dialog")],exports.JupiterConfirmDialog);var gt=Object.defineProperty,vt=Object.getOwnPropertyDescriptor,yt=(e,t,i,o)=>{for(var r,n=o>1?void 0:o?vt(t,i):t,a=e.length-1;a>=0;a--)(r=e[a])&&(n=(o?r(t,i,n):r(n))||n);return o&&n&&gt(t,i,n),n};exports.JupiterDynamicForm=class extends e.LitElement{constructor(){super(...arguments),this.config={},this.initialData={},this.disabled=!1,this.readonly=!1,this.calculationEnabled=!1,this.formulaEnabled=!1,this.tableLayoutEnabled=!1,this.periodStartDate="2025-01-01",this.periodEndDate="2025-12-31",this.language="en",this.reportingLanguage="en",this.numberLocale="",this.display="accordion",this.mode="inputForm",this.roleFilterAxes=[],this.showLastValidationResultBtn=!1,this.isDraftSaving=!1,this.hasUnsavedChanges=!1,this.defaultUnits=[],this.decimals="INF",this._formData={},this._draftLoaded=!1,this._preservedFormData={},this._periodData={},this._preservedPeriodData={},this._unitData={},this._preservedUnitData={},this._decimalsData={},this._totalManuallyEditedData={},this._effectiveMasterData=void 0,this._typedMemberData={},this._preservedTypedMemberData={},this._repeatCounts={},this._hiddenColumnIds=new Map,this._columns=[],this._errors=[],this._touched=new Set,this._dirty=!1,this._valid=!0,this._submitted=!1,this._xbrlFormErrors=[],this._calculationWarnings=new Map,this._showErrorPopup=!1,this._showTypedDimensionWarning=!1,this._typedDimensionWarningFacts=[],this._submitDisabled=!1,this._allSections=[],this._selectedRoleIds=[],this._showFilterDialog=!1,this._revealRolePrompt=null,this._showFactsOnly=!1,this._conceptSearchText="",this._lastFocusedFieldIdentity=null,this._periodPreferences={},this._activeSidePanelRoleId=null,this._sidePanelSearchQuery="",this._sidePanelCollapsed=!1,this._adminRoleConfigs={},this._roleBorderStatuses=new Map,this._roleCompletedStates=new Map,this._showRoleContextMenu=!1,this._contextMenuX=0,this._contextMenuY=0,this._contextMenuRoleId=null,this._validationStatus="idle",this._validationDotCount=1,this._validationDotIntervalId=null,this._formulaValidationResults=[],this._showFormulaValidationDialog=!1,this._formulaValidationService=new _e,this._skipDraftLoading=!1,this._skipPeriodPreferencesRestore=!1,this._autoSaveTimer=null,this._lastAutoSaveSnapshot="",this._autoSaveBaselineSeeded=!1,this._lastSavedDraftSnapshot=""}connectedCallback(){super.connectedCallback(),this.addEventListener("period-change",e=>{const t=e;t.detail,this._handlePeriodChange(t)}),this.addEventListener("unit-change",e=>{const t=e;t.detail,this._handleUnitChange(t)}),this.addEventListener("decimals-change",e=>{this._handleDecimalsChange(e)}),this.addEventListener("field-blur",e=>{const t=e;this._handleFieldBlur(t)}),this.addEventListener("calculation-mismatch-changed",e=>{this._handleCalculationMismatchChanged(e)}),this.addEventListener("total-manually-edited",e=>{const{conceptId:t,columnId:i}=e.detail,o={...this._totalManuallyEditedData};o[t]={...o[t],[i]:!0},this._totalManuallyEditedData=o}),this.addEventListener("calculation-total-auto-populated",e=>{const{conceptId:t,columnId:i,value:o}=e.detail,r=this._writeFormDataValue(t,i,o);this._touched.add(`${t}-${i}`),this._dirty=!0,this.hasUnsavedChanges=!0,this._validateForm(),this.requestUpdate(),this.dispatchEvent(new CustomEvent("field-change",{detail:{fieldId:t,conceptId:t,columnId:i,value:o,oldValue:r,source:"auto-calculated"},bubbles:!0}))}),this.addEventListener("focusin",e=>{var t;const i=e.composedPath().find(e=>e instanceof HTMLInputElement||e instanceof HTMLSelectElement||e instanceof HTMLTextAreaElement);if(!i)return;let o=i;for(;o&&"jupiter-form-field"!==(null==(t=o.tagName)?void 0:t.toLowerCase());){const e=o.getRootNode();o=e instanceof ShadowRoot?e.host:null}const r=o;(null==r?void 0:r.conceptId)&&(null==r?void 0:r.columnId)&&(this._lastFocusedFieldIdentity={conceptId:r.conceptId,columnId:r.columnId})}),document.addEventListener("click",()=>{this._showRoleContextMenu&&(this._showRoleContextMenu=!1,this.requestUpdate())}),this._autoSaveTimer=setInterval(()=>{const e=JSON.stringify(this._formData);if(!this._autoSaveBaselineSeeded)return this._lastAutoSaveSnapshot=e,void(this._autoSaveBaselineSeeded=!0);e!==this._lastAutoSaveSnapshot&&(this._lastAutoSaveSnapshot=e,this._handleSaveDraft("auto"))},3e4),this._initializeForm()}disconnectedCallback(){super.disconnectedCallback(),null!==this._autoSaveTimer&&(clearInterval(this._autoSaveTimer),this._autoSaveTimer=null),null!==this._validationDotIntervalId&&(clearInterval(this._validationDotIntervalId),this._validationDotIntervalId=null),this._settleRevealRolePrompt(!1)}_seedAutoSaveBaseline(){this._lastAutoSaveSnapshot=JSON.stringify(this._formData),this._autoSaveBaselineSeeded=!0}updated(e){e.has("hasUnsavedChanges")&&this.dispatchEvent(new CustomEvent("has-unsaved-changes-change",{detail:{hasUnsavedChanges:this.hasUnsavedChanges},bubbles:!0})),(e.has("decimals")||e.has("masterData"))&&this._computeEffectiveMasterData(),e.has("language")&&E.setLanguage(this.language),(e.has("xbrlInput")||e.has("defaultUnits"))&&this.xbrlInput&&this.defaultUnits&&this.defaultUnits.length>0&&this._applyDefaultUnitsToDatatypes(),(e.has("xbrlInput")||e.has("schema")||e.has("language")||e.has("periodStartDate")||e.has("periodEndDate")||e.has("roleFilterAxes"))&&this._initializeForm()}_applyDefaultUnitsToDatatypes(){var e;if(!(null==(e=this.xbrlInput)?void 0:e.datatypes)||!this.defaultUnits||0===this.defaultUnits.length)return;this.defaultUnits;const t=Array.isArray(this.xbrlInput.datatypes)?this.xbrlInput.datatypes:this.xbrlInput.datatypes.concepts;t&&0!==t.length?this.defaultUnits.forEach(e=>{Object.entries(e).forEach(([e,i])=>{const o=t.find(t=>t.type===e||t.id===e);if(o&&o.units&&o.units.length>0){const t=o.units.find(e=>e.id===i);t?(o.units.forEach(e=>e.isDefault=!1),t.isDefault=!0):console.warn(`⚠️ [DynamicForm] Unit "${i}" not found in datatype "${e}"`)}else console.warn(`⚠️ [DynamicForm] Datatype "${e}" not found or has no units`)})}):console.warn("⚠️ [DynamicForm] No datatypes found to apply defaults to")}_initializeForm(){var e;if(this._draftStorageService||(this._draftStorageService=new R(!1)),this.xbrlInput)try{if(this.xbrlInput,this.periodStartDate,this.periodEndDate,this.language,this._initializePeriodPreferencesFromData(),this._applyAxisFilterToPeriodPreferences(),this._applyDimensionShowPreviousYear(),this._periodPreferences,this._currentSchema=k.buildFormSchema(this.xbrlInput,this.periodStartDate,this.periodEndDate,this.language,this._periodPreferences),this._currentSchema.sections.length,this._allSections=[...this._currentSchema.sections],Array.isArray(this._selectedRoleIds)&&this._selectedRoleIds.length>0&&"object"==typeof this._selectedRoleIds[0]){const e=this._selectedRoleIds,t=new Map;e.forEach(e=>{t.set(e.roleId,e.order)}),this._allSections=[...this._allSections].sort((e,i)=>(t.get(e.id)??999)-(t.get(i.id)??999)),this._allSections.map(e=>e.title)}if(0===this._selectedRoleIds.length){const e=this.roleFilterAxes&&this.roleFilterAxes.length>0?this._filterRolesByAxisConfig(this._allSections):this._allSections;this._selectedRoleIds=e.map(e=>e.id),this._selectedRoleIds.length,this._allSections.length}this._applyRoleFilter(),this._columns=[{id:"base",title:"Value",description:"Base values for concepts",type:"base",order:0,removable:!1}]}catch(t){console.error("❌ Error building form from XBRL input:",t),this._currentSchema=this._getDefaultSchema(),this._allSections=[],this._selectedRoleIds=[],this._columns=this._getDefaultColumns()}else this.schema?(this._currentSchema=this.schema,this._allSections=[...this.schema.sections],this._selectedRoleIds=this._allSections.map(e=>e.id),this._columns=this._getDefaultColumns()):(this._currentSchema=this._getDefaultSchema(),this._allSections=[],this._selectedRoleIds=[],this._columns=this._getDefaultColumns());this._formData={...this.initialData},(null==(e=this.xbrlInput)?void 0:e.initialData)&&(this._formData={...this._formData,...this.xbrlInput.initialData}),this._initializeGlobalDecimalsFromRoundingData(),this._extractTypedMembersFromFacts(),this._skipDraftLoading?(this._seedAutoSaveBaseline(),this._analyzeAllVisibleRoles()):this._loadDraftIfExists().then(()=>{this._seedAutoSaveBaseline(),this._analyzeAllVisibleRoles()}).catch(()=>{this._seedAutoSaveBaseline(),this._analyzeAllVisibleRoles()}),this._validateForm()}_extractTypedMembersFromFacts(){var e;(null==(e=this._currentSchema)?void 0:e.sections)&&(this._currentSchema.sections.forEach(e=>{this._extractTypedMembersFromConcepts(e.concepts||[],e)}),this._typedMemberData)}_extractTypedMembersFromConcepts(e,t){e.forEach(e=>{e.facts&&e.facts.length>0&&(e.id,e.facts.length,e.facts.forEach(i=>{if(i.dimensions&&Array.isArray(i.dimensions)){const o=i.dimensions.filter(e=>"typed"===e.dimensionType&&e.typedMemberValue);if(o.length>0){o.length,i.name,o.map(e=>({dimension:e.dimension,typedMemberValue:e.typedMemberValue}));const r=this._findColumnWithTypedMembers(i,e,t);r?(r.id,o.forEach(i=>{var o,n;const a=this._normalizeAxisId(i.dimension),s=null==(n=null==(o=r.dimensionData)?void 0:o.typedMembers)?void 0:n.find(e=>e.axisId===a||this._normalizeAxisId(e.axisId)===a);if(s){const o=this._scopedColumnKey(t.id,r.id);this._typedMemberData[o]||(this._typedMemberData[o]={});const n=s.axisId;this._typedMemberData[o][n]=i.typedMemberValue,t.id,e.id,r.id,i.typedMemberValue}else console.warn(`⚠️ [DynamicForm] Typed member not found for axis: ${a}`)})):console.warn("⚠️ [DynamicForm] No matching column found for fact with typed dimensions")}}})),e.children&&e.children.length>0&&this._extractTypedMembersFromConcepts(e.children,t)})}_findColumnWithTypedMembers(e,t,i){var o;if(!t.fields||0===t.fields.length)return null;const r=i.columns||[];if(0===r.length)return null;for(const n of t.fields){const t=r.find(e=>e.id===n.columnId);if(t&&(null==(o=t.dimensionData)?void 0:o.hasTypedMembers)){const i=(e.dimensions||[]).filter(e=>"explicit"===e.dimensionType),o=t.dimensionData.combinations||[];if(0===i.length||i.length===o.length&&i.every(e=>o.some(t=>this._normalizeAxisId(e.dimension)===this._normalizeAxisId(t.axisId)&&this._normalizeMemberId(e.member)===this._normalizeMemberId(t.memberId))))return t}}return null}_findColumnForFactDimensions(e,t,i){if(!t.fields||0===t.fields.length)return t.id,null;const o=i.columns||[];if(0===o.length)return i.id,null;for(const r of t.fields){const t=o.find(e=>e.id===r.columnId);if(t&&t.dimensionData){const i=e.dimensions||[],o=t.dimensionData.combinations||[];t.id,i.map(e=>({axis:e.dimension,member:e.member,type:e.dimensionType})),o.map(e=>({axis:e.axisId,member:e.memberId}));if(o.every(e=>i.some(t=>{const i=this._normalizeAxisId(t.dimension)===this._normalizeAxisId(e.axisId);if("explicit"===t.dimensionType){const o=this._normalizeMemberId(t.member)===this._normalizeMemberId(e.memberId);return i&&o}return"typed"===t.dimensionType&&i})))return t}}return null}_normalizeAxisId(e){return e?e.includes(":")?e.split(":").pop()||e:e.includes("_")&&e.split("_").pop()||e:""}_normalizeMemberId(e){return e?e.includes(":")?e.split(":").pop()||e:e.includes("_")&&e.split("_").pop()||e:""}_getDefaultSchema(){return{version:"1.0",formId:"default-form",title:"Dynamic Form",description:"Please provide form schema or XBRL input data",sections:[]}}_getDefaultColumns(){return[{id:"base",title:"Value",description:"Base values for concepts",type:"base",order:0,removable:!1}]}_initializePeriodPreferencesFromData(){var e,t,i;if(!(null==(i=null==(t=null==(e=this.xbrlInput)?void 0:e.presentation)?void 0:t[0])?void 0:i.roles))return;const o={...this._periodPreferences};this.xbrlInput.presentation[0].roles.forEach(e=>{if(!o[e.id]){const t=!0===e.showPreviousYear,i=void 0===e.instant||!0===e.instant,r=void 0===e.duration||!0===e.duration;o[e.id]={showDuration:r,showInstant:i,showPreviousYear:t}}}),this._periodPreferences=o}_applyAxisFilterToPeriodPreferences(){var e,t,i,o;if(!this.roleFilterAxes||0===this.roleFilterAxes.length)return;if(!(null==(i=null==(t=null==(e=this.xbrlInput)?void 0:e.hypercubes)?void 0:t[0])?void 0:i.roles))return;const r=this.xbrlInput.hypercubes[0].roles,n={...this._periodPreferences};for(const a of r){const e=a.roleId,t=n[e];if((null==t?void 0:t.dimensionSelections)&&t.dimensionSelections.length>0)continue;const i=[];for(const r of this.roleFilterAxes)for(const e of a.items||[]){if(null==(o=e.dimensions)?void 0:o.find(e=>e.id===r.id||r.conceptName&&e.conceptName===r.conceptName)){i.push({dimensionId:r.id,dimensionLabel:r.conceptName||r.id,selectedMemberIds:r.members.filter(e=>!0===e.available).map(e=>e.id)});break}}i.length>0&&(n[e]={showDuration:(null==t?void 0:t.showDuration)??!0,showInstant:(null==t?void 0:t.showInstant)??!0,showPreviousYear:(null==t?void 0:t.showPreviousYear)??!1,dimensionSelections:i})}this._periodPreferences=n}_applyDimensionShowPreviousYear(){var e,t,i,o,r,n;if("admin"!==this.mode)return;const a=!(!this.dynaformsFacts||!this.dynaformsMetadata),s=(null==(e=this._draftStorageService)?void 0:e.hasDraft())??!1;if(a||s)return;const l=new Set;null==(r=null==(o=null==(i=null==(t=this.xbrlInput)?void 0:t.presentation)?void 0:i[0])?void 0:o.roles)||r.forEach(e=>{!1===e.showPreviousYear&&l.add(e.id)});const d={...this._periodPreferences};let c=!1;for(const p of Object.keys(d)){if(l.has(p))continue;const e=d[p];if(e.showPreviousYear)continue;((null==(n=e.dimensionSelections)?void 0:n.some(e=>e.selectedMemberIds&&e.selectedMemberIds.length>0))??!1)&&(d[p]={...e,showPreviousYear:!0},c=!0)}c&&(this._periodPreferences=d)}_getRoleIdsArray(){return Array.isArray(this._selectedRoleIds)&&0!==this._selectedRoleIds.length?"string"==typeof this._selectedRoleIds[0]?this._selectedRoleIds:this._selectedRoleIds.map(e=>e.roleId):[]}_applyRoleFilter(){if(!this._currentSchema||!this._allSections.length)return;const e=this._getRoleIdsArray();if(e.length,this._allSections.length,0===e.length)return this._currentSchema={...this._currentSchema,sections:[]},void this.requestUpdate();this._preserveDataForHiddenSections();const t=this._allSections.filter(t=>e.includes(t.id)),i=this._sortSectionsByCustomOrder(t);i.length,i.map(e=>e.title),this._restoreDataForVisibleSections(i),this._currentSchema={...this._currentSchema,sections:i},this._currentSchema.sections.length,this.requestUpdate()}_sortSectionsByCustomOrder(e){if(Array.isArray(this._selectedRoleIds)&&this._selectedRoleIds.length>0&&"object"==typeof this._selectedRoleIds[0]){const t=this._selectedRoleIds,i=new Map;return t.forEach(e=>{i.set(e.roleId,e.order)}),[...e].sort((e,t)=>(i.get(e.id)??999)-(i.get(t.id)??999))}return e}_filterRolesByAxisConfig(e){var t;if(!this.roleFilterAxes||0===this.roleFilterAxes.length)return e;if(!(null==(t=this.xbrlInput)?void 0:t.hypercubes)||0===this.xbrlInput.hypercubes.length)return e;const i=this.xbrlInput.hypercubes[0];return e.filter(e=>{var t;const o=null==(t=i.roles)?void 0:t.find(t=>t.roleId===e.id);if(!o||!o.items||0===o.items.length)return!0;for(const i of this.roleFilterAxes){const e=new Set(i.members.filter(e=>!0===e.available).map(e=>e.id));let t=!1,r=!1;for(const n of o.items){if(!n.dimensions||0===n.dimensions.length)continue;const o=n.dimensions.find(e=>e.id===i.id||i.conceptName&&e.conceptName===i.conceptName);if(o){if(t=!0,o.members)for(const t of o.members)if(e.has(t.id)){r=!0;break}if(r)break}}if(t&&!r)return!1}return!0})}_preserveDataForHiddenSections(){var e;const t=(null==(e=this._currentSchema)?void 0:e.sections.map(e=>e.id))||[],i=this._getRoleIdsArray();t.filter(e=>!i.includes(e)).forEach(e=>{const t=this._allSections.find(t=>t.id===e);t&&this._preserveSectionData(t)})}_restoreDataForVisibleSections(e){e.forEach(e=>{this._restoreSectionData(e)}),e.length}_preserveSectionData(e){e.concepts.forEach(t=>{this._preserveConceptData(t,e.id)})}_preserveConceptData(e,t){this._formData[e.id]&&(this._preservedFormData[e.id]={...this._formData[e.id]}),e.fields.forEach(i=>{const o=this._scopedColumnKey(t,i.columnId);this._typedMemberData[o]&&(this._preservedTypedMemberData[o]={...this._typedMemberData[o]});const r=`${e.id}__${i.columnId}`;this._typedMemberData[r]&&(this._preservedTypedMemberData[r]={...this._typedMemberData[r]})}),e.children&&e.children.forEach(e=>{this._preserveConceptData(e,t)})}_restoreSectionData(e){e.concepts.forEach(t=>{this._restoreConceptData(t,e.id)})}_restoreConceptData(e,t){this._preservedFormData[e.id]&&(this._formData[e.id]={...this._preservedFormData[e.id]}),e.fields.forEach(i=>{const o=this._scopedColumnKey(t,i.columnId);this._preservedTypedMemberData[o]&&(this._typedMemberData[o]={...this._preservedTypedMemberData[o]});const r=`${e.id}__${i.columnId}`;this._preservedTypedMemberData[r]&&(this._typedMemberData[r]={...this._preservedTypedMemberData[r]})}),e.children&&e.children.forEach(e=>{this._restoreConceptData(e,t)})}_shouldShowFilterButton(){return!0}get _hasActiveAdvancedFilters(){return this._showFactsOnly||this._conceptSearchText.trim().length>0}get _footerVisibleRoleCount(){return this._hasActiveAdvancedFilters&&this._currentSchema?this._getSidePanelVisibleSections(this._currentSchema).length:this._selectedRoleIds.length}_analyzeConceptFilterMatches(e,t){const i=e=>(e.includes(":")?e.split(":").pop():e).toLowerCase(),o=this._conceptSearchText.trim().toLowerCase();let r=0,n="",a="",s="",l="";const d=e=>{var c;for(const p of e){if(t.has(p.originalConceptId)){r++;const e=i(p.name)===o;e&&p.abstract&&!a?a=p.label:!e||p.abstract||n?p.abstract&&!l?l=p.label:p.abstract||s||(s=p.label):n=p.label}(null==(c=p.children)?void 0:c.length)&&d(p.children)}};for(const c of e)d(c.concepts);return{count:r,label:n||a||s||l||this._conceptSearchText}}_renderActiveFilterBanner(t){if(!this._hasActiveAdvancedFilters)return"";const i=this._conceptSearchText.trim().length>0?(()=>{const e=this._getConceptSearchMatchIds(this._conceptSearchText),{count:i,label:o}=this._analyzeConceptFilterMatches(t,e);return E.t("filter.bannerConcept",{concept:o,count:i})})():E.t("filter.bannerFactsOnly");return e.html`
3893
+ <div class="active-filter-banner">
3894
+ <span class="active-filter-banner-text">${i}</span>
3895
+ <button
3896
+ type="button"
3897
+ class="active-filter-banner-clear"
3898
+ @click="${this._handleClearAdvancedFilters}"
3899
+ >${E.t("filter.showAll")}</button>
3900
+ </div>
3901
+ `}_handleClearAdvancedFilters(){const e=this._lastFocusedFieldIdentity;this._showFactsOnly=!1,this._conceptSearchText="",this.updateComplete.then(async()=>{var t;const i=Array.from((null==(t=this.shadowRoot)?void 0:t.querySelectorAll("jupiter-form-section"))??[]);await Promise.all(i.map(e=>e.updateComplete));const o=i.flatMap(e=>{var t;return Array.from((null==(t=e.shadowRoot)?void 0:t.querySelectorAll("jupiter-concept-tree"))??[])});await Promise.all(o.map(e=>e.updateComplete)),this._scrollActiveRoleIntoView(),e&&this._restoreFieldFocus(e)})}_effectiveNumberLocale(){return this.numberLocale||("nl"===this.language?"nl-NL":"en-US")}_amountScaleFactor(){if("INF"===this.decimals||void 0===this.decimals||null===this.decimals)return null;const e=parseFloat(this.decimals);return isNaN(e)||e<=0?null:Math.pow(10,e)}_amountScaleCaption(){const e=this._amountScaleFactor();if(null===e)return E.t("section.amountScaleBase");const t=new Intl.NumberFormat(this._effectiveNumberLocale()).format(e);return E.t("section.amountScaleFactor",{factor:t})}_sectionHasMonetaryConcepts(e){return e.some(e=>{var t;return(null==(t=e.type)?void 0:t.toLowerCase().includes("monetary"))||e.children&&this._sectionHasMonetaryConcepts(e.children)})}_scrollActiveRoleIntoView(){var e;const t=null==(e=this.shadowRoot)?void 0:e.querySelector(".side-panel-roles-list .side-panel-role-item.active");null==t||t.scrollIntoView({block:"center"})}_restoreFieldFocus(e){var t,i,o,r;const n=(null==(t=this.shadowRoot)?void 0:t.querySelectorAll("jupiter-form-section"))??[];for(const a of Array.from(n)){const t=(null==(i=a.shadowRoot)?void 0:i.querySelectorAll("jupiter-concept-tree"))??[];for(const i of Array.from(t)){const t=(null==(o=i.shadowRoot)?void 0:o.querySelectorAll("jupiter-form-field"))??[];for(const i of Array.from(t))if(i.conceptId===e.conceptId&&i.columnId===e.columnId){const e=null==(r=i.shadowRoot)?void 0:r.querySelector('input:not([type="hidden"]), select, textarea');return void(null==e||e.focus({preventScroll:!0}))}}}}_handleFilterRolesClick(){this._showFilterDialog=!0}_handleAdvancedFilterApply(e){this._showFactsOnly=e.detail.showFactsOnly,this._conceptSearchText=e.detail.conceptSearchText??"",this._showFilterDialog=!1}_handleFilterDialogCancel(){this._showFilterDialog=!1;this._getRoleIdsArray().length;this._allSections.length}_handleFormulaValidationDialogCancel(){this._showFormulaValidationDialog=!1}_handleFormulaConceptClick(e){this._showFormulaValidationDialog=!1,this.scrollToConcept(e.detail.conceptQName,void 0,void 0,e.detail.columnId,e.detail.conceptId)}_handleRoleFilterApply(e){const{selectedRoleIds:t,periodPreferences:i}=e.detail;this._applyRoleSelection(t,i,"filterDialog")}_applyRoleSelection(e,t,i){var o,r;this._selectedRoleIds,this._selectedRoleIds=e,this._periodPreferences=t,this._selectedRoleIds,this._periodPreferences;const n=this._generateSubmissionData(),a=this._draftStorageService.createMetadataSnapshot(this.periodStartDate,this.periodEndDate,this.language,this._selectedRoleIds,this._allSections,this._typedMemberData,this._periodPreferences,this._periodData,this._unitData,this.reportingLanguage,this._repeatCounts,this._decimalsData,void 0,this._getHiddenColumnsForMetadata(),this._totalManuallyEditedData);this._draftStorageService.saveDraft(n,a),this.dynaformsFacts=n,this.dynaformsMetadata=a,this._skipPeriodPreferencesRestore=!0,this._skipDraftLoading=!0,this._initializeForm(),this._skipDraftLoading=!1,this._skipPeriodPreferencesRestore=!1,null==(o=this._currentSchema)||o.sections.length,null==(r=this._currentSchema)||r.sections.map(e=>e.id);const s=this._loadDraftIfExists().then(()=>{this._seedAutoSaveBaseline()}).catch(e=>{console.error("❌ Error restoring form data after reinitialization:",e)});this._showFilterDialog=!1;const l=Array.isArray(this._selectedRoleIds)&&this._selectedRoleIds.length>0?(this._selectedRoleIds[0],this._selectedRoleIds.length):0;return this._allSections.length,this._selectedRoleIds,this.dispatchEvent(new CustomEvent("roles-filter-changed",{detail:{selectedRoleIds:e,totalRoles:this._allSections.length,visibleRoles:l,periodPreferences:t,source:i},bubbles:!0})),s}_confirmRevealHiddenRole(e){var t;return null==(t=this._revealRolePrompt)||t.resolve(!1),new Promise(t=>{this._revealRolePrompt={section:e,resolve:t}})}_settleRevealRolePrompt(e){const t=this._revealRolePrompt;this._revealRolePrompt=null,null==t||t.resolve(e)}_revealRole(e){var t;const i=this._selectedRoleIds;let o;if(i.length>0&&"object"==typeof i[0]){const r=i,n=Math.max(-1,...r.map(e=>e.order))+1;o=[...r,{roleId:e.id,roleURI:(null==(t=e.metadata)?void 0:t.roleURI)||"",order:n}]}else o=[...i,e.id];return this._applyRoleSelection(o,this._periodPreferences,"scrollToConcept")}_haveDimensionSelectionsChanged(e){var t;const i=new Set([...Object.keys(this._periodPreferences||{}),...Object.keys(e||{})]);for(const o of i){const i=null==(t=this._periodPreferences)?void 0:t[o],r=null==e?void 0:e[o],n=(null==i?void 0:i.dimensionSelections)||[],a=(null==r?void 0:r.dimensionSelections)||[];if(JSON.stringify(n.sort((e,t)=>e.dimensionId.localeCompare(t.dimensionId)))!==JSON.stringify(a.sort((e,t)=>e.dimensionId.localeCompare(t.dimensionId))))return!0}return!1}_validateForm(){var e;const t=[],i=this._currentSchema;if(i){for(const o of i.sections)for(const i of o.concepts)for(const o of i.fields){const r=null==(e=this._formData[i.id])?void 0:e[o.columnId],n=$.validateField(o.id,i.id,o.columnId,r,o.type,o.validation||[]);t.push(...n)}t.push(...Array.from(this._calculationWarnings.values())),this._errors=t,this._valid=0===t.filter(e=>"error"===e.severity).length}}_handleCalculationMismatchChanged(e){const{key:t,mismatch:i}=e.detail,o=new Map(this._calculationWarnings);i?o.set(t,{fieldId:`${i.totalConceptId}__${i.columnId}`,conceptId:i.totalConceptId,columnId:i.columnId,message:i.message,severity:"warning",rule:{type:"custom",message:i.message,severity:"warning"},details:i}):o.delete(t),this._calculationWarnings=o,this._validateForm()}_writeFormDataValue(e,t,i){const o={...this._formData};o[e]||(o[e]={});const r=o[e][t];return o[e]={...o[e],[t]:i},this._formData=o,r}_handleFieldChange(e){const{fieldId:t,conceptId:i,columnId:o,value:r}=e.detail,n=this._writeFormDataValue(i,o,r);this._formData[i],this._touched.add(`${i}-${o}`),this._dirty=!0,this.hasUnsavedChanges=!0,this._validateForm(),this.requestUpdate(),this.dispatchEvent(new CustomEvent("field-change",{detail:{fieldId:t,conceptId:i,columnId:o,value:r,oldValue:n},bubbles:!0}))}_handlePeriodChange(e){e.detail;const{conceptId:t,columnId:i,periodType:o,periodStartDate:r,periodEndDate:n,periodInstantDate:a,unit:s}=e.detail,l={...this._periodData};l[t]||(l[t]={}),l[t]={...l[t],[i]:{startDate:r,endDate:n,instantDate:a}},this._periodData=l,this._periodData[t][i],JSON.stringify(this._periodData,null,2),s&&this._storeUnit(t,i,s),this._dirty=!0,this.hasUnsavedChanges=!0,this.requestUpdate()}_handleUnitChange(e){e.detail;const{conceptId:t,columnId:i,unit:o}=e.detail;this._storeUnit(t,i,o),this._dirty=!0,this.hasUnsavedChanges=!0,this.requestUpdate()}_storeUnit(e,t,i){JSON.stringify(this._unitData,null,2);const o={...this._unitData};o[e]||(o[e]={}),o[e]={...o[e],[t]:i},this._unitData=o,this._unitData[e][t],JSON.stringify(this._unitData,null,2)}_handleDecimalsChange(e){const{conceptId:t,columnId:i,decimals:o}=e.detail;t&&i&&(this._storeDecimals(t,i,o),this._dirty=!0,this.hasUnsavedChanges=!0,this.requestUpdate())}_computeEffectiveMasterData(){const e="rj-i_DocumentIntendedRoundingLevel";if("INF"!==this.decimals){const t=parseFloat(this.decimals);if(!isNaN(t))return void(this._effectiveMasterData={...this.masterData||{},[e]:String(-t)})}this._effectiveMasterData=this.masterData?{...this.masterData}:void 0}_initializeGlobalDecimalsFromRoundingData(){if(this._hasValidGlobalDecimals())return;const e=this._findRoundingLevelFactValue(this._allSections)??this._findRoundingLevelValueInFormData(this._formData);if(null==e||""===e)return;const t=parseFloat(String(e));isNaN(t)||(this.decimals=String(Math.abs(t)))}_findRoundingLevelValueInFormData(e){if(e)for(const t of Object.keys(e)){if(!this._isRoundingLevelConcept(t))continue;const i=e[t]||{};for(const e of Object.keys(i)){const t=i[e];if(null!=t&&""!==t)return t}}}_findRoundingLevelFactValue(e){for(const t of e){const e=this._findRoundingLevelFactValueInConcepts(t.concepts||[]);if(null!=e&&""!==e)return e}}_findRoundingLevelFactValueInConcepts(e){for(const t of e){const e=t.originalConceptId||t.id;if(this._isRoundingLevelConcept(e)){const e=t.facts||[];for(const t of e)if(void 0!==(null==t?void 0:t.value)&&null!==(null==t?void 0:t.value)&&""!==(null==t?void 0:t.value))return t.value}if(t.children&&t.children.length>0){const e=this._findRoundingLevelFactValueInConcepts(t.children);if(null!=e&&""!==e)return e}}}_hasValidGlobalDecimals(){if(void 0===this.decimals||null===this.decimals)return!1;if("INF"===this.decimals)return!1;const e=parseFloat(this.decimals);return!isNaN(e)}_isRoundingLevelConcept(e){return!!e&&("rj-i_DocumentIntendedRoundingLevel"===e||e.includes("DocumentIntendedRoundingLevel"))}_findFactValueForField(e,t,i){var o,r;if(!e.facts||0===e.facts.length)return;const n=this._findColumnByIdInSection(t.columnId,i),a=null==(o=this._periodData[e.id])?void 0:o[t.columnId],s=(null==a?void 0:a.startDate)||(null==n?void 0:n.periodStartDate)||t.periodStartDate||this.periodStartDate,l=(null==a?void 0:a.endDate)||(null==n?void 0:n.periodEndDate)||t.periodEndDate||this.periodEndDate,d=(null==a?void 0:a.instantDate)||t.periodInstantDate||l||s,c=null==(r=this._unitData[e.id])?void 0:r[t.columnId],p={conceptId:e.originalConceptId||t.conceptId||e.id,columnId:t.columnId,periodStartDate:s,periodEndDate:l,periodInstantDate:d,periodType:t.periodType,unit:c,dimensionData:null==n?void 0:n.dimensionData},u=De.findMatchingFact(e.facts,p);return null==u?void 0:u.value}_storeDecimals(e,t,i){const o={...this._decimalsData};o[e]||(o[e]={}),o[e]={...o[e],[t]:i??""},this._decimalsData=o}_generateUniqueConceptKey(e,t){return`${e}::${t}`}_extractOriginalConceptId(e){const t=e.split("::");return t.length>1?t[1]:e}_handleAddConceptRepeat(e){const{conceptId:t}=e.detail;this._repeatCounts={...this._repeatCounts,[t]:(this._repeatCounts[t]||0)+1},this._dirty=!0,this.hasUnsavedChanges=!0}_handleRemoveConceptRepeat(e){const{conceptId:t}=e.detail,i=t.match(/^(.+)__repeat_(\d+)$/),o=i?i[1]:t,r=i?parseInt(i[2]):this._repeatCounts[t]||0,n=this._repeatCounts[o]||0;if(n<=0||r<1||r>n)return;const a={...this._formData},s={...this._typedMemberData},l={...this._unitData},d={...this._periodData};for(let u=r;u<n;u++){const e=`${o}__repeat_${u+1}`,t=`${o}__repeat_${u}`;void 0!==a[e]?a[t]=a[e]:delete a[t];const i=`${t}__`,r=`${e}__`,n=Object.keys(s).filter(e=>e.startsWith(r));Object.keys(s).filter(e=>e.startsWith(i)).forEach(e=>delete s[e]),n.forEach(e=>{s[`${t}__${e.slice(r.length)}`]=s[e]}),n.forEach(e=>delete s[e]),void 0!==l[e]?l[t]=l[e]:delete l[t],void 0!==d[e]?d[t]=d[e]:delete d[t]}const c=`${o}__repeat_${n}`;delete a[c],delete l[c],delete d[c];const p=`${c}__`;Object.keys(s).filter(e=>e.startsWith(p)).forEach(e=>delete s[e]),this._formData=a,this._typedMemberData=s,this._unitData=l,this._periodData=d,this._repeatCounts={...this._repeatCounts,[o]:n-1},this._dirty=!0,this.hasUnsavedChanges=!0}_scopedColumnKey(e,t){return`${e}__${t}`}_handleTypedMemberChange(e){const{columnId:t,axisId:i,value:o,conceptId:r,sectionId:n}=e.detail,a=r?`${r}__${t}`:n?this._scopedColumnKey(n,t):t,s={...this._typedMemberData};s[a]||(s[a]={}),s[a]={...s[a],[i]:o},this._typedMemberData=s,this._dirty=!0,this.hasUnsavedChanges=!0,this.requestUpdate(),this.dispatchEvent(new CustomEvent("typed-member-change",{detail:{columnId:t,axisId:i,value:o},bubbles:!0}))}_handleFieldBlur(e){var t;e.detail;const{fieldId:i,conceptId:o,columnId:r,xbrlValidationErrors:n}=e.detail;let a="";const s=e.composedPath();s.length;for(const l of s){const e=l;if("JUPITER-FORM-SECTION"===e.tagName){a=e.getAttribute("section-id")||"";break}}if(n&&n.length,n&&n.length>0){const e=(null==(t=this._formData[o])?void 0:t[r])||"",s=this._xbrlFormErrors.findIndex(e=>e.fieldId===i&&e.sectionId===a),l={sectionId:a,fieldId:i,conceptId:o,columnId:r,value:e,errors:n};this._xbrlFormErrors=s>=0?[...this._xbrlFormErrors.slice(0,s),l,...this._xbrlFormErrors.slice(s+1)]:[...this._xbrlFormErrors,l]}else{this._xbrlFormErrors.length;this._xbrlFormErrors=this._xbrlFormErrors.filter(e=>!(e.fieldId===i&&e.sectionId===a)),this._xbrlFormErrors.length}this._xbrlFormErrors.length,this._xbrlFormErrors}_getSectionTitle(e){this._allSections.map(e=>({id:e.id,title:e.title}));const t=this._allSections.find(t=>t.id===e),i=(null==t?void 0:t.title)||e||"(Unknown Section)";return i}_roleHasErrors(e){return this._xbrlFormErrors.some(t=>t.sectionId===e)}async _handleErrorFieldClick(e,t,i){this._showErrorPopup=!1,this.requestUpdate(),await this._focusFormField(e,t,i)}async _handleTypedDimensionFactClick(e,t,i){this._showTypedDimensionWarning=!1,this.requestUpdate(),await this._focusFormField(e,t,i)}async _focusFormField(e,t,i){var o,r,n,a,s,l,d;if(await this.updateComplete,!(null==(o=this._currentSchema)?void 0:o.sections.some(e=>e.id===i))){const e=this._allSections.find(e=>e.id===i);if(!e||!(await this._confirmRevealHiddenRole(e)))return;await this._revealRole(e)}(null==(r=this._hiddenColumnIds.get(i))?void 0:r.has(t))&&(this._showColumn(i,t),await this.updateComplete),"sidePanel"===this.display&&this._activeSidePanelRoleId!==i&&(this._activeSidePanelRoleId,this._activeSidePanelRoleId=i,this.requestUpdate(),await this.updateComplete,this._scrollActiveRoleIntoView(),await new Promise(e=>setTimeout(e,500)));const c=null==(n=this.shadowRoot)?void 0:n.querySelectorAll("jupiter-form-section");let p=null;if(null==c||c.forEach(e=>{var t;(null==(t=e.section)?void 0:t.id)===i&&(p=e)}),!p)return void console.warn(`⚠️ Section not found: ${i}`);if(await p.updateComplete,await(null==(a=p.revealConcept)?void 0:a.call(p,e))&&await Promise.all(Array.from((null==(s=p.shadowRoot)?void 0:s.querySelectorAll("jupiter-concept-tree"))??[]).map(e=>e.updateComplete)),await new Promise(e=>setTimeout(e,100)),p.shadowRoot,p.shadowRoot){null==(l=p.shadowRoot.innerHTML)||l.length;const e=p.shadowRoot.querySelectorAll("*");e.length;Array.from(e).filter(e=>{const t=e;return!(!t.tagName||!t.tagName.includes("-"))}).map(e=>e.tagName).join(", ")}const u=`${e}_${t}_field`,h=null==(d=p.shadowRoot)?void 0:d.querySelectorAll("jupiter-concept-tree");let m=null;if(null==h||h.length,h&&h.forEach((i,o)=>{var r;if(m)return;const n=null==(r=i.shadowRoot)?void 0:r.querySelectorAll("jupiter-form-field");null==n||n.length,null==n||n.forEach((i,o)=>{var r;if(!m&&(i.conceptId,i.columnId,i.conceptId===e&&i.columnId===t)){const e=null==(r=i.shadowRoot)?void 0:r.querySelector("input, textarea");e&&(m=e)}})}),!m)return void console.warn(`⚠️ Input field not found for: ${u}`);const f=m;p.scrollIntoView({behavior:"smooth",block:"start"}),await new Promise(e=>setTimeout(e,300)),f.focus(),"INPUT"!==f.tagName&&"TEXTAREA"!==f.tagName||f.select(),f.style.boxShadow="0 0 0 3px rgba(220, 38, 38, 0.5)",setTimeout(()=>{f.style.boxShadow=""},2e3)}_handleSectionExpand(e){this.dispatchEvent(new CustomEvent("section-expand",{detail:e.detail,bubbles:!0}))}_handleConceptExpand(e){this.dispatchEvent(new CustomEvent("concept-expand",{detail:e.detail,bubbles:!0}))}_handleColumnRemove(e){const{columnId:t,sectionId:i}=e.detail;if(this._currentSchema&&i){const e=this._currentSchema.sections.find(e=>e.id===i);e&&e.columns&&(e.columns=e.columns.filter(e=>e.id!==t))}else this._columns=this._columns.filter(e=>e.id!==t),this._currentSchema&&this._currentSchema.sections.forEach(e=>{e.columns&&(e.columns=e.columns.filter(e=>e.id!==t))});this._removeColumnData(t,i),this._dirty=!0,this.hasUnsavedChanges=!0,this._validateForm(),this.requestUpdate(),this.dispatchEvent(new CustomEvent("column-remove",{detail:{columnId:t,sectionId:i},bubbles:!0}))}_handleColumnHide(e){const{columnId:t,sectionId:i}=e.detail;i&&t&&(this._hiddenColumnIds.has(i)||this._hiddenColumnIds.set(i,new Set),this._hiddenColumnIds.get(i).add(t),this._dirty=!0,this.hasUnsavedChanges=!0,this.requestUpdate(),this.dispatchEvent(new CustomEvent("column-hide",{detail:{columnId:t,sectionId:i},bubbles:!0})))}_handleColumnShow(e){const{columnId:t,sectionId:i}=e.detail;i&&t&&this._showColumn(i,t)}_showColumn(e,t){var i;null==(i=this._hiddenColumnIds.get(e))||i.delete(t),this._dirty=!0,this.hasUnsavedChanges=!0,this.requestUpdate(),this.dispatchEvent(new CustomEvent("column-show",{detail:{columnId:t,sectionId:e},bubbles:!0}))}_getColumnsWithHiddenFlags(e){const t=e.columns||this._columns,i=this._hiddenColumnIds.get(e.id);return i&&0!==i.size?t.map(e=>i.has(e.id)?{...e,hidden:!0}:e):t}_getHiddenColumnsForMetadata(){if(0===this._hiddenColumnIds.size)return;const e={};return this._hiddenColumnIds.forEach((t,i)=>{t.size>0&&(e[i]=Array.from(t))}),Object.keys(e).length>0?e:void 0}_handleColumnAddRequest(e){const{sectionId:t,columnRequest:i,insertAfterColumnId:o}=e.detail;this._addColumnFromRequest(i,t,o)}_getAvailableDimensionsForSection(e){var t,i,o;if(!(null==(i=null==(t=this.xbrlInput)?void 0:t.hypercubes)?void 0:i[0]))return[];const r=this.xbrlInput.hypercubes[0].roles.find(t=>t.roleId===e);if(!(null==(o=null==r?void 0:r.items)?void 0:o.length))return[];const n=[],a=this.language||"en",s=(e,t)=>{var i;return(null==(i=(null==e?void 0:e.find(e=>e.lang===a&&"http://www.xbrl.org/2003/role/label"===e.role))||(null==e?void 0:e.find(e=>"en"===e.lang&&"http://www.xbrl.org/2003/role/label"===e.role))||(null==e?void 0:e.find(e=>"http://www.xbrl.org/2003/role/label"===e.role)))?void 0:i.label)||t};return r.items.forEach(e=>{e.dimensions&&e.dimensions.length>0&&e.dimensions.forEach(e=>{if(!n.find(t=>t.id===e.id)){const t=s(e.labels,e.conceptName),i={id:e.id,conceptName:e.conceptName,axisLabel:t};e.members&&e.members.length>0&&(i.members=e.members.map(e=>({id:e.id,label:s(e.labels,e.conceptName||e.id)}))),e.typedMember&&(i.typedMember={id:e.typedMember.id,dataType:e.typedMember.type||"string",validation:e.typedMember.validation}),n.push(i)}})}),n}_formatPeriodDisplay(e,t){if(!e||!t)return`${e||""} / ${t||""}`;const i=e.substring(0,4);return i===t.substring(0,4)?i:`${e} / ${t}`}_resolveSubmissionInstantDate(e,t,i,o){const r=this._getEffectivePeriodRole(e);if(null==r?void 0:r.includes("periodStartLabel")){const e=(null==i?void 0:i.startDate)||(null==o?void 0:o.periodStartDate)||t.periodStartDate||this.periodStartDate,n=(null==i?void 0:i.endDate)||(null==o?void 0:o.periodEndDate)||t.periodEndDate||this.periodEndDate;return this._resolveInstantDate(r,void 0,e,n)}return(null==i?void 0:i.instantDate)||(null==i?void 0:i.endDate)||t.periodInstantDate||(null==o?void 0:o.periodEndDate)||t.periodEndDate||t.periodStartDate||this.periodStartDate}_getEffectivePeriodRole(e){return e.effectivePeriodRole??e.preferredLabel}_resolveInstantDate(e,t,i,o){if(null==e?void 0:e.includes("periodStartLabel")){const e=i||"2025-01-01";try{const t=new Date(e);return t.setDate(t.getDate()-1),t.toISOString().split("T")[0]}catch{return e}}return t||o||i||"2025-01-01"}_correctLegacyPeriodStartInstantDates(){this._allSections.forEach(e=>{this._correctPeriodStartInstantDatesInConcepts(e.concepts,e)})}_correctPeriodStartInstantDatesInConcepts(e,t){e.forEach(e=>{var i,o;(null==(i=this._getEffectivePeriodRole(e))?void 0:i.includes("periodStartLabel"))&&"instant"===e.periodType&&(null==(o=e.fields)?void 0:o.length)&&e.fields.forEach(i=>{this._correctFieldPeriodStartInstantDate(e,i,e.id,t);const o=this._repeatCounts[e.id]||0;for(let r=1;r<=o;r++)this._correctFieldPeriodStartInstantDate(e,i,`${e.id}__repeat_${r}`,t)}),e.children&&this._correctPeriodStartInstantDatesInConcepts(e.children,t)})}_correctFieldPeriodStartInstantDate(e,t,i,o){var r;const n=this._findColumnByIdInSection(t.columnId,o),a=null==(r=this._periodData[i])?void 0:r[t.columnId],s=(null==a?void 0:a.startDate)||(null==n?void 0:n.periodStartDate)||t.periodStartDate||this.periodStartDate,l=(null==a?void 0:a.endDate)||(null==n?void 0:n.periodEndDate)||t.periodEndDate||this.periodEndDate,d=this._resolveInstantDate(this._getEffectivePeriodRole(e),void 0,s,l);a&&a.instantDate!==d&&(t.columnId,a.instantDate,a.instantDate=d),t.periodInstantDate!==d&&(e.id,t.columnId,t.periodInstantDate,t.periodInstantDate=d)}_addColumnFromRequest(e,t,i){var o,r,n,a,s;const l=`col-${Date.now()}`;let d="",c="";"instant"===e.periodType?(d=e.instantDate||"",c=""):"duration"!==e.periodType&&"mixed"!==e.periodType||(d=this._formatPeriodDisplay(e.startDate,e.endDate),c="");let p={dimensionId:"period",memberValue:"instant"===e.periodType?`instant-${e.instantDate}`:`duration-${e.startDate}-${e.endDate}`,memberLabel:d};if(e.selectedDimensions&&e.selectedDimensions.length>0){const t=[],i=[];for(const o of e.selectedDimensions)o.isTyped?(t.push(o.axisLabel),i.push(`${o.axisId}|${o.typedValue||""}`)):o.memberId&&o.memberLabel&&(t.push(o.memberLabel),i.push(`${o.axisId}|${o.memberId}`));t.length>0&&(d=t.join(" | "),c="instant"===e.periodType?e.instantDate||"":this._formatPeriodDisplay(e.startDate,e.endDate),p={dimensionId:l,memberValue:t.join(" | "),memberLabel:t.join(" | "),memberKey:t.join(" | "),dimensionIdKey:i.join("::"),selectedDimensions:e.selectedDimensions},p.memberKey)}else if(null==(r=null==(o=this.xbrlInput)?void 0:o.hypercubes)?void 0:r[0]){const i=this.xbrlInput.hypercubes[0].roles.find(e=>e.roleId===t);if(1===(null==(n=null==i?void 0:i.items)?void 0:n.length)){const t=i.items[0];if(1===t.dimensions.length){const i=t.dimensions[0];if(i.members&&i.members.length>0){const t=(null==(a=i.labels.find(e=>"http://www.xbrl.org/2003/role/label"===e.role))?void 0:a.label)||i.conceptName,o=i.members[0],r=(null==(s=o.labels.find(e=>"http://www.xbrl.org/2003/role/label"===e.role))?void 0:s.label)||o.conceptName;d=r,c="instant"===e.periodType?e.instantDate||"":this._formatPeriodDisplay(e.startDate,e.endDate),p={dimensionId:l,axisId:i.id,memberId:o.id,memberValue:r,memberLabel:r,axis:t,axisLabel:t,memberKey:`${t} | ${r}`,dimensionIdKey:`${i.id} | ${o.id}`},p.memberKey}}}}const u={id:l,title:d,description:c,type:(p.memberKey,"dimension"),order:this._columns.length,removable:!0,dimensionData:p,periodStartDate:"instant"===e.periodType?e.instantDate:e.startDate,periodEndDate:"instant"===e.periodType?e.instantDate:e.endDate};if(e.selectedDimensions&&e.selectedDimensions.length>0){const t={};let i=!1;for(const o of e.selectedDimensions)o.isTyped&&(t[o.axisId]=o.typedValue||"",i=!0);i&&(this._typedMemberData[l]=t,u.dimensionData&&(u.dimensionData.hasTypedMembers=!0,u.dimensionData.typedMembers=e.selectedDimensions.filter(e=>e.isTyped).map(e=>({axisId:e.axisId,axisLabel:e.axisLabel,typedMemberId:e.axisId,memberLabel:e.axisLabel,type:e.dataType,validation:e.validation}))))}if(this._currentSchema){const e=this._currentSchema.sections.find(e=>e.id===t);if(e)if(e.columns||(e.columns=[...this._columns]),i){const t=e.columns.findIndex(e=>e.id===i);e.columns=-1!==t?[...e.columns.slice(0,t+1),u,...e.columns.slice(t+1)]:[...e.columns,u]}else e.columns=[...e.columns,u]}this._replicateFieldsForNewColumn(l,e,t),this._dirty=!0,this.hasUnsavedChanges=!0,this.requestUpdate(),this.dispatchEvent(new CustomEvent("column-add",{detail:{column:u},bubbles:!0}))}_removeColumnData(e,t){if(this._currentSchema)if(t){const i=this._currentSchema.sections.find(e=>e.id===t);i&&this._removeColumnDataFromConcepts(i.concepts,e)}else for(const i in this._formData)void 0!==this._formData[i][e]&&delete this._formData[i][e]}_removeColumnDataFromConcepts(e,t){e.forEach(e=>{this._formData[e.id]&&void 0!==this._formData[e.id][t]&&delete this._formData[e.id][t],e.fields&&(e.fields=e.fields.filter(e=>e.columnId!==t)),e.children&&this._removeColumnDataFromConcepts(e.children,t)})}_shouldCreateFieldForConcept(e,t){if(e.abstract)return!1;if(!(t.selectedDimensions&&t.selectedDimensions.length>0)&&e.periodType){if("instant"===t.periodType&&"instant"!==e.periodType)return!1;if("duration"===t.periodType&&"duration"!==e.periodType)return!1}return!0}_replicateFieldsForNewColumn(e,t,i){if(!this._currentSchema)return;const o=new k,r=this._currentSchema.sections.find(e=>e.id===i);r&&this._replicateFieldsForSection(r.concepts,e,t,o)}_replicateFieldsForSection(e,t,i,o){e.forEach(e=>{var r;if(this._shouldCreateFieldForConcept(e,i)){const o=null==(r=e.fields)?void 0:r[0];let n;const a="instant"===i.periodType?i.instantDate:i.startDate,s="instant"===i.periodType?i.instantDate:i.endDate,l=this._resolveInstantDate(this._getEffectivePeriodRole(e),i.instantDate,a,s);n=o?{id:`${e.id}_${t}`,conceptId:e.id,columnId:t,type:o.type,label:o.label,placeholder:o.placeholder,required:o.required,disabled:o.disabled,validation:o.validation,defaultValue:o.defaultValue,periodType:e.periodType,conceptType:e.type,periodStartDate:a,periodEndDate:s,periodInstantDate:"instant"===e.periodType?l:void 0}:{id:`${e.id}_${t}`,conceptId:e.id,columnId:t,type:"text",label:e.label||e.name,placeholder:`Enter ${e.name}`,required:!1,disabled:!1,validation:[],defaultValue:"",periodType:e.periodType,conceptType:e.type,periodStartDate:a,periodEndDate:s,periodInstantDate:"instant"===e.periodType?l:void 0},e.fields||(e.fields=[]),e.fields.push(n)}e.children&&this._replicateFieldsForSection(e.children,t,i,o)})}_addColumn(){const e={id:`dim-${Date.now()}`,title:`Dimension ${this._columns.length}`,description:"Additional dimension column",type:"dimension",order:this._columns.length,removable:!0,dimensionData:{dimensionId:"custom",memberValue:"default",memberLabel:"Default Member"}};this._columns=[...this._columns,e],this.requestUpdate(),this.dispatchEvent(new CustomEvent("column-add",{detail:{column:e},bubbles:!0}))}_findMissingTypedDimensionFacts(){var e;const t=[];if(!this._currentSchema)return t;for(const i of this._currentSchema.sections)for(const o of i.columns||[]){const r=null==(e=o.dimensionData)?void 0:e.typedMembers;if(!r||0===r.length)continue;const n=this._typedMemberData[this._scopedColumnKey(i.id,o.id)]||{};r.some(e=>{var t;return!(null==(t=n[e.axisId])?void 0:t.trim())})&&this._collectEnteredFactsForColumn(i.concepts,o,i,t)}return t}_collectEnteredFactsForColumn(e,t,i,o){var r,n;for(const a of e){const e=null==(r=this._formData[a.id])?void 0:r[t.id];null!=e&&""!==String(e).trim()&&o.push({conceptId:a.id,conceptLabel:a.label,columnId:t.id,columnTitle:t.title,sectionId:i.id,sectionTitle:i.title,value:e}),(null==(n=a.children)?void 0:n.length)&&this._collectEnteredFactsForColumn(a.children,t,i,o)}}_groupTypedDimensionWarningFactsByRole(){const e=[],t=new Map;for(const i of this._typedDimensionWarningFacts){let o=t.get(i.sectionId);o||(o={sectionId:i.sectionId,sectionTitle:i.sectionTitle,facts:[]},t.set(i.sectionId,o),e.push(o)),o.facts.push(i)}return e}_handleSubmit(){if(this._submitted=!0,this._submitDisabled=!0,"admin"===this.mode)return this._handleSaveDraft(),this._handleAdminModeSubmit(),void(this._submitDisabled=!1);const e=this._findMissingTypedDimensionFacts();if(e.length>0)return this._typedDimensionWarningFacts=e,this._showTypedDimensionWarning=!0,this._submitDisabled=!1,void this.requestUpdate();this._continueSubmit()}_continueSubmit(){if(this._submitted=!0,this._submitDisabled=!0,this._xbrlFormErrors.length,this._xbrlFormErrors,this._xbrlFormErrors.length>0)return this._xbrlFormErrors,this._showErrorPopup=!0,this._submitDisabled=!1,void this.requestUpdate();if(this._validateForm(),!this._valid)return this._errors,this._showErrorPopup=!0,this._submitDisabled=!1,void this.requestUpdate();this._correctLegacyPeriodStartInstantDates();const e=this._generateSubmissionData();JSON.stringify(e,null,2),e.forEach((e,t)=>{e.conceptId,e.columnId,e.value,e.unit}),this.dispatchEvent(new CustomEvent("form-submit",{detail:{data:this._formData,submissionData:e,valid:this._valid,errors:this._errors,reportingLanguage:this.reportingLanguage},bubbles:!0})),setTimeout(()=>{this._submitDisabled=!1},1e3)}_handleQuickValidate(){"admin"!==this.mode&&this._runFormulaValidationPreflight()}_runFormulaValidationPreflight(){var e,t,i,o,r,n,a,s;if(!this.formulaEnabled)return;const l=null==(i=null==(t=null==(e=this.xbrlInput)?void 0:e.formula)?void 0:t[0])?void 0:i.roles;if(!l||0===l.length)return;const d=(null==(r=null==(o=this._currentSchema)?void 0:o.sections)?void 0:r.length)?this._currentSchema.sections:this._allSections;if(!d||0===d.length)return;const c=new Set(d.map(e=>{var t;return(null==(t=e.metadata)?void 0:t.roleURI)||e.id})),p=l.filter(e=>c.has(e.roleURI));if(0===p.length)return;const u=d.map(e=>{var t;return{roleURI:(null==(t=e.metadata)?void 0:t.roleURI)||e.id,concepts:e.concepts,columns:e.columns}}),h=X(this._formData,this._mergeAllSectionColumns(),u,null==(s=null==(a=null==(n=this.xbrlInput)?void 0:n.hypercubes)?void 0:a[0])?void 0:s.roles,this.periodStartDate,this.periodEndDate,this._typedMemberData),m={...this.xbrlInput,formula:[{...this.xbrlInput.formula[0],roles:p}]},f=this._formulaValidationService.evaluate(m,h,this.language),b=this._formulaValidationService.summarize(f);this._formulaValidationResults=f,this._formulaValidationSummary=b;f.some(e=>!e.skipped&&!e.satisfied)&&(this._showFormulaValidationDialog=!0),this.dispatchEvent(new CustomEvent("formula-validation-complete",{detail:{results:f,summary:b},bubbles:!0,composed:!0}))}_mergeAllSectionColumns(){const e=new Map;return this._columns.forEach(t=>e.set(t.id,t)),this._allSections.forEach(t=>{(t.columns||[]).forEach(t=>e.set(t.id,t))}),Array.from(e.values())}_handleSaveDraft(e="manual"){if(this._xbrlFormErrors.length,this._xbrlFormErrors,this._xbrlFormErrors.length>0)return this._xbrlFormErrors,this._showErrorPopup=!0,void this.requestUpdate();this._formData,this._unitData,this._selectedRoleIds,this._correctLegacyPeriodStartInstantDates();const t=this._generateSubmissionData();t.forEach((e,t)=>{e.conceptId,e.columnId,e.value,e.unit});const i=this._roleCompletedStates.size>0?Object.fromEntries(this._roleCompletedStates):void 0,o=this._draftStorageService.createMetadataSnapshot(this.periodStartDate,this.periodEndDate,this.language,this._selectedRoleIds,this._allSections,this._typedMemberData,this._periodPreferences,this._periodData,this._unitData,this.reportingLanguage,this._repeatCounts,this._decimalsData,i,this._getHiddenColumnsForMetadata(),this._totalManuallyEditedData),r=JSON.stringify({draftData:t,metadata:o});if(r===this._lastSavedDraftSnapshot)return void(this.hasUnsavedChanges=!1);this._lastSavedDraftSnapshot=r,this.hasUnsavedChanges=!1;const n=this._draftStorageService.saveDraft(t,o);o.selectedRoleIds,this.dynaformsFacts=t,this.dynaformsMetadata=o,this.dispatchEvent(new CustomEvent("form-save-draft",{detail:{data:this._formData,draftData:t,metadata:o,saved:n,valid:this._valid,errors:this._errors,dynaformsFacts:t,dynaformsMetadata:o,reportingLanguage:this.reportingLanguage,source:"auto"==e?"auto":"manual"},bubbles:!0,composed:!0}));this._getRoleIdsArray().length;t.length,o.customColumns.length,Array.isArray(this._selectedRoleIds)&&this._selectedRoleIds.length>0&&this._selectedRoleIds[0]}async _loadDraftIfExists(){if(this.dynaformsFacts&&this.dynaformsMetadata){const e={formData:this.dynaformsFacts,metadata:this.dynaformsMetadata};return await this._restoreFromDraft(e),this._draftLoaded=!0,this._draftLoadedAt=this.dynaformsMetadata.savedAt||(new Date).toISOString(),void this.dispatchEvent(new CustomEvent("form-draft-loaded",{detail:{draft:e,source:"external",compatible:!0,warnings:[]},bubbles:!0,composed:!0}))}if(!this._draftStorageService.hasDraft())return;const e=this._draftStorageService.loadDraft();if(!e)return void console.warn("⚠️ Failed to load draft");const{compatible:t,warnings:i}=this._draftStorageService.validateDraftCompatibility(e,this.periodStartDate,this.periodEndDate);i.length>0&&console.warn("⚠️ Draft compatibility warnings:",i),await this._restoreFromDraft(e),this.dispatchEvent(new CustomEvent("form-draft-loaded",{detail:{draft:e,compatible:t,warnings:i},bubbles:!0,composed:!0})),e.formData.length,e.metadata.savedAt,this._draftStorageService.getDraftAge()}async _restoreFromDraft(e){var t;const{formData:i,metadata:o}=e;o.selectedRoleIds&&o.selectedRoleIds.length>0&&(this._selectedRoleIds=o.selectedRoleIds,this._selectedRoleIds.length),o.typedMemberData&&(this._typedMemberData=o.typedMemberData,this._preservedTypedMemberData={}),o.repeatCounts&&(this._repeatCounts=o.repeatCounts,this._repeatCounts),o.periodData&&(this._periodData=o.periodData,Object.keys(this._periodData).length),o.unitData&&(this._unitData=o.unitData,Object.keys(this._unitData).length),o.decimalsData&&(this._decimalsData=o.decimalsData,Object.keys(this._decimalsData).length),o.roleCompletedStates&&(this._roleCompletedStates=new Map(Object.entries(o.roleCompletedStates)),Object.keys(o.roleCompletedStates).length),o.hiddenColumns&&(this._hiddenColumnIds=new Map(Object.entries(o.hiddenColumns).map(([e,t])=>[e,new Set(t)])),this._hiddenColumnIds.size),o.totalManuallyEditedData&&(this._totalManuallyEditedData=o.totalManuallyEditedData,Object.keys(this._totalManuallyEditedData).length),o.periodPreferences?this._skipPeriodPreferencesRestore||(this._periodPreferences=o.periodPreferences,this._periodPreferences,this.xbrlInput&&(this._currentSchema=k.buildFormSchema(this.xbrlInput,this.periodStartDate,this.periodEndDate,this.language,this._periodPreferences),this._allSections=[...this._currentSchema.sections],this._applyCustomPeriodDataToFields(),o.customColumns&&o.customColumns.length>0&&(this._mergeAdditionalCustomColumns(o.customColumns),o.customColumns.length))):o.customColumns&&o.customColumns.length>0&&(this._restoreCustomColumns(o.customColumns),o.customColumns.length);const r={},n={},a={};i.forEach(e=>{let{conceptId:t,draftInstanceId:i,value:o,columnId:s,period:l,unit:d}=e;if(!s&&l&&(s=this._inferColumnIdFromPeriod(l,t),!s))return void console.warn(`⚠️ Could not infer columnId for concept ${t}, skipping...`);const c=i||t,p=c.includes("__repeat_")?c.split("__repeat_")[0]:c,u=this._findActualConceptId(p),h=c.includes("__repeat_")?`${u||p}__repeat_${c.split("__repeat_")[1]}`:u||c;r[h]||(r[h]={}),r[h][s]=o,l&&(n[h]||(n[h]={}),"instant"===l.type?(n[h][s]={instantDate:l.date},l.date):"duration"===l.type&&(n[h][s]={startDate:l.startDate,endDate:l.endDate},l.startDate,l.endDate)),d&&(a[h]||(a[h]={}),a[h][s]=d)}),this._formData={...this._formData,...r},Object.keys(r).length,this._seedLegacyManuallyEditedTotals(r),this._initializeGlobalDecimalsFromRoundingData(),this._periodData={...this._periodData,...o.periodData||{},...n},Object.keys(this._periodData).length,JSON.stringify(this._periodData,null,2),this._unitData={...this._unitData,...o.unitData||{},...a},Object.keys(this._unitData).length,JSON.stringify(this._unitData,null,2),this._correctLegacyPeriodStartInstantDates(),this._selectedRoleIds.length>0&&this._applyRoleFilter(),this._dirty=!0,this._touched.clear(),this._validateForm(),this._allSections=[...this._allSections],this.requestUpdate(),await this.updateComplete,await new Promise(e=>setTimeout(e,100));const s=(null==(t=this.shadowRoot)?void 0:t.querySelectorAll("input, textarea, select").length)||0;s>0?this._populateFieldValues(r):console.error("❌ No fields found in DOM even after updateComplete")}_findActualConceptId(e){for(const t of this._allSections){const i=this._findActualConceptIdInTree(t.concepts,e);if(i)return i}return null}_findActualConceptIdInTree(e,t){for(const i of e){if(i.originalConceptId===t||i.id===t)return i.id;if(i.children){const e=this._findActualConceptIdInTree(i.children,t);if(e)return e}}return null}_inferColumnIdFromPeriod(e,t){for(const i of this._allSections){if(this._findConceptInSection(i.concepts,t)&&i.columns){for(const t of i.columns){const i="instant"===e.type,o="duration"===e.type;if(i&&e.date){if(t.periodStartDate===e.date||t.periodStartDate===t.periodEndDate&&t.periodStartDate===e.date)return t.id,t.id}else if(o&&e.startDate&&e.endDate&&t.periodStartDate===e.startDate&&t.periodEndDate===e.endDate)return t.id,t.id}if("instant"===e.type){const e=i.columns.find(e=>"instant"===e.id);if(e)return e.id}else{const e=i.columns.find(e=>"duration"===e.id);if(e)return e.id}}}return null}_findConceptInSection(e,t){for(const i of e){if(i.id===t||i.originalConceptId===t)return i;if(i.children){const e=this._findConceptInSection(i.children,t);if(e)return e}}return null}_populateFieldValues(e){Object.keys(e).forEach(t=>{const i=e[t];Object.keys(i).forEach(e=>{var o,r;const n=i[e],a=`${t}__${e}`,s=null==(o=this.shadowRoot)?void 0:o.querySelector(`#${CSS.escape(a)}`);s?(s instanceof HTMLInputElement||s instanceof HTMLTextAreaElement||s instanceof HTMLSelectElement)&&("checkbox"===s.type?s.checked=Boolean(n):s.value=null!=n?String(n):""):(console.warn(` ❌ Field element NOT FOUND: ${a}`),console.warn(" Available fields in DOM:",Array.from((null==(r=this.shadowRoot)?void 0:r.querySelectorAll("input, textarea, select"))||[]).map(e=>e.id).filter(e=>e.includes(t.split("__")[0]))))})})}_seedLegacyManuallyEditedTotals(e){const t={...this._totalManuallyEditedData};let i=!1;const o=r=>{var n;for(const a of r){if(F(a.preferredLabel)){const o=e[a.id];if(o)for(const e of Object.keys(o)){const r=o[e];null==r||""===r||void 0!==(null==(n=t[a.id])?void 0:n[e])||(t[a.id]={...t[a.id]||{},[e]:!0},i=!0)}}a.children&&a.children.length>0&&o(a.children)}};for(const r of this._allSections)o(r.concepts||[]);i&&(this._totalManuallyEditedData=t)}_restoreCustomColumns(e){const t=new Map;e.forEach(e=>{t.has(e.sectionId)||t.set(e.sectionId,[]),t.get(e.sectionId).push(e)}),this._allSections.forEach(e=>{var i;const o=t.get(e.id);if(o){if(e.columns=o.map(e=>{const t={id:e.columnId,title:e.label,description:e.description,type:e.dimensionData?"dimension":"base",periodStartDate:e.startDate||e.date,periodEndDate:e.endDate||e.date,dimensionData:e.dimensionData,order:0,removable:"duration"!==e.columnId&&"instant"!==e.columnId,periodType:e.periodType};return e.columnId,t}),(null==(i=this.xbrlInput)?void 0:i.datatypes)&&!e.datatypes){const t=Array.isArray(this.xbrlInput.datatypes)?this.xbrlInput.datatypes:this.xbrlInput.datatypes.concepts||[];e.datatypes=t,t.length,e.id}else e.datatypes?(e.id,e.datatypes.length):console.warn(`⚠️ [Draft Restore] No datatypes available for section ${e.id}`);this._regenerateFieldsForSection(e),o.length,e.id}}),this._currentSchema&&(this._currentSchema={...this._currentSchema,sections:this._allSections})}_mergeAdditionalCustomColumns(e){const t=new Map;e.forEach(e=>{e.columnId.startsWith("col-")&&(t.has(e.sectionId)||t.set(e.sectionId,[]),t.get(e.sectionId).push(e))}),this._allSections.forEach(e=>{var i;const o=t.get(e.id);if(o&&o.length>0){if(e.columns||(e.columns=[]),(null==(i=this.xbrlInput)?void 0:i.datatypes)&&!e.datatypes){const t=Array.isArray(this.xbrlInput.datatypes)?this.xbrlInput.datatypes:this.xbrlInput.datatypes.concepts||[];e.datatypes=t,t.length,e.id}else e.datatypes?(e.id,e.datatypes.length):console.warn(`⚠️ [Merge Custom] No datatypes available for section ${e.id}`);o.forEach(t=>{t.columnId,t.startDate,t.endDate,t.date,t.periodType;if(!e.columns.find(e=>e.id===t.columnId)){const i={id:t.columnId,title:t.label,description:t.description,type:t.dimensionData?"dimension":"base",periodStartDate:t.startDate||t.date,periodEndDate:t.endDate||t.date,dimensionData:t.dimensionData,order:e.columns.length,removable:!0,periodType:t.periodType};i.id,i.title,i.description,i.periodStartDate,i.periodEndDate,i.periodType,e.columns.push(i),t.columnId,e.id}}),this._regenerateFieldsForSection(e)}}),this._currentSchema&&(this._currentSchema={...this._currentSchema,sections:this._allSections})}_applyCustomPeriodDataToFields(){if(!this._periodData||0===Object.keys(this._periodData).length)return;const e=t=>{t.forEach(t=>{if(this._periodData[t.id]){const e=this._periodData[t.id];t.fields&&t.fields.forEach(i=>{const o=e[i.columnId];o&&(o.startDate&&(i.periodStartDate=o.startDate),o.endDate&&(i.periodEndDate=o.endDate),o.instantDate&&(i.periodInstantDate=o.instantDate),t.id,i.columnId,i.periodStartDate,i.periodEndDate,i.periodInstantDate)})}t.children&&t.children.length>0&&e(t.children)})};this._allSections.forEach(t=>{t.concepts&&t.concepts.length>0&&e(t.concepts)})}_regenerateFieldsForSection(e){if(!e.columns)return;const t=this._periodPreferences[e.id]||{showDuration:!0,showInstant:!0,showPreviousYear:!1},i=o=>{o.forEach(o=>{o.fields=[];this._shouldShowConceptBasedOnPeriodPreferences(o,t)&&e.columns.forEach(t=>{var i;const r=o.periodType,n=this._inferColumnPeriodType(t);if(o.abstract)return;const a=t.id.startsWith("col-"),s=t.id.startsWith("duration_")||t.id.startsWith("instant_")||t.id.startsWith("typed-"),l=!0===e.showPeriodControl;if(!(!n||"duration"===t.id||"default"===t.id||a&&l||s)&&r&&n&&r!==n)return o.id,void t.id;const d={id:`${o.id}_${t.id}`,conceptId:o.id,columnId:t.id,type:this._mapConceptTypeToFieldType(o.type),label:o.label,periodType:r,conceptType:o.type,periodStartDate:t.periodStartDate,periodEndDate:t.periodEndDate,periodInstantDate:"instant"===r?this._resolveInstantDate(this._getEffectivePeriodRole(o),void 0,t.periodStartDate,t.periodEndDate):void 0};if(null==(i=this._periodData[o.id])?void 0:i[t.id]){const e=this._periodData[o.id][t.id];e.startDate&&(d.periodStartDate=e.startDate),e.endDate&&(d.periodEndDate=e.endDate),e.instantDate&&(d.periodInstantDate=e.instantDate),o.id,t.id,d.periodStartDate,d.periodEndDate,d.periodInstantDate}else o.id,t.id,this._periodData[o.id];(o.id.includes("DescriptionLocationNL")||t.id.startsWith("col-"))&&(o.id,t.id,d.periodStartDate,d.periodEndDate,t.periodStartDate),o.fields.push(d)}),o.children&&i(o.children)})};i(e.concepts)}_shouldShowConceptBasedOnPeriodPreferences(e,t){return!!e.abstract||(!e.periodType||!("duration"===e.periodType&&!t.showDuration)&&!("instant"===e.periodType&&!t.showInstant))}_inferColumnPeriodType(e){return e.periodType?e.periodType:e.periodStartDate&&e.periodEndDate?e.periodStartDate===e.periodEndDate?"instant":"duration":e.periodStartDate&&!e.periodEndDate?"instant":void 0}_mapConceptTypeToFieldType(e){return e?e.includes("monetary")||e.includes("Monetary")?"number":e.includes("date")||e.includes("Date")?"date":e.includes("boolean")||e.includes("Boolean")?"boolean":e.includes("integer")||e.includes("Integer")||e.includes("decimal")||e.includes("Decimal")?"number":"text":"text"}_generateSubmissionData(){const e=[];if(!this._currentSchema)return e;this._currentSchema.sections.forEach(t=>{this._processConceptsForSubmission(t.concepts,e,t)}),this._includePreservedDataInSubmission(e);return this._removeDuplicateSubmissions(e)}_includePreservedDataInSubmission(e){Object.keys(this._preservedFormData).forEach(t=>{const i=this._preservedFormData[t];i&&Object.keys(i).forEach(o=>{const r=i[o];if(null!=r&&""!==r){const i=this._findConceptInAllSections(t);if(i){const n=this._findSectionForConcept(t);this._addConceptDataToSubmission(i,o,r,e,n||void 0)}}})}),e.length}_findConceptInAllSections(e){for(const t of this._allSections){const i=this._findConceptInSection(t.concepts,e);if(i)return i}return null}_findSectionForConcept(e){for(const t of this._allSections){if(this._findConceptInSection(t.concepts,e))return t}return null}_addConceptDataToSubmission(e,t,i,o,r){var n,a,s,l,d;const c=e.fields.find(e=>e.columnId===t);if(!c)return;const p="instant"===e.periodType,u=null==(n=this._periodData[e.id])?void 0:n[t],h=null==(a=this._unitData[e.id])?void 0:a[t],m=this._findColumnByIdInAllSections(t);e.id,u&&JSON.stringify(u),null==m||m.periodStartDate,null==m||m.periodEndDate;const f=(null==u?void 0:u.startDate)||(null==m?void 0:m.periodStartDate)||c.periodStartDate||this.periodStartDate,b=(null==u?void 0:u.endDate)||(null==m?void 0:m.periodEndDate)||c.periodEndDate||this.periodEndDate,g=(null==u?void 0:u.instantDate)||c.periodInstantDate||b||f,v={conceptId:e.originalConceptId||e.id,columnId:t,value:i,period:{type:e.periodType||"duration",...p?{date:g}:{startDate:f,endDate:b}}};h&&(v.unit=h,e.id);const y=null==(s=e.type)?void 0:s.toLowerCase().includes("monetary"),x=(null==(l=this._decimalsData[e.id])?void 0:l[t])||("INF"!==this.decimals?this.decimals:void 0);if(y&&x){const e=parseFloat(x);v.decimals=isNaN(e)?x:String(-Math.abs(e))}(null==(d=null==m?void 0:m.dimensionData)?void 0:d.memberLabel)&&(v.dimension=m.dimensionData.memberLabel),JSON.stringify(v,null,2),o.push(v)}_findColumnByIdInAllSections(e){for(const t of this._allSections)if(t.columns){const i=t.columns.find(t=>t.id===e);if(i)return i}}_removeDuplicateSubmissions(e){const t=new Map;return e.forEach(e=>{const i="instant"===e.period.type?e.period.date:`${e.period.startDate}_${e.period.endDate}`,o=`${e.conceptId}_${e.value}_${e.dimension||"no-dimension"}_${i}`;t.has(o)||t.set(o,e)}),Array.from(t.values())}_findColumnById(e){if(this._currentSchema)for(const t of this._currentSchema.sections)if(t.columns){const i=t.columns.find(t=>t.id===e);if(i)return i}}_findColumnByIdInSection(e,t){if(null==t?void 0:t.columns)return t.columns.find(t=>t.id===e)}_getTypedMemberNameForAxis(e,t){var i,o,r,n;if(!(null==(o=null==(i=this.xbrlInput)?void 0:i.hypercubes)?void 0:o[0]))return null;const a=null==t?void 0:t.id;if(!a)return null;const s=null==(r=this.xbrlInput.hypercubes[0].roles)?void 0:r.find(e=>e.roleId===a);if(!(null==s?void 0:s.items))return null;for(const l of s.items)if(l.dimensions){const t=l.dimensions.find(t=>t.id===e);if(null==(n=null==t?void 0:t.typedMember)?void 0:n.id)return t.typedMember.id}return null}_doesConceptApplyToTypedDimension(e,t,i){var o,r,n;if(!(null==(r=null==(o=this.xbrlInput)?void 0:o.hypercubes)?void 0:r[0]))return!1;const a=null==t?void 0:t.id;if(!a)return!1;const s=this.xbrlInput.hypercubes[0].roles.find(e=>e.roleId===a);if(!(null==(n=null==s?void 0:s.items)?void 0:n.length))return!1;for(const l of s.items){const t=e.originalConceptId||e.id;if(l.conceptIds&&l.conceptIds.includes(t)){const e=l.dimensions.some(e=>e.typedMember);return e}}return e.originalConceptId||e.id,!1}_getApplicableTypedDimensions(e,t){var i,o,r;if(!(null==(o=null==(i=this.xbrlInput)?void 0:i.hypercubes)?void 0:o[0])||!(null==t?void 0:t.id))return[];const n=this.xbrlInput.hypercubes[0].roles.find(e=>e.roleId===t.id);if(!(null==(r=null==n?void 0:n.items)?void 0:r.length))return[];const a=e.originalConceptId||e.id;for(const s of n.items)if(s.conceptIds&&s.conceptIds.includes(a)){const e=s.dimensions.filter(e=>e.typedMember).map(e=>e.id);return e}return[]}_processConceptsForSubmission(e,t,i){const o="Toelichting op de geconsolideerde jaarrekening - Financiële vaste activa: Deelnemingen: Volledig geconsolideerd: Specificatie",r=(null==i?void 0:i.title)||"Unknown";e.forEach(e=>{if(r===o&&(e.originalConceptId||e.id,e.fields&&(e.fields.length,e.fields.forEach((t,i)=>{var o;t.columnId,null==(o=this._formData[e.id])||o[t.columnId]}))),e.fields&&e.fields.length>1&&e.fields.forEach((e,t)=>{}),e.fields&&e.fields.length>0){e.fields.forEach(o=>{var r,n,a,s,l,d,c,p;const u=this._formData[e.id];let h=null==u?void 0:u[o.columnId];const m=o.conceptId||e.id.split("__").slice(0,-1).join("__")||e.id;if((null==h||""===h)&&this._isRoundingLevelConcept(m)&&!this._hasValidGlobalDecimals()){const t=this._findFactValueForField(e,o,i);null!=t&&""!==t&&(h=t)}if((null==h||""===h)&&this._effectiveMasterData){const e=null==(r=this._effectiveMasterData)?void 0:r[m];null!=e&&""!==e&&(h=e,o.columnId,JSON.stringify(h))}if(null!=h&&""!==h){const r=this._findColumnByIdInSection(o.columnId,i),u=null==(n=this._periodData[e.id])?void 0:n[o.columnId],m={conceptId:e.id,draftInstanceId:e.id,columnId:o.columnId,value:h,period:{type:e.periodType||"duration"}};if("instant"===e.periodType){const t=this._resolveSubmissionInstantDate(e,o,u,r);m.period.date=t}else{const e=(null==u?void 0:u.startDate)||(null==r?void 0:r.periodStartDate)||o.periodStartDate||this.periodStartDate,t=(null==u?void 0:u.endDate)||(null==r?void 0:r.periodEndDate)||o.periodEndDate||this.periodEndDate;m.period.startDate=e,m.period.endDate=t}e.id,o.columnId,u&&JSON.stringify(u),null==r||r.periodStartDate,null==r||r.periodEndDate,"instant"===m.period.type?m.period.date:(m.period.startDate,m.period.endDate);const f=null==(a=this._unitData[e.id])?void 0:a[o.columnId];f?(m.unit=f,e.id,o.columnId):(e.id,o.columnId,JSON.stringify(this._unitData,null,2));const b=null==(s=e.type)?void 0:s.toLowerCase().includes("monetary"),g=(null==(l=this._decimalsData[e.id])?void 0:l[o.columnId])||("INF"!==this.decimals?this.decimals:void 0);if(b&&g){const e=parseFloat(g);m.decimals=isNaN(e)?g:String(-Math.abs(e))}"dimension"===(null==r?void 0:r.type)&&(null==(d=r.dimensionData)?void 0:d.dimensionIdKey)?(m.dimension=r.dimensionData.dimensionIdKey,o.columnId,r.dimensionData.dimensionIdKey):(o.columnId,null==r||r.type,null==r||r.dimensionData);const v=i?this._scopedColumnKey(i.id,o.columnId):o.columnId,y=this._typedMemberData[v],x=this._typedMemberData[o.columnId];if(y||x){const t=this._getApplicableTypedDimensions(e,i);if(e.id,t.length>0){const e={};t.forEach(t=>{const o=(null==y?void 0:y[t])??(null==x?void 0:x[t]);if(o){const r=this._getTypedMemberNameForAxis(t,i);e[t]={value:o,memberName:r||"Unknown"}}}),Object.keys(e).length>0&&(m.typedMembers=e)}else e.id}else o.columnId,Object.keys(this._typedMemberData),r&&(r.id,r.type,null==(c=r.dimensionData)||c.hasTypedMembers,r.dimensionData);if(!m.typedMembers&&(null==(p=o.crossRoleTypedMembers)?void 0:p.length)){const t=`${e.id}__${o.columnId}`,i=this._typedMemberData[t];if(i){const t={};o.crossRoleTypedMembers.forEach(e=>{const o=i[e.axisId];null!=o&&""!==o&&(t[e.axisId]={value:o,memberName:e.typedMemberId})}),Object.keys(t).length>0&&(m.typedMembers=t,e.id,o.columnId)}}t.push(m)}});const o=this._repeatCounts[e.id]||0;if(o>0&&e.fields.some(e=>{var t;return null==(t=e.crossRoleTypedMembers)?void 0:t.length}))for(let r=1;r<=o;r++){const o=`${e.id}__repeat_${r}`;e.fields.forEach(r=>{var n,a,s,l,d;const c=null==(n=this._formData[o])?void 0:n[r.columnId];if(null==c||""===c)return;const p=this._findColumnByIdInSection(r.columnId,i),u=null==(a=this._periodData[o])?void 0:a[r.columnId],h={conceptId:e.id,draftInstanceId:o,columnId:r.columnId,value:c,period:{type:e.periodType||"duration"}};"instant"===e.periodType?h.period.date=this._resolveSubmissionInstantDate(e,r,u,p):(h.period.startDate=(null==u?void 0:u.startDate)||(null==p?void 0:p.periodStartDate)||r.periodStartDate||this.periodStartDate,h.period.endDate=(null==u?void 0:u.endDate)||(null==p?void 0:p.periodEndDate)||r.periodEndDate||this.periodEndDate);const m=null==(s=this._unitData[o])?void 0:s[r.columnId];if(m&&(h.unit=m),"dimension"===(null==p?void 0:p.type)&&(null==(l=p.dimensionData)?void 0:l.dimensionIdKey)&&(h.dimension=p.dimensionData.dimensionIdKey),null==(d=r.crossRoleTypedMembers)?void 0:d.length){const e=`${o}__${r.columnId}`,t=this._typedMemberData[e];if(t){const e={};r.crossRoleTypedMembers.forEach(i=>{const o=t[i.axisId];null!=o&&""!==o&&(e[i.axisId]={value:o,memberName:i.typedMemberId})}),Object.keys(e).length>0&&(h.typedMembers=e)}}t.push(h)})}}e.children&&this._processConceptsForSubmission(e.children,t,i)})}_handleReset(){this._formData={...this.initialData},this._touched.clear(),this._dirty=!1,this.hasUnsavedChanges=!1,this._submitted=!1,this._preservedFormData={},this._preservedTypedMemberData={},this._validateForm(),this.requestUpdate(),this.dispatchEvent(new CustomEvent("form-reset",{detail:{},bubbles:!0}))}_getFormState(){return{data:this._formData,errors:this._errors,touched:this._touched,dirty:this._dirty,valid:this._valid,submitted:this._submitted}}_analyzeAllVisibleRoles(){if(this._currentSchema&&this._currentSchema.sections&&0!==this._currentSchema.sections.length){this._currentSchema.sections.length;for(const e of this._currentSchema.sections)this._analyzeAndLogRole(e.id)}}_handleRoleContextMenu(e,t,i){e.preventDefault(),e.stopPropagation(),this._contextMenuX=e.clientX,this._contextMenuY=e.clientY,this._contextMenuRoleId=t,this._showRoleContextMenu=!0,this.requestUpdate()}_closeRoleContextMenu(){this._showRoleContextMenu=!1,this._contextMenuRoleId=null,this.requestUpdate()}_handleRemoveRole(){if(!this._contextMenuRoleId)return void this._closeRoleContextMenu();const e=this._allSections.find(e=>e.id===this._contextMenuRoleId),t=(null==e?void 0:e.title)||"Unknown";if(this._contextMenuRoleId,Array.isArray(this._selectedRoleIds)&&(this._selectedRoleIds.length>0&&"object"==typeof this._selectedRoleIds[0]?this._selectedRoleIds=this._selectedRoleIds.filter(e=>e.roleId!==this._contextMenuRoleId):this._selectedRoleIds=this._selectedRoleIds.filter(e=>e!==this._contextMenuRoleId)),this._selectedRoleIds.length,this._activeSidePanelRoleId===this._contextMenuRoleId){const e=this._getRoleIdsArray();this._activeSidePanelRoleId=e.length>0?e[0]:null,this._activeSidePanelRoleId}this._applyRoleFilter(),this.dispatchEvent(new CustomEvent("role-removed",{detail:{roleId:this._contextMenuRoleId,roleTitle:t,remainingRolesCount:this._selectedRoleIds.length},bubbles:!0,composed:!0})),this._closeRoleContextMenu()}_handleRoleCompletedChange(e,t){t?this._roleCompletedStates.set(e,!0):this._roleCompletedStates.delete(e),this._roleCompletedStates=new Map(this._roleCompletedStates),this._handleSaveDraft("auto")}_handleSidePanelRoleClick(e){this._activeSidePanelRoleId&&this._activeSidePanelRoleId!==e&&this._analyzeAndLogRole(this._activeSidePanelRoleId),this._activeSidePanelRoleId=e}_analyzeAndLogRole(e){const t=this._allSections.find(t=>t.id===e);if(!t)return void console.warn(`⚠️ Section not found for roleId: ${e}`);t.title,this.masterData&&Object.keys(this.masterData);const i=[];this._collectAllFields(t.concepts||[],new Set((t.columns||[]).map(e=>e.id)),t.columns||[],i);const o=this._roleHasErrors(e),r=i.filter(e=>e.isEmpty).length,n=i.filter(e=>!e.isEmpty).length;let a;i.length,a=o?"INVALID":0===n?"UNTOUCHED":r>0?"INCOMPLETE":"COMPLETE","INVALID"===a||("UNTOUCHED"===a?(this._roleBorderStatuses.set(e,"untouched"),this._roleBorderStatuses=new Map(this._roleBorderStatuses)):"INCOMPLETE"===a?(this._roleBorderStatuses.set(e,"incomplete"),this._roleBorderStatuses=new Map(this._roleBorderStatuses)):(this._roleBorderStatuses.set(e,"complete"),this._roleBorderStatuses=new Map(this._roleBorderStatuses)))}_collectAllFields(e,t,i,o){var r,n,a;for(const s of e)if(s.abstract)s.children&&s.children.length>0&&this._collectAllFields(s.children,t,i,o);else{if(s.fields&&s.fields.length>0){const e=s.fields.filter(e=>t.has(e.columnId));for(const t of e){const e=s.id,l=t.conceptId;let d=null==(r=this._formData[e])?void 0:r[t.columnId];void 0===d&&e!==l&&(d=null==(n=this._formData[l])?void 0:n[t.columnId]);const c=null==(a=this._effectiveMasterData)?void 0:a[l];(null==d||"string"==typeof d&&""===d.trim())&&void 0!==c&&(d=c,t.columnId,JSON.stringify(d));let p=null==d||"string"==typeof d&&""===d.trim();if(p&&s.facts&&s.facts.length>0){const e=i.find(e=>e.id===t.columnId),o={conceptId:l,columnId:t.columnId,periodStartDate:t.periodStartDate||(null==e?void 0:e.periodStartDate),periodEndDate:t.periodEndDate||(null==e?void 0:e.periodEndDate),periodInstantDate:t.periodInstantDate||("instant"===t.periodType?t.periodEndDate||t.periodStartDate:void 0),periodType:t.periodType,dimensionData:null==e?void 0:e.dimensionData},r=De.findMatchingFact(s.facts,o);r&&null!==r.value&&void 0!==r.value&&""!==r.value&&(d=r.value,p=!1)}o.push({conceptId:l,columnId:t.columnId,value:d,isEmpty:p})}}s.children&&s.children.length>0&&this._collectAllFields(s.children,t,i,o)}}_handleSidePanelSearchInput(e){const t=e.target;this._sidePanelSearchQuery=t.value}_clearSidePanelSearch(){var e;this._sidePanelSearchQuery="";const t=null==(e=this.shadowRoot)?void 0:e.querySelector(".side-panel-search-input");t&&(t.value="",t.focus()),this.updateComplete.then(()=>this._scrollActiveRoleIntoView())}_toggleSidePanelCollapse(){this._sidePanelCollapsed=!this._sidePanelCollapsed}_isSectionBlank(e){const t=e.columns||this._columns,i=e=>{var o;for(const r of e){if(!r.abstract)for(const e of t){const t=null==(o=this._formData[r.id])?void 0:o[e.id];if(null!=t&&""!==t)return!0}if(r.children&&r.children.length>0&&i(r.children))return!0}return!1};return!i(e.concepts)}_getConceptSearchMatchIds(e){var t,i,o;const r=new Set;if(!e.trim()||!(null==(i=null==(t=this.xbrlInput)?void 0:t.presentation)?void 0:i.length))return r;const n=e.toLowerCase().trim(),a=e=>{var t;for(const i of e)r.add(i.id),(null==(t=i.children)?void 0:t.length)&&a(i.children)},s=e=>{var t,i,o,l;for(const d of e){let e=(null==(t=d.conceptName)?void 0:t.toLowerCase().includes(n))||(null==(i=d.id)?void 0:i.toLowerCase().includes(n));!e&&Array.isArray(d.labels)&&(e=d.labels.some(e=>{var t;return null==(t=e.label)?void 0:t.toLowerCase().includes(n)})),e?(r.add(d.id),(null==(o=d.children)?void 0:o.length)&&a(d.children)):(null==(l=d.children)?void 0:l.length)&&s(d.children)}};for(const l of this.xbrlInput.presentation)for(const e of l.roles||[])s((null==(o=e.presentationLinkbase)?void 0:o.concepts)||[]);return r}_isSectionConceptSearchMatch(e,t){if(0===t.size)return!1;const i=e=>{var o;for(const r of e){if(t.has(r.originalConceptId))return!0;if((null==(o=r.children)?void 0:o.length)&&i(r.children))return!0}return!1};return i(e.concepts)}_filterSidePanelSections(e){if(!this._sidePanelSearchQuery.trim())return e;const t=this._sidePanelSearchQuery.toLowerCase().trim();return e.filter(e=>{var i,o,r;const n=e.title.toLowerCase().includes(t),a=e.id.toLowerCase().includes(t),s=(null==(i=e.description)?void 0:i.toLowerCase().includes(t))||!1,l=(null==(r=null==(o=e.metadata)?void 0:o.roleURI)?void 0:r.toLowerCase().includes(t))||!1;return n||a||s||l})}_renderAdminModeContent(t){var i,o;if(!t)return e.html`
3656
3902
  <div class="admin-mode-container">
3657
3903
  <p>No role selected</p>
3658
3904
  </div>
3659
- `;const r=(null==(i=this._periodPreferences[t.id])?void 0:i.showPreviousYear)??t.showPreviousYear??!1,n=this._getDimensionsForRole(t.id),a=n.length>0;if(a&&!(null==(o=this._periodPreferences[t.id])?void 0:o.dimensionSelections)){const e=this._periodPreferences[t.id]||{showDuration:!0,showInstant:!0,showPreviousYear:!1};e.dimensionSelections=[],n.forEach(t=>{var i,o;const r=this._getAllDimensionMembers(t.members).map(e=>e.id),n=(null==(o=null==(i=t.labels)?void 0:i.find(e=>"http://www.xbrl.org/2003/role/label"===e.role))?void 0:o.label)||t.conceptName;e.dimensionSelections&&e.dimensionSelections.push({dimensionId:t.id,dimensionLabel:n,selectedMemberIds:r})}),this._periodPreferences={...this._periodPreferences,[t.id]:e},console.log("✅ [Admin Mode] Initialized all dimension members as selected by default for role:",t.id)}return e.html`
3905
+ `;const r=(null==(i=this._periodPreferences[t.id])?void 0:i.showPreviousYear)??t.showPreviousYear??!1,n=this._getDimensionsForRole(t.id),a=n.length>0;if(a&&!(null==(o=this._periodPreferences[t.id])?void 0:o.dimensionSelections)){const e=this._periodPreferences[t.id]||{showDuration:!0,showInstant:!0,showPreviousYear:!1};e.dimensionSelections=[],n.forEach(t=>{var i,o;const r=this._getAllDimensionMembers(t.members).map(e=>e.id),n=(null==(o=null==(i=t.labels)?void 0:i.find(e=>"http://www.xbrl.org/2003/role/label"===e.role))?void 0:o.label)||t.conceptName;e.dimensionSelections&&e.dimensionSelections.push({dimensionId:t.id,dimensionLabel:n,selectedMemberIds:r})}),this._periodPreferences={...this._periodPreferences,[t.id]:e},t.id}return e.html`
3660
3906
  <div class="admin-mode-container">
3661
3907
  <h2 class="admin-mode-title">Role Configuration: ${t.title}</h2>
3662
3908
  <div class="admin-roles-list">
@@ -3674,7 +3920,7 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
3674
3920
 
3675
3921
  ${a?e.html`
3676
3922
  <div class="admin-dimension-section">
3677
- <div class="admin-dimension-header">📊 ${k.t("filter.dimensionMemberSelection")}</div>
3923
+ <div class="admin-dimension-header">📊 ${E.t("filter.dimensionMemberSelection")}</div>
3678
3924
  ${n.map(i=>{var o,r;const n=this._getAllDimensionMembers(i.members),a=(null==(r=null==(o=i.labels)?void 0:o.find(e=>"http://www.xbrl.org/2003/role/label"===e.role))?void 0:r.label)||i.conceptName,s=this._isSingleMemberDimension(i);return e.html`
3679
3925
  <div class="admin-dimension-group">
3680
3926
  <div class="admin-dimension-label">${a}${s?" (Mandatory)":""}</div>
@@ -3698,13 +3944,13 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
3698
3944
  class="admin-member-select-btn"
3699
3945
  @click="${()=>this._selectAllAdminDimensionMembers(t.id,i.id)}"
3700
3946
  >
3701
- ${k.t("filter.selectAllMembers")}
3947
+ ${E.t("filter.selectAllMembers")}
3702
3948
  </button>
3703
3949
  <button
3704
3950
  class="admin-member-select-btn"
3705
3951
  @click="${()=>this._deselectAllAdminDimensionMembers(t.id,i.id)}"
3706
3952
  >
3707
- ${k.t("filter.clearMembers")}
3953
+ ${E.t("filter.clearMembers")}
3708
3954
  </button>
3709
3955
  </div>
3710
3956
  `}
@@ -3714,12 +3960,15 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
3714
3960
  `:""}
3715
3961
  </div>
3716
3962
  </div>
3717
- `}_handleAdminCheckboxChange(e,t,i){const o=this._adminRoleConfigs[e]||{showPreviousYear:!1};this._adminRoleConfigs={...this._adminRoleConfigs,[e]:{...o,[t]:i}};const r=this._periodPreferences[e]||{showDuration:!0,showInstant:!0,showPreviousYear:!1};this._periodPreferences={...this._periodPreferences,[e]:{...r,[t]:i}},console.log(`✅ [Admin Mode] Updated ${t} = ${i} for role ${e}`),console.log("📋 [Admin Mode] _periodPreferences now includes:",this._periodPreferences[e])}_getDimensionsForRole(e){var t,i,o,r;if(!(null==(i=null==(t=this.xbrlInput)?void 0:t.hypercubes)?void 0:i[0]))return[];const n=null==(o=this.xbrlInput.hypercubes[0].roles)?void 0:o.find(t=>t.roleId===e);if(!(null==(r=null==n?void 0:n.items)?void 0:r.length))return[];const a=new Map;return n.items.forEach(e=>{e.dimensions&&e.dimensions.forEach(e=>{a.has(e.id)||a.set(e.id,e)})}),Array.from(a.values())}_getAllDimensionMembers(e){if(!e||0===e.length)return[];let t=[];return e.forEach(e=>{t.push(e),e.children&&e.children.length>0&&(t=t.concat(this._getAllDimensionMembers(e.children)))}),t}_isSingleMemberDimension(e){if(!e||!e.members)return!1;return 1===this._getAllDimensionMembers(e.members).length}_handleAdminDimensionMemberChange(e,t,i,o){var r,n;e.stopPropagation();const a=e.target,s=this._periodPreferences[t]||{showDuration:!0,showInstant:!0,showPreviousYear:!1,dimensionSelections:[]};s.dimensionSelections||(s.dimensionSelections=[]);let l=s.dimensionSelections.find(e=>e.dimensionId===i);if(!l){const e=this._getDimensionsForRole(t).find(e=>e.id===i),o=(null==(n=null==(r=null==e?void 0:e.labels)?void 0:r.find(e=>"http://www.xbrl.org/2003/role/label"===e.role))?void 0:n.label)||i;l={dimensionId:i,dimensionLabel:o,selectedMemberIds:[]},s.dimensionSelections.push(l)}a.checked?l.selectedMemberIds.includes(o)||l.selectedMemberIds.push(o):l.selectedMemberIds=l.selectedMemberIds.filter(e=>e!==o),this._periodPreferences={...this._periodPreferences,[t]:s},console.log("📊 [Admin Mode] Updated dimension selections:",this._periodPreferences[t].dimensionSelections),this.requestUpdate()}_isAdminDimensionMemberSelected(e,t,i){const o=this._periodPreferences[e];if(!(null==o?void 0:o.dimensionSelections))return!0;const r=o.dimensionSelections.find(e=>e.dimensionId===t);return!r||r.selectedMemberIds.includes(i)}_selectAllAdminDimensionMembers(e,t){var i,o;const r=this._getDimensionsForRole(e).find(e=>e.id===t);if(!r)return;const n=this._getAllDimensionMembers(r.members).map(e=>e.id),a=this._periodPreferences[e]||{showDuration:!0,showInstant:!0,showPreviousYear:!1,dimensionSelections:[]};a.dimensionSelections||(a.dimensionSelections=[]);let s=a.dimensionSelections.find(e=>e.dimensionId===t);if(!s){const e=(null==(o=null==(i=r.labels)?void 0:i.find(e=>"http://www.xbrl.org/2003/role/label"===e.role))?void 0:o.label)||t;s={dimensionId:t,dimensionLabel:e,selectedMemberIds:[]},a.dimensionSelections.push(s)}s.selectedMemberIds=n,this._periodPreferences={...this._periodPreferences,[e]:a},this.requestUpdate()}_deselectAllAdminDimensionMembers(e,t){const i=this._periodPreferences[e];if(!(null==i?void 0:i.dimensionSelections))return;const o=i.dimensionSelections.find(e=>e.dimensionId===t);o&&(o.selectedMemberIds=[]),this._periodPreferences={...this._periodPreferences,[e]:i},this.requestUpdate()}_handleAdminModeSubmit(){var e,t,i,o;if(!(null==(i=null==(t=null==(e=this.xbrlInput)?void 0:e.presentation)?void 0:t[0])?void 0:i.roles))return void console.error("No presentation data available");const r=JSON.parse(JSON.stringify(this.xbrlInput.presentation[0])),n=new Set((null==(o=this._currentSchema)?void 0:o.sections.map(e=>e.id))||[]);r.roles=r.roles.map(e=>{const t=n.has(e.id),i=this._adminRoleConfigs[e.id],o={...e,display:t?"yes":"no"};return void 0!==i&&t&&(o.showPreviousYear=i.showPreviousYear),o});const a=this.dynaformsMetadata||this._loadMetadataFromLocalStorage();console.log("📋 Updated Presentation Data:",r),console.log("📋 Metadata from localStorage:",a),this.dispatchEvent(new CustomEvent("admin-config-updated",{detail:{presentationData:r,roleConfigs:this._adminRoleConfigs,metadata:a},bubbles:!0,composed:!0})),console.log("✅ Admin configuration saved successfully with metadata")}_loadMetadataFromLocalStorage(){try{const e=localStorage.getItem("jupiter-form-draft-metadata");if(e)return JSON.parse(e)}catch(e){console.error("Failed to load metadata from localStorage:",e)}return null}_renderAccordionLayout(t,i,o,r){return e.html`
3963
+ `}_handleAdminCheckboxChange(e,t,i){const o=this._adminRoleConfigs[e]||{showPreviousYear:!1};this._adminRoleConfigs={...this._adminRoleConfigs,[e]:{...o,[t]:i}};const r=this._periodPreferences[e]||{showDuration:!0,showInstant:!0,showPreviousYear:!1};this._periodPreferences={...this._periodPreferences,[e]:{...r,[t]:i}},this._periodPreferences[e]}_getDimensionsForRole(e){var t,i,o,r;if(!(null==(i=null==(t=this.xbrlInput)?void 0:t.hypercubes)?void 0:i[0]))return[];const n=null==(o=this.xbrlInput.hypercubes[0].roles)?void 0:o.find(t=>t.roleId===e);if(!(null==(r=null==n?void 0:n.items)?void 0:r.length))return[];const a=new Map;return n.items.forEach(e=>{e.dimensions&&e.dimensions.forEach(e=>{a.has(e.id)||a.set(e.id,e)})}),Array.from(a.values())}_getAllDimensionMembers(e){if(!e||0===e.length)return[];let t=[];return e.forEach(e=>{t.push(e),e.children&&e.children.length>0&&(t=t.concat(this._getAllDimensionMembers(e.children)))}),t}_isSingleMemberDimension(e){if(!e||!e.members)return!1;return 1===this._getAllDimensionMembers(e.members).length}_handleAdminDimensionMemberChange(e,t,i,o){var r,n;e.stopPropagation();const a=e.target,s=this._periodPreferences[t]||{showDuration:!0,showInstant:!0,showPreviousYear:!1,dimensionSelections:[]};s.dimensionSelections||(s.dimensionSelections=[]);let l=s.dimensionSelections.find(e=>e.dimensionId===i);if(!l){const e=this._getDimensionsForRole(t).find(e=>e.id===i),o=(null==(n=null==(r=null==e?void 0:e.labels)?void 0:r.find(e=>"http://www.xbrl.org/2003/role/label"===e.role))?void 0:n.label)||i;l={dimensionId:i,dimensionLabel:o,selectedMemberIds:[]},s.dimensionSelections.push(l)}a.checked?l.selectedMemberIds.includes(o)||l.selectedMemberIds.push(o):l.selectedMemberIds=l.selectedMemberIds.filter(e=>e!==o),this._periodPreferences={...this._periodPreferences,[t]:s},this._periodPreferences[t].dimensionSelections,this.requestUpdate()}_isAdminDimensionMemberSelected(e,t,i){const o=this._periodPreferences[e];if(!(null==o?void 0:o.dimensionSelections))return!0;const r=o.dimensionSelections.find(e=>e.dimensionId===t);return!r||r.selectedMemberIds.includes(i)}_selectAllAdminDimensionMembers(e,t){var i,o;const r=this._getDimensionsForRole(e).find(e=>e.id===t);if(!r)return;const n=this._getAllDimensionMembers(r.members).map(e=>e.id),a=this._periodPreferences[e]||{showDuration:!0,showInstant:!0,showPreviousYear:!1,dimensionSelections:[]};a.dimensionSelections||(a.dimensionSelections=[]);let s=a.dimensionSelections.find(e=>e.dimensionId===t);if(!s){const e=(null==(o=null==(i=r.labels)?void 0:i.find(e=>"http://www.xbrl.org/2003/role/label"===e.role))?void 0:o.label)||t;s={dimensionId:t,dimensionLabel:e,selectedMemberIds:[]},a.dimensionSelections.push(s)}s.selectedMemberIds=n,this._periodPreferences={...this._periodPreferences,[e]:a},this.requestUpdate()}_deselectAllAdminDimensionMembers(e,t){const i=this._periodPreferences[e];if(!(null==i?void 0:i.dimensionSelections))return;const o=i.dimensionSelections.find(e=>e.dimensionId===t);o&&(o.selectedMemberIds=[]),this._periodPreferences={...this._periodPreferences,[e]:i},this.requestUpdate()}_handleAdminModeSubmit(){var e,t,i,o;if(!(null==(i=null==(t=null==(e=this.xbrlInput)?void 0:e.presentation)?void 0:t[0])?void 0:i.roles))return void console.error("No presentation data available");const r=JSON.parse(JSON.stringify(this.xbrlInput.presentation[0])),n=new Set((null==(o=this._currentSchema)?void 0:o.sections.map(e=>e.id))||[]);r.roles=r.roles.map(e=>{const t=n.has(e.id),i=this._adminRoleConfigs[e.id],o={...e,display:t?"yes":"no"};return void 0!==i&&t&&(o.showPreviousYear=i.showPreviousYear),o});const a=this.dynaformsMetadata||this._loadMetadataFromLocalStorage();this.dispatchEvent(new CustomEvent("admin-config-updated",{detail:{presentationData:r,roleConfigs:this._adminRoleConfigs,metadata:a},bubbles:!0,composed:!0}))}_loadMetadataFromLocalStorage(){try{const e=localStorage.getItem("jupiter-form-draft-metadata");if(e)return JSON.parse(e)}catch(e){console.error("Failed to load metadata from localStorage:",e)}return null}_renderAccordionLayout(t,i,o,r){const n=this._getConceptSearchMatchIds(this._conceptSearchText),a=this._conceptSearchText.trim().length>0;let s=t.sections;return("readonly"===this.mode||this._showFactsOnly)&&(s=s.filter(e=>!this._isSectionBlank(e))),a&&(s=s.filter(e=>this._isSectionConceptSearchMatch(e,n))),e.html`
3718
3964
  <div class="form-sections">
3965
+ <!-- JDF-101: names the active concept/facts-only filter so a narrowed view isn't mistaken for missing data -->
3966
+ ${"admin"!==this.mode?this._renderActiveFilterBanner(s):""}
3967
+
3719
3968
  <!-- Validation Summary -->
3720
3969
  ${o?e.html`
3721
3970
  <div class="validation-summary ${0===r?"warnings-only":""}">
3722
- <h4 class="validation-summary-title">${r>0?k.t("validation.summary"):k.t("calculationWarning.title")}</h4>
3971
+ <h4 class="validation-summary-title">${r>0?E.t("validation.summary"):E.t("calculationWarning.title")}</h4>
3723
3972
  <ul class="validation-summary-list">
3724
3973
  ${this._errors.filter(e=>"error"===e.severity||"warning"===e.severity&&"readonly"!==this.mode).map(t=>e.html`
3725
3974
  <li class="validation-summary-item ${t.severity}">${"warning"===t.severity?"⚠️ ":""}${t.message}</li>
@@ -3735,16 +3984,16 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
3735
3984
  </div>
3736
3985
  `):0===t.sections.length?e.html`
3737
3986
  <div class="no-roles-message">
3738
- <h3>${k.t("form.noRoleSelected")}</h3>
3739
- <p>${k.t("filter.selectRoles")}</p>
3740
- <p>${k.t("filter.roles")}: ${this._allSections.length}</p>
3987
+ <h3>${E.t("form.noRoleSelected")}</h3>
3988
+ <p>${E.t("filter.selectRoles")}</p>
3989
+ <p>${E.t("filter.roles")}: ${this._allSections.length}</p>
3741
3990
  </div>
3742
- `:(()=>{const o=this._getConceptSearchMatchIds(this._conceptSearchText),r=this._conceptSearchText.trim().length>0;let n=t.sections;return("readonly"===this.mode||this._showFactsOnly)&&(n=n.filter(e=>!this._isSectionBlank(e))),r&&(n=n.filter(e=>this._isSectionConceptSearchMatch(e,o))),n.map((t,n)=>{var a;return e.html`
3991
+ `:(()=>s.map((t,o)=>{var r;return e.html`
3743
3992
  <jupiter-form-section
3744
3993
  section-id="${t.id}"
3745
3994
  .section="${t}"
3746
3995
  .columns="${this._getColumnsWithHiddenFlags(t)}"
3747
- .datatypes="${t.datatypes||(null==(a=this.xbrlInput)?void 0:a.datatypes)}"
3996
+ .datatypes="${t.datatypes||(null==(r=this.xbrlInput)?void 0:r.datatypes)}"
3748
3997
  .formData="${this._formData}"
3749
3998
  .periodData="${this._periodData}"
3750
3999
  .unitData="${this._unitData}"
@@ -3756,13 +4005,15 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
3756
4005
  .disabled="${this.disabled||this.readonly}"
3757
4006
  .collapsible="${!1!==i.collapsibleSections}"
3758
4007
  .locale="${i.locale||"en-US"}"
4008
+ .numberLocale="${this._effectiveNumberLocale()}"
3759
4009
  .language="${this.language}"
3760
- .isFirstSection="${0===n}"
4010
+ .isFirstSection="${0===o}"
3761
4011
  .availableDimensions="${this._getAvailableDimensionsForSection(t.id)}"
3762
4012
  .mode="${this.mode}"
3763
4013
  .showFactsOnly="${this._showFactsOnly}"
3764
- .conceptMatchIds="${r?o:void 0}"
4014
+ .conceptMatchIds="${a?n:void 0}"
3765
4015
  .masterData="${this._effectiveMasterData}"
4016
+ .prefilledTooltip="${this.prefilledTooltip}"
3766
4017
  .periodStartDate="${this.periodStartDate}"
3767
4018
  .periodEndDate="${this.periodEndDate}"
3768
4019
  .calculationEnabled="${this.calculationEnabled}"
@@ -3779,9 +4030,9 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
3779
4030
  @column-show="${this._handleColumnShow}"
3780
4031
  @column-add-request="${this._handleColumnAddRequest}"
3781
4032
  ></jupiter-form-section>
3782
- `})})()}
4033
+ `}))()}
3783
4034
  </div>
3784
- `}_renderSidePanelLayout(t,i,o,r){var n;const a=this._getConceptSearchMatchIds(this._conceptSearchText),s=this._conceptSearchText.trim().length>0;let l="readonly"===this.mode||this._showFactsOnly?t.sections.filter(e=>!this._isSectionBlank(e)):t.sections;s&&(l=l.filter(e=>this._isSectionConceptSearchMatch(e,a)));const d=this._filterSidePanelSections(l);this._activeSidePanelRoleId&&d.find(e=>e.id===this._activeSidePanelRoleId)||(this._activeSidePanelRoleId=d.length>0?d[0].id:null);const c=l.find(e=>e.id===this._activeSidePanelRoleId);return e.html`
4035
+ `}_getSidePanelVisibleSections(e){const t=this._getConceptSearchMatchIds(this._conceptSearchText),i=this._conceptSearchText.trim().length>0;let o="readonly"===this.mode||this._showFactsOnly?e.sections.filter(e=>!this._isSectionBlank(e)):e.sections;return i&&(o=o.filter(e=>this._isSectionConceptSearchMatch(e,t))),o}_handleSidePanelPrevNext(e){const t=this._currentSchema;if(!t)return;const i=this._filterSidePanelSections(this._getSidePanelVisibleSections(t)),o=i.findIndex(e=>e.id===this._activeSidePanelRoleId);if(-1===o)return;const r=i["prev"===e?o-1:o+1];r&&(this._handleSidePanelRoleClick(r.id),this.updateComplete.then(()=>{var e;const t=null==(e=this.shadowRoot)?void 0:e.querySelector(".side-panel-content");null==t||t.scrollTo({top:0,behavior:"smooth"}),this._scrollActiveRoleIntoView()}))}_renderSidePanelLayout(t,i,o,r){var n;const a=this._getConceptSearchMatchIds(this._conceptSearchText),s=this._conceptSearchText.trim().length>0,l=this._getSidePanelVisibleSections(t),d=this._filterSidePanelSections(l);this._activeSidePanelRoleId&&l.find(e=>e.id===this._activeSidePanelRoleId)||(this._activeSidePanelRoleId=d.length>0?d[0].id:null);const c=l.find(e=>e.id===this._activeSidePanelRoleId),p=c?d.findIndex(e=>e.id===c.id):-1,u=p>=0?d[p+1]:void 0;return e.html`
3785
4036
  <div class="side-panel-layout">
3786
4037
  <!-- Left: Roles List (filtered) -->
3787
4038
  <div class="side-panel-roles-list ${this._sidePanelCollapsed?"collapsed":""}">
@@ -3789,7 +4040,7 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
3789
4040
  <button
3790
4041
  class="side-panel-toggle-btn ${this._sidePanelCollapsed?"collapsed":""}"
3791
4042
  @click="${this._toggleSidePanelCollapse}"
3792
- title="${this._sidePanelCollapsed?k.t("form.expandPanel"):k.t("form.collapsePanel")}"
4043
+ title="${this._sidePanelCollapsed?E.t("form.expandPanel"):E.t("form.collapsePanel")}"
3793
4044
  >
3794
4045
  <svg viewBox="0 0 24 24">
3795
4046
  <path d="M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z"/>
@@ -3802,12 +4053,12 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
3802
4053
  <input
3803
4054
  type="text"
3804
4055
  class="side-panel-search-input"
3805
- placeholder="${k.t("filter.searchPlaceholder")}"
4056
+ placeholder="${E.t("filter.searchPlaceholder")}"
3806
4057
  .value="${this._sidePanelSearchQuery}"
3807
4058
  @input="${this._handleSidePanelSearchInput}"
3808
4059
  />
3809
4060
  ${this._sidePanelSearchQuery?e.html`
3810
- <button class="side-panel-clear-search" @click="${this._clearSidePanelSearch}" title="${k.t("filter.clearSearch")}">
4061
+ <button class="side-panel-clear-search" @click="${this._clearSidePanelSearch}" title="${E.t("filter.clearSearch")}">
3811
4062
  ×
3812
4063
  </button>
3813
4064
  `:e.html`
@@ -3816,19 +4067,19 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
3816
4067
  </svg>
3817
4068
  `}
3818
4069
  </div>
3819
-
4070
+
3820
4071
  <!-- Search Results Info -->
3821
4072
  ${this._sidePanelSearchQuery.trim()&&d.length!==l.length?e.html`
3822
4073
  <div class="side-panel-search-results-info">
3823
- ${d.length} ${k.t("filter.of")} ${l.length} ${k.t("filter.roles")}
4074
+ ${d.length} ${E.t("filter.of")} ${l.length} ${E.t("filter.roles")}
3824
4075
  </div>
3825
4076
  `:""}
3826
4077
 
3827
4078
  <!-- Roles List -->
3828
4079
  ${0===d.length?e.html`
3829
4080
  <div class="side-panel-no-results">
3830
- ${k.t("filter.noRolesFound")} "${this._sidePanelSearchQuery}"<br>
3831
- ${k.t("filter.tryDifferentSearch")}
4081
+ ${E.t("filter.noRolesFound")} "${this._sidePanelSearchQuery}"<br>
4082
+ ${E.t("filter.tryDifferentSearch")}
3832
4083
  </div>
3833
4084
  `:e.html`
3834
4085
  ${d.map(t=>{const i=this._roleHasErrors(t.id),o=this._roleBorderStatuses.get(t.id),r=!0===this._roleCompletedStates.get(t.id)?"has-complete-data":i?"has-errors":"untouched"===o?"has-no-data":"incomplete"===o?"has-empty-fields":"complete"===o?"has-complete-data":"";return e.html`
@@ -3847,10 +4098,13 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
3847
4098
  <!-- Right: Active Section Content -->
3848
4099
  <div class="side-panel-content">
3849
4100
  <div class="form-sections">
4101
+ <!-- JDF-101: names the active concept/facts-only filter so a narrowed view isn't mistaken for missing data -->
4102
+ ${"admin"!==this.mode?this._renderActiveFilterBanner(c?[c]:[]):""}
4103
+
3850
4104
  <!-- Validation Summary -->
3851
4105
  ${o?e.html`
3852
4106
  <div class="validation-summary ${0===r?"warnings-only":""}">
3853
- <h4 class="validation-summary-title">${r>0?k.t("validation.summary"):k.t("calculationWarning.title")}</h4>
4107
+ <h4 class="validation-summary-title">${r>0?E.t("validation.summary"):E.t("calculationWarning.title")}</h4>
3854
4108
  <ul class="validation-summary-list">
3855
4109
  ${this._errors.filter(e=>"error"===e.severity||"warning"===e.severity&&"readonly"!==this.mode).map(t=>e.html`
3856
4110
  <li class="validation-summary-item ${t.severity}">${"warning"===t.severity?"⚠️ ":""}${t.message}</li>
@@ -3865,6 +4119,20 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
3865
4119
  ${this._renderAdminModeContent(c)}
3866
4120
  </div>
3867
4121
  `:c?e.html`
4122
+ <div
4123
+ class="side-panel-content-header"
4124
+ role="button"
4125
+ tabindex="0"
4126
+ title="${E.t("section.locateInList")}"
4127
+ @click="${()=>this._scrollActiveRoleIntoView()}"
4128
+ @keydown="${e=>{"Enter"!==e.key&&" "!==e.key||(e.preventDefault(),this._scrollActiveRoleIntoView())}}"
4129
+ >
4130
+ <div class="side-panel-content-position">${E.t("section.position",{current:p+1,total:d.length})}</div>
4131
+ <h2 class="side-panel-content-title">${c.title}</h2>
4132
+ ${this._sectionHasMonetaryConcepts(c.concepts)?e.html`
4133
+ <div class="side-panel-content-amount-scale">${this._amountScaleCaption()}</div>
4134
+ `:""}
4135
+ </div>
3868
4136
  <jupiter-form-section
3869
4137
  section-id="${c.id}"
3870
4138
  .section="${c}"
@@ -3882,6 +4150,7 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
3882
4150
  .collapsible="${!1}"
3883
4151
  .hideHeader="${!0}"
3884
4152
  .locale="${i.locale||"en-US"}"
4153
+ .numberLocale="${this._effectiveNumberLocale()}"
3885
4154
  .language="${this.language}"
3886
4155
  .isFirstSection="${!0}"
3887
4156
  .availableDimensions="${this._getAvailableDimensionsForSection(c.id)}"
@@ -3889,6 +4158,7 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
3889
4158
  .showFactsOnly="${this._showFactsOnly}"
3890
4159
  .conceptMatchIds="${s?a:void 0}"
3891
4160
  .masterData="${this._effectiveMasterData}"
4161
+ .prefilledTooltip="${this.prefilledTooltip}"
3892
4162
  .periodStartDate="${this.periodStartDate}"
3893
4163
  .periodEndDate="${this.periodEndDate}"
3894
4164
  .calculationEnabled="${this.calculationEnabled}"
@@ -3911,18 +4181,34 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
3911
4181
  .checked="${!0===this._roleCompletedStates.get(c.id)}"
3912
4182
  @change="${e=>this._handleRoleCompletedChange(c.id,e.target.checked)}"
3913
4183
  >
3914
- <label for="role-complete-${c.id}">${k.t("form.markAsComplete")}</label>
4184
+ <label for="role-complete-${c.id}">${E.t("form.markAsComplete")}</label>
4185
+ </div>
4186
+ <div class="side-panel-nav-row">
4187
+ ${p>0?e.html`
4188
+ <button
4189
+ type="button"
4190
+ class="side-panel-nav-btn side-panel-nav-prev"
4191
+ @click="${()=>this._handleSidePanelPrevNext("prev")}"
4192
+ >${E.t("section.previous")}</button>
4193
+ `:e.html`<span></span>`}
4194
+ ${u?e.html`
4195
+ <button
4196
+ type="button"
4197
+ class="side-panel-nav-btn side-panel-nav-next"
4198
+ @click="${()=>this._handleSidePanelPrevNext("next")}"
4199
+ >${E.t("section.next",{title:u.title})}</button>
4200
+ `:""}
3915
4201
  </div>
3916
4202
  `:e.html`
3917
4203
  <div class="no-roles-message">
3918
- <h3>${k.t("form.noRoleSelected")}</h3>
3919
- <p>${k.t("form.pleaseSelectRole")}</p>
4204
+ <h3>${E.t("form.noRoleSelected")}</h3>
4205
+ <p>${E.t("form.pleaseSelectRole")}</p>
3920
4206
  </div>
3921
4207
  `}
3922
4208
  </div>
3923
4209
  </div>
3924
4210
  </div>
3925
- `}getData(){return{...this._formData}}setData(e){this._formData={...e},this._dirty=!0,this.hasUnsavedChanges=!0,this._validateForm(),this.requestUpdate()}validate(){return this._validateForm(),this._valid}setValidation(e){console.log(`🔍 Validation status updated: ${e}`),this._validationStatus="cancel"===e?"idle":e,this.requestUpdate()}reset(){this._handleReset()}getState(){return this._getFormState()}_findConceptByName(e,t){var i;const o=t.includes(":")?t.split(":").pop():t;for(const r of e){if(r.name===t)return r;if((r.name.includes(":")?r.name.split(":").pop():r.name)===o)return r;if(null==(i=r.children)?void 0:i.length){const e=this._findConceptByName(r.children,t);if(e)return e}}return null}_findAllConceptsByName(e,t){var i;const o=t.includes(":")?t.split(":").pop():t,r=[];for(const n of e){const e=n.name.includes(":")?n.name.split(":").pop():n.name;n.name!==t&&e!==o||r.push(n),(null==(i=n.children)?void 0:i.length)&&r.push(...this._findAllConceptsByName(n.children,t))}return r}_findConceptById(e,t){var i;for(const o of e){if(o.id===t)return o;if(null==(i=o.children)?void 0:i.length){const e=this._findConceptById(o.children,t);if(e)return e}}return null}_valueLooselyMatches(e,t){const i=String(e??"");if(i===t)return!0;const o=Number(i),r=Number(t);if(isNaN(o)||isNaN(r))return!1;if(o===r)return!0;if(0!==o&&0!==r){const e=Math.abs(r/o),t=Math.log10(e);if(Math.abs(t-Math.round(t))<1e-4)return!0}return!1}_findColumnByDimensions(e,t){var i;return null==(i=e.find(e=>{if("dimension"!==e.type||!e.dimensionData)return!1;const i=e.dimensionData.combinations;return(null==i?void 0:i.length)?t.every(e=>i.some(t=>this._normalizeAxisId(t.axisId)===this._normalizeAxisId(e.axis)&&this._normalizeMemberId(t.memberId)===this._normalizeMemberId(e.member))):1===t.length&&this._normalizeAxisId(e.dimensionData.axisId??"")===this._normalizeAxisId(t[0].axis)&&this._normalizeMemberId(e.dimensionData.memberId??"")===this._normalizeMemberId(t[0].member)}))?void 0:i.id}_resolveScrollTarget(e,t,i,o,r,n){var a;const s=[...(null==(a=this._currentSchema)?void 0:a.sections)??[],...this._allSections.filter(e=>{var t;return!(null==(t=this._currentSchema)?void 0:t.sections.find(t=>t.id===e.id))})];if(console.log(`[scrollToConcept] Searching ${s.length} sections`),o)for(const d of s){const e=this._findConceptById(d.concepts,o);if(e)return console.log(`[scrollToConcept] Section "${d.id}" matched exactConceptId="${o}"`),{section:d,concept:e,viaRole:!1}}if(r){const o=function(e,t){const i=Te(e);return i?t.map((e,t)=>({section:e,index:t,score:Ee(i,e)})).filter(e=>null!==e.score).sort((e,t)=>e.score.tier-t.score.tier||e.score.looseness-t.score.looseness||e.index-t.index).map(({section:e,score:t})=>({section:e,tier:t.tier})):[]}(r,s);console.log(`[scrollToConcept] role="${r}" matched ${o.length} section(s): ${o.slice(0,5).map(e=>`${e.section.id} (tier ${e.tier})`).join(", ")}`);for(const{section:a,tier:s}of o){const o=this._resolveConceptInSection(a,e,t,i,n);if(o)return s>=Se&&console.warn(`[scrollToConcept] role="${r}" only fuzzily matched "${a.id}" (tier ${s}) — pass the role's id or local name for an exact match`),{section:a,concept:o.concept,viaRole:!0}}console.warn(`[scrollToConcept] "${e}" not found in any section matching role="${r}" — falling back to whole-form search`)}let l=null;for(const d of s){const o=this._resolveConceptInSection(d,e,t,i,n);if(o){if(o.strong)return{section:d,concept:o.concept,viaRole:!1};l??(l={section:d,concept:o.concept})}}return l?{...l,viaRole:!1}:null}_resolveConceptInSection(e,t,i,o,r){const n=this._findAllConceptsByName(e.concepts,t);if(!n.length)return null;const a=null!==r,s=e.columns??this._columns,l=o??((null==i?void 0:i.length)?this._findColumnByDimensions(s,i):void 0);let d;n.length>1&&(d=n.find(e=>{const t=this._formData[e.id];if(!t)return!1;if(l){const e=t[l];return null!=e&&""!==e&&(!a||this._valueLooselyMatches(e,r))}return!!a&&Object.values(t).some(e=>null!=e&&""!==e&&this._valueLooselyMatches(e,r))}),console.log(`[scrollToConcept] Section "${e.id}" has ${n.length} rows named "${t}" | disambiguated=${(null==d?void 0:d.id)??"none (using first)"}`));const c=d??n[0];if(o){const t=s.some(e=>e.id===o);return console.log(`[scrollToConcept] Section "${e.id}" has concept "${c.id}" | columnId="${o}" present=${t}`),{concept:c,strong:t}}return(null==i?void 0:i.length)?(console.log(`[scrollToConcept] Section "${e.id}" has concept "${c.id}" | colMatch=${l??"null"} | cols=${s.map(e=>e.id).join(",")}`),{concept:c,strong:!!l}):(console.log(`[scrollToConcept] Section "${e.id}" has concept "${c.id}" (no dims, taking first)`),{concept:c,strong:!0})}async scrollToConcept(e,t,i,o,r,n){var a,s,l,d,c,p,u,h,m,f,g,b,v,y,x;console.log(`[scrollToConcept] ▶ START conceptName=${e} value=${null==i?void 0:i.value} dims=${JSON.stringify(t)} columnId=${o} exactConceptId=${r} role=${n}`);const _=void 0!==(null==i?void 0:i.value)&&null!==(null==i?void 0:i.value),D=_?String(i.value):null,I=this._resolveScrollTarget(e,t,o,r,n,D);if(!I)return void console.warn(`[scrollToConcept] Concept not found: ${e}`);let{section:$,concept:w}=I;const{viaRole:S}=I;if(console.log(`[scrollToConcept] → targetSection="${$.id}" targetConceptId="${w.id}" viaRole=${S}`),!(null==(a=this._currentSchema)?void 0:a.sections.some(e=>e.id===$.id))){if(console.log(`[scrollToConcept] Role "${$.id}" is filtered out — asking to show it`),!(await this._confirmRevealHiddenRole($)))return void console.log("[scrollToConcept] Reveal declined — not navigating");await this._revealRole($);const e=null==(s=this._currentSchema)?void 0:s.sections.find(e=>e.id===$.id),t=e&&this._findConceptById(e.concepts,w.id);if(!e||!t)return void console.warn(`[scrollToConcept] Revealed role "${$.id}" but could not find row "${w.id}" in it`);$=e,w=t}$.expanded=!0,"sidePanel"===this.display&&this._activeSidePanelRoleId!==$.id&&(this._activeSidePanelRoleId=$.id);const C=$.columns??this._columns,T=this._hiddenColumnIds.get($.id);let F=null;if(o?F=o:(null==t?void 0:t.length)?F=this._findColumnByDimensions(C,t)??null:_||(F=(null==(l=C.find(e=>!(null==T?void 0:T.has(e.id)))??C[0])?void 0:l.id)??null),null==T?void 0:T.size){let e;if(F)T.has(F)&&(e=F);else if(_){const t=this._formData[w.id]??{},i=C.filter(e=>{const i=t[e.id];return null!=i&&""!==i&&this._valueLooselyMatches(i,D)});i.length&&i.every(e=>T.has(e.id))&&(e=i[0].id,F=e)}e&&(console.log(`[scrollToConcept] Column "${e}" is hidden in "${$.id}" — showing it`),this._showColumn($.id,e))}console.log(`[scrollToConcept] targetColumnId=${F} hasValueMatch=${_} targetValue=${D}`),this._conceptSearchText=e.includes(":")?e.split(":").pop():e,this.requestUpdate(),await this.updateComplete,await new Promise(e=>setTimeout(e,300));const k=null==(d=this.shadowRoot)?void 0:d.querySelectorAll("jupiter-form-section");console.log(`[scrollToConcept] DOM: found ${(null==k?void 0:k.length)??0} jupiter-form-section elements`);let E=null;if(null==k||k.forEach(e=>{var t;(null==(t=e.section)?void 0:t.id)===$.id&&(E=e)}),!E)return void console.warn(`[scrollToConcept] Section element not found: ${$.id}`);await E.updateComplete,await(null==(c=E.revealConcept)?void 0:c.call(E,w.id))&&await Promise.all(Array.from((null==(p=E.shadowRoot)?void 0:p.querySelectorAll("jupiter-concept-tree"))??[]).map(e=>e.updateComplete));const R=null==(u=E.shadowRoot)?void 0:u.querySelectorAll("jupiter-concept-tree");console.log(`[scrollToConcept] conceptTrees in targetSection: ${(null==R?void 0:R.length)??0}`);let M=null;const A=w.id,P=A.includes("__")?A.split("__")[0]:A;console.log(`[scrollToConcept] conceptId="${A}" conceptIdBase="${P}"`);const j=e=>e===A||e.includes("__")&&e.split("__")[0]===P,L=e=>{const t=e.decimals||(void 0!==e.globalDecimals&&"INF"!==e.globalDecimals?e.globalDecimals:null);if(!t)return 1;const i=parseFloat(String(t));return isNaN(i)||i<=0?1:Math.pow(10,i)},N=(e,t)=>{if(String(e.value??"")===t)return!0;const i=Number(t),o=Number(e.value);if(!isNaN(i)&&!isNaN(o)&&0!==o){const t=L(e);if(1!==t&&Math.abs(o*t-i)<1e-4)return!0}return!1};let V=0;if(null==R||R.forEach(e=>{var t;if(M)return;const i=null==(t=e.shadowRoot)?void 0:t.querySelectorAll("jupiter-form-field");null==i||i.forEach(e=>{if(M)return;const t=F?e.conceptId===A&&e.columnId===F:e.conceptId===A,i=!_||N(e,D);t&&(V++,console.log(`[scrollToConcept] Phase1 candidate: conceptId=${e.conceptId} columnId=${e.columnId} value=${e.value} scale=${L(e)} valueMatch=${i}`)),t&&i&&(M=e)})}),console.log(`[scrollToConcept] Phase1: scanned ${V} candidates, found=${!!M}`),!M&&S){const e=[];null==R||R.forEach(t=>{var i;null==(i=t.shadowRoot)||i.querySelectorAll("jupiter-form-field").forEach(t=>{t.conceptId===A&&e.push(t)})}),M=F&&e.find(e=>e.columnId===F)||e[0]||null,M&&F&&M.columnId!==F&&console.warn(`[scrollToConcept] Phase1b: column "${F}" not rendered in row "${A}" — using column "${M.columnId}"`),console.log(`[scrollToConcept] Phase1b (role-scoped): ${e.length} fields in row "${A}", found=${!!M}`)}if(!M&&_){console.log("[scrollToConcept] Phase2: searching ALL sections by base concept name + value");const e=(null==(h=this.shadowRoot)?void 0:h.querySelectorAll("jupiter-form-section"))??[];for(const t of Array.from(e)){if(M)break;const e=(null==(m=t.shadowRoot)?void 0:m.querySelectorAll("jupiter-concept-tree"))??[];for(const t of Array.from(e)){if(M)break;((null==(f=t.shadowRoot)?void 0:f.querySelectorAll("jupiter-form-field"))??[]).forEach(e=>{if(M)return;const t=j(e.conceptId),i=N(e,D);t&&console.log(`[scrollToConcept] Phase2 candidate: conceptId=${e.conceptId} value=${e.value} scale=${L(e)} valMatch=${i}`),t&&i&&(console.log(`[scrollToConcept] Phase2 ✅ MATCH: conceptId=${e.conceptId} columnId=${e.columnId} value=${e.value}`),M=e)})}}}if(!M){const e=(null==(g=this.shadowRoot)?void 0:g.querySelectorAll("jupiter-form-section"))??[];for(const t of Array.from(e)){if(M)break;const e=(null==(b=t.shadowRoot)?void 0:b.querySelectorAll("jupiter-concept-tree"))??[];for(const t of Array.from(e)){if(M)break;((null==(v=t.shadowRoot)?void 0:v.querySelectorAll("jupiter-form-field"))??[]).forEach(e=>{if(M)return;(F?j(e.conceptId)&&e.columnId===F:j(e.conceptId))&&(console.log(`[scrollToConcept] Phase3 ✅ fallback: conceptId=${e.conceptId} columnId=${e.columnId} value=${e.value}`),M=e)})}}}if(!M)return void console.warn(`[scrollToConcept] Field element not found for concept: ${e}`);console.log(`[scrollToConcept] ✅ HIGHLIGHTING conceptId=${M.conceptId} columnId=${M.columnId} value=${M.value}`);const O=M.getBoundingClientRect(),z=this.shadowRoot,U=z?z.querySelector(".side-panel-content")??z.querySelector(".form-container"):null,J=U&&U.scrollHeight>U.clientHeight?U:null;if(J){const e=J.getBoundingClientRect(),t=Math.max(0,O.top-e.top+J.scrollTop-J.clientHeight/2+O.height/2);J.scrollTo({top:t,behavior:"smooth"})}else M.scrollIntoView({behavior:"smooth",block:"center"});const B=null==(y=null==E?void 0:E.shadowRoot)?void 0:y.querySelector(".table-container");if(B&&B.scrollWidth>B.clientWidth){const e=B.getBoundingClientRect(),t=Math.max(0,O.left-e.left+B.scrollLeft-B.clientWidth/2+O.width/2);B.scrollTo({left:t,behavior:"smooth"})}const q=M.getRootNode(),H=(q instanceof ShadowRoot?q.host:null)??M;H.classList.add("concept-highlight");const K=null==(x=M.shadowRoot)?void 0:x.querySelector('input:not([type="hidden"]), select, textarea, button, [tabindex]:not([tabindex="-1"])');K&&setTimeout(()=>K.focus({preventScroll:!0}),450),setTimeout(()=>H.classList.remove("concept-highlight"),1e4)}render(){var t;const i=this._errors.filter(e=>"error"===e.severity).length,o="readonly"===this.mode?0:this._errors.filter(e=>"warning"===e.severity).length,r=this.config||{},n=!1!==r.showValidationSummary&&(i>0&&this._submitted||o>0),a=this._currentSchema;return a?e.html`
4211
+ `}getData(){return{...this._formData}}setData(e){this._formData={...e},this._dirty=!0,this.hasUnsavedChanges=!0,this._validateForm(),this.requestUpdate()}validate(){return this._validateForm(),this._valid}setValidation(e){this._validationStatus="cancel"===e?"idle":e,this._syncValidationDotAnimation(),this.requestUpdate()}_syncValidationDotAnimation(){"inProgress"===this._validationStatus?null===this._validationDotIntervalId&&(this._validationDotCount=1,this._validationDotIntervalId=setInterval(()=>{this._validationDotCount=this._validationDotCount%3+1},500)):null!==this._validationDotIntervalId&&(clearInterval(this._validationDotIntervalId),this._validationDotIntervalId=null)}reset(){this._handleReset()}getState(){return this._getFormState()}_findConceptByName(e,t){var i;const o=t.includes(":")?t.split(":").pop():t;for(const r of e){if(r.name===t)return r;if((r.name.includes(":")?r.name.split(":").pop():r.name)===o)return r;if(null==(i=r.children)?void 0:i.length){const e=this._findConceptByName(r.children,t);if(e)return e}}return null}_findAllConceptsByName(e,t){var i;const o=t.includes(":")?t.split(":").pop():t,r=[];for(const n of e){const e=n.name.includes(":")?n.name.split(":").pop():n.name;n.name!==t&&e!==o||r.push(n),(null==(i=n.children)?void 0:i.length)&&r.push(...this._findAllConceptsByName(n.children,t))}return r}_findConceptById(e,t){var i;for(const o of e){if(o.id===t)return o;if(null==(i=o.children)?void 0:i.length){const e=this._findConceptById(o.children,t);if(e)return e}}return null}_valueLooselyMatches(e,t){const i=String(e??"");if(i===t)return!0;const o=Number(i),r=Number(t);if(isNaN(o)||isNaN(r))return!1;if(o===r)return!0;if(0!==o&&0!==r){const e=Math.abs(r/o),t=Math.log10(e);if(Math.abs(t-Math.round(t))<1e-4)return!0}return!1}_findColumnsByDimensions(e,t){return e.filter(e=>{if("dimension"!==e.type||!e.dimensionData)return!1;const i=e.dimensionData.combinations;return(null==i?void 0:i.length)?t.every(e=>i.some(t=>this._normalizeAxisId(t.axisId)===this._normalizeAxisId(e.axis)&&this._normalizeMemberId(t.memberId)===this._normalizeMemberId(e.member))):1===t.length&&this._normalizeAxisId(e.dimensionData.axisId??"")===this._normalizeAxisId(t[0].axis)&&this._normalizeMemberId(e.dimensionData.memberId??"")===this._normalizeMemberId(t[0].member)})}_pickColumn(e,t,i,o,r,n){var a;let s=i;if(r&&s.length>1){const i=s.filter(i=>this._periodMatches(this._cellPeriod(e,t,i.id),r));i.length&&(s=i)}const l=this._formData[t.id];if(s.length>1&&null!==o&&l){const e=s.filter(e=>void 0!==l[e.id]&&null!==l[e.id]&&""!==l[e.id]),t=e.filter(e=>String(l[e.id])===o||Number(l[e.id])===Number(o)),i=t.length?t:e.filter(e=>this._valueLooselyMatches(l[e.id],o)),r=i.find(e=>!(null==n?void 0:n.has(e.id)))??i[0];if(r)return r.id}return null==(a=s[0])?void 0:a.id}_cellPeriod(e,t,i){var o,r;const n=this._findColumnByIdInSection(i,e),a=(null==(o=t.fields)?void 0:o.find(e=>e.columnId===i))??{columnId:i},s=null==(r=this._periodData[t.id])?void 0:r[i];return"instant"===t.periodType?{instant:this._resolveSubmissionInstantDate(t,a,s,n)}:{startDate:(null==s?void 0:s.startDate)||(null==n?void 0:n.periodStartDate)||a.periodStartDate||this.periodStartDate,endDate:(null==s?void 0:s.endDate)||(null==n?void 0:n.periodEndDate)||a.periodEndDate||this.periodEndDate}}_periodMatches(e,t){const i=e=>null==e?void 0:e.slice(0,10),o=t.instant??t.date;return o?i(e.instant)===i(o):!(e.instant||t.startDate&&i(e.startDate)!==i(t.startDate)||t.endDate&&i(e.endDate)!==i(t.endDate))}_resolveScrollTarget(e,t,i,o,r,n,a){var s;const l=[...(null==(s=this._currentSchema)?void 0:s.sections)??[],...this._allSections.filter(e=>{var t;return!(null==(t=this._currentSchema)?void 0:t.sections.find(t=>t.id===e.id))})];if(o)for(const u of l){const e=this._findConceptById(u.concepts,o);if(e)return u.id,{section:u,concept:e,viaRole:!1}}if(r){const o=function(e,t){const i=ke(e);return i?t.map((e,t)=>({section:e,index:t,score:Fe(i,e)})).filter(e=>null!==e.score).sort((e,t)=>e.score.tier-t.score.tier||e.score.looseness-t.score.looseness||e.index-t.index).map(({section:e,score:t})=>({section:e,tier:t.tier})):[]}(r,l);o.length,o.slice(0,5).map(e=>`${e.section.id} (tier ${e.tier})`).join(", ");for(const{section:s,tier:l}of o){const o=this._resolveConceptInSection(s,e,t,i,n,a);if(o)return l>=Ce&&console.warn(`[scrollToConcept] role="${r}" only fuzzily matched "${s.id}" (tier ${l}) — pass the role's id or local name for an exact match`),{section:s,concept:o.concept,viaRole:!0}}console.warn(`[scrollToConcept] "${e}" not found in any section matching role="${r}" — falling back to whole-form search`)}let d=null,c=null;for(const u of l){const o=this._resolveConceptInSection(u,e,t,i,n,a);if(o){if(o.strong&&o.inPeriod)return{section:u,concept:o.concept,viaRole:!1};o.strong?d??(d={section:u,concept:o.concept}):c??(c={section:u,concept:o.concept})}}const p=d??c;return p?{...p,viaRole:!1}:null}_resolveConceptInSection(e,t,i,o,r,n){const a=this._findAllConceptsByName(e.concepts,t);if(!a.length)return null;const s=null!==r,l=e.columns??this._columns,d=o?[o]:(null==i?void 0:i.length)?this._findColumnsByDimensions(l,i).map(e=>e.id):[],c=(t,i,o)=>{var a;const l=null==(a=this._formData[t.id])?void 0:a[i];return null!=l&&""!==l&&(!(s&&!this._valueLooselyMatches(l,r))&&(!o||this._periodMatches(this._cellPeriod(e,t,i),n)))},p=(e,t)=>d.length?d.some(i=>c(e,i,t)):!(!s&&!t)&&Object.keys(this._formData[e.id]??{}).some(i=>c(e,i,t));let u;a.length>1&&(u=(n?a.find(e=>p(e,!0)):void 0)??a.find(e=>p(e,!1)),e.id,a.length,null==u||u.id);const h=u??a[0],m=t=>!n||t.some(t=>this._periodMatches(this._cellPeriod(e,h,t),n));if(o){const t=l.some(e=>e.id===o);return e.id,h.id,{concept:h,strong:t,inPeriod:m(t?[o]:[])}}return(null==i?void 0:i.length)?(e.id,h.id,d.join(","),l.map(e=>e.id).join(","),{concept:h,strong:d.length>0,inPeriod:m(d)}):(e.id,h.id,{concept:h,strong:!0,inPeriod:m(l.map(e=>e.id))})}async scrollToConcept(e,t,i,o,r,n,a){var s,l,d,c,p,u,h,m,f,b,g,v,y,x,_;null==i||i.value,JSON.stringify(null==i?void 0:i.period),JSON.stringify(t);const D=void 0!==(null==i?void 0:i.value)&&null!==(null==i?void 0:i.value),I=D?String(i.value):null,w=(null==i?void 0:i.period)&&(i.period.instant||i.period.date||i.period.startDate||i.period.endDate)?i.period:void 0,S=this._resolveScrollTarget(e,t,o,r,n,I,w);if(!S)return void console.warn(`[scrollToConcept] Concept not found: ${e}`);let{section:C,concept:$}=S;const{viaRole:k}=S;if(C.id,$.id,!(null==(s=this._currentSchema)?void 0:s.sections.some(e=>e.id===C.id))){if(C.id,!(await this._confirmRevealHiddenRole(C)))return;await this._revealRole(C);const e=null==(l=this._currentSchema)?void 0:l.sections.find(e=>e.id===C.id),t=e&&this._findConceptById(e.concepts,$.id);if(!e||!t)return void console.warn(`[scrollToConcept] Revealed role "${C.id}" but could not find row "${$.id}" in it`);C=e,$=t}C.expanded=!0,"sidePanel"===this.display&&this._activeSidePanelRoleId!==C.id&&(this._activeSidePanelRoleId=C.id);const T=C.columns??this._columns,E=this._hiddenColumnIds.get(C.id);let F=null;if(o?F=o:(null==t?void 0:t.length)?F=this._pickColumn(C,$,this._findColumnsByDimensions(T,t),I,w,E)??null:w&&T.some(e=>this._periodMatches(this._cellPeriod(C,$,e.id),w))?F=this._pickColumn(C,$,T,I,w,E)??null:D||(F=(null==(d=T.find(e=>!(null==E?void 0:E.has(e.id)))??T[0])?void 0:d.id)??null),null==E?void 0:E.size){let e;if(F)E.has(F)&&(e=F);else if(D){const t=this._formData[$.id]??{},i=T.filter(e=>{const i=t[e.id];return null!=i&&""!==i&&this._valueLooselyMatches(i,I)});i.length&&i.every(e=>E.has(e.id))&&(e=i[0].id,F=e)}e&&(C.id,this._showColumn(C.id,e))}const R=!!w&&!!F&&this._periodMatches(this._cellPeriod(C,$,F),w);!1!==(null==a?void 0:a.filterToConcept)&&(this._conceptSearchText=e.includes(":")?e.split(":").pop():e),this.requestUpdate(),await this.updateComplete,"sidePanel"===this.display&&this._scrollActiveRoleIntoView(),await new Promise(e=>setTimeout(e,300));const M=null==(c=this.shadowRoot)?void 0:c.querySelectorAll("jupiter-form-section");null==M||M.length;let j=null;if(null==M||M.forEach(e=>{var t;(null==(t=e.section)?void 0:t.id)===C.id&&(j=e)}),!j)return void console.warn(`[scrollToConcept] Section element not found: ${C.id}`);await j.updateComplete,await(null==(p=j.revealConcept)?void 0:p.call(j,$.id))&&await Promise.all(Array.from((null==(u=j.shadowRoot)?void 0:u.querySelectorAll("jupiter-concept-tree"))??[]).map(e=>e.updateComplete));const A=null==(h=j.shadowRoot)?void 0:h.querySelectorAll("jupiter-concept-tree");null==A||A.length;let P=null;const L=$.id,N=L.includes("__")?L.split("__")[0]:L,V=e=>e===L||e.includes("__")&&e.split("__")[0]===N,O=e=>{const t=e.decimals||(void 0!==e.globalDecimals&&"INF"!==e.globalDecimals?e.globalDecimals:null);if(!t)return 1;const i=parseFloat(String(t));return isNaN(i)||i<=0?1:Math.pow(10,i)},z=(e,t)=>{if(String(e.value??"")===t)return!0;const i=Number(t),o=Number(e.value);if(!isNaN(i)&&!isNaN(o)&&0!==o){const t=O(e);if(1!==t&&Math.abs(o*t-i)<1e-4)return!0}return!1};if(null==A||A.forEach(e=>{var t;if(P)return;const i=null==(t=e.shadowRoot)?void 0:t.querySelectorAll("jupiter-form-field");null==i||i.forEach(e=>{if(P)return;const t=F?e.conceptId===L&&e.columnId===F:e.conceptId===L,i=!D||R||z(e,I);t&&(e.conceptId,e.columnId,e.value,O(e)),t&&i&&(P=e)})}),!P&&k){const e=[];null==A||A.forEach(t=>{var i;null==(i=t.shadowRoot)||i.querySelectorAll("jupiter-form-field").forEach(t=>{t.conceptId===L&&e.push(t)})}),P=F&&e.find(e=>e.columnId===F)||e[0]||null,P&&F&&P.columnId!==F&&console.warn(`[scrollToConcept] Phase1b: column "${F}" not rendered in row "${L}" — using column "${P.columnId}"`),e.length}if(!P&&D){const e=(null==(m=this.shadowRoot)?void 0:m.querySelectorAll("jupiter-form-section"))??[];for(const t of Array.from(e)){if(P)break;const e=(null==(f=t.shadowRoot)?void 0:f.querySelectorAll("jupiter-concept-tree"))??[];for(const t of Array.from(e)){if(P)break;((null==(b=t.shadowRoot)?void 0:b.querySelectorAll("jupiter-form-field"))??[]).forEach(e=>{if(P)return;const t=V(e.conceptId),i=z(e,I);t&&(e.conceptId,e.value,O(e)),t&&i&&(e.conceptId,e.columnId,e.value,P=e)})}}}if(!P){const e=(null==(g=this.shadowRoot)?void 0:g.querySelectorAll("jupiter-form-section"))??[];for(const t of Array.from(e)){if(P)break;const e=(null==(v=t.shadowRoot)?void 0:v.querySelectorAll("jupiter-concept-tree"))??[];for(const t of Array.from(e)){if(P)break;((null==(y=t.shadowRoot)?void 0:y.querySelectorAll("jupiter-form-field"))??[]).forEach(e=>{if(P)return;(F?V(e.conceptId)&&e.columnId===F:V(e.conceptId))&&(e.conceptId,e.columnId,e.value,P=e)})}}}if(!P)return void console.warn(`[scrollToConcept] Field element not found for concept: ${e}`);P.conceptId,P.columnId,P.value;const J=P.getBoundingClientRect(),B=this.shadowRoot,U=B?B.querySelector(".side-panel-content")??B.querySelector(".form-container"):null,q=U&&U.scrollHeight>U.clientHeight?U:null;if(q){const e=q.getBoundingClientRect(),t=Math.max(0,J.top-e.top+q.scrollTop-q.clientHeight/2+J.height/2);q.scrollTo({top:t,behavior:"smooth"})}else P.scrollIntoView({behavior:"smooth",block:"center"});const H=null==(x=null==j?void 0:j.shadowRoot)?void 0:x.querySelector(".table-container");if(H&&H.scrollWidth>H.clientWidth){const e=H.getBoundingClientRect(),t=Math.max(0,J.left-e.left+H.scrollLeft-H.clientWidth/2+J.width/2);H.scrollTo({left:t,behavior:"smooth"})}const W=P.getRootNode(),K=(W instanceof ShadowRoot?W.host:null)??P;K.classList.add("concept-highlight");const Y=null==(_=P.shadowRoot)?void 0:_.querySelector('input:not([type="hidden"]), select, textarea, button, [tabindex]:not([tabindex="-1"])');Y&&setTimeout(()=>Y.focus({preventScroll:!0}),450),setTimeout(()=>K.classList.remove("concept-highlight"),1e4)}render(){var t;const i=this._errors.filter(e=>"error"===e.severity).length,o="readonly"===this.mode?0:this._errors.filter(e=>"warning"===e.severity).length,r=this.config||{},n=!1!==r.showValidationSummary&&(i>0&&this._submitted||o>0),a=this._currentSchema;return a?e.html`
3926
4212
  <div class="form-container">
3927
4213
  <!-- Form Header - Hidden in side panel mode -->
3928
4214
  ${"sidePanel"!==this.display?e.html`
@@ -3950,8 +4236,15 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
3950
4236
  <svg class="filter-icon" viewBox="0 0 24 24">
3951
4237
  <path d="M10 18h4v-2h-4v2zM3 6v2h18V6H3zm3 7h12v-2H6v2z"/>
3952
4238
  </svg>
3953
- ${0===this._selectedRoleIds.length?k.t("filter.selectRoles"):k.t("filter.filterRoles")}
3954
- <span class="roles-count">${this._selectedRoleIds.length}/${this._allSections.length}</span>
4239
+ ${0===this._selectedRoleIds.length?E.t("filter.selectRoles"):E.t("filter.filterRoles")}
4240
+ <span class="roles-count">
4241
+ ${this._hasActiveAdvancedFilters?e.html`
4242
+ <svg class="roles-count-filter-icon" viewBox="0 0 24 24">
4243
+ <path d="M10 18h4v-2h-4v2zM3 6v2h18V6H3zm3 7h12v-2H6v2z"/>
4244
+ </svg>
4245
+ `:""}
4246
+ ${this._footerVisibleRoleCount}/${this._allSections.length}
4247
+ </span>
3955
4248
  </button>
3956
4249
  ${this._hasActiveAdvancedFilters?e.html`
3957
4250
  <button
@@ -3959,7 +4252,7 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
3959
4252
  @click="${this._handleClearAdvancedFilters}"
3960
4253
  ?disabled="${this.disabled||this.readonly}"
3961
4254
  >
3962
- × ${k.t("filter.clearFilters")}
4255
+ × ${E.t("filter.clearFilters")}
3963
4256
  </button>
3964
4257
  `:""}
3965
4258
  `:""}
@@ -3970,29 +4263,19 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
3970
4263
  @click="${this._handleSaveDraft}"
3971
4264
  ?disabled="${this.disabled||this.readonly||this.isDraftSaving||!this.hasUnsavedChanges}"
3972
4265
  >
3973
- ${this.isDraftSaving?k.t("form.savingDraft"):k.t("form.saveDraft")}
4266
+ ${this.isDraftSaving?E.t("form.savingDraft"):E.t("form.saveDraft")}
3974
4267
  </button>
3975
4268
  `:""}
3976
4269
 
3977
4270
 
3978
4271
  <!-- Validation state buttons -->
3979
- ${"inProgress"===this._validationStatus?e.html`
3980
- <button
3981
- class="btn-preview"
3982
- @click="${()=>this.dispatchEvent(new CustomEvent("showPreview",{bubbles:!0,composed:!0}))}"
3983
- ?disabled="${this.disabled||this.readonly}"
3984
- >
3985
- ${k.t("form.download")}
3986
- </button>
3987
- `:""}
3988
-
3989
4272
  ${"complete"===this._validationStatus||this.showLastValidationResultBtn?e.html`
3990
4273
  <button
3991
4274
  class="btn-secondary btn-last-results"
3992
4275
  @click="${()=>this.dispatchEvent(new CustomEvent("show-validation-results",{bubbles:!0,composed:!0}))}"
3993
4276
  ?disabled="${this.disabled||this.readonly}"
3994
4277
  >
3995
- ${k.t("form.lastValidationResults")}
4278
+ ${E.t("form.lastValidationResults")}
3996
4279
  </button>
3997
4280
  `:""}
3998
4281
 
@@ -4002,16 +4285,16 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
4002
4285
  @click="${this._handleQuickValidate}"
4003
4286
  ?disabled="${this.disabled||this.readonly||"inProgress"===this._validationStatus}"
4004
4287
  >
4005
- ${k.t("form.quickValidate")}
4288
+ ${E.t("form.quickValidate")}
4006
4289
  </button>
4007
4290
  `:""}
4008
4291
 
4009
4292
  <button
4010
- class="btn-primary"
4011
- @click="${this._handleSubmit}"
4012
- ?disabled="${this.disabled||this.readonly||this._submitDisabled||"inProgress"===this._validationStatus}"
4293
+ class="btn-primary ${"inProgress"===this._validationStatus?"btn-primary--validating":""}"
4294
+ @click="${"inProgress"===this._validationStatus?()=>this.dispatchEvent(new CustomEvent("resume-validation-progress",{bubbles:!0,composed:!0})):this._handleSubmit}"
4295
+ ?disabled="${this.disabled||this.readonly||this._submitDisabled}"
4013
4296
  >
4014
- ${this.submitButtonLabel||("admin"===this.mode?k.t("form.save"):k.t("form.submit"))}
4297
+ ${"inProgress"===this._validationStatus?`${E.t("form.validationInProgress")}${".".repeat(this._validationDotCount)}`:this.submitButtonLabel||("admin"===this.mode?E.t("form.save"):E.t("form.submit"))}
4015
4298
  </button>
4016
4299
 
4017
4300
  </div>
@@ -4051,10 +4334,10 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
4051
4334
  ${this._revealRolePrompt?e.html`
4052
4335
  <jupiter-confirm-dialog
4053
4336
  open
4054
- .heading="${k.t("scrollToConcept.revealRole.title")}"
4055
- .message="${k.t("scrollToConcept.revealRole.message",{role:this._revealRolePrompt.section.title})}"
4056
- .confirmLabel="${k.t("scrollToConcept.revealRole.confirm")}"
4057
- .cancelLabel="${k.t("scrollToConcept.revealRole.cancel")}"
4337
+ .heading="${E.t("scrollToConcept.revealRole.title")}"
4338
+ .message="${E.t("scrollToConcept.revealRole.message",{role:this._revealRolePrompt.section.title})}"
4339
+ .confirmLabel="${E.t("scrollToConcept.revealRole.confirm")}"
4340
+ .cancelLabel="${E.t("scrollToConcept.revealRole.cancel")}"
4058
4341
  @dialog-confirm="${()=>this._settleRevealRolePrompt(!0)}"
4059
4342
  @dialog-cancel="${()=>this._settleRevealRolePrompt(!1)}"
4060
4343
  @click="${()=>this._settleRevealRolePrompt(!1)}"
@@ -4066,25 +4349,25 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
4066
4349
  <div class="error-popup-overlay" @click="${()=>{this._showErrorPopup=!1,this.requestUpdate()}}">
4067
4350
  <div class="error-popup" @click="${e=>e.stopPropagation()}">
4068
4351
  <div class="error-popup-header">
4069
- <h3>⚠️ ${k.t("error.popup.title")}</h3>
4352
+ <h3>⚠️ ${E.t("error.popup.title")}</h3>
4070
4353
  <button class="error-popup-close" @click="${()=>{this._showErrorPopup=!1,this.requestUpdate()}}">×</button>
4071
4354
  </div>
4072
4355
  <div class="error-popup-content">
4073
- <p>${k.t("error.popup.message")}</p>
4356
+ <p>${E.t("error.popup.message")}</p>
4074
4357
  <ul class="error-list">
4075
4358
  ${this._xbrlFormErrors.map(t=>{const i=this._findConceptInAllSections(t.conceptId),o=this._findColumnById(t.columnId),r=(null==i?void 0:i.label)||t.conceptId,n=(null==o?void 0:o.title)||t.columnId;return e.html`
4076
4359
  <li>
4077
- <strong>${k.t("error.popup.field")}</strong>
4360
+ <strong>${E.t("error.popup.field")}</strong>
4078
4361
  <a
4079
4362
  href="javascript:void(0)"
4080
4363
  class="error-field-link"
4081
4364
  @click="${()=>this._handleErrorFieldClick(t.conceptId,t.columnId,t.sectionId)}"
4082
- title="${k.t("error.popup.clickToFocus")}"
4365
+ title="${E.t("error.popup.clickToFocus")}"
4083
4366
  >
4084
4367
  ${r} (${n})
4085
4368
  </a><br>
4086
- <strong>${k.t("error.popup.value")}</strong> ${t.value}<br>
4087
- <strong>${k.t("error.popup.errors")}</strong>
4369
+ <strong>${E.t("error.popup.value")}</strong> ${t.value}<br>
4370
+ <strong>${E.t("error.popup.errors")}</strong>
4088
4371
  <ul>
4089
4372
  ${t.errors.map(t=>e.html`<li>${t.message}</li>`)}
4090
4373
  </ul>
@@ -4093,12 +4376,54 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
4093
4376
  </ul>
4094
4377
  </div>
4095
4378
  <div class="error-popup-footer">
4096
- <button class="btn-primary" @click="${()=>{this._showErrorPopup=!1,this.requestUpdate()}}">${k.t("error.popup.ok")}</button>
4379
+ <button class="btn-primary" @click="${()=>{this._showErrorPopup=!1,this.requestUpdate()}}">${E.t("error.popup.ok")}</button>
4097
4380
  </div>
4098
4381
  </div>
4099
4382
  </div>
4100
4383
  `:""}
4101
-
4384
+
4385
+ <!-- Typed Dimension Warning Popup -->
4386
+ ${this._showTypedDimensionWarning?e.html`
4387
+ <div class="error-popup-overlay" @click="${()=>{this._showTypedDimensionWarning=!1,this.requestUpdate()}}">
4388
+ <div class="error-popup" @click="${e=>e.stopPropagation()}">
4389
+ <div class="error-popup-header">
4390
+ <h3>⚠️ ${E.t("typedDimensionWarning.title")}</h3>
4391
+ <button class="error-popup-close" @click="${()=>{this._showTypedDimensionWarning=!1,this.requestUpdate()}}">×</button>
4392
+ </div>
4393
+ <div class="error-popup-content">
4394
+ <p>${E.t("typedDimensionWarning.message")}</p>
4395
+ <ul class="error-list">
4396
+ ${this._groupTypedDimensionWarningFactsByRole().map(t=>e.html`
4397
+ <li>
4398
+ <strong>${E.t("typedDimensionWarning.role")}</strong> ${t.sectionTitle}
4399
+ <ul>
4400
+ ${t.facts.map(t=>e.html`
4401
+ <li>
4402
+ <strong>${E.t("typedDimensionWarning.field")}</strong>
4403
+ <a
4404
+ href="javascript:void(0)"
4405
+ class="error-field-link"
4406
+ @click="${()=>this._handleTypedDimensionFactClick(t.conceptId,t.columnId,t.sectionId)}"
4407
+ title="${E.t("typedDimensionWarning.clickToFocus")}"
4408
+ >
4409
+ ${t.conceptLabel} (${t.columnTitle})
4410
+ </a>
4411
+ — <strong>${E.t("typedDimensionWarning.value")}</strong> ${t.value}
4412
+ </li>
4413
+ `)}
4414
+ </ul>
4415
+ </li>
4416
+ `)}
4417
+ </ul>
4418
+ </div>
4419
+ <div class="error-popup-footer">
4420
+ <button class="btn-secondary" @click="${()=>{this._showTypedDimensionWarning=!1,this.requestUpdate()}}">${E.t("typedDimensionWarning.cancel")}</button>
4421
+ <button class="btn-primary" @click="${()=>{this._showTypedDimensionWarning=!1,this._continueSubmit()}}">${E.t("typedDimensionWarning.continue")}</button>
4422
+ </div>
4423
+ </div>
4424
+ </div>
4425
+ `:""}
4426
+
4102
4427
  <!-- Role Context Menu -->
4103
4428
  ${this._showRoleContextMenu?e.html`
4104
4429
  <div
@@ -4118,7 +4443,7 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
4118
4443
  </div>
4119
4444
  `:""}
4120
4445
  </div>
4121
- `:e.html`<div>${k.t("form.loading")}</div>`}},exports.JupiterDynamicForm.styles=e.css`
4446
+ `:e.html`<div>${E.t("form.loading")}</div>`}},exports.JupiterDynamicForm.styles=e.css`
4122
4447
  :host {
4123
4448
  display: block;
4124
4449
  font-family: var(--jupiter-font-family, system-ui, -apple-system, sans-serif);
@@ -4212,7 +4537,45 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
4212
4537
  color: var(--jupiter-warning-color, #ff9800);
4213
4538
  }
4214
4539
 
4215
- .form-actions button {
4540
+ /* JDF-101: banner naming an active concept/facts-only filter — informational (blue), distinct
4541
+ from the error/warning red-amber palette above, since a filter isn't a problem to fix. */
4542
+ .active-filter-banner {
4543
+ display: flex;
4544
+ align-items: center;
4545
+ justify-content: space-between;
4546
+ gap: 12px;
4547
+ margin-bottom: 16px;
4548
+ padding: 10px 16px;
4549
+ border-radius: 4px;
4550
+ background: var(--jupiter-info-background, #e3f2fd);
4551
+ border: 1px solid var(--jupiter-primary-color, #1976d2);
4552
+ color: var(--jupiter-primary-color, #1976d2);
4553
+ font-size: 14px;
4554
+ }
4555
+
4556
+ .active-filter-banner-text {
4557
+ font-weight: 500;
4558
+ }
4559
+
4560
+ .active-filter-banner-clear {
4561
+ flex-shrink: 0;
4562
+ background: none;
4563
+ border: 1px solid var(--jupiter-primary-color, #1976d2);
4564
+ border-radius: 4px;
4565
+ padding: 6px 12px;
4566
+ font-size: 13px;
4567
+ font-weight: 600;
4568
+ color: var(--jupiter-primary-color, #1976d2);
4569
+ cursor: pointer;
4570
+ }
4571
+
4572
+ .active-filter-banner-clear:hover {
4573
+ background: var(--jupiter-primary-color, #1976d2);
4574
+ color: #fff;
4575
+ }
4576
+
4577
+ .form-actions button,
4578
+ .error-popup-footer button {
4216
4579
  padding: 10px 20px;
4217
4580
  border: none;
4218
4581
  border-radius: 4px;
@@ -4269,12 +4632,14 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
4269
4632
  background: var(--jupiter-validate-color-dark, #2e7d32);
4270
4633
  }
4271
4634
 
4272
- .btn-preview {
4273
- background: var(--jupiter-primary-color, #1976d2);
4274
- color: white;
4635
+ .btn-primary--validating {
4636
+ opacity: 0.85;
4637
+ animation: jupiter-validating-pulse 1.5s ease-in-out infinite;
4275
4638
  }
4276
- .btn-preview:hover:not(:disabled) {
4277
- background: var(--jupiter-primary-color-dark, #1565c0);
4639
+
4640
+ @keyframes jupiter-validating-pulse {
4641
+ 0%, 100% { opacity: 0.85; }
4642
+ 50% { opacity: 1; }
4278
4643
  }
4279
4644
 
4280
4645
 
@@ -4356,6 +4721,7 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
4356
4721
  .roles-count {
4357
4722
  display: inline-flex;
4358
4723
  align-items: center;
4724
+ gap: 3px;
4359
4725
  background: var(--primaryTextColor, var(--jupiter-primary-color, #1976d2));
4360
4726
  color: var(--headerBgColor, white) !important;
4361
4727
  border-radius: 10px;
@@ -4367,6 +4733,14 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
4367
4733
  justify-content: center;
4368
4734
  }
4369
4735
 
4736
+ /* JDF-101 item 3: marks the badge as counting the advanced-filter-narrowed roles, not the
4737
+ Filter Roles selection, so it doesn't read as a plain (and here, smaller) role count. */
4738
+ .roles-count-filter-icon {
4739
+ width: 10px;
4740
+ height: 10px;
4741
+ fill: currentColor;
4742
+ }
4743
+
4370
4744
  .no-roles-message {
4371
4745
  padding: 40px;
4372
4746
  text-align: center;
@@ -4613,6 +4987,70 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
4613
4987
  background: var(--bg-color-2, var(--jupiter-background, #fff));
4614
4988
  }
4615
4989
 
4990
+ .side-panel-content-header {
4991
+ padding: 20px 24px 12px 24px;
4992
+ cursor: pointer;
4993
+ border-radius: 4px;
4994
+ }
4995
+
4996
+ .side-panel-content-header:hover {
4997
+ background: var(--jupiter-hover-color, rgba(25, 118, 210, 0.08));
4998
+ }
4999
+
5000
+ .side-panel-content-header:focus-visible {
5001
+ outline: 2px solid var(--jupiter-primary-color, #1976d2);
5002
+ outline-offset: 2px;
5003
+ }
5004
+
5005
+ .side-panel-content-position {
5006
+ font-size: 12px;
5007
+ font-weight: 600;
5008
+ letter-spacing: 0.02em;
5009
+ text-transform: uppercase;
5010
+ color: var(--jupiter-text-secondary, #757575);
5011
+ margin-bottom: 4px;
5012
+ }
5013
+
5014
+ .side-panel-content-title {
5015
+ font-size: 18px;
5016
+ font-weight: 600;
5017
+ margin: 0;
5018
+ color: var(--jupiter-text-primary, #333);
5019
+ }
5020
+
5021
+ /* JDF-093 Part B: stated once, here, rather than repeated on every input hint. */
5022
+ .side-panel-content-amount-scale {
5023
+ font-size: 13px;
5024
+ color: var(--jupiter-text-secondary, #757575);
5025
+ margin-top: 4px;
5026
+ }
5027
+
5028
+ .side-panel-nav-row {
5029
+ display: flex;
5030
+ align-items: center;
5031
+ justify-content: space-between;
5032
+ gap: 12px;
5033
+ padding: 4px 16px 16px 16px;
5034
+ }
5035
+
5036
+ .side-panel-nav-btn {
5037
+ background: none;
5038
+ border: 1px solid var(--jupiter-border-color, #e0e0e0);
5039
+ border-radius: 4px;
5040
+ padding: 8px 16px;
5041
+ font-size: 14px;
5042
+ color: var(--jupiter-primary-color, #1976d2);
5043
+ cursor: pointer;
5044
+ }
5045
+
5046
+ .side-panel-nav-btn:hover {
5047
+ background: var(--jupiter-hover-color, rgba(25, 118, 210, 0.08));
5048
+ }
5049
+
5050
+ .side-panel-nav-next {
5051
+ margin-left: auto;
5052
+ }
5053
+
4616
5054
  .side-panel-content .form-sections {
4617
5055
  padding: 0 24px 24px 24px;
4618
5056
  padding-top: 0;
@@ -4935,5 +5373,5 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
4935
5373
  .context-menu-item.danger:hover {
4936
5374
  background: #ffebee;
4937
5375
  }
4938
- `,ft([w({type:Object})],exports.JupiterDynamicForm.prototype,"schema",2),ft([w({type:Object})],exports.JupiterDynamicForm.prototype,"xbrlInput",2),ft([w({type:Object})],exports.JupiterDynamicForm.prototype,"config",2),ft([w({type:Object})],exports.JupiterDynamicForm.prototype,"initialData",2),ft([w({type:Boolean})],exports.JupiterDynamicForm.prototype,"disabled",2),ft([w({type:Boolean})],exports.JupiterDynamicForm.prototype,"readonly",2),ft([w({type:Boolean,attribute:"calculation-enabled"})],exports.JupiterDynamicForm.prototype,"calculationEnabled",2),ft([w({type:Boolean,attribute:"formula-enabled"})],exports.JupiterDynamicForm.prototype,"formulaEnabled",2),ft([w({type:Boolean,attribute:"table-layout-enabled"})],exports.JupiterDynamicForm.prototype,"tableLayoutEnabled",2),ft([w({type:String})],exports.JupiterDynamicForm.prototype,"periodStartDate",2),ft([w({type:String})],exports.JupiterDynamicForm.prototype,"periodEndDate",2),ft([w({type:String})],exports.JupiterDynamicForm.prototype,"language",2),ft([w({type:String})],exports.JupiterDynamicForm.prototype,"reportingLanguage",2),ft([w({type:String})],exports.JupiterDynamicForm.prototype,"display",2),ft([w({type:String})],exports.JupiterDynamicForm.prototype,"mode",2),ft([w({type:String,attribute:"submit-button-label"})],exports.JupiterDynamicForm.prototype,"submitButtonLabel",2),ft([w({type:Array})],exports.JupiterDynamicForm.prototype,"roleFilterAxes",2),ft([w({type:Boolean,attribute:"show-last-validation-result-btn"})],exports.JupiterDynamicForm.prototype,"showLastValidationResultBtn",2),ft([w({type:Boolean,attribute:"is-draft-saving"})],exports.JupiterDynamicForm.prototype,"isDraftSaving",2),ft([w({type:Boolean,attribute:"has-unsaved-changes",reflect:!0})],exports.JupiterDynamicForm.prototype,"hasUnsavedChanges",2),ft([w({type:Array})],exports.JupiterDynamicForm.prototype,"defaultUnits",2),ft([w({type:String})],exports.JupiterDynamicForm.prototype,"decimals",2),ft([w({type:Object,attribute:"master-data"})],exports.JupiterDynamicForm.prototype,"masterData",2),ft([w({type:Object,attribute:"dynaforms-metadata"})],exports.JupiterDynamicForm.prototype,"dynaformsMetadata",2),ft([w({type:Object,attribute:"dynaforms-facts"})],exports.JupiterDynamicForm.prototype,"dynaformsFacts",2),ft([S()],exports.JupiterDynamicForm.prototype,"_formData",2),ft([S()],exports.JupiterDynamicForm.prototype,"_draftLoaded",2),ft([S()],exports.JupiterDynamicForm.prototype,"_draftLoadedAt",2),ft([S()],exports.JupiterDynamicForm.prototype,"_preservedFormData",2),ft([S()],exports.JupiterDynamicForm.prototype,"_periodData",2),ft([S()],exports.JupiterDynamicForm.prototype,"_preservedPeriodData",2),ft([S()],exports.JupiterDynamicForm.prototype,"_unitData",2),ft([S()],exports.JupiterDynamicForm.prototype,"_preservedUnitData",2),ft([S()],exports.JupiterDynamicForm.prototype,"_decimalsData",2),ft([S()],exports.JupiterDynamicForm.prototype,"_totalManuallyEditedData",2),ft([S()],exports.JupiterDynamicForm.prototype,"_effectiveMasterData",2),ft([S()],exports.JupiterDynamicForm.prototype,"_typedMemberData",2),ft([S()],exports.JupiterDynamicForm.prototype,"_preservedTypedMemberData",2),ft([S()],exports.JupiterDynamicForm.prototype,"_repeatCounts",2),ft([S()],exports.JupiterDynamicForm.prototype,"_hiddenColumnIds",2),ft([S()],exports.JupiterDynamicForm.prototype,"_columns",2),ft([S()],exports.JupiterDynamicForm.prototype,"_errors",2),ft([S()],exports.JupiterDynamicForm.prototype,"_touched",2),ft([S()],exports.JupiterDynamicForm.prototype,"_dirty",2),ft([S()],exports.JupiterDynamicForm.prototype,"_valid",2),ft([S()],exports.JupiterDynamicForm.prototype,"_submitted",2),ft([S()],exports.JupiterDynamicForm.prototype,"_xbrlFormErrors",2),ft([S()],exports.JupiterDynamicForm.prototype,"_calculationWarnings",2),ft([S()],exports.JupiterDynamicForm.prototype,"_showErrorPopup",2),ft([S()],exports.JupiterDynamicForm.prototype,"_submitDisabled",2),ft([S()],exports.JupiterDynamicForm.prototype,"_currentSchema",2),ft([S()],exports.JupiterDynamicForm.prototype,"_allSections",2),ft([S()],exports.JupiterDynamicForm.prototype,"_selectedRoleIds",2),ft([S()],exports.JupiterDynamicForm.prototype,"_showFilterDialog",2),ft([S()],exports.JupiterDynamicForm.prototype,"_revealRolePrompt",2),ft([S()],exports.JupiterDynamicForm.prototype,"_showFactsOnly",2),ft([S()],exports.JupiterDynamicForm.prototype,"_conceptSearchText",2),ft([S()],exports.JupiterDynamicForm.prototype,"_periodPreferences",2),ft([S()],exports.JupiterDynamicForm.prototype,"_activeSidePanelRoleId",2),ft([S()],exports.JupiterDynamicForm.prototype,"_sidePanelSearchQuery",2),ft([S()],exports.JupiterDynamicForm.prototype,"_sidePanelCollapsed",2),ft([S()],exports.JupiterDynamicForm.prototype,"_adminRoleConfigs",2),ft([S()],exports.JupiterDynamicForm.prototype,"_roleBorderStatuses",2),ft([S()],exports.JupiterDynamicForm.prototype,"_roleCompletedStates",2),ft([S()],exports.JupiterDynamicForm.prototype,"_showRoleContextMenu",2),ft([S()],exports.JupiterDynamicForm.prototype,"_contextMenuX",2),ft([S()],exports.JupiterDynamicForm.prototype,"_contextMenuY",2),ft([S()],exports.JupiterDynamicForm.prototype,"_contextMenuRoleId",2),ft([S()],exports.JupiterDynamicForm.prototype,"_validationStatus",2),ft([S()],exports.JupiterDynamicForm.prototype,"_formulaValidationResults",2),ft([S()],exports.JupiterDynamicForm.prototype,"_formulaValidationSummary",2),ft([S()],exports.JupiterDynamicForm.prototype,"_showFormulaValidationDialog",2),exports.JupiterDynamicForm=ft([t("jupiter-dynamic-form")],exports.JupiterDynamicForm);exports.FactMatcher=De,exports.FormValidator=C,exports.TYPE_INPUT_MAP=Re,exports.XBRLValidator=ze,exports.collectEnumerationsFromChain=Ve,exports.determineInputTypeFromBaseChain=Oe,exports.getInputTypeForConceptType=Me,exports.isCheckboxType=Pe,exports.isNumericType=je,exports.isSelectType=Le,exports.isTextareaType=Ae,exports.resolveBaseTypeChain=Ne,exports.version="1.5.0";
5376
+ `,yt([S({type:Object})],exports.JupiterDynamicForm.prototype,"schema",2),yt([S({type:Object})],exports.JupiterDynamicForm.prototype,"xbrlInput",2),yt([S({type:Object})],exports.JupiterDynamicForm.prototype,"config",2),yt([S({type:Object})],exports.JupiterDynamicForm.prototype,"initialData",2),yt([S({type:Boolean})],exports.JupiterDynamicForm.prototype,"disabled",2),yt([S({type:Boolean})],exports.JupiterDynamicForm.prototype,"readonly",2),yt([S({type:Boolean,attribute:"calculation-enabled"})],exports.JupiterDynamicForm.prototype,"calculationEnabled",2),yt([S({type:Boolean,attribute:"formula-enabled"})],exports.JupiterDynamicForm.prototype,"formulaEnabled",2),yt([S({type:Boolean,attribute:"table-layout-enabled"})],exports.JupiterDynamicForm.prototype,"tableLayoutEnabled",2),yt([S({type:String})],exports.JupiterDynamicForm.prototype,"periodStartDate",2),yt([S({type:String})],exports.JupiterDynamicForm.prototype,"periodEndDate",2),yt([S({type:String})],exports.JupiterDynamicForm.prototype,"language",2),yt([S({type:String})],exports.JupiterDynamicForm.prototype,"reportingLanguage",2),yt([S({type:String})],exports.JupiterDynamicForm.prototype,"numberLocale",2),yt([S({type:String})],exports.JupiterDynamicForm.prototype,"display",2),yt([S({type:String})],exports.JupiterDynamicForm.prototype,"mode",2),yt([S({type:String,attribute:"submit-button-label"})],exports.JupiterDynamicForm.prototype,"submitButtonLabel",2),yt([S({type:Array})],exports.JupiterDynamicForm.prototype,"roleFilterAxes",2),yt([S({type:Boolean,attribute:"show-last-validation-result-btn"})],exports.JupiterDynamicForm.prototype,"showLastValidationResultBtn",2),yt([S({type:Boolean,attribute:"is-draft-saving"})],exports.JupiterDynamicForm.prototype,"isDraftSaving",2),yt([S({type:Boolean,attribute:"has-unsaved-changes",reflect:!0})],exports.JupiterDynamicForm.prototype,"hasUnsavedChanges",2),yt([S({type:Array})],exports.JupiterDynamicForm.prototype,"defaultUnits",2),yt([S({type:String})],exports.JupiterDynamicForm.prototype,"decimals",2),yt([S({type:Object,attribute:"master-data"})],exports.JupiterDynamicForm.prototype,"masterData",2),yt([S({type:String,attribute:"prefilled-tooltip"})],exports.JupiterDynamicForm.prototype,"prefilledTooltip",2),yt([S({type:Object,attribute:"dynaforms-metadata"})],exports.JupiterDynamicForm.prototype,"dynaformsMetadata",2),yt([S({type:Object,attribute:"dynaforms-facts"})],exports.JupiterDynamicForm.prototype,"dynaformsFacts",2),yt([C()],exports.JupiterDynamicForm.prototype,"_formData",2),yt([C()],exports.JupiterDynamicForm.prototype,"_draftLoaded",2),yt([C()],exports.JupiterDynamicForm.prototype,"_draftLoadedAt",2),yt([C()],exports.JupiterDynamicForm.prototype,"_preservedFormData",2),yt([C()],exports.JupiterDynamicForm.prototype,"_periodData",2),yt([C()],exports.JupiterDynamicForm.prototype,"_preservedPeriodData",2),yt([C()],exports.JupiterDynamicForm.prototype,"_unitData",2),yt([C()],exports.JupiterDynamicForm.prototype,"_preservedUnitData",2),yt([C()],exports.JupiterDynamicForm.prototype,"_decimalsData",2),yt([C()],exports.JupiterDynamicForm.prototype,"_totalManuallyEditedData",2),yt([C()],exports.JupiterDynamicForm.prototype,"_effectiveMasterData",2),yt([C()],exports.JupiterDynamicForm.prototype,"_typedMemberData",2),yt([C()],exports.JupiterDynamicForm.prototype,"_preservedTypedMemberData",2),yt([C()],exports.JupiterDynamicForm.prototype,"_repeatCounts",2),yt([C()],exports.JupiterDynamicForm.prototype,"_hiddenColumnIds",2),yt([C()],exports.JupiterDynamicForm.prototype,"_columns",2),yt([C()],exports.JupiterDynamicForm.prototype,"_errors",2),yt([C()],exports.JupiterDynamicForm.prototype,"_touched",2),yt([C()],exports.JupiterDynamicForm.prototype,"_dirty",2),yt([C()],exports.JupiterDynamicForm.prototype,"_valid",2),yt([C()],exports.JupiterDynamicForm.prototype,"_submitted",2),yt([C()],exports.JupiterDynamicForm.prototype,"_xbrlFormErrors",2),yt([C()],exports.JupiterDynamicForm.prototype,"_calculationWarnings",2),yt([C()],exports.JupiterDynamicForm.prototype,"_showErrorPopup",2),yt([C()],exports.JupiterDynamicForm.prototype,"_showTypedDimensionWarning",2),yt([C()],exports.JupiterDynamicForm.prototype,"_typedDimensionWarningFacts",2),yt([C()],exports.JupiterDynamicForm.prototype,"_submitDisabled",2),yt([C()],exports.JupiterDynamicForm.prototype,"_currentSchema",2),yt([C()],exports.JupiterDynamicForm.prototype,"_allSections",2),yt([C()],exports.JupiterDynamicForm.prototype,"_selectedRoleIds",2),yt([C()],exports.JupiterDynamicForm.prototype,"_showFilterDialog",2),yt([C()],exports.JupiterDynamicForm.prototype,"_revealRolePrompt",2),yt([C()],exports.JupiterDynamicForm.prototype,"_showFactsOnly",2),yt([C()],exports.JupiterDynamicForm.prototype,"_conceptSearchText",2),yt([C()],exports.JupiterDynamicForm.prototype,"_periodPreferences",2),yt([C()],exports.JupiterDynamicForm.prototype,"_activeSidePanelRoleId",2),yt([C()],exports.JupiterDynamicForm.prototype,"_sidePanelSearchQuery",2),yt([C()],exports.JupiterDynamicForm.prototype,"_sidePanelCollapsed",2),yt([C()],exports.JupiterDynamicForm.prototype,"_adminRoleConfigs",2),yt([C()],exports.JupiterDynamicForm.prototype,"_roleBorderStatuses",2),yt([C()],exports.JupiterDynamicForm.prototype,"_roleCompletedStates",2),yt([C()],exports.JupiterDynamicForm.prototype,"_showRoleContextMenu",2),yt([C()],exports.JupiterDynamicForm.prototype,"_contextMenuX",2),yt([C()],exports.JupiterDynamicForm.prototype,"_contextMenuY",2),yt([C()],exports.JupiterDynamicForm.prototype,"_contextMenuRoleId",2),yt([C()],exports.JupiterDynamicForm.prototype,"_validationStatus",2),yt([C()],exports.JupiterDynamicForm.prototype,"_validationDotCount",2),yt([C()],exports.JupiterDynamicForm.prototype,"_formulaValidationResults",2),yt([C()],exports.JupiterDynamicForm.prototype,"_formulaValidationSummary",2),yt([C()],exports.JupiterDynamicForm.prototype,"_showFormulaValidationDialog",2),exports.JupiterDynamicForm=yt([t("jupiter-dynamic-form")],exports.JupiterDynamicForm);exports.FactMatcher=De,exports.FormValidator=$,exports.TYPE_INPUT_MAP=Me,exports.XBRLValidator=Je,exports.collectEnumerationsFromChain=Oe,exports.determineInputTypeFromBaseChain=ze,exports.getInputTypeForConceptType=je,exports.isCheckboxType=Pe,exports.isNumericType=Le,exports.isSelectType=Ne,exports.isTextareaType=Ae,exports.resolveBaseTypeChain=Ve,exports.version="1.5.0";
4939
5377
  //# sourceMappingURL=index.js.map