jupiter-dynamic-forms 1.20.6 → 1.20.8
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/core/add-column-dialog.d.ts +31 -2
- package/dist/core/add-column-dialog.d.ts.map +1 -1
- package/dist/core/dynamic-form.d.ts +17 -0
- package/dist/core/dynamic-form.d.ts.map +1 -1
- package/dist/core/form-field.d.ts.map +1 -1
- package/dist/core/form-section.d.ts +28 -2
- package/dist/core/form-section.d.ts.map +1 -1
- package/dist/index.js +312 -152
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1015 -298
- package/dist/index.mjs.map +1 -1
- package/dist/schema/types.d.ts +18 -0
- package/dist/schema/types.d.ts.map +1 -1
- package/dist/schema/xbrl-types.d.ts +20 -0
- package/dist/schema/xbrl-types.d.ts.map +1 -1
- package/dist/utils/formula-precondition-evaluator.d.ts +4 -1
- package/dist/utils/formula-precondition-evaluator.d.ts.map +1 -1
- package/dist/utils/formula-resolution-context.d.ts +29 -0
- package/dist/utils/formula-resolution-context.d.ts.map +1 -1
- package/dist/utils/formula-variable-resolver.d.ts +96 -4
- package/dist/utils/formula-variable-resolver.d.ts.map +1 -1
- package/dist/utils/type-input-mapping.d.ts +4 -4
- package/dist/utils/type-input-mapping.d.ts.map +1 -1
- package/dist/utils/xbrl-form-builder.d.ts.map +1 -1
- package/dist/utils/xbrl-validation.d.ts +9 -0
- package/dist/utils/xbrl-validation.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -19,7 +19,7 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
|
|
|
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 F{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})}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,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}]},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}]},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}]},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,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})),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}]);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}]):o.forEach(i=>{r.push([{axisId:t.id,axisLabel:t.axisLabel,memberId:e.id,memberLabel:e.label,isTyped:t.isTyped||!1,typedMemberId:t.typedMemberId},...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 k={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."},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"}},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."},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"}}};class T{static setLanguage(e){k[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=k[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=k[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(k)}}function E(e){return!!(null==e?void 0:e.toLowerCase().includes("totallabel"))}T.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}}}class M 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 M(`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 M(`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 M(`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 M(`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 M(`Expected a number, variable, sum(...), or parenthesized expression, got "${e.value}"`,this.test,"unsupported-syntax")}}function j(e,t){return e.get(t)}function L(e,t,i){switch(e.kind){case"number":case"string":return e.value;case"sum":return function(e,t,i){const o=j(t,e);return void 0===o?0:(Array.isArray(o)?o:[o]).reduce((t,o)=>{if("string"==typeof o)throw new M(`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=j(t,e.name);if(void 0===o)throw new M(`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 M(`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=L(r,t,i);if("string"==typeof n)throw new M(`Non-numeric value ("${n}") cannot be used in arithmetic (+ / -)`,i,"unsupported-syntax");return e+o*n},0)}}function N(e,t,i,o){switch(e.kind){case"or":return e.terms.some(e=>N(e,t,i,o));case"and":return e.terms.every(e=>N(e,t,i,o));case"not":return!N(e.arg,t,i,o);case"empty":{const i=j(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 M(`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=L(e.left,t,i),r=L(e.right,t,i);return"string"==typeof o||"string"==typeof r?String(o)===String(r):Math.abs(o-r)<.01}}}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 M(`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 N(new P(o,e).parseBoolExpr(),t,e,i)}const V=/^\.\s*(eq|ne|gt|lt|ge|le)\s+(-?\d+(?:\.\d+)?)$/;function z(e){return!!(null==e?void 0:e.toLowerCase().includes("totallabel"))}function U(e){return!!(null==e?void 0:e.toLowerCase().includes("negatedtotallabel"))}function J(e,t,i=0){if(!t.isAbstract(e))return e;if(i>5)return null;const o=t.getChildren(e).find(e=>z(t.getPreferredLabel(e)));return o?J(o,t,i+1):null}function B(e,t,i,o,r){if(i<0)return o;const n=e[t];if(U(r.getPreferredLabel(n)))return o.length>0?o:[e[i]];if(o.length>0)return[e[i],...o];if(U(r.getPreferredLabel(e[i]))){let t=-1;for(let o=i-1;o>=0;o--)if(z(r.getPreferredLabel(e[o]))){t=o;break}return t>=0?[e[t],e[i]]:[e[i]]}return[e[i]]}function q(e){return null!=e&&""!==e}function H(e){const t=[];for(const i of Object.keys(e)){const o=e[i]||{};for(const e of Object.keys(o))q(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 K(e,t,i){t.has(e.conceptName)||t.set(e.conceptName,e.id),i.has(e.conceptName)||i.set(e.conceptName,(e.children||[]).map(e=>e.id)),(e.children||[]).forEach(e=>K(e,t,i))}const W={getId:e=>e.id,getPreferredLabel:e=>e.preferredLabel,isAbstract:e=>!0===e.abstract,getChildren:e=>e.children||[]};function G(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=J(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(z(t.getPreferredLabel(n))&&0===t.getChildren(n).length){let e=-1;for(let o=r-1;o>=0;o--)if(z(t.getPreferredLabel(i[o]))){e=o;break}const a=i.slice(e+1,r),s=B(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,W));for(const r of t.keys())h.set(r,e.roleURI);e.columns&&u.set(e.roleURI,e.columns)});const m=new Map,f=new Map,g=new Map;return(o||[]).forEach(e=>{e.items.forEach(e=>{e.dimensions.forEach(e=>{m.has(e.conceptName)||m.set(e.conceptName,e.id),(e.members||[]).forEach(e=>K(e,f,g))})})}),{formData:e,columns:t,periodStartDate:r,periodEndDate:n,conceptByQName:s,conceptById:l,conceptIdByQNamePerRole:d,childrenByRole:c,totalGroupChildrenByRole:p,dimensionQNameToId:m,memberQNameToId:f,memberChildrenByQName:g,columnsByRole:u,roleURIByConceptId:h,allCandidates:H(e),typedMemberData:a??{}}}function Q(e){return`${e.conceptId}::${e.columnId}`}function X(e,t){return re(e.filters.map(i=>oe(i,t.allCandidates,t,e.filters)))}function Z(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 ee(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 te(e,t){return{start:(null==e?void 0:e.periodStartDate)??t.periodStartDate,end:(null==e?void 0:e.periodEndDate)??t.periodEndDate}}function ie(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=function(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}(d,l);else{const e=d.get(l)||[];c=e.length>0?e:(null==(n=i.totalGroupChildrenByRole.get(a??""))?void 0:n.get(l))||[]}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[];if(n&&"child"===e.attributes["member.axis"])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=>ee(Z(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);const s=n?i.memberQNameToId.get(n):void 0;return t.filter(e=>ee(Z(i,e),a,s))}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))}(Z(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=te(e,i),a=r.end??r.start;return n.end===a}(Z(i,e),o,i))}case"OR_FILTER":return function(e){const t=new Map;return e.forEach(e=>e.forEach(e=>t.set(Q(e),e))),Array.from(t.values())}(e.children.map(e=>oe(e,t,i,o)));case"ASPECT_COVER":case"UNKNOWN":return t;default:return[]}}function oe(e,t,i,o){const r=ie(e,t,i,o);if(!e.complement)return r;const n=new Set(r.map(Q));return t.filter(e=>!n.has(Q(e)))}function re(e){return 0===e.length?[]:e.reduce((e,t)=>{const i=new Set(t.map(Q));return e.filter(e=>i.has(Q(e)))})}function ne(e){return e.some(e=>"PERIOD_INSTANT"===e.type||"PERIOD_END"===e.type||"OR_FILTER"===e.type&&ne(e.children))}function ae(e,t,i){if(e.length<=1||ne(t.filters))return e;const o=e.filter(e=>te(Z(i,e),i).end===i.periodEndDate);return o.length>0?o:e}function se(e,t){const i=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))}(ae(X(e,t),e,t),e,t),t),o=i.map(e=>{var i;return function(e){if(null==e||""===e)return;const t=parseFloat(String(e));return Number.isNaN(t)?String(e):t}(null==(i=t.formData[e.conceptId])?void 0:i[e.columnId])}).filter(e=>void 0!==e);if(e.bindAsSequence){if(0===o.length&&"()"===e.fallbackValue)return[];if(0===o.length)return;return o}if(0!==o.length)return 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]}function le(e,t){return X(e,t).length}function de(e,t){return!(le(e,t)>0)&&(void 0!==e.fallbackValue||void 0)}function ce(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(...ce(i.children));return t}function pe(e){return ce(e.filters)}function ue(e,t,i){const o=i.columns.map(e=>({conceptId:t,columnId:e.id}));return re(e.filters.map(t=>oe(t,o,i,e.filters))).map(e=>e.columnId)}class he{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){const i=new Map;for(const o of e.variables)i.set(o.name,se(o,t));return i}(e,i);if("VALUE_ASSERTION"===e.type){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 n=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=de(r,t);void 0!==e&&o.set(r.name,e)}return o}(e,i),a=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 M)return{satisfied:!1,skipReason:"unresolvable"};throw o}if(!e)return{satisfied:!1,skipReason:"precondition"}}return{satisfied:!0}}(e.preconditions,r,n);if(!a.satisfied)return this._skippedResult(e,t,a.skipReason??"unresolvable");if("EXISTENCE_ASSERTION"===e.type){const r=1===e.variables.length?le(e.variables[0],i):function(e,t){const i=new Map;for(const o of e)for(const e of X(o,t))i.set(Q(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=V.exec(e.trim());if(!o)throw new M(`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)}const s=O(e.test,r,n);return this._evaluatedResult(e,t,i,s,o)}catch(r){if(r instanceof M)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 pe(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=ue(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 me{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")}}class fe{static validateConceptValue(e,t,i){const o=[];if(null==t||""===t)return{valid:!0,errors:[]};if(!e||!i||0===i.length)return{valid:!0,errors:[]};const r=this.findDatatype(e,i);if(!r||!r.validation)return{valid:!0,errors:[]};const n=r.validation,a=String(t);if(n.pattern){const e=this.validatePattern(a,n.pattern);e&&o.push(e)}if(void 0!==n.length){const e=this.validateExactLength(a,n.length);e&&o.push(e)}if(void 0!==n.minLength){const e=this.validateMinLength(a,n.minLength);e&&o.push(e)}if(void 0!==n.maxLength){const e=this.validateMaxLength(a,n.maxLength);e&&o.push(e)}if(void 0!==n.totalDigits){const e=this.validateTotalDigits(a,n.totalDigits);e&&o.push(e)}return{valid:0===o.length,errors:o}}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:T.t("xbrlValidation.patternMismatch",{pattern:t}),expectedValue:t,actualValue:e}}catch(i){return console.error(`Invalid regex pattern: ${t}`,i),{type:"pattern",message:T.t("xbrlValidation.invalidPattern",{pattern:t}),expectedValue:t,actualValue:e}}return null}static validateExactLength(e,t){return e.length!==t?{type:"length",message:T.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:T.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:T.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:T.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(T.t("xbrlValidation.ruleSummaryPattern",{pattern:o.pattern})),void 0!==o.length&&r.push(T.t("xbrlValidation.ruleSummaryExactLength",{required:o.length})),void 0!==o.minLength&&r.push(T.t("xbrlValidation.ruleSummaryMinLength",{required:o.minLength})),void 0!==o.maxLength&&r.push(T.t("xbrlValidation.ruleSummaryMaxLength",{required:o.maxLength})),void 0!==o.totalDigits&&r.push(T.t("xbrlValidation.ruleSummaryTotalDigits",{required:o.totalDigits})),r}}const ge={"nl-types:formattedExplanationItemType":{fieldType:"textarea",placeholder:T.t("field.enterDetailedExplanation")},"nl-types:monetaryNoDecimals20ItemType":{fieldType:"number",htmlInputType:"text",inputMode:"decimal",allowDecimals:!1,step:1,placeholder:T.t("field.enterAmountNoDecimals")},"xbrli:monetaryItemType":{fieldType:"currency",htmlInputType:"text",inputMode:"decimal",allowDecimals:!0,step:.01,placeholder:T.t("field.enterCurrency")},"xbrli:stringItemType":{fieldType:"text",htmlInputType:"text",placeholder:T.t("field.enterText")},"xbrli:dateItemType":{fieldType:"date",htmlInputType:"date"},"xbrli:dateTimeItemType":{fieldType:"datetime",htmlInputType:"datetime-local"},"xbrli:integerItemType":{fieldType:"integer",htmlInputType:"text",inputMode:"numeric",allowDecimals:!1,step:1,placeholder:T.t("field.enterWholeNumber")},"xbrli:nonNegativeIntegerItemType":{fieldType:"integer",htmlInputType:"text",inputMode:"numeric",allowDecimals:!1,min:0,step:1,placeholder:T.t("field.enterPositiveNumber")},"xbrli:positiveIntegerItemType":{fieldType:"integer",htmlInputType:"text",inputMode:"numeric",allowDecimals:!1,min:1,step:1,placeholder:T.t("field.enterPositiveNumber")},"xbrli:decimalItemType":{fieldType:"decimal",htmlInputType:"text",inputMode:"decimal",allowDecimals:!0,step:"any",placeholder:T.t("field.enterDecimalValue")},"xbrli:sharesItemType":{fieldType:"number",htmlInputType:"text",inputMode:"decimal",allowDecimals:!0,min:0,step:.01,placeholder:T.t("field.enterNumberOfShares")},"xbrli:shares":{fieldType:"number",htmlInputType:"text",inputMode:"decimal",allowDecimals:!0,min:0,step:.01,placeholder:T.t("field.enterNumberOfShares")},"xbrli:gYearItemType":{fieldType:"number",htmlInputType:"text",inputMode:"numeric",allowDecimals:!1,min:1900,max:2100,step:1,placeholder:T.t("field.yearFormat")},"xbrli:booleanItemType":{fieldType:"boolean"},"xbrli:pureItemType":{fieldType:"percentage",htmlInputType:"text",inputMode:"decimal",allowDecimals:!0,step:.01,placeholder:T.t("field.enterPercentage")},"xbrli:percentItemType":{fieldType:"percentage",htmlInputType:"text",inputMode:"decimal",allowDecimals:!0,step:.01,placeholder:T.t("field.enterPercentage")},"xbrli:emailItemType":{fieldType:"email",htmlInputType:"email",placeholder:T.t("field.emailPlaceholder")},"xbrli:urlItemType":{fieldType:"url",htmlInputType:"url",placeholder:T.t("field.urlPlaceholder")},"xbrli:telephoneItemType":{fieldType:"tel",htmlInputType:"tel",placeholder:T.t("field.phonePlaceholder")}};function be(e,t){if(!e)return{fieldType:"text",htmlInputType:"text",placeholder:T.t("field.enterValue")};if(t&&t.length>0){const i=_e(e,t);if(i.length>0){return Ie(i,t)}}if(console.log(`⚠️ [Type Resolution Fallback] Using pattern matching for: ${e}`),ge[e])return ge[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:T.t("field.enterAmountNoDecimals")}:{fieldType:"currency",htmlInputType:"text",inputMode:"decimal",allowDecimals:!0,step:.01,placeholder:T.t("field.enterCurrency")};if(i.includes("explanation")||i.includes("description")||i.includes("notes")||i.includes("formatted"))return{fieldType:"textarea",placeholder:T.t("field.enterDetailedInformation")};if(i.includes("date"))return i.includes("time")?{fieldType:"datetime",htmlInputType:"datetime-local"}:{fieldType:"date",htmlInputType:"date"};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:T.t("field.enterWholeNumber")}}return i.includes("decimal")||i.includes("numeric")||i.includes("number")?{fieldType:"decimal",htmlInputType:"text",inputMode:"decimal",allowDecimals:!0,step:"any",placeholder:T.t("field.enterDecimalValue")}:i.includes("percent")||i.includes("pure")?{fieldType:"percentage",htmlInputType:"text",inputMode:"decimal",allowDecimals:!0,step:.01,placeholder:T.t("field.enterPercentage")}:{fieldType:"text",htmlInputType:"text",placeholder:T.t("field.enterValue")}}function ve(e){return"textarea"===e}function ye(e){return"boolean"===e}function xe(e){return["number","decimal","integer","currency","percentage"].includes(e)}function _e(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 De(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 Ie(e,t){if(!e||0===e.length)return{fieldType:"text",htmlInputType:"text",placeholder:T.t("field.enterValue")};if(t&&t.length>0){const i=De(e,t);if(i&&i.length>0)return{fieldType:"select",enumerations:i,placeholder:T.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:T.t("field.enterDetailedExplanation")};if(i.some(e=>e.includes("date")))return o.includes("datetime")||o.includes("time")?{fieldType:"datetime",htmlInputType:"datetime-local"}:{fieldType:"date",htmlInputType:"date"};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:T.t("field.enterWholeNumber")}}return i.some(e=>e.includes("percent")||e.includes("pure"))?{fieldType:"percentage",htmlInputType:"text",inputMode:"decimal",allowDecimals:!0,step:.01,placeholder:T.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:T.t("field.enterAmountNoDecimals")}:{fieldType:"currency",htmlInputType:"text",inputMode:"decimal",allowDecimals:!0,step:.01,placeholder:T.t("field.enterCurrency")}:{fieldType:"decimal",htmlInputType:"text",inputMode:"decimal",allowDecimals:!0,step:"any",placeholder:T.t("field.enterDecimalValue")}:e.some(e=>"xbrli:stringItemType"===e)||i.some(e=>"string"===e||e.includes("stringitem"))?{fieldType:"text",htmlInputType:"text",placeholder:T.t("field.enterText")}:{fieldType:"text",htmlInputType:"text",placeholder:T.t("field.enterValue")}}var $e=Object.defineProperty,we=Object.getOwnPropertyDescriptor,Se=(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&&$e(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 xe(be(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,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 _e(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 _e(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=be(this.conceptType,this.datatypes),o=void 0===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=fe.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:T.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=_e(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=T.t("field.cancel"),o.querySelector(".jdf-text-dialog-save").textContent=T.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} ${T.t("field.characters")}`,n.addEventListener("input",()=>{a.textContent=`${n.value.length} ${T.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`
|
|
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 F{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 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"},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"}},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"}}};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 k(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,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 U=/^\.\s*(eq|ne|gt|lt|ge|le)\s+(-?\d+(?:\.\d+)?)$/;function z(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=>z(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(z(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 Y(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 Q(e){const t=[e.id];return(e.children||[]).forEach(e=>t.push(...Q(e))),t}function W(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,Q(e)),(e.children||[]).forEach(e=>{r.add(e.id),W(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=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(z(t.getPreferredLabel(n))&&0===t.getChildren(n).length){let e=-1;for(let o=r-1;o>=0;o--)if(z(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=>W(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:Y(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=U.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={"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 $e(e,t){if(!e)return{fieldType:"text",htmlInputType:"text",placeholder:E.t("field.enterValue")};if(t&&t.length>0){const i=Te(e,t);if(i.length>0){return ke(i,t)}}if(console.log(`⚠️ [Type Resolution Fallback] Using pattern matching for: ${e}`),Ie[e])return Ie[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 we(e){return"textarea"===e}function Se(e){return"boolean"===e}function Ce(e){return["number","decimal","integer","currency","percentage"].includes(e)}function Fe(e){return"select"===e}function Te(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 Ee(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 ke(e,t){if(!e||0===e.length)return{fieldType:"text",htmlInputType:"text",placeholder:E.t("field.enterValue")};if(t&&t.length>0){const i=Ee(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 Re{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}}var Me=Object.defineProperty,Ae=Object.getOwnPropertyDescriptor,Pe=(e,t,i,o)=>{for(var r,n=o>1?void 0:o?Ae(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&&Me(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 Ce($e(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 Te(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 Te(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=$e(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=Re.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:E.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=Te(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=E.t("field.cancel"),o.querySelector(".jdf-text-dialog-save").textContent=E.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} ${E.t("field.characters")}`,n.addEventListener("input",()=>{a.textContent=`${n.value.length} ${E.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
23
|
<span class="text-readonly-label ${o?"":"empty"}"
|
|
24
24
|
title="${r}">${o?r:"—"}</span>
|
|
25
25
|
`:o?e.html`
|
|
@@ -29,18 +29,18 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
|
|
|
29
29
|
${r}
|
|
30
30
|
</span>
|
|
31
31
|
<button class="text-edit-btn" type="button"
|
|
32
|
-
aria-label="${
|
|
32
|
+
aria-label="${E.t("field.editText")}"
|
|
33
33
|
@click="${()=>{var e;return this._openTextDialog(r,(null==(e=this.field)?void 0:e.label)||"")}}">
|
|
34
|
-
✎ ${
|
|
34
|
+
✎ ${E.t("field.editText")}
|
|
35
35
|
</button>
|
|
36
36
|
</div>
|
|
37
37
|
`:e.html`
|
|
38
38
|
<button class="text-trigger-btn" type="button"
|
|
39
|
-
aria-label="${
|
|
39
|
+
aria-label="${E.t("field.addText")}"
|
|
40
40
|
@click="${()=>{var e;return this._openTextDialog("",(null==(e=this.field)?void 0:e.label)||"")}}">
|
|
41
|
-
+ ${
|
|
41
|
+
+ ${E.t("field.addText")}
|
|
42
42
|
</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
|
|
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=$e(this.conceptType,this.datatypes),o=i.fieldType||this.field.type||"text";let r;if("boolean"===o||Se(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){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=$e(this.conceptType,this.datatypes);this.conceptType;const d=l.fieldType||this.field.type||"text";if("textarea"===d||we(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`
|
|
44
44
|
<select
|
|
45
45
|
id="${a}"
|
|
46
46
|
name="${s}"
|
|
@@ -51,7 +51,7 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
|
|
|
51
51
|
@focus="${this._handleFocus}"
|
|
52
52
|
@blur="${this._handleBlur}"
|
|
53
53
|
>
|
|
54
|
-
<option value="">${l.placeholder||
|
|
54
|
+
<option value="">${l.placeholder||E.t("field.select")}</option>
|
|
55
55
|
${o.map(i=>{const o=i.value,r=i.label||i.value,n=i.disabled||!1;return e.html`
|
|
56
56
|
<option
|
|
57
57
|
value="${o}"
|
|
@@ -62,7 +62,7 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
|
|
|
62
62
|
</option>
|
|
63
63
|
`})}
|
|
64
64
|
</select>
|
|
65
|
-
`}if("boolean"===d||
|
|
65
|
+
`}if("boolean"===d||Se(d))return e.html`
|
|
66
66
|
<div class="checkbox-container">
|
|
67
67
|
<input
|
|
68
68
|
id="${a}"
|
|
@@ -77,7 +77,31 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
|
|
|
77
77
|
/>
|
|
78
78
|
<span>${this.field.label}</span>
|
|
79
79
|
</div>
|
|
80
|
-
`;const c=l.htmlInputType||this._getInputType(),p=void 0!==l.step?l.step:
|
|
80
|
+
`;const c=l.htmlInputType||this._getInputType(),p=void 0!==l.step?l.step:Ce(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`
|
|
81
|
+
<div class="date-wrapper">
|
|
82
|
+
<input
|
|
83
|
+
id="${a}"
|
|
84
|
+
name="${s}"
|
|
85
|
+
type="${c}"
|
|
86
|
+
inputmode="${l.inputMode||""}"
|
|
87
|
+
class="${n}"
|
|
88
|
+
.value="${m}"
|
|
89
|
+
?disabled="${i||this.field.disabled}"
|
|
90
|
+
placeholder="${l.placeholder||this.field.placeholder||""}"
|
|
91
|
+
min="${void 0!==u?u:""}"
|
|
92
|
+
max="${void 0!==h?h:""}"
|
|
93
|
+
@input="${this._handleInput}"
|
|
94
|
+
@change="${this._handleInput}"
|
|
95
|
+
@focus="${this._handleFocus}"
|
|
96
|
+
@blur="${this._handleBlur}"
|
|
97
|
+
/>
|
|
98
|
+
<svg class="calendar-icon-svg" viewBox="0 0 24 24">
|
|
99
|
+
<path fill="currentColor" d="M19 4h-1V2h-2v2H8V2H6v2H5
|
|
100
|
+
a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14
|
|
101
|
+
a2 2 0 0 0 2-2V6a2 2 0 0 0-2-2zm0 16H5V9h14z"/>
|
|
102
|
+
</svg>
|
|
103
|
+
</div>
|
|
104
|
+
`:e.html`
|
|
81
105
|
<input
|
|
82
106
|
id="${a}"
|
|
83
107
|
name="${s}"
|
|
@@ -91,16 +115,19 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
|
|
|
91
115
|
min="${void 0!==u?u:""}"
|
|
92
116
|
max="${void 0!==h?h:""}"
|
|
93
117
|
@input="${this._handleInput}"
|
|
118
|
+
@change="${this._handleInput}"
|
|
94
119
|
@focus="${this._handleFocus}"
|
|
95
120
|
@blur="${this._handleBlur}"
|
|
96
121
|
@keydown="${this._handleKeyDown}"
|
|
97
122
|
/>
|
|
98
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`
|
|
99
124
|
<div class="period-controls">
|
|
100
|
-
<label>${
|
|
125
|
+
<label>${E.t("field.date")}:</label>
|
|
101
126
|
<div class="date-wrapper">
|
|
102
127
|
<input
|
|
103
128
|
type="date"
|
|
129
|
+
min="1900-01-01"
|
|
130
|
+
max="2100-12-31"
|
|
104
131
|
.value="${this.periodInstantDate||this.field.periodInstantDate||""}"
|
|
105
132
|
@change="${e=>this._handlePeriodChange(e,"instant")}"
|
|
106
133
|
?disabled="${this.disabled}"
|
|
@@ -114,10 +141,12 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
|
|
|
114
141
|
</div>
|
|
115
142
|
`:"duration"===this.field.periodType?e.html`
|
|
116
143
|
<div class="period-controls">
|
|
117
|
-
<label>${
|
|
144
|
+
<label>${E.t("field.from")}:</label>
|
|
118
145
|
<div class="date-wrapper">
|
|
119
146
|
<input
|
|
120
147
|
type="date"
|
|
148
|
+
min="1900-01-01"
|
|
149
|
+
max="2100-12-31"
|
|
121
150
|
.value="${this.periodStartDate||this.field.periodStartDate||""}"
|
|
122
151
|
@change="${e=>this._handlePeriodChange(e,"start")}"
|
|
123
152
|
?disabled="${this.disabled}"
|
|
@@ -128,10 +157,12 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
|
|
|
128
157
|
a2 2 0 0 0 2-2V6a2 2 0 0 0-2-2zm0 16H5V9h14z"/>
|
|
129
158
|
</svg>
|
|
130
159
|
</div>
|
|
131
|
-
<label>${
|
|
160
|
+
<label>${E.t("field.to")}:</label>
|
|
132
161
|
<div class="date-wrapper">
|
|
133
162
|
<input
|
|
134
163
|
type="date"
|
|
164
|
+
min="1900-01-01"
|
|
165
|
+
max="2100-12-31"
|
|
135
166
|
.value="${this.periodEndDate||this.field.periodEndDate||""}"
|
|
136
167
|
@change="${e=>this._handlePeriodChange(e,"end")}"
|
|
137
168
|
?disabled="${this.disabled}"
|
|
@@ -147,7 +178,7 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
|
|
|
147
178
|
<div class="period-popup-overlay" @click="${this._handlePopupOverlayClick}">
|
|
148
179
|
<div class="period-popup" @click="${e=>e.stopPropagation()}">
|
|
149
180
|
<div class="period-popup-header">
|
|
150
|
-
<div class="period-popup-title">${
|
|
181
|
+
<div class="period-popup-title">${E.t("field.editPeriod")}</div>
|
|
151
182
|
<button class="period-popup-close" @click="${this._closePeriodPopup}">
|
|
152
183
|
×
|
|
153
184
|
</button>
|
|
@@ -156,10 +187,12 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
|
|
|
156
187
|
<div class="period-popup-content">
|
|
157
188
|
${"instant"===this.field.periodType?e.html`
|
|
158
189
|
<div class="period-controls">
|
|
159
|
-
<label>${
|
|
190
|
+
<label>${E.t("field.date")}:</label>
|
|
160
191
|
<div class="date-wrapper">
|
|
161
192
|
<input
|
|
162
193
|
type="date"
|
|
194
|
+
min="1900-01-01"
|
|
195
|
+
max="2100-12-31"
|
|
163
196
|
.value="${this.periodInstantDate||this.field.periodInstantDate||""}"
|
|
164
197
|
@change="${e=>this._handlePeriodChange(e,"instant")}"
|
|
165
198
|
?disabled="${this.disabled}"
|
|
@@ -173,10 +206,12 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
|
|
|
173
206
|
</div>
|
|
174
207
|
`:e.html`
|
|
175
208
|
<div class="period-controls">
|
|
176
|
-
<label>${
|
|
209
|
+
<label>${E.t("field.from")}:</label>
|
|
177
210
|
<div class="date-wrapper">
|
|
178
211
|
<input
|
|
179
212
|
type="date"
|
|
213
|
+
min="1900-01-01"
|
|
214
|
+
max="2100-12-31"
|
|
180
215
|
.value="${this.periodStartDate||this.field.periodStartDate||""}"
|
|
181
216
|
@change="${e=>this._handlePeriodChange(e,"start")}"
|
|
182
217
|
?disabled="${this.disabled}"
|
|
@@ -191,10 +226,12 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
|
|
|
191
226
|
</div>
|
|
192
227
|
</div>
|
|
193
228
|
<div class="period-controls">
|
|
194
|
-
<label>${
|
|
229
|
+
<label>${E.t("field.to")}:</label>
|
|
195
230
|
<div class="date-wrapper">
|
|
196
231
|
<input
|
|
197
232
|
type="date"
|
|
233
|
+
min="1900-01-01"
|
|
234
|
+
max="2100-12-31"
|
|
198
235
|
.value="${this.periodEndDate||this.field.periodEndDate||""}"
|
|
199
236
|
@change="${e=>this._handlePeriodChange(e,"end")}"
|
|
200
237
|
?disabled="${this.disabled}"
|
|
@@ -210,14 +247,14 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
|
|
|
210
247
|
|
|
211
248
|
${this._availableUnits.length>0?e.html`
|
|
212
249
|
<div class="period-controls">
|
|
213
|
-
<label>${
|
|
250
|
+
<label>${E.t("field.unit")}:</label>
|
|
214
251
|
<select
|
|
215
252
|
.value="${this.unit||""}"
|
|
216
253
|
@change="${this._handleUnitChange}"
|
|
217
254
|
?disabled="${this.disabled}"
|
|
218
255
|
class="unit-select"
|
|
219
256
|
>
|
|
220
|
-
<option value="">${
|
|
257
|
+
<option value="">${E.t("field.selectUnit")}</option>
|
|
221
258
|
${this._availableUnits.map(t=>e.html`
|
|
222
259
|
<option value="${t.id}" ?selected="${this.unit===t.id}">
|
|
223
260
|
${t.label||t.id}
|
|
@@ -229,12 +266,12 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
|
|
|
229
266
|
|
|
230
267
|
${this._isMonetaryType()?e.html`
|
|
231
268
|
<div class="period-controls">
|
|
232
|
-
<label>${
|
|
269
|
+
<label>${E.t("field.scale")}:</label>
|
|
233
270
|
<input
|
|
234
271
|
type="number"
|
|
235
272
|
min="0"
|
|
236
273
|
class="typed-member-input"
|
|
237
|
-
placeholder="${
|
|
274
|
+
placeholder="${E.t("field.leaveBlankForInf")}"
|
|
238
275
|
.value="${void 0!==this.decimals&&null!==this.decimals&&""!==this.decimals?this.decimals:"INF"!==this.globalDecimals?this.globalDecimals:""}"
|
|
239
276
|
@input="${this._handleDecimalsChange}"
|
|
240
277
|
?disabled="${this.disabled}"
|
|
@@ -259,7 +296,7 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
|
|
|
259
296
|
</div>
|
|
260
297
|
</div>
|
|
261
298
|
</div>
|
|
262
|
-
`}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=
|
|
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`
|
|
263
300
|
<div class="field-container">
|
|
264
301
|
${o?e.html`
|
|
265
302
|
<label class="field-label ${this.field.required?"required":""}">
|
|
@@ -354,6 +391,11 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
|
|
|
354
391
|
border-radius: 4px;
|
|
355
392
|
transition: background-color 0.2s;
|
|
356
393
|
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
|
+
flex-shrink: 0;
|
|
357
399
|
}
|
|
358
400
|
|
|
359
401
|
.period-icon-btn:hover {
|
|
@@ -767,7 +809,7 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
|
|
|
767
809
|
:host(.concept-highlight) {
|
|
768
810
|
animation: concept-highlight-pulse 10s ease-out forwards;
|
|
769
811
|
}
|
|
770
|
-
`,Se([w({type:Object})],exports.JupiterFormField.prototype,"field",2),Se([w({type:String})],exports.JupiterFormField.prototype,"conceptId",2),Se([w({type:String})],exports.JupiterFormField.prototype,"conceptType",2),Se([w({type:Array})],exports.JupiterFormField.prototype,"datatypes",2),Se([w({type:Array})],exports.JupiterFormField.prototype,"defaultUnits",2),Se([w({type:String})],exports.JupiterFormField.prototype,"columnId",2),Se([w()],exports.JupiterFormField.prototype,"value",2),Se([w({type:Boolean})],exports.JupiterFormField.prototype,"disabled",2),Se([w({type:String})],exports.JupiterFormField.prototype,"locale",2),Se([w({type:Boolean})],exports.JupiterFormField.prototype,"hideLabel",2),Se([w({type:String})],exports.JupiterFormField.prototype,"mode",2),Se([w({type:Object})],exports.JupiterFormField.prototype,"masterData",2),Se([w({type:Array})],exports.JupiterFormField.prototype,"facts",2),Se([w({type:Object})],exports.JupiterFormField.prototype,"column",2),Se([w({type:String})],exports.JupiterFormField.prototype,"periodStartDate",2),Se([w({type:String})],exports.JupiterFormField.prototype,"periodEndDate",2),Se([w({type:String})],exports.JupiterFormField.prototype,"periodInstantDate",2),Se([w({type:String})],exports.JupiterFormField.prototype,"unit",2),Se([w({type:String})],exports.JupiterFormField.prototype,"decimals",2),Se([w({type:String})],exports.JupiterFormField.prototype,"globalDecimals",2),Se([w({type:Object})],exports.JupiterFormField.prototype,"typedMemberValues",2),Se([S()],exports.JupiterFormField.prototype,"_errors",2),Se([S()],exports.JupiterFormField.prototype,"_xbrlErrors",2),Se([S()],exports.JupiterFormField.prototype,"_touched",2),Se([S()],exports.JupiterFormField.prototype,"_showPeriodPopup",2),Se([S()],exports.JupiterFormField.prototype,"_availableUnits",2),Se([S()],exports.JupiterFormField.prototype,"_numericDraftValue",2),exports.JupiterFormField=Se([t("jupiter-form-field")],exports.JupiterFormField);var Ce=Object.defineProperty,Fe=Object.getOwnPropertyDescriptor,ke=(e,t,i,o)=>{for(var r,n=o>1?void 0:o?Fe(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&&Ce(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,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""")}_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?T.t("conceptInfo.instant"):T.t("conceptInfo.duration"),s=[{label:T.t("conceptInfo.conceptName"),valueHtml:this._escapeHtml((null==i?void 0:i.conceptName)||this.concept.name)},{label:T.t("conceptInfo.type"),valueHtml:this._escapeHtml((null==i?void 0:i.type)||this.concept.type||"—")}];(null==i?void 0:i.substitutionGroup)&&s.push({label:T.t("conceptInfo.substitutionGroup"),valueHtml:this._escapeHtml(i.substitutionGroup)}),s.push({label:T.t("conceptInfo.periodType"),valueHtml:`<span class="jdf-period-pill ${r}">${this._escapeHtml(a)}</span>`}),n&&s.push({label:T.t("conceptInfo.balance"),valueHtml:`<span class="jdf-balance-pill ${n}">${this._escapeHtml(n)}</span>`}),o&&s.push({label:T.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(T.t("conceptInfo.title"))}</h3>\n <button class="jdf-dialog-close-btn" type="button" aria-label="${this._escapeHtml(T.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?T.t("calculationWarning.added"):T.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(T.t("calculationWarning.title"))}</h3>\n <button class="jdf-calc-warning-close-btn" type="button" aria-label="${this._escapeHtml(T.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`
|
|
812
|
+
`,Pe([w({type:Object})],exports.JupiterFormField.prototype,"field",2),Pe([w({type:String})],exports.JupiterFormField.prototype,"conceptId",2),Pe([w({type:String})],exports.JupiterFormField.prototype,"conceptType",2),Pe([w({type:Array})],exports.JupiterFormField.prototype,"datatypes",2),Pe([w({type:Array})],exports.JupiterFormField.prototype,"defaultUnits",2),Pe([w({type:String})],exports.JupiterFormField.prototype,"columnId",2),Pe([w()],exports.JupiterFormField.prototype,"value",2),Pe([w({type:Boolean})],exports.JupiterFormField.prototype,"disabled",2),Pe([w({type:String})],exports.JupiterFormField.prototype,"locale",2),Pe([w({type:Boolean})],exports.JupiterFormField.prototype,"hideLabel",2),Pe([w({type:String})],exports.JupiterFormField.prototype,"mode",2),Pe([w({type:Object})],exports.JupiterFormField.prototype,"masterData",2),Pe([w({type:Array})],exports.JupiterFormField.prototype,"facts",2),Pe([w({type:Object})],exports.JupiterFormField.prototype,"column",2),Pe([w({type:String})],exports.JupiterFormField.prototype,"periodStartDate",2),Pe([w({type:String})],exports.JupiterFormField.prototype,"periodEndDate",2),Pe([w({type:String})],exports.JupiterFormField.prototype,"periodInstantDate",2),Pe([w({type:String})],exports.JupiterFormField.prototype,"unit",2),Pe([w({type:String})],exports.JupiterFormField.prototype,"decimals",2),Pe([w({type:String})],exports.JupiterFormField.prototype,"globalDecimals",2),Pe([w({type:Object})],exports.JupiterFormField.prototype,"typedMemberValues",2),Pe([S()],exports.JupiterFormField.prototype,"_errors",2),Pe([S()],exports.JupiterFormField.prototype,"_xbrlErrors",2),Pe([S()],exports.JupiterFormField.prototype,"_touched",2),Pe([S()],exports.JupiterFormField.prototype,"_showPeriodPopup",2),Pe([S()],exports.JupiterFormField.prototype,"_availableUnits",2),Pe([S()],exports.JupiterFormField.prototype,"_numericDraftValue",2),exports.JupiterFormField=Pe([t("jupiter-form-field")],exports.JupiterFormField);var je=Object.defineProperty,Le=Object.getOwnPropertyDescriptor,Ne=(e,t,i,o)=>{for(var r,n=o>1?void 0:o?Le(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&&je(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,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""")}_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?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 }\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=k(this.concept.preferredLabel);return e.html`
|
|
771
813
|
<!-- Concept Name Cell (Left Column) -->
|
|
772
814
|
<td class="concept-name-cell ${o?"abstract":t?"":"leaf"} ${this.rowFocused?"row-focused":""}">
|
|
773
815
|
<div class="concept-content" style="--level: ${i}">
|
|
@@ -784,7 +826,7 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
|
|
|
784
826
|
${this.concept.balance?e.html`
|
|
785
827
|
<div class="concept-balance ${this.concept.balance}">${this.concept.balance}</div>
|
|
786
828
|
`:""}
|
|
787
|
-
<button class="concept-info-btn" type="button" tabindex="-1" title="${
|
|
829
|
+
<button class="concept-info-btn" type="button" tabindex="-1" title="${E.t("conceptInfo.title")}"
|
|
788
830
|
@click="${this._openInfoDialog}">ℹ</button>
|
|
789
831
|
${this.showAddButton?e.html`
|
|
790
832
|
<button class="repeat-btn" type="button" tabindex="-1" title="Add row"
|
|
@@ -1138,20 +1180,56 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
|
|
|
1138
1180
|
animation: concept-row-highlight-pulse 10s ease-out forwards;
|
|
1139
1181
|
}
|
|
1140
1182
|
|
|
1141
|
-
`,
|
|
1183
|
+
`,Ne([w({type:Object})],exports.JupiterConceptTree.prototype,"concept",2),Ne([w({type:Array})],exports.JupiterConceptTree.prototype,"columns",2),Ne([w({type:Object})],exports.JupiterConceptTree.prototype,"formData",2),Ne([w({type:Object})],exports.JupiterConceptTree.prototype,"periodData",2),Ne([w({type:Object})],exports.JupiterConceptTree.prototype,"unitData",2),Ne([w({type:Object})],exports.JupiterConceptTree.prototype,"decimalsData",2),Ne([w({type:String})],exports.JupiterConceptTree.prototype,"globalDecimals",2),Ne([w({type:Array})],exports.JupiterConceptTree.prototype,"defaultUnits",2),Ne([w({type:Boolean})],exports.JupiterConceptTree.prototype,"disabled",2),Ne([w({type:String})],exports.JupiterConceptTree.prototype,"locale",2),Ne([w({type:Set})],exports.JupiterConceptTree.prototype,"expandedConcepts",2),Ne([w({type:Array})],exports.JupiterConceptTree.prototype,"datatypes",2),Ne([w({type:String})],exports.JupiterConceptTree.prototype,"mode",2),Ne([w({type:Object})],exports.JupiterConceptTree.prototype,"masterData",2),Ne([w({type:Array})],exports.JupiterConceptTree.prototype,"facts",2),Ne([w({type:Object})],exports.JupiterConceptTree.prototype,"typedMemberData",2),Ne([w({type:Boolean})],exports.JupiterConceptTree.prototype,"showAddButton",2),Ne([w({type:Boolean})],exports.JupiterConceptTree.prototype,"showRemoveButton",2),Ne([w({type:String})],exports.JupiterConceptTree.prototype,"highlightType",2),Ne([w({type:String})],exports.JupiterConceptTree.prototype,"highlightColumnId",2),Ne([w({type:Object})],exports.JupiterConceptTree.prototype,"calculationMismatches",2),Ne([w({type:String})],exports.JupiterConceptTree.prototype,"language",2),Ne([w({type:Boolean})],exports.JupiterConceptTree.prototype,"rowFocused",2),Ne([S()],exports.JupiterConceptTree.prototype,"_expanded",2),exports.JupiterConceptTree=Ne([t("jupiter-concept-tree")],exports.JupiterConceptTree);var Ve=Object.defineProperty,Oe=Object.getOwnPropertyDescriptor,Ue=(e,t,i,o)=>{for(var r,n=o>1?void 0:o?Oe(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&&Ve(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?Re.validateAgainstRules(o,i):Re.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
|
+
<div class="typed-input-errors">
|
|
1185
|
+
${i.map(t=>e.html`<span class="typed-input-error">${t.message}</span>`)}
|
|
1186
|
+
</div>
|
|
1187
|
+
`:""}_getTypedValueInputConfig(e){return $e(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||Fe(a.fieldType)){const t=a.enumerations||[];return e.html`
|
|
1188
|
+
<select class="${s}" .value="${r}" @change="${l}" @blur="${d}">
|
|
1189
|
+
<option value="">${a.placeholder||E.t("field.select")}</option>
|
|
1190
|
+
${t.map(t=>e.html`
|
|
1191
|
+
<option value="${t.value}" ?selected="${r===t.value}">
|
|
1192
|
+
${t.label||t.value}
|
|
1193
|
+
</option>
|
|
1194
|
+
`)}
|
|
1195
|
+
</select>
|
|
1196
|
+
`}if("boolean"===a.fieldType||Se(a.fieldType))return e.html`
|
|
1197
|
+
<input
|
|
1198
|
+
type="checkbox"
|
|
1199
|
+
class="${s}"
|
|
1200
|
+
.checked="${"true"===r}"
|
|
1201
|
+
@change="${l}"
|
|
1202
|
+
@blur="${d}"
|
|
1203
|
+
/>
|
|
1204
|
+
`;const c=a.htmlInputType||"text";return e.html`
|
|
1205
|
+
<input
|
|
1206
|
+
type="${c}"
|
|
1207
|
+
inputmode="${a.inputMode||""}"
|
|
1208
|
+
class="${s}"
|
|
1209
|
+
.value="${r}"
|
|
1210
|
+
min="${void 0!==a.min?a.min:""}"
|
|
1211
|
+
max="${void 0!==a.max?a.max:""}"
|
|
1212
|
+
step="${void 0!==a.step?a.step:""}"
|
|
1213
|
+
@input="${l}"
|
|
1214
|
+
@blur="${d}"
|
|
1215
|
+
placeholder="${a.placeholder||E.t("column.enterValuePlaceholder")}"
|
|
1216
|
+
/>
|
|
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`
|
|
1142
1218
|
<div class="dialog" @click="${e=>e.stopPropagation()}">
|
|
1143
1219
|
<div class="dialog-header">
|
|
1144
|
-
<h2 class="dialog-title">${
|
|
1220
|
+
<h2 class="dialog-title">${E.t("column.addColumn")}</h2>
|
|
1145
1221
|
|
|
1146
1222
|
</div>
|
|
1147
1223
|
|
|
1148
1224
|
<div class="dialog-content">
|
|
1149
1225
|
${"instant"===this.periodType?e.html`
|
|
1150
1226
|
<div class="form-group">
|
|
1151
|
-
<label class="form-label required">${
|
|
1227
|
+
<label class="form-label required">${E.t("column.instantDate")}</label>
|
|
1152
1228
|
<div class="date-wrapper">
|
|
1153
1229
|
<input
|
|
1154
1230
|
type="date"
|
|
1231
|
+
min="1900-01-01"
|
|
1232
|
+
max="2100-12-31"
|
|
1155
1233
|
class="form-input"
|
|
1156
1234
|
.value="${this._instantDate}"
|
|
1157
1235
|
@change="${this._handleInstantDateChange}"
|
|
@@ -1167,10 +1245,12 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
|
|
|
1167
1245
|
`:e.html`
|
|
1168
1246
|
<div class="form-group date-row">
|
|
1169
1247
|
<div class="date-field">
|
|
1170
|
-
<label class="form-label required">${
|
|
1248
|
+
<label class="form-label required">${E.t("column.startPeriodDate")}</label>
|
|
1171
1249
|
<div class="date-wrapper">
|
|
1172
1250
|
<input
|
|
1173
1251
|
type="date"
|
|
1252
|
+
min="1900-01-01"
|
|
1253
|
+
max="2100-12-31"
|
|
1174
1254
|
class="form-input"
|
|
1175
1255
|
.value="${this._startDate}"
|
|
1176
1256
|
@change="${this._handleStartDateChange}"
|
|
@@ -1184,10 +1264,12 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
|
|
|
1184
1264
|
</div>
|
|
1185
1265
|
</div>
|
|
1186
1266
|
<div class="date-field">
|
|
1187
|
-
<label class="form-label required">${
|
|
1267
|
+
<label class="form-label required">${E.t("column.endPeriodDate")}</label>
|
|
1188
1268
|
<div class="date-wrapper">
|
|
1189
1269
|
<input
|
|
1190
1270
|
type="date"
|
|
1271
|
+
min="1900-01-01"
|
|
1272
|
+
max="2100-12-31"
|
|
1191
1273
|
class="form-input"
|
|
1192
1274
|
.value="${this._endDate}"
|
|
1193
1275
|
@change="${this._handleEndDateChange}"
|
|
@@ -1206,16 +1288,16 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
|
|
|
1206
1288
|
<!-- Dimensions Section -->
|
|
1207
1289
|
${this.availableDimensions.length>0?e.html`
|
|
1208
1290
|
<div class="dimensions-section">
|
|
1209
|
-
<h3>${
|
|
1210
|
-
<p class="form-description">${
|
|
1291
|
+
<h3>${E.t("column.availableDimensions")}</h3>
|
|
1292
|
+
<p class="form-description">${E.t("column.dimensionsDescription")}</p>
|
|
1211
1293
|
|
|
1212
|
-
${this.availableDimensions.map(t=>{const
|
|
1294
|
+
${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`
|
|
1213
1295
|
<div class="dimension-item">
|
|
1214
1296
|
<div class="dimension-header">
|
|
1215
1297
|
<input
|
|
1216
1298
|
type="checkbox"
|
|
1217
1299
|
class="dimension-checkbox"
|
|
1218
|
-
.checked="${
|
|
1300
|
+
.checked="${r}"
|
|
1219
1301
|
@change="${e=>this._handleDimensionToggle(t.id,e)}"
|
|
1220
1302
|
id="dim-${t.id}"
|
|
1221
1303
|
/>
|
|
@@ -1224,32 +1306,27 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
|
|
|
1224
1306
|
</label>
|
|
1225
1307
|
</div>
|
|
1226
1308
|
|
|
1227
|
-
${
|
|
1309
|
+
${r?e.html`
|
|
1228
1310
|
<div class="dimension-details">
|
|
1229
|
-
${
|
|
1311
|
+
${a?e.html`
|
|
1230
1312
|
<!-- Typed Dimension Input -->
|
|
1231
1313
|
<div class="member-selection">
|
|
1232
|
-
<label>${
|
|
1233
|
-
|
|
1234
|
-
|
|
1235
|
-
class="typed-input"
|
|
1236
|
-
.value="${(null==o?void 0:o.typedValue)||""}"
|
|
1237
|
-
@input="${e=>this._handleTypedValueChange(t.id,e)}"
|
|
1238
|
-
placeholder="${T.t("column.enterValuePlaceholder")}"
|
|
1239
|
-
/>
|
|
1314
|
+
<label>${E.t("column.enterValue")} ${t.conceptName}:</label>
|
|
1315
|
+
${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
|
+
${this._renderTypedValueErrors(t.id)}
|
|
1240
1317
|
</div>
|
|
1241
1318
|
`:e.html`
|
|
1242
1319
|
<!-- Domain Members Selection -->
|
|
1243
1320
|
${t.members&&t.members.length>0?e.html`
|
|
1244
1321
|
<div class="member-selection">
|
|
1245
|
-
<label>${
|
|
1322
|
+
<label>${E.t("column.selectMember")}</label>
|
|
1246
1323
|
<div class="member-list">
|
|
1247
1324
|
${t.members.map(i=>e.html`
|
|
1248
1325
|
<div class="member-option">
|
|
1249
1326
|
<input
|
|
1250
1327
|
type="radio"
|
|
1251
1328
|
name="member-${t.id}"
|
|
1252
|
-
.checked="${(null==
|
|
1329
|
+
.checked="${(null==n?void 0:n.memberId)===i.id}"
|
|
1253
1330
|
@change="${()=>this._handleMemberSelection(t.id,i.id,i.label)}"
|
|
1254
1331
|
id="member-${t.id}-${i.id}"
|
|
1255
1332
|
/>
|
|
@@ -1261,7 +1338,7 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
|
|
|
1261
1338
|
</div>
|
|
1262
1339
|
</div>
|
|
1263
1340
|
`:e.html`
|
|
1264
|
-
<p class="form-description">${
|
|
1341
|
+
<p class="form-description">${E.t("column.noMembersAvailable")}</p>
|
|
1265
1342
|
`}
|
|
1266
1343
|
`}
|
|
1267
1344
|
</div>
|
|
@@ -1274,14 +1351,14 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
|
|
|
1274
1351
|
|
|
1275
1352
|
<div class="dialog-actions">
|
|
1276
1353
|
<button class="btn btn-cancel" @click="${this._handleCancel}">
|
|
1277
|
-
${
|
|
1354
|
+
${E.t("column.cancel")}
|
|
1278
1355
|
</button>
|
|
1279
1356
|
<button
|
|
1280
1357
|
class="btn btn-primary"
|
|
1281
1358
|
?disabled="${!t}"
|
|
1282
1359
|
@click="${this._handleConfirm}"
|
|
1283
1360
|
>
|
|
1284
|
-
${
|
|
1361
|
+
${E.t("column.addColumn")}
|
|
1285
1362
|
</button>
|
|
1286
1363
|
</div>
|
|
1287
1364
|
</div>
|
|
@@ -1549,6 +1626,20 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
|
|
|
1549
1626
|
font-size: 14px;
|
|
1550
1627
|
}
|
|
1551
1628
|
|
|
1629
|
+
.typed-input.has-error {
|
|
1630
|
+
border-color: var(--jupiter-error-color, #d32f2f);
|
|
1631
|
+
}
|
|
1632
|
+
|
|
1633
|
+
.typed-input-errors {
|
|
1634
|
+
margin-top: 4px;
|
|
1635
|
+
}
|
|
1636
|
+
|
|
1637
|
+
.typed-input-error {
|
|
1638
|
+
display: block;
|
|
1639
|
+
font-size: 12px;
|
|
1640
|
+
color: var(--jupiter-error-color, #d32f2f);
|
|
1641
|
+
}
|
|
1642
|
+
|
|
1552
1643
|
.member-list {
|
|
1553
1644
|
max-height: 120px;
|
|
1554
1645
|
overflow-y: auto;
|
|
@@ -1588,7 +1679,49 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
|
|
|
1588
1679
|
margin: 0 0 12px 0;
|
|
1589
1680
|
line-height: 1.4;
|
|
1590
1681
|
}
|
|
1591
|
-
`,Re([w({type:String})],exports.JupiterAddColumnDialog.prototype,"periodType",2),Re([w({type:Boolean})],exports.JupiterAddColumnDialog.prototype,"open",2),Re([w({type:Array})],exports.JupiterAddColumnDialog.prototype,"availableDimensions",2),Re([w({type:String})],exports.JupiterAddColumnDialog.prototype,"periodStartDate",2),Re([w({type:String})],exports.JupiterAddColumnDialog.prototype,"periodEndDate",2),Re([S()],exports.JupiterAddColumnDialog.prototype,"_startDate",2),Re([S()],exports.JupiterAddColumnDialog.prototype,"_endDate",2),Re([S()],exports.JupiterAddColumnDialog.prototype,"_instantDate",2),Re([S()],exports.JupiterAddColumnDialog.prototype,"_selectedType",2),Re([S()],exports.JupiterAddColumnDialog.prototype,"_selectedDimensions",2),exports.JupiterAddColumnDialog=Re([t("jupiter-add-column-dialog")],exports.JupiterAddColumnDialog);var Me=Object.defineProperty,Ae=Object.getOwnPropertyDescriptor,Pe=(e,t,i,o)=>{for(var r,n=o>1?void 0:o?Ae(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&&Me(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._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})))}_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)<.01}static _formatNumber(e){return Number.isInteger(e)?String(e):e.toFixed(2)}static _buildMismatchMessage(e){const t=T.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=>T.t(1===e.weight?"calculationWarning.childAdded":"calculationWarning.childSubtracted",{label:e.label,value:exports.JupiterFormSection._formatNumber(e.value)}));return`${t} ${T.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])||""}_handleTypedMemberHeaderChange(e,t,i){const o=e.target.value;console.log(`🔍 [FormSection] Typed member header change: columnId=${t}, axisId=${i}, value=${o}`),this.dispatchEvent(new CustomEvent("typed-member-change",{detail:{columnId:t,axisId:i,value:o},bubbles:!0}))}_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`
|
|
1682
|
+
`,Ue([w({type:String})],exports.JupiterAddColumnDialog.prototype,"periodType",2),Ue([w({type:Boolean})],exports.JupiterAddColumnDialog.prototype,"open",2),Ue([w({type:Array})],exports.JupiterAddColumnDialog.prototype,"availableDimensions",2),Ue([w({type:String})],exports.JupiterAddColumnDialog.prototype,"periodStartDate",2),Ue([w({type:String})],exports.JupiterAddColumnDialog.prototype,"periodEndDate",2),Ue([w({type:Array})],exports.JupiterAddColumnDialog.prototype,"datatypes",2),Ue([S()],exports.JupiterAddColumnDialog.prototype,"_startDate",2),Ue([S()],exports.JupiterAddColumnDialog.prototype,"_endDate",2),Ue([S()],exports.JupiterAddColumnDialog.prototype,"_instantDate",2),Ue([S()],exports.JupiterAddColumnDialog.prototype,"_selectedType",2),Ue([S()],exports.JupiterAddColumnDialog.prototype,"_selectedDimensions",2),Ue([S()],exports.JupiterAddColumnDialog.prototype,"_typedValueErrors",2),exports.JupiterAddColumnDialog=Ue([t("jupiter-add-column-dialog")],exports.JupiterAddColumnDialog);var ze=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&&ze(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})))}_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 k(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)}_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 $e(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?Re.validateAgainstRules(i,t.validation):Re.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
|
+
<div class="typed-member-header-errors">
|
|
1684
|
+
${o.map(t=>e.html`<span class="typed-member-header-error">${t.message}</span>`)}
|
|
1685
|
+
</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?E.t("validation.typedMemberRequired"):"",d=e=>this._handleTypedMemberHeaderChange(e,t,i.axisId),c=e=>this._handleTypedMemberHeaderBlur(e,t,i);if("select"===n.fieldType||Fe(n.fieldType)){const t=n.enumerations||[];return e.html`
|
|
1687
|
+
<select
|
|
1688
|
+
class="${s}"
|
|
1689
|
+
.value="${a}"
|
|
1690
|
+
title="${l}"
|
|
1691
|
+
@change="${d}"
|
|
1692
|
+
@blur="${c}"
|
|
1693
|
+
>
|
|
1694
|
+
<option value="">${n.placeholder||E.t("field.select")}</option>
|
|
1695
|
+
${t.map(t=>e.html`
|
|
1696
|
+
<option value="${t.value}" ?selected="${a===t.value}">
|
|
1697
|
+
${t.label||t.value}
|
|
1698
|
+
</option>
|
|
1699
|
+
`)}
|
|
1700
|
+
</select>
|
|
1701
|
+
`}if("boolean"===n.fieldType||Se(n.fieldType))return e.html`
|
|
1702
|
+
<input
|
|
1703
|
+
type="checkbox"
|
|
1704
|
+
class="${s}"
|
|
1705
|
+
.checked="${"true"===a}"
|
|
1706
|
+
title="${l}"
|
|
1707
|
+
@change="${d}"
|
|
1708
|
+
@blur="${c}"
|
|
1709
|
+
/>
|
|
1710
|
+
`;const p=n.htmlInputType||"text",u=`${n.placeholder||E.t("section.enterPlaceholder")} ${i.axisLabel}`;return e.html`
|
|
1711
|
+
<input
|
|
1712
|
+
type="${p}"
|
|
1713
|
+
inputmode="${n.inputMode||""}"
|
|
1714
|
+
class="${s}"
|
|
1715
|
+
placeholder="${u}"
|
|
1716
|
+
.value="${a}"
|
|
1717
|
+
min="${void 0!==n.min?n.min:""}"
|
|
1718
|
+
max="${void 0!==n.max?n.max:""}"
|
|
1719
|
+
step="${void 0!==n.step?n.step:""}"
|
|
1720
|
+
title="${l}"
|
|
1721
|
+
@input="${d}"
|
|
1722
|
+
@blur="${c}"
|
|
1723
|
+
/>
|
|
1724
|
+
`}_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`
|
|
1592
1725
|
<jupiter-concept-tree
|
|
1593
1726
|
.concept="${t}"
|
|
1594
1727
|
.columns="${this.columns}"
|
|
@@ -1651,7 +1784,7 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
|
|
|
1651
1784
|
${this.columns.map(t=>{var i,o,r;return t.hidden?e.html`
|
|
1652
1785
|
<th
|
|
1653
1786
|
class="header-cell hidden-column"
|
|
1654
|
-
title="${
|
|
1787
|
+
title="${E.t("column.showColumn")}"
|
|
1655
1788
|
@dblclick="${()=>this._handleShowColumn(t.id)}"
|
|
1656
1789
|
></th>
|
|
1657
1790
|
`:e.html`
|
|
@@ -1665,23 +1798,21 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
|
|
|
1665
1798
|
<!-- Typed member input fields in column header -->
|
|
1666
1799
|
${(null==(i=t.dimensionData)?void 0:i.hasTypedMembers)?e.html`
|
|
1667
1800
|
<div class="typed-members-header">
|
|
1668
|
-
${null==(r=null==(o=t.dimensionData)?void 0:o.typedMembers)?void 0:r.map(i=>e.html`
|
|
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`
|
|
1669
1802
|
<div class="typed-member-header-input">
|
|
1670
1803
|
${"readonly"===this.mode?e.html`
|
|
1671
1804
|
<span class="typed-member-header-field" style="display:block;padding:4px 0;">
|
|
1672
1805
|
${this._getTypedMemberHeaderValue(t.id,i.axisId)||"—"}
|
|
1673
1806
|
</span>
|
|
1674
1807
|
`:e.html`
|
|
1675
|
-
<input
|
|
1676
|
-
|
|
1677
|
-
class="typed-member-
|
|
1678
|
-
|
|
1679
|
-
|
|
1680
|
-
@input="${e=>this._handleTypedMemberHeaderChange(e,t.id,i.axisId)}"
|
|
1681
|
-
/>
|
|
1808
|
+
<div class="typed-member-input-wrapper">
|
|
1809
|
+
${this._renderTypedMemberHeaderInput(t.id,i,o)}
|
|
1810
|
+
${o?e.html`<span class="typed-member-required-asterisk" title="${E.t("validation.typedMemberRequired")}">*</span>`:""}
|
|
1811
|
+
</div>
|
|
1812
|
+
${this._renderTypedMemberHeaderErrors(t.id,i.axisId)}
|
|
1682
1813
|
`}
|
|
1683
1814
|
</div>
|
|
1684
|
-
`)}
|
|
1815
|
+
`})}
|
|
1685
1816
|
</div>
|
|
1686
1817
|
`:""}
|
|
1687
1818
|
</div>
|
|
@@ -1691,7 +1822,7 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
|
|
|
1691
1822
|
<div
|
|
1692
1823
|
class="column-menu-icon"
|
|
1693
1824
|
@click="${e=>this._toggleColumnMenu(t.id,e)}"
|
|
1694
|
-
title="${
|
|
1825
|
+
title="${E.t("column.columnOptions")}"
|
|
1695
1826
|
>⋮</div>
|
|
1696
1827
|
|
|
1697
1828
|
<!-- Context menu -->
|
|
@@ -1701,14 +1832,14 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
|
|
|
1701
1832
|
class="column-context-menu-item"
|
|
1702
1833
|
@click="${e=>this._handleAddColumnFromMenu(t.id,e)}"
|
|
1703
1834
|
>
|
|
1704
|
-
${
|
|
1835
|
+
${E.t("column.addColumn")}
|
|
1705
1836
|
</button>
|
|
1706
1837
|
${t.removable?e.html`
|
|
1707
1838
|
<button
|
|
1708
1839
|
class="column-context-menu-item remove"
|
|
1709
1840
|
@click="${e=>{e.stopPropagation(),this._handleRemoveColumn(t.id)}}"
|
|
1710
1841
|
>
|
|
1711
|
-
${
|
|
1842
|
+
${E.t("column.removeColumn")}
|
|
1712
1843
|
</button>
|
|
1713
1844
|
`:""}
|
|
1714
1845
|
${!t.removable&&this.columns.filter(e=>!e.hidden).length>1?e.html`
|
|
@@ -1716,7 +1847,7 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
|
|
|
1716
1847
|
class="column-context-menu-item remove"
|
|
1717
1848
|
@click="${e=>{e.stopPropagation(),this._handleHideColumn(t.id)}}"
|
|
1718
1849
|
>
|
|
1719
|
-
${
|
|
1850
|
+
${E.t("column.hideColumn")}
|
|
1720
1851
|
</button>
|
|
1721
1852
|
`:""}
|
|
1722
1853
|
</div>
|
|
@@ -1740,6 +1871,7 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
|
|
|
1740
1871
|
.availableDimensions="${this.availableDimensions}"
|
|
1741
1872
|
.periodStartDate="${this.periodStartDate}"
|
|
1742
1873
|
.periodEndDate="${this.periodEndDate}"
|
|
1874
|
+
.datatypes="${this.datatypes}"
|
|
1743
1875
|
@dialog-cancel="${this._handleDialogCancel}"
|
|
1744
1876
|
@column-add="${this._handleColumnAdd}"
|
|
1745
1877
|
></jupiter-add-column-dialog>
|
|
@@ -2011,6 +2143,34 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
|
|
|
2011
2143
|
gap: 2px;
|
|
2012
2144
|
}
|
|
2013
2145
|
|
|
2146
|
+
.typed-member-input-wrapper {
|
|
2147
|
+
display: flex;
|
|
2148
|
+
align-items: center;
|
|
2149
|
+
gap: 4px;
|
|
2150
|
+
}
|
|
2151
|
+
|
|
2152
|
+
.typed-member-header-field.required-field,
|
|
2153
|
+
.typed-member-header-field.has-error {
|
|
2154
|
+
border-color: var(--jupiter-error-color, #d32f2f);
|
|
2155
|
+
}
|
|
2156
|
+
|
|
2157
|
+
.typed-member-header-errors {
|
|
2158
|
+
margin-top: 2px;
|
|
2159
|
+
}
|
|
2160
|
+
|
|
2161
|
+
.typed-member-header-error {
|
|
2162
|
+
display: block;
|
|
2163
|
+
font-size: 11px;
|
|
2164
|
+
color: var(--jupiter-error-color, #d32f2f);
|
|
2165
|
+
}
|
|
2166
|
+
|
|
2167
|
+
.typed-member-required-asterisk {
|
|
2168
|
+
color: var(--jupiter-error-color, #d32f2f);
|
|
2169
|
+
font-weight: bold;
|
|
2170
|
+
font-size: 13px;
|
|
2171
|
+
flex-shrink: 0;
|
|
2172
|
+
}
|
|
2173
|
+
|
|
2014
2174
|
.typed-member-header-label {
|
|
2015
2175
|
font-size: 11px;
|
|
2016
2176
|
font-weight: 500;
|
|
@@ -2045,7 +2205,7 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
|
|
|
2045
2205
|
color: var(--jupiter-text-secondary, #666);
|
|
2046
2206
|
font-style: italic;
|
|
2047
2207
|
}
|
|
2048
|
-
`,
|
|
2208
|
+
`,Be([w({type:Object})],exports.JupiterFormSection.prototype,"section",2),Be([w({type:Array})],exports.JupiterFormSection.prototype,"columns",2),Be([w({type:Array})],exports.JupiterFormSection.prototype,"datatypes",2),Be([w({type:Object})],exports.JupiterFormSection.prototype,"formData",2),Be([w({type:Object})],exports.JupiterFormSection.prototype,"periodData",2),Be([w({type:Object})],exports.JupiterFormSection.prototype,"unitData",2),Be([w({type:Object})],exports.JupiterFormSection.prototype,"decimalsData",2),Be([w({type:String})],exports.JupiterFormSection.prototype,"globalDecimals",2),Be([w({type:Object})],exports.JupiterFormSection.prototype,"typedMemberData",2),Be([w({type:Object})],exports.JupiterFormSection.prototype,"repeatCounts",2),Be([w({type:Array})],exports.JupiterFormSection.prototype,"defaultUnits",2),Be([w({type:Boolean})],exports.JupiterFormSection.prototype,"disabled",2),Be([w({type:Boolean})],exports.JupiterFormSection.prototype,"collapsible",2),Be([w({type:String})],exports.JupiterFormSection.prototype,"locale",2),Be([w({type:Boolean})],exports.JupiterFormSection.prototype,"isFirstSection",2),Be([w({type:Array})],exports.JupiterFormSection.prototype,"availableDimensions",2),Be([w({type:Boolean})],exports.JupiterFormSection.prototype,"hideHeader",2),Be([w({type:String})],exports.JupiterFormSection.prototype,"mode",2),Be([w({type:Boolean})],exports.JupiterFormSection.prototype,"showFactsOnly",2),Be([w({type:Object})],exports.JupiterFormSection.prototype,"conceptMatchIds",2),Be([w({type:Object})],exports.JupiterFormSection.prototype,"masterData",2),Be([w({type:String})],exports.JupiterFormSection.prototype,"periodStartDate",2),Be([w({type:String})],exports.JupiterFormSection.prototype,"periodEndDate",2),Be([w({type:String})],exports.JupiterFormSection.prototype,"language",2),Be([w({type:Boolean})],exports.JupiterFormSection.prototype,"calculationEnabled",2),Be([w({type:Object})],exports.JupiterFormSection.prototype,"totalManuallyEditedData",2),Be([S()],exports.JupiterFormSection.prototype,"_expanded",2),Be([S()],exports.JupiterFormSection.prototype,"_showAddColumnDialog",2),Be([S()],exports.JupiterFormSection.prototype,"_sectionPeriodType",2),Be([S()],exports.JupiterFormSection.prototype,"_openMenuColumnId",2),Be([S()],exports.JupiterFormSection.prototype,"_insertAfterColumnId",2),Be([S()],exports.JupiterFormSection.prototype,"_typedMemberErrors",2),Be([S()],exports.JupiterFormSection.prototype,"_expandedConcepts",2),Be([S()],exports.JupiterFormSection.prototype,"_allTreeExpanded",2),Be([S()],exports.JupiterFormSection.prototype,"_highlightMap",2),Be([S()],exports.JupiterFormSection.prototype,"_focusedConceptId",2),Be([S()],exports.JupiterFormSection.prototype,"_calculationMismatches",2),exports.JupiterFormSection=Be([t("jupiter-form-section")],exports.JupiterFormSection);var qe=Object.defineProperty,He=Object.getOwnPropertyDescriptor,Ye=(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.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`
|
|
2049
2209
|
<div class="filter-options">
|
|
2050
2210
|
<label class="filter-option clickable">
|
|
2051
2211
|
<input
|
|
@@ -2054,20 +2214,20 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
|
|
|
2054
2214
|
@change="${this._handleShowFactsOnlyChange}"
|
|
2055
2215
|
/>
|
|
2056
2216
|
<div class="filter-option-body">
|
|
2057
|
-
<div class="filter-option-label">${
|
|
2058
|
-
<p class="filter-option-description">${
|
|
2217
|
+
<div class="filter-option-label">${E.t("filter.showFactsOnly")}</div>
|
|
2218
|
+
<p class="filter-option-description">${E.t("filter.showFactsOnlyDescription")}</p>
|
|
2059
2219
|
</div>
|
|
2060
2220
|
</label>
|
|
2061
2221
|
|
|
2062
2222
|
<div class="filter-option">
|
|
2063
2223
|
<div class="filter-option-body">
|
|
2064
|
-
<div class="filter-option-label">${
|
|
2065
|
-
<p class="filter-option-description">${
|
|
2224
|
+
<div class="filter-option-label">${E.t("filter.searchByConcept")}</div>
|
|
2225
|
+
<p class="filter-option-description">${E.t("filter.searchByConceptDescription")}</p>
|
|
2066
2226
|
<div class="concept-search-input-wrapper">
|
|
2067
2227
|
<input
|
|
2068
2228
|
type="text"
|
|
2069
2229
|
class="concept-search-input"
|
|
2070
|
-
placeholder="${
|
|
2230
|
+
placeholder="${E.t("filter.searchByConceptPlaceholder")}"
|
|
2071
2231
|
.value="${this._localConceptSearchText}"
|
|
2072
2232
|
@input="${this._handleConceptSearchInput}"
|
|
2073
2233
|
/>
|
|
@@ -2075,7 +2235,7 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
|
|
|
2075
2235
|
<button
|
|
2076
2236
|
class="concept-search-clear"
|
|
2077
2237
|
@click="${this._clearConceptSearch}"
|
|
2078
|
-
title="${
|
|
2238
|
+
title="${E.t("filter.clearSearch")}"
|
|
2079
2239
|
>×</button>
|
|
2080
2240
|
`:""}
|
|
2081
2241
|
</div>
|
|
@@ -2181,14 +2341,14 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
|
|
|
2181
2341
|
.concept-search-clear:hover {
|
|
2182
2342
|
color: var(--primaryTextColor, var(--jupiter-text-primary, #333));
|
|
2183
2343
|
}
|
|
2184
|
-
`,Ne([w({type:Boolean})],exports.JupiterAdvancedFilter.prototype,"showFactsOnly",2),Ne([w({type:String})],exports.JupiterAdvancedFilter.prototype,"conceptSearchText",2),Ne([S()],exports.JupiterAdvancedFilter.prototype,"_localConceptSearchText",2),exports.JupiterAdvancedFilter=Ne([t("jupiter-advanced-filter")],exports.JupiterAdvancedFilter);var Oe=Object.defineProperty,Ve=Object.getOwnPropertyDescriptor,ze=(e,t,i,o)=>{for(var r,n=o>1?void 0:o?Ve(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&&Oe(t,i,n),n};let Ue=!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=Ue,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(){Ue=!0,this._showAdvancedFilter=!0,this._searchQuery=""}_switchToFilterRoles(){Ue=!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`
|
|
2344
|
+
`,Ye([w({type:Boolean})],exports.JupiterAdvancedFilter.prototype,"showFactsOnly",2),Ye([w({type:String})],exports.JupiterAdvancedFilter.prototype,"conceptSearchText",2),Ye([S()],exports.JupiterAdvancedFilter.prototype,"_localConceptSearchText",2),exports.JupiterAdvancedFilter=Ye([t("jupiter-advanced-filter")],exports.JupiterAdvancedFilter);var Ke=Object.defineProperty,Qe=Object.getOwnPropertyDescriptor,We=(e,t,i,o)=>{for(var r,n=o>1?void 0:o?Qe(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};let Ge=!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=Ge,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(){Ge=!0,this._showAdvancedFilter=!0,this._searchQuery=""}_switchToFilterRoles(){Ge=!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`
|
|
2185
2345
|
<div class="dialog" @click="${e=>e.stopPropagation()}">
|
|
2186
2346
|
<!-- Dialog Header -->
|
|
2187
2347
|
<div class="dialog-header">
|
|
2188
2348
|
<svg class="filter-icon" viewBox="0 0 24 24">
|
|
2189
2349
|
<path d="M10 18h4v-2h-4v2zM3 6v2h18V6H3zm3 7h12v-2H6v2z"/>
|
|
2190
2350
|
</svg>
|
|
2191
|
-
<h2 class="dialog-title">${
|
|
2351
|
+
<h2 class="dialog-title">${E.t("filter.title")}</h2>
|
|
2192
2352
|
<button class="close-button" @click="${this._handleCancel}">×</button>
|
|
2193
2353
|
</div>
|
|
2194
2354
|
|
|
@@ -2200,19 +2360,19 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
|
|
|
2200
2360
|
<!-- Available Roles Panel -->
|
|
2201
2361
|
<div class="picklist-panel">
|
|
2202
2362
|
<div class="picklist-header">
|
|
2203
|
-
${
|
|
2363
|
+
${E.t("filter.availableRoles")} (${this._getAvailableRoles().length})
|
|
2204
2364
|
</div>
|
|
2205
2365
|
<div class="picklist-search">
|
|
2206
2366
|
<div class="search-container">
|
|
2207
2367
|
<input
|
|
2208
2368
|
type="text"
|
|
2209
2369
|
class="search-input"
|
|
2210
|
-
placeholder="${
|
|
2370
|
+
placeholder="${E.t("filter.searchPlaceholder")}"
|
|
2211
2371
|
.value="${this._searchQuery}"
|
|
2212
2372
|
@input="${this._handleSearchInput}"
|
|
2213
2373
|
/>
|
|
2214
2374
|
${this._searchQuery?e.html`
|
|
2215
|
-
<button class="clear-search" @click="${this._clearSearch}" title="${
|
|
2375
|
+
<button class="clear-search" @click="${this._clearSearch}" title="${E.t("filter.clearSearch")}">
|
|
2216
2376
|
×
|
|
2217
2377
|
</button>
|
|
2218
2378
|
`:e.html`
|
|
@@ -2237,7 +2397,7 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
|
|
|
2237
2397
|
`})}
|
|
2238
2398
|
</div>
|
|
2239
2399
|
<div class="picklist-count">
|
|
2240
|
-
${this._getAvailableRoles().length} ${
|
|
2400
|
+
${this._getAvailableRoles().length} ${E.t("filter.roleCount")}
|
|
2241
2401
|
</div>
|
|
2242
2402
|
</div>
|
|
2243
2403
|
|
|
@@ -2247,7 +2407,7 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
|
|
|
2247
2407
|
class="picklist-button"
|
|
2248
2408
|
@click="${this._moveToChosen}"
|
|
2249
2409
|
?disabled="${!this._selectedAvailableRole}"
|
|
2250
|
-
title="${
|
|
2410
|
+
title="${E.t("filter.addSelectedRole")}"
|
|
2251
2411
|
>
|
|
2252
2412
|
›
|
|
2253
2413
|
</button>
|
|
@@ -2255,7 +2415,7 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
|
|
|
2255
2415
|
class="picklist-button"
|
|
2256
2416
|
@click="${this._moveAllToChosen}"
|
|
2257
2417
|
?disabled="${0===this._getAvailableRoles().length}"
|
|
2258
|
-
title="${
|
|
2418
|
+
title="${E.t("filter.addAllRoles")}"
|
|
2259
2419
|
>
|
|
2260
2420
|
»
|
|
2261
2421
|
</button>
|
|
@@ -2263,7 +2423,7 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
|
|
|
2263
2423
|
class="picklist-button"
|
|
2264
2424
|
@click="${this._moveToAvailable}"
|
|
2265
2425
|
?disabled="${!this._selectedChosenRole}"
|
|
2266
|
-
title="${
|
|
2426
|
+
title="${E.t("filter.removeSelectedRole")}"
|
|
2267
2427
|
>
|
|
2268
2428
|
‹
|
|
2269
2429
|
</button>
|
|
@@ -2271,7 +2431,7 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
|
|
|
2271
2431
|
class="picklist-button"
|
|
2272
2432
|
@click="${this._moveAllToAvailable}"
|
|
2273
2433
|
?disabled="${0===this._tempSelectedRoles.size}"
|
|
2274
|
-
title="${
|
|
2434
|
+
title="${E.t("filter.removeAllRoles")}"
|
|
2275
2435
|
>
|
|
2276
2436
|
«
|
|
2277
2437
|
</button>
|
|
@@ -2280,19 +2440,19 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
|
|
|
2280
2440
|
<!-- Chosen Roles Panel -->
|
|
2281
2441
|
<div class="picklist-panel">
|
|
2282
2442
|
<div class="picklist-header">
|
|
2283
|
-
${
|
|
2443
|
+
${E.t("filter.chosenRoles")} (${this._tempSelectedRoles.size})
|
|
2284
2444
|
</div>
|
|
2285
2445
|
<div class="picklist-search">
|
|
2286
2446
|
<div class="search-container">
|
|
2287
2447
|
<input
|
|
2288
2448
|
type="text"
|
|
2289
2449
|
class="search-input chosen-search-input"
|
|
2290
|
-
placeholder="${
|
|
2450
|
+
placeholder="${E.t("filter.searchPlaceholder")}"
|
|
2291
2451
|
.value="${this._chosenSearchQuery}"
|
|
2292
2452
|
@input="${this._handleChosenSearchInput}"
|
|
2293
2453
|
/>
|
|
2294
2454
|
${this._chosenSearchQuery?e.html`
|
|
2295
|
-
<button class="clear-search" @click="${this._clearChosenSearch}" title="${
|
|
2455
|
+
<button class="clear-search" @click="${this._clearChosenSearch}" title="${E.t("filter.clearSearch")}">
|
|
2296
2456
|
×
|
|
2297
2457
|
</button>
|
|
2298
2458
|
`:e.html`
|
|
@@ -2323,7 +2483,7 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
|
|
|
2323
2483
|
`})}
|
|
2324
2484
|
</div>
|
|
2325
2485
|
<div class="picklist-count">
|
|
2326
|
-
${this._tempSelectedRoles.size} ${
|
|
2486
|
+
${this._tempSelectedRoles.size} ${E.t("filter.rolesSelected")}
|
|
2327
2487
|
</div>
|
|
2328
2488
|
</div>
|
|
2329
2489
|
</div>
|
|
@@ -2335,7 +2495,7 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
|
|
|
2335
2495
|
></jupiter-advanced-filter>
|
|
2336
2496
|
`:e.html`
|
|
2337
2497
|
<p class="description">
|
|
2338
|
-
${
|
|
2498
|
+
${E.t("filter.description")}
|
|
2339
2499
|
</p>
|
|
2340
2500
|
|
|
2341
2501
|
<!-- Search Input -->
|
|
@@ -2343,12 +2503,12 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
|
|
|
2343
2503
|
<input
|
|
2344
2504
|
type="text"
|
|
2345
2505
|
class="search-input"
|
|
2346
|
-
placeholder="${
|
|
2506
|
+
placeholder="${E.t("filter.searchPlaceholder")}"
|
|
2347
2507
|
.value="${this._searchQuery}"
|
|
2348
2508
|
@input="${this._handleSearchInput}"
|
|
2349
2509
|
/>
|
|
2350
2510
|
${this._searchQuery?e.html`
|
|
2351
|
-
<button class="clear-search" @click="${this._clearSearch}" title="${
|
|
2511
|
+
<button class="clear-search" @click="${this._clearSearch}" title="${E.t("filter.clearSearch")}">
|
|
2352
2512
|
×
|
|
2353
2513
|
</button>
|
|
2354
2514
|
`:e.html`
|
|
@@ -2361,8 +2521,8 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
|
|
|
2361
2521
|
<!-- Search Results Info -->
|
|
2362
2522
|
${r?e.html`
|
|
2363
2523
|
<div class="search-results-info">
|
|
2364
|
-
${
|
|
2365
|
-
${o!==i?e.html`${
|
|
2524
|
+
${E.t("filter.showingResults")} ${o} ${E.t("filter.of")} ${i} ${E.t("filter.roles")}
|
|
2525
|
+
${o!==i?e.html`${E.t("filter.matching")} "${this._searchQuery}"`:""}
|
|
2366
2526
|
</div>
|
|
2367
2527
|
`:""}
|
|
2368
2528
|
|
|
@@ -2370,27 +2530,27 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
|
|
|
2370
2530
|
<div class="selection-controls">
|
|
2371
2531
|
${r?e.html`
|
|
2372
2532
|
<button class="selection-control" @click="${this._selectAll}">
|
|
2373
|
-
${
|
|
2533
|
+
${E.t("filter.selectFiltered")} (${o})
|
|
2374
2534
|
</button>
|
|
2375
2535
|
<button class="selection-control" @click="${this._selectNone}">
|
|
2376
|
-
${
|
|
2536
|
+
${E.t("filter.deselectFiltered")}
|
|
2377
2537
|
</button>
|
|
2378
2538
|
<button class="selection-control" @click="${this._selectAllGlobal}">
|
|
2379
|
-
${
|
|
2539
|
+
${E.t("filter.selectAll")} (${i})
|
|
2380
2540
|
</button>
|
|
2381
2541
|
<button class="selection-control" @click="${this._selectNoneGlobal}">
|
|
2382
|
-
${
|
|
2542
|
+
${E.t("filter.deselectAll")}
|
|
2383
2543
|
</button>
|
|
2384
2544
|
`:e.html`
|
|
2385
2545
|
<button class="selection-control" @click="${this._selectAll}">
|
|
2386
|
-
${
|
|
2546
|
+
${E.t("filter.selectAll")}
|
|
2387
2547
|
</button>
|
|
2388
2548
|
<button class="selection-control" @click="${this._selectNone}">
|
|
2389
|
-
${
|
|
2549
|
+
${E.t("filter.selectNone")}
|
|
2390
2550
|
</button>
|
|
2391
2551
|
`}
|
|
2392
2552
|
<button class="selection-control" @click="${this._resetToOriginal}">
|
|
2393
|
-
${
|
|
2553
|
+
${E.t("filter.reset")}
|
|
2394
2554
|
</button>
|
|
2395
2555
|
</div>
|
|
2396
2556
|
|
|
@@ -2399,10 +2559,10 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
|
|
|
2399
2559
|
${0===this._filteredRoles.length?e.html`
|
|
2400
2560
|
<div class="no-results">
|
|
2401
2561
|
${r?e.html`
|
|
2402
|
-
${
|
|
2403
|
-
${
|
|
2562
|
+
${E.t("filter.noRolesFound")} "${this._searchQuery}".<br>
|
|
2563
|
+
${E.t("filter.tryDifferentSearch")}
|
|
2404
2564
|
`:e.html`
|
|
2405
|
-
${
|
|
2565
|
+
${E.t("filter.noRolesAvailable")}
|
|
2406
2566
|
`}
|
|
2407
2567
|
</div>
|
|
2408
2568
|
`:e.html`
|
|
@@ -2427,7 +2587,7 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
|
|
|
2427
2587
|
${a?"":e.html`
|
|
2428
2588
|
<div class="role-item-body">
|
|
2429
2589
|
<div class="period-controls">
|
|
2430
|
-
<p class="period-controls-label">${
|
|
2590
|
+
<p class="period-controls-label">${E.t("filter.additionalOptions")}</p>
|
|
2431
2591
|
<div class="period-checkboxes">
|
|
2432
2592
|
<label class="period-checkbox-item">
|
|
2433
2593
|
<input
|
|
@@ -2436,14 +2596,14 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
|
|
|
2436
2596
|
.checked="${o.showPreviousYear}"
|
|
2437
2597
|
@change="${e=>this._handlePeriodCheckboxChange(e,t.id,"previousYear")}"
|
|
2438
2598
|
/>
|
|
2439
|
-
<span class="period-checkbox-label">${
|
|
2599
|
+
<span class="period-checkbox-label">${E.t("filter.showPreviousYear")}</span>
|
|
2440
2600
|
</label>
|
|
2441
2601
|
</div>
|
|
2442
2602
|
</div>
|
|
2443
2603
|
|
|
2444
2604
|
${n?e.html`
|
|
2445
2605
|
<div class="dimension-section">
|
|
2446
|
-
<div class="dimension-header">📊 ${
|
|
2606
|
+
<div class="dimension-header">📊 ${E.t("filter.dimensionMemberSelection")}</div>
|
|
2447
2607
|
${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`
|
|
2448
2608
|
<div class="dimension-group">
|
|
2449
2609
|
<div class="dimension-label">${a}</div>
|
|
@@ -2465,13 +2625,13 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
|
|
|
2465
2625
|
class="member-select-btn"
|
|
2466
2626
|
@click="${()=>this._selectAllDimensionMembers(t.id,i.id)}"
|
|
2467
2627
|
>
|
|
2468
|
-
${
|
|
2628
|
+
${E.t("filter.selectAllMembers")}
|
|
2469
2629
|
</button>
|
|
2470
2630
|
<button
|
|
2471
2631
|
class="member-select-btn"
|
|
2472
2632
|
@click="${()=>this._deselectAllDimensionMembers(t.id,i.id)}"
|
|
2473
2633
|
>
|
|
2474
|
-
${
|
|
2634
|
+
${E.t("filter.clearMembers")}
|
|
2475
2635
|
</button>
|
|
2476
2636
|
</div>
|
|
2477
2637
|
</div>
|
|
@@ -2492,25 +2652,25 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
|
|
|
2492
2652
|
${"admin"!==this.mode&&"readonly"!==this.mode?e.html`
|
|
2493
2653
|
${this._showAdvancedFilter?e.html`
|
|
2494
2654
|
<button class="btn-text" @click="${this._switchToFilterRoles}">
|
|
2495
|
-
${
|
|
2655
|
+
${E.t("filter.backToFilterRoles")}
|
|
2496
2656
|
</button>
|
|
2497
2657
|
${this._showFactsOnly||this._conceptSearchText.trim().length>0?e.html`
|
|
2498
2658
|
<button class="btn-text" @click="${this._handleAdvancedFilterReset}">
|
|
2499
|
-
${
|
|
2659
|
+
${E.t("filter.resetFilter")}
|
|
2500
2660
|
</button>
|
|
2501
2661
|
`:""}
|
|
2502
2662
|
`:e.html`
|
|
2503
2663
|
<button class="btn-text" @click="${this._switchToAdvancedFilter}">
|
|
2504
|
-
${
|
|
2664
|
+
${E.t("filter.advancedFilter")}
|
|
2505
2665
|
</button>
|
|
2506
2666
|
`}
|
|
2507
2667
|
`:""}
|
|
2508
2668
|
<button class="btn-secondary" @click="${this._handleCancel}">
|
|
2509
|
-
${
|
|
2669
|
+
${E.t("filter.cancel")}
|
|
2510
2670
|
</button>
|
|
2511
2671
|
${this._showAdvancedFilter?e.html`
|
|
2512
2672
|
<button class="btn-primary" @click="${this._handleAdvancedFilterApply}">
|
|
2513
|
-
${
|
|
2673
|
+
${E.t("filter.applyFilter")}
|
|
2514
2674
|
</button>
|
|
2515
2675
|
`:e.html`
|
|
2516
2676
|
<button
|
|
@@ -2518,7 +2678,7 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
|
|
|
2518
2678
|
@click="${this._handleApply}"
|
|
2519
2679
|
?disabled="${0===t}"
|
|
2520
2680
|
>
|
|
2521
|
-
${
|
|
2681
|
+
${E.t("filter.applyFilter")} (${t})
|
|
2522
2682
|
</button>
|
|
2523
2683
|
`}
|
|
2524
2684
|
</div>
|
|
@@ -3124,14 +3284,14 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
|
|
|
3124
3284
|
.btn-text:hover {
|
|
3125
3285
|
background: var(--menuBgColorLighter, var(--jupiter-hover-background, #f5f5f5));
|
|
3126
3286
|
}
|
|
3127
|
-
`,
|
|
3287
|
+
`,We([w({type:Boolean,reflect:!0})],exports.JupiterFilterRolesDialog.prototype,"open",2),We([w({type:Array})],exports.JupiterFilterRolesDialog.prototype,"availableRoles",2),We([w({type:Array})],exports.JupiterFilterRolesDialog.prototype,"selectedRoleIds",2),We([w({type:Object})],exports.JupiterFilterRolesDialog.prototype,"periodPreferences",2),We([w({type:String})],exports.JupiterFilterRolesDialog.prototype,"mode",2),We([w({type:Object})],exports.JupiterFilterRolesDialog.prototype,"hypercubeData",2),We([w({type:Boolean})],exports.JupiterFilterRolesDialog.prototype,"showFactsOnly",2),We([w({type:String})],exports.JupiterFilterRolesDialog.prototype,"conceptSearchText",2),We([S()],exports.JupiterFilterRolesDialog.prototype,"_tempSelectedRoles",2),We([S()],exports.JupiterFilterRolesDialog.prototype,"_searchQuery",2),We([S()],exports.JupiterFilterRolesDialog.prototype,"_filteredRoles",2),We([S()],exports.JupiterFilterRolesDialog.prototype,"_tempPeriodPreferences",2),We([S()],exports.JupiterFilterRolesDialog.prototype,"_selectedAvailableRole",2),We([S()],exports.JupiterFilterRolesDialog.prototype,"_selectedChosenRole",2),We([S()],exports.JupiterFilterRolesDialog.prototype,"_chosenSearchQuery",2),We([S()],exports.JupiterFilterRolesDialog.prototype,"_draggedRoleId",2),We([S()],exports.JupiterFilterRolesDialog.prototype,"_dragOverRoleId",2),We([S()],exports.JupiterFilterRolesDialog.prototype,"_chosenRoleOrder",2),We([S()],exports.JupiterFilterRolesDialog.prototype,"_showAdvancedFilter",2),We([S()],exports.JupiterFilterRolesDialog.prototype,"_showFactsOnly",2),We([S()],exports.JupiterFilterRolesDialog.prototype,"_conceptSearchText",2),We([S()],exports.JupiterFilterRolesDialog.prototype,"_collapsedRoles",2),exports.JupiterFilterRolesDialog=We([t("jupiter-filter-roles-dialog")],exports.JupiterFilterRolesDialog);var Xe=Object.defineProperty,Ze=Object.getOwnPropertyDescriptor,et=(e,t,i,o)=>{for(var r,n=o>1?void 0:o?Ze(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&&Xe(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`
|
|
3128
3288
|
<div class="dialog" @click="${e=>e.stopPropagation()}">
|
|
3129
3289
|
<div class="dialog-header">
|
|
3130
|
-
<h2 class="dialog-title">${
|
|
3290
|
+
<h2 class="dialog-title">${E.t("formulaValidation.dialogTitle")}</h2>
|
|
3131
3291
|
${o?e.html`
|
|
3132
3292
|
<p class="dialog-summary">
|
|
3133
|
-
${
|
|
3134
|
-
${o.failed>0?e.html`— ${
|
|
3293
|
+
${E.t("formulaValidation.summaryCount",{failed:o.failed,total:o.totalAssertions})}
|
|
3294
|
+
${o.failed>0?e.html`— ${E.t("formulaValidation.summaryCountBreakdown",{warnings:o.failedWarnings,errors:o.failedErrors})}`:""}
|
|
3135
3295
|
</p>
|
|
3136
3296
|
`:""}
|
|
3137
3297
|
</div>
|
|
@@ -3140,7 +3300,7 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
|
|
|
3140
3300
|
${0===t.length?e.html`
|
|
3141
3301
|
<div class="all-passed">
|
|
3142
3302
|
<div class="all-passed-icon">✓</div>
|
|
3143
|
-
<div class="all-passed-text">${
|
|
3303
|
+
<div class="all-passed-text">${E.t("formulaValidation.allPassed")}</div>
|
|
3144
3304
|
</div>
|
|
3145
3305
|
`:i.map(([t,i])=>{const o=this._collapsedGroups.has(t);return e.html`
|
|
3146
3306
|
<div class="role-group">
|
|
@@ -3154,7 +3314,7 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
|
|
|
3154
3314
|
${i.map(t=>e.html`
|
|
3155
3315
|
<div class="assertion-row">
|
|
3156
3316
|
<span class="severity-badge ${"ERROR"===t.severity?"error":"warning"}">
|
|
3157
|
-
${"ERROR"===t.severity?
|
|
3317
|
+
${"ERROR"===t.severity?E.t("formulaValidation.severityError"):E.t("formulaValidation.severityWarning")}
|
|
3158
3318
|
</span>
|
|
3159
3319
|
<span class="assertion-message">${this._renderMessage(t)}</span>
|
|
3160
3320
|
</div>
|
|
@@ -3167,7 +3327,7 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
|
|
|
3167
3327
|
|
|
3168
3328
|
<div class="dialog-actions">
|
|
3169
3329
|
<button class="btn btn-primary" @click="${this._handleClose}">
|
|
3170
|
-
${
|
|
3330
|
+
${E.t("formulaValidation.close")}
|
|
3171
3331
|
</button>
|
|
3172
3332
|
</div>
|
|
3173
3333
|
</div>
|
|
@@ -3392,7 +3552,7 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
|
|
|
3392
3552
|
.btn-primary:hover {
|
|
3393
3553
|
opacity: 0.9;
|
|
3394
3554
|
}
|
|
3395
|
-
`,qe([w({type:Array})],exports.JupiterFormulaValidationDialog.prototype,"results",2),qe([w({type:Object})],exports.JupiterFormulaValidationDialog.prototype,"summary",2),qe([w({type:Boolean,reflect:!0})],exports.JupiterFormulaValidationDialog.prototype,"open",2),qe([S()],exports.JupiterFormulaValidationDialog.prototype,"_collapsedGroups",2),exports.JupiterFormulaValidationDialog=qe([t("jupiter-formula-validation-dialog")],exports.JupiterFormulaValidationDialog);var He=Object.defineProperty,Ye=Object.getOwnPropertyDescriptor,Ke=(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&&He(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.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.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._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 he,this._skipDraftLoading=!1,this._skipPeriodPreferencesRestore=!1,this._autoSaveTimer=null,this._lastAutoSaveSnapshot="",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._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._lastAutoSaveSnapshot)return this._lastAutoSaveSnapshot=e,void console.log("ℹ️ [Auto Save] Baseline initialized; 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)}updated(e){(e.has("decimals")||e.has("masterData"))&&this._computeEffectiveMasterData(),e.has("language")&&T.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=F.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._analyzeAllVisibleRoles()):this._loadDraftIfExists().then(()=>{this._analyzeAllVisibleRoles()}).catch(()=>{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;if("admin"!==this.mode)return;const i=!(!this.dynaformsFacts||!this.dynaformsMetadata),o=(null==(e=this._draftStorageService)?void 0:e.hasDraft())??!1;if(i||o)return;const r={...this._periodPreferences};let n=!1;for(const a of Object.keys(r)){const e=r[a];if(e.showPreviousYear)continue;((null==(t=e.dimensionSelections)?void 0:t.some(e=>e.selectedMemberIds&&e.selectedMemberIds.length>0))??!1)&&(r[a]={...e,showPreviousYear:!0},n=!0,console.log(`📅 [JDF-010] Auto-enabled showPreviousYear for role "${a}" (has dimension members)`))}n&&(this._periodPreferences=r)}_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){var t,i;const{selectedRoleIds:o,periodPreferences:r}=e.detail;console.log("🎯 Filter apply triggered"),console.log("📊 Old _selectedRoleIds:",this._selectedRoleIds),console.log("📊 New selectedRoleIds from dialog:",o),this._selectedRoleIds=o,this._periodPreferences=r,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==(t=this._currentSchema)?void 0:t.sections.length),console.log("📊 Section IDs:",null==(i=this._currentSchema)?void 0:i.sections.map(e=>e.id)),console.log("📥 Restoring form data from draft after reinitialization..."),this._loadDraftIfExists().then(()=>{console.log("✅ Form data restored successfully after reinitialization")}).catch(e=>{console.error("❌ Error restoring form data after reinitialization:",e)}),this._showFilterDialog=!1;const s=Array.isArray(this._selectedRoleIds)&&this._selectedRoleIds.length>0?(this._selectedRoleIds[0],this._selectedRoleIds.length):0;console.log(`🎯 Applied role filter: ${s}/${this._allSections.length} roles selected`),console.log("📋 Enhanced selectedRoleIds structure:",this._selectedRoleIds),this.dispatchEvent(new CustomEvent("roles-filter-changed",{detail:{selectedRoleIds:o,totalRoles:this._allSections.length,visibleRoles:s,periodPreferences:r},bubbles:!0}))}_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._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.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.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.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=me.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}_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}_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.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;console.log(`🎯 [Error Click] Attempting to focus field: ${e}__${t} in section: ${i}`),this._showErrorPopup=!1,this.requestUpdate(),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 s=null==(o=this.shadowRoot)?void 0:o.querySelectorAll("jupiter-form-section");let l=null;if(null==s||s.forEach(e=>{var t;(null==(t=e.section)?void 0:t.id)===i&&(l=e)}),!l)return void console.warn(`⚠️ Section not found: ${i}`);if(console.log("✅ Found section element:",l),(null==(r=l.section)?void 0:r.collapsed)?(console.log("📂 Expanding collapsed section"),l.section.collapsed=!1,l.requestUpdate(),await l.updateComplete,await new Promise(e=>setTimeout(e,500))):(await l.updateComplete,await new Promise(e=>setTimeout(e,100))),console.log(`🔍 Section shadow DOM exists: ${!!l.shadowRoot}`),l.shadowRoot){console.log(`🔍 Shadow DOM innerHTML length: ${(null==(n=l.shadowRoot.innerHTML)?void 0:n.length)||0}`);const e=l.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 d=`${e}_${t}_field`;console.log(`🔍 Looking for input with fieldId: ${d}`),console.log(`🔍 Looking for field with conceptId: ${e} AND columnId: ${t}`);const c=null==(a=l.shadowRoot)?void 0:a.querySelectorAll("jupiter-concept-tree");let p=null;if(console.log(`🔍 Found ${(null==c?void 0:c.length)||0} concept-tree elements`),c&&c.forEach((i,o)=>{var r;if(p)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(!p&&(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&&(p=e,console.log("✅ Found input element in form-field"))}})}),!p)return void console.warn(`⚠️ Input field not found for: ${d}`);const u=p;l.scrollIntoView({behavior:"smooth",block:"start"}),await new Promise(e=>setTimeout(e,300)),u.focus(),"INPUT"!==u.tagName&&"TEXTAREA"!==u.tagName||u.select(),u.style.boxShadow="0 0 0 3px rgba(220, 38, 38, 0.5)",setTimeout(()=>{u.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._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.requestUpdate(),this.dispatchEvent(new CustomEvent("column-hide",{detail:{columnId:t,sectionId:i},bubbles:!0})))}_handleColumnShow(e){var t;const{columnId:i,sectionId:o}=e.detail;o&&i&&(null==(t=this._hiddenColumnIds.get(o))||t.delete(i),this._dirty=!0,this.requestUpdate(),this.dispatchEvent(new CustomEvent("column-show",{detail:{columnId:i,sectionId:o},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:"string"}),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}))))}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.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 F,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=G(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 void console.log(`ℹ️ [Save Draft] No draft content change detected (${e}); skipping event emit.`);this._lastSavedDraftSnapshot=r;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=F.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._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=me.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`
|
|
3555
|
+
`,et([w({type:Array})],exports.JupiterFormulaValidationDialog.prototype,"results",2),et([w({type:Object})],exports.JupiterFormulaValidationDialog.prototype,"summary",2),et([w({type:Boolean,reflect:!0})],exports.JupiterFormulaValidationDialog.prototype,"open",2),et([S()],exports.JupiterFormulaValidationDialog.prototype,"_collapsedGroups",2),exports.JupiterFormulaValidationDialog=et([t("jupiter-formula-validation-dialog")],exports.JupiterFormulaValidationDialog);var tt=Object.defineProperty,it=Object.getOwnPropertyDescriptor,ot=(e,t,i,o)=>{for(var r,n=o>1?void 0:o?it(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&&tt(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._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)}_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")&&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;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=F.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){var t,i;const{selectedRoleIds:o,periodPreferences:r}=e.detail;console.log("🎯 Filter apply triggered"),console.log("📊 Old _selectedRoleIds:",this._selectedRoleIds),console.log("📊 New selectedRoleIds from dialog:",o),this._selectedRoleIds=o,this._periodPreferences=r,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==(t=this._currentSchema)?void 0:t.sections.length),console.log("📊 Section IDs:",null==(i=this._currentSchema)?void 0:i.sections.map(e=>e.id)),console.log("📥 Restoring form data from draft after reinitialization..."),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 s=Array.isArray(this._selectedRoleIds)&&this._selectedRoleIds.length>0?(this._selectedRoleIds[0],this._selectedRoleIds.length):0;console.log(`🎯 Applied role filter: ${s}/${this._allSections.length} roles selected`),console.log("📋 Enhanced selectedRoleIds structure:",this._selectedRoleIds),this.dispatchEvent(new CustomEvent("roles-filter-changed",{detail:{selectedRoleIds:o,totalRoles:this._allSections.length,visibleRoles:s,periodPreferences:r},bubbles:!0}))}_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;console.log(`🎯 [Error Click] Attempting to focus field: ${e}__${t} in section: ${i}`),this._showErrorPopup=!1,this.requestUpdate(),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 s=null==(o=this.shadowRoot)?void 0:o.querySelectorAll("jupiter-form-section");let l=null;if(null==s||s.forEach(e=>{var t;(null==(t=e.section)?void 0:t.id)===i&&(l=e)}),!l)return void console.warn(`⚠️ Section not found: ${i}`);if(console.log("✅ Found section element:",l),(null==(r=l.section)?void 0:r.collapsed)?(console.log("📂 Expanding collapsed section"),l.section.collapsed=!1,l.requestUpdate(),await l.updateComplete,await new Promise(e=>setTimeout(e,500))):(await l.updateComplete,await new Promise(e=>setTimeout(e,100))),console.log(`🔍 Section shadow DOM exists: ${!!l.shadowRoot}`),l.shadowRoot){console.log(`🔍 Shadow DOM innerHTML length: ${(null==(n=l.shadowRoot.innerHTML)?void 0:n.length)||0}`);const e=l.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 d=`${e}_${t}_field`;console.log(`🔍 Looking for input with fieldId: ${d}`),console.log(`🔍 Looking for field with conceptId: ${e} AND columnId: ${t}`);const c=null==(a=l.shadowRoot)?void 0:a.querySelectorAll("jupiter-concept-tree");let p=null;if(console.log(`🔍 Found ${(null==c?void 0:c.length)||0} concept-tree elements`),c&&c.forEach((i,o)=>{var r;if(p)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(!p&&(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&&(p=e,console.log("✅ Found input element in form-field"))}})}),!p)return void console.warn(`⚠️ Input field not found for: ${d}`);const u=p;l.scrollIntoView({behavior:"smooth",block:"start"}),await new Promise(e=>setTimeout(e,300)),u.focus(),"INPUT"!==u.tagName&&"TEXTAREA"!==u.tagName||u.select(),u.style.boxShadow="0 0 0 3px rgba(220, 38, 38, 0.5)",setTimeout(()=>{u.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){var t;const{columnId:i,sectionId:o}=e.detail;o&&i&&(null==(t=this._hiddenColumnIds.get(o))||t.delete(i),this._dirty=!0,this.hasUnsavedChanges=!0,this.requestUpdate(),this.dispatchEvent(new CustomEvent("column-show",{detail:{columnId:i,sectionId:o},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 F,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=F.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(k(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`
|
|
3396
3556
|
<div class="admin-mode-container">
|
|
3397
3557
|
<p>No role selected</p>
|
|
3398
3558
|
</div>
|
|
@@ -3414,7 +3574,7 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
|
|
|
3414
3574
|
|
|
3415
3575
|
${a?e.html`
|
|
3416
3576
|
<div class="admin-dimension-section">
|
|
3417
|
-
<div class="admin-dimension-header">📊 ${
|
|
3577
|
+
<div class="admin-dimension-header">📊 ${E.t("filter.dimensionMemberSelection")}</div>
|
|
3418
3578
|
${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`
|
|
3419
3579
|
<div class="admin-dimension-group">
|
|
3420
3580
|
<div class="admin-dimension-label">${a}${s?" (Mandatory)":""}</div>
|
|
@@ -3438,13 +3598,13 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
|
|
|
3438
3598
|
class="admin-member-select-btn"
|
|
3439
3599
|
@click="${()=>this._selectAllAdminDimensionMembers(t.id,i.id)}"
|
|
3440
3600
|
>
|
|
3441
|
-
${
|
|
3601
|
+
${E.t("filter.selectAllMembers")}
|
|
3442
3602
|
</button>
|
|
3443
3603
|
<button
|
|
3444
3604
|
class="admin-member-select-btn"
|
|
3445
3605
|
@click="${()=>this._deselectAllAdminDimensionMembers(t.id,i.id)}"
|
|
3446
3606
|
>
|
|
3447
|
-
${
|
|
3607
|
+
${E.t("filter.clearMembers")}
|
|
3448
3608
|
</button>
|
|
3449
3609
|
</div>
|
|
3450
3610
|
`}
|
|
@@ -3459,7 +3619,7 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
|
|
|
3459
3619
|
<!-- Validation Summary -->
|
|
3460
3620
|
${o?e.html`
|
|
3461
3621
|
<div class="validation-summary ${0===r?"warnings-only":""}">
|
|
3462
|
-
<h4 class="validation-summary-title">${r>0?
|
|
3622
|
+
<h4 class="validation-summary-title">${r>0?E.t("validation.summary"):E.t("calculationWarning.title")}</h4>
|
|
3463
3623
|
<ul class="validation-summary-list">
|
|
3464
3624
|
${this._errors.filter(e=>"error"===e.severity||"warning"===e.severity&&"readonly"!==this.mode).map(t=>e.html`
|
|
3465
3625
|
<li class="validation-summary-item ${t.severity}">${"warning"===t.severity?"⚠️ ":""}${t.message}</li>
|
|
@@ -3475,9 +3635,9 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
|
|
|
3475
3635
|
</div>
|
|
3476
3636
|
`):0===t.sections.length?e.html`
|
|
3477
3637
|
<div class="no-roles-message">
|
|
3478
|
-
<h3>${
|
|
3479
|
-
<p>${
|
|
3480
|
-
<p>${
|
|
3638
|
+
<h3>${E.t("form.noRoleSelected")}</h3>
|
|
3639
|
+
<p>${E.t("filter.selectRoles")}</p>
|
|
3640
|
+
<p>${E.t("filter.roles")}: ${this._allSections.length}</p>
|
|
3481
3641
|
</div>
|
|
3482
3642
|
`:(()=>{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`
|
|
3483
3643
|
<jupiter-form-section
|
|
@@ -3529,7 +3689,7 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
|
|
|
3529
3689
|
<button
|
|
3530
3690
|
class="side-panel-toggle-btn ${this._sidePanelCollapsed?"collapsed":""}"
|
|
3531
3691
|
@click="${this._toggleSidePanelCollapse}"
|
|
3532
|
-
title="${this._sidePanelCollapsed?
|
|
3692
|
+
title="${this._sidePanelCollapsed?E.t("form.expandPanel"):E.t("form.collapsePanel")}"
|
|
3533
3693
|
>
|
|
3534
3694
|
<svg viewBox="0 0 24 24">
|
|
3535
3695
|
<path d="M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z"/>
|
|
@@ -3542,12 +3702,12 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
|
|
|
3542
3702
|
<input
|
|
3543
3703
|
type="text"
|
|
3544
3704
|
class="side-panel-search-input"
|
|
3545
|
-
placeholder="${
|
|
3705
|
+
placeholder="${E.t("filter.searchPlaceholder")}"
|
|
3546
3706
|
.value="${this._sidePanelSearchQuery}"
|
|
3547
3707
|
@input="${this._handleSidePanelSearchInput}"
|
|
3548
3708
|
/>
|
|
3549
3709
|
${this._sidePanelSearchQuery?e.html`
|
|
3550
|
-
<button class="side-panel-clear-search" @click="${this._clearSidePanelSearch}" title="${
|
|
3710
|
+
<button class="side-panel-clear-search" @click="${this._clearSidePanelSearch}" title="${E.t("filter.clearSearch")}">
|
|
3551
3711
|
×
|
|
3552
3712
|
</button>
|
|
3553
3713
|
`:e.html`
|
|
@@ -3560,15 +3720,15 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
|
|
|
3560
3720
|
<!-- Search Results Info -->
|
|
3561
3721
|
${this._sidePanelSearchQuery.trim()&&d.length!==l.length?e.html`
|
|
3562
3722
|
<div class="side-panel-search-results-info">
|
|
3563
|
-
${d.length} ${
|
|
3723
|
+
${d.length} ${E.t("filter.of")} ${l.length} ${E.t("filter.roles")}
|
|
3564
3724
|
</div>
|
|
3565
3725
|
`:""}
|
|
3566
3726
|
|
|
3567
3727
|
<!-- Roles List -->
|
|
3568
3728
|
${0===d.length?e.html`
|
|
3569
3729
|
<div class="side-panel-no-results">
|
|
3570
|
-
${
|
|
3571
|
-
${
|
|
3730
|
+
${E.t("filter.noRolesFound")} "${this._sidePanelSearchQuery}"<br>
|
|
3731
|
+
${E.t("filter.tryDifferentSearch")}
|
|
3572
3732
|
</div>
|
|
3573
3733
|
`:e.html`
|
|
3574
3734
|
${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`
|
|
@@ -3590,7 +3750,7 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
|
|
|
3590
3750
|
<!-- Validation Summary -->
|
|
3591
3751
|
${o?e.html`
|
|
3592
3752
|
<div class="validation-summary ${0===r?"warnings-only":""}">
|
|
3593
|
-
<h4 class="validation-summary-title">${r>0?
|
|
3753
|
+
<h4 class="validation-summary-title">${r>0?E.t("validation.summary"):E.t("calculationWarning.title")}</h4>
|
|
3594
3754
|
<ul class="validation-summary-list">
|
|
3595
3755
|
${this._errors.filter(e=>"error"===e.severity||"warning"===e.severity&&"readonly"!==this.mode).map(t=>e.html`
|
|
3596
3756
|
<li class="validation-summary-item ${t.severity}">${"warning"===t.severity?"⚠️ ":""}${t.message}</li>
|
|
@@ -3651,18 +3811,18 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
|
|
|
3651
3811
|
.checked="${!0===this._roleCompletedStates.get(c.id)}"
|
|
3652
3812
|
@change="${e=>this._handleRoleCompletedChange(c.id,e.target.checked)}"
|
|
3653
3813
|
>
|
|
3654
|
-
<label for="role-complete-${c.id}">${
|
|
3814
|
+
<label for="role-complete-${c.id}">${E.t("form.markAsComplete")}</label>
|
|
3655
3815
|
</div>
|
|
3656
3816
|
`:e.html`
|
|
3657
3817
|
<div class="no-roles-message">
|
|
3658
|
-
<h3>${
|
|
3659
|
-
<p>${
|
|
3818
|
+
<h3>${E.t("form.noRoleSelected")}</h3>
|
|
3819
|
+
<p>${E.t("form.pleaseSelectRole")}</p>
|
|
3660
3820
|
</div>
|
|
3661
3821
|
`}
|
|
3662
3822
|
</div>
|
|
3663
3823
|
</div>
|
|
3664
3824
|
</div>
|
|
3665
|
-
`}getData(){return{...this._formData}}setData(e){this._formData={...e},this._dirty=!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}async scrollToConcept(e,t,i,o,r){var n,a,s,l,d,c,p,u,h,m,f,g;console.log(`[scrollToConcept] ▶ START conceptName=${e} value=${null==i?void 0:i.value} dims=${JSON.stringify(t)} columnId=${o} exactConceptId=${r}`);let b=null,v=null;const y=[...(null==(n=this._currentSchema)?void 0:n.sections)??[],...this._allSections.filter(e=>{var t;return!(null==(t=this._currentSchema)?void 0:t.sections.find(t=>t.id===e.id))})];console.log(`[scrollToConcept] Searching ${y.length} sections`);const x=void 0!==(null==i?void 0:i.value)&&null!==(null==i?void 0:i.value),_=x?String(i.value):null;if(r)for(const
|
|
3825
|
+
`}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}async scrollToConcept(e,t,i,o,r){var n,a,s,l,d,c,p,u,h,m,f,g;console.log(`[scrollToConcept] ▶ START conceptName=${e} value=${null==i?void 0:i.value} dims=${JSON.stringify(t)} columnId=${o} exactConceptId=${r}`);let b=null,v=null;const y=[...(null==(n=this._currentSchema)?void 0:n.sections)??[],...this._allSections.filter(e=>{var t;return!(null==(t=this._currentSchema)?void 0:t.sections.find(t=>t.id===e.id))})];console.log(`[scrollToConcept] Searching ${y.length} sections`);const x=void 0!==(null==i?void 0:i.value)&&null!==(null==i?void 0:i.value),_=x?String(i.value):null;if(r)for(const z of y){const e=this._findConceptById(z.concepts,r);if(e){console.log(`[scrollToConcept] Section "${z.id}" matched exactConceptId="${r}"`),b=z,v=e;break}}if(!b||!v)for(const z of y){const i=this._findAllConceptsByName(z.concepts,e);if(!i.length)continue;const r=z.columns??this._columns,n=o??((null==t?void 0:t.length)?this._findColumnByDimensions(r,t):void 0);let a;i.length>1&&(a=i.find(e=>{const t=this._formData[e.id];if(!t)return!1;if(n){const e=t[n];return null!=e&&""!==e&&(!x||this._valueLooselyMatches(e,_))}return!!x&&Object.values(t).some(e=>null!=e&&""!==e&&this._valueLooselyMatches(e,_))}),console.log(`[scrollToConcept] Section "${z.id}" has ${i.length} rows named "${e}" | disambiguated=${(null==a?void 0:a.id)??"none (using first)"}`));const s=a??i[0];if(o){const e=r.some(e=>e.id===o);if(console.log(`[scrollToConcept] Section "${z.id}" has concept "${s.id}" | columnId="${o}" present=${e}`),e){b=z,v=s;break}b||(b=z,v=s)}else{if(!(null==t?void 0:t.length)){console.log(`[scrollToConcept] Section "${z.id}" has concept "${s.id}" (no dims, taking first)`),b=z,v=s;break}if(console.log(`[scrollToConcept] Section "${z.id}" has concept "${s.id}" | colMatch=${n??"null"} | cols=${r.map(e=>e.id).join(",")}`),n){b=z,v=s;break}b||(b=z,v=s)}}if(!b||!v)return void console.warn(`[scrollToConcept] Concept not found: ${e}`);console.log(`[scrollToConcept] → targetSection="${b.id}" targetConceptId="${v.id}"`),b.expanded=!0,"sidePanel"===this.display&&this._activeSidePanelRoleId!==b.id&&(this._activeSidePanelRoleId=b.id);const D=b.columns??this._columns;let I=null;o?I=o:(null==t?void 0:t.length)?I=this._findColumnByDimensions(D,t)??null:x||(I=(null==(a=D[0])?void 0:a.id)??null),console.log(`[scrollToConcept] targetColumnId=${I} hasValueMatch=${x} targetValue=${_}`),this._conceptSearchText=e.includes(":")?e.split(":").pop():e,this.requestUpdate(),await this.updateComplete,await new Promise(e=>setTimeout(e,300));const $=null==(s=this.shadowRoot)?void 0:s.querySelectorAll("jupiter-form-section");console.log(`[scrollToConcept] DOM: found ${(null==$?void 0:$.length)??0} jupiter-form-section elements`);let w=null;if(null==$||$.forEach(e=>{var t;(null==(t=e.section)?void 0:t.id)===b.id&&(w=e)}),!w)return void console.warn(`[scrollToConcept] Section element not found: ${b.id}`);await w.updateComplete;const S=null==(l=w.shadowRoot)?void 0:l.querySelectorAll("jupiter-concept-tree");console.log(`[scrollToConcept] conceptTrees in targetSection: ${(null==S?void 0:S.length)??0}`);let C=null;const F=v.id,T=F.includes("__")?F.split("__")[0]:F;console.log(`[scrollToConcept] conceptId="${F}" conceptIdBase="${T}"`);const E=e=>e===F||e.includes("__")&&e.split("__")[0]===T,k=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)},R=(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=k(e);if(1!==t&&Math.abs(o*t-i)<1e-4)return!0}return!1};let M=0;if(null==S||S.forEach(e=>{var t;if(C)return;const i=null==(t=e.shadowRoot)?void 0:t.querySelectorAll("jupiter-form-field");null==i||i.forEach(e=>{if(C)return;const t=I?e.conceptId===F&&e.columnId===I:e.conceptId===F,i=!x||R(e,_);t&&(M++,console.log(`[scrollToConcept] Phase1 candidate: conceptId=${e.conceptId} columnId=${e.columnId} value=${e.value} scale=${k(e)} valueMatch=${i}`)),t&&i&&(C=e)})}),console.log(`[scrollToConcept] Phase1: scanned ${M} candidates, found=${!!C}`),!C&&x){console.log("[scrollToConcept] Phase2: searching ALL sections by base concept name + value");const e=(null==(d=this.shadowRoot)?void 0:d.querySelectorAll("jupiter-form-section"))??[];for(const t of Array.from(e)){if(C)break;const e=(null==(c=t.shadowRoot)?void 0:c.querySelectorAll("jupiter-concept-tree"))??[];for(const t of Array.from(e)){if(C)break;((null==(p=t.shadowRoot)?void 0:p.querySelectorAll("jupiter-form-field"))??[]).forEach(e=>{if(C)return;const t=E(e.conceptId),i=R(e,_);t&&console.log(`[scrollToConcept] Phase2 candidate: conceptId=${e.conceptId} value=${e.value} scale=${k(e)} valMatch=${i}`),t&&i&&(console.log(`[scrollToConcept] Phase2 ✅ MATCH: conceptId=${e.conceptId} columnId=${e.columnId} value=${e.value}`),C=e)})}}}if(!C){const e=(null==(u=this.shadowRoot)?void 0:u.querySelectorAll("jupiter-form-section"))??[];for(const t of Array.from(e)){if(C)break;const e=(null==(h=t.shadowRoot)?void 0:h.querySelectorAll("jupiter-concept-tree"))??[];for(const t of Array.from(e)){if(C)break;((null==(m=t.shadowRoot)?void 0:m.querySelectorAll("jupiter-form-field"))??[]).forEach(e=>{if(C)return;(I?E(e.conceptId)&&e.columnId===I:E(e.conceptId))&&(console.log(`[scrollToConcept] Phase3 ✅ fallback: conceptId=${e.conceptId} columnId=${e.columnId} value=${e.value}`),C=e)})}}}if(!C)return void console.warn(`[scrollToConcept] Field element not found for concept: ${e}`);console.log(`[scrollToConcept] ✅ HIGHLIGHTING conceptId=${C.conceptId} columnId=${C.columnId} value=${C.value}`);const A=C.getBoundingClientRect(),P=this.shadowRoot,j=P?P.querySelector(".side-panel-content")??P.querySelector(".form-container"):null,L=j&&j.scrollHeight>j.clientHeight?j:null;if(L){const e=L.getBoundingClientRect(),t=Math.max(0,A.top-e.top+L.scrollTop-L.clientHeight/2+A.height/2);L.scrollTo({top:t,behavior:"smooth"})}else C.scrollIntoView({behavior:"smooth",block:"center"});const N=null==(f=null==w?void 0:w.shadowRoot)?void 0:f.querySelector(".table-container");if(N&&N.scrollWidth>N.clientWidth){const e=N.getBoundingClientRect(),t=Math.max(0,A.left-e.left+N.scrollLeft-N.clientWidth/2+A.width/2);N.scrollTo({left:t,behavior:"smooth"})}const V=C.getRootNode(),O=(V instanceof ShadowRoot?V.host:null)??C;O.classList.add("concept-highlight");const U=null==(g=C.shadowRoot)?void 0:g.querySelector('input:not([type="hidden"]), select, textarea, button, [tabindex]:not([tabindex="-1"])');U&&setTimeout(()=>U.focus({preventScroll:!0}),450),setTimeout(()=>O.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`
|
|
3666
3826
|
<div class="form-container">
|
|
3667
3827
|
<!-- Form Header - Hidden in side panel mode -->
|
|
3668
3828
|
${"sidePanel"!==this.display?e.html`
|
|
@@ -3690,7 +3850,7 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
|
|
|
3690
3850
|
<svg class="filter-icon" viewBox="0 0 24 24">
|
|
3691
3851
|
<path d="M10 18h4v-2h-4v2zM3 6v2h18V6H3zm3 7h12v-2H6v2z"/>
|
|
3692
3852
|
</svg>
|
|
3693
|
-
${0===this._selectedRoleIds.length?
|
|
3853
|
+
${0===this._selectedRoleIds.length?E.t("filter.selectRoles"):E.t("filter.filterRoles")}
|
|
3694
3854
|
<span class="roles-count">${this._selectedRoleIds.length}/${this._allSections.length}</span>
|
|
3695
3855
|
</button>
|
|
3696
3856
|
${this._hasActiveAdvancedFilters?e.html`
|
|
@@ -3699,7 +3859,7 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
|
|
|
3699
3859
|
@click="${this._handleClearAdvancedFilters}"
|
|
3700
3860
|
?disabled="${this.disabled||this.readonly}"
|
|
3701
3861
|
>
|
|
3702
|
-
× ${
|
|
3862
|
+
× ${E.t("filter.clearFilters")}
|
|
3703
3863
|
</button>
|
|
3704
3864
|
`:""}
|
|
3705
3865
|
`:""}
|
|
@@ -3708,9 +3868,9 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
|
|
|
3708
3868
|
<button
|
|
3709
3869
|
class="btn-secondary"
|
|
3710
3870
|
@click="${this._handleSaveDraft}"
|
|
3711
|
-
?disabled="${this.disabled||this.readonly||this.isDraftSaving}"
|
|
3871
|
+
?disabled="${this.disabled||this.readonly||this.isDraftSaving||!this.hasUnsavedChanges}"
|
|
3712
3872
|
>
|
|
3713
|
-
${this.isDraftSaving?
|
|
3873
|
+
${this.isDraftSaving?E.t("form.savingDraft"):E.t("form.saveDraft")}
|
|
3714
3874
|
</button>
|
|
3715
3875
|
`:""}
|
|
3716
3876
|
|
|
@@ -3722,7 +3882,7 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
|
|
|
3722
3882
|
@click="${()=>this.dispatchEvent(new CustomEvent("showPreview",{bubbles:!0,composed:!0}))}"
|
|
3723
3883
|
?disabled="${this.disabled||this.readonly}"
|
|
3724
3884
|
>
|
|
3725
|
-
${
|
|
3885
|
+
${E.t("form.download")}
|
|
3726
3886
|
</button>
|
|
3727
3887
|
`:""}
|
|
3728
3888
|
|
|
@@ -3732,7 +3892,7 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
|
|
|
3732
3892
|
@click="${()=>this.dispatchEvent(new CustomEvent("show-validation-results",{bubbles:!0,composed:!0}))}"
|
|
3733
3893
|
?disabled="${this.disabled||this.readonly}"
|
|
3734
3894
|
>
|
|
3735
|
-
${
|
|
3895
|
+
${E.t("form.lastValidationResults")}
|
|
3736
3896
|
</button>
|
|
3737
3897
|
`:""}
|
|
3738
3898
|
|
|
@@ -3742,7 +3902,7 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
|
|
|
3742
3902
|
@click="${this._handleQuickValidate}"
|
|
3743
3903
|
?disabled="${this.disabled||this.readonly||"inProgress"===this._validationStatus}"
|
|
3744
3904
|
>
|
|
3745
|
-
${
|
|
3905
|
+
${E.t("form.quickValidate")}
|
|
3746
3906
|
</button>
|
|
3747
3907
|
`:""}
|
|
3748
3908
|
|
|
@@ -3751,7 +3911,7 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
|
|
|
3751
3911
|
@click="${this._handleSubmit}"
|
|
3752
3912
|
?disabled="${this.disabled||this.readonly||this._submitDisabled||"inProgress"===this._validationStatus}"
|
|
3753
3913
|
>
|
|
3754
|
-
${this.submitButtonLabel||("admin"===this.mode?
|
|
3914
|
+
${this.submitButtonLabel||("admin"===this.mode?E.t("form.save"):E.t("form.submit"))}
|
|
3755
3915
|
</button>
|
|
3756
3916
|
|
|
3757
3917
|
</div>
|
|
@@ -3792,25 +3952,25 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
|
|
|
3792
3952
|
<div class="error-popup-overlay" @click="${()=>{this._showErrorPopup=!1,this.requestUpdate()}}">
|
|
3793
3953
|
<div class="error-popup" @click="${e=>e.stopPropagation()}">
|
|
3794
3954
|
<div class="error-popup-header">
|
|
3795
|
-
<h3>⚠️ ${
|
|
3955
|
+
<h3>⚠️ ${E.t("error.popup.title")}</h3>
|
|
3796
3956
|
<button class="error-popup-close" @click="${()=>{this._showErrorPopup=!1,this.requestUpdate()}}">×</button>
|
|
3797
3957
|
</div>
|
|
3798
3958
|
<div class="error-popup-content">
|
|
3799
|
-
<p>${
|
|
3959
|
+
<p>${E.t("error.popup.message")}</p>
|
|
3800
3960
|
<ul class="error-list">
|
|
3801
3961
|
${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`
|
|
3802
3962
|
<li>
|
|
3803
|
-
<strong>${
|
|
3963
|
+
<strong>${E.t("error.popup.field")}</strong>
|
|
3804
3964
|
<a
|
|
3805
3965
|
href="javascript:void(0)"
|
|
3806
3966
|
class="error-field-link"
|
|
3807
3967
|
@click="${()=>this._handleErrorFieldClick(t.conceptId,t.columnId,t.sectionId)}"
|
|
3808
|
-
title="${
|
|
3968
|
+
title="${E.t("error.popup.clickToFocus")}"
|
|
3809
3969
|
>
|
|
3810
3970
|
${r} (${n})
|
|
3811
3971
|
</a><br>
|
|
3812
|
-
<strong>${
|
|
3813
|
-
<strong>${
|
|
3972
|
+
<strong>${E.t("error.popup.value")}</strong> ${t.value}<br>
|
|
3973
|
+
<strong>${E.t("error.popup.errors")}</strong>
|
|
3814
3974
|
<ul>
|
|
3815
3975
|
${t.errors.map(t=>e.html`<li>${t.message}</li>`)}
|
|
3816
3976
|
</ul>
|
|
@@ -3819,7 +3979,7 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
|
|
|
3819
3979
|
</ul>
|
|
3820
3980
|
</div>
|
|
3821
3981
|
<div class="error-popup-footer">
|
|
3822
|
-
<button class="btn-primary" @click="${()=>{this._showErrorPopup=!1,this.requestUpdate()}}">${
|
|
3982
|
+
<button class="btn-primary" @click="${()=>{this._showErrorPopup=!1,this.requestUpdate()}}">${E.t("error.popup.ok")}</button>
|
|
3823
3983
|
</div>
|
|
3824
3984
|
</div>
|
|
3825
3985
|
</div>
|
|
@@ -3844,7 +4004,7 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
|
|
|
3844
4004
|
</div>
|
|
3845
4005
|
`:""}
|
|
3846
4006
|
</div>
|
|
3847
|
-
`:e.html`<div>${
|
|
4007
|
+
`:e.html`<div>${E.t("form.loading")}</div>`}},exports.JupiterDynamicForm.styles=e.css`
|
|
3848
4008
|
:host {
|
|
3849
4009
|
display: block;
|
|
3850
4010
|
font-family: var(--jupiter-font-family, system-ui, -apple-system, sans-serif);
|
|
@@ -4661,5 +4821,5 @@ const I={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},$=(e=I,t,
|
|
|
4661
4821
|
.context-menu-item.danger:hover {
|
|
4662
4822
|
background: #ffebee;
|
|
4663
4823
|
}
|
|
4664
|
-
`,
|
|
4824
|
+
`,ot([w({type:Object})],exports.JupiterDynamicForm.prototype,"schema",2),ot([w({type:Object})],exports.JupiterDynamicForm.prototype,"xbrlInput",2),ot([w({type:Object})],exports.JupiterDynamicForm.prototype,"config",2),ot([w({type:Object})],exports.JupiterDynamicForm.prototype,"initialData",2),ot([w({type:Boolean})],exports.JupiterDynamicForm.prototype,"disabled",2),ot([w({type:Boolean})],exports.JupiterDynamicForm.prototype,"readonly",2),ot([w({type:Boolean,attribute:"calculation-enabled"})],exports.JupiterDynamicForm.prototype,"calculationEnabled",2),ot([w({type:Boolean,attribute:"formula-enabled"})],exports.JupiterDynamicForm.prototype,"formulaEnabled",2),ot([w({type:Boolean,attribute:"table-layout-enabled"})],exports.JupiterDynamicForm.prototype,"tableLayoutEnabled",2),ot([w({type:String})],exports.JupiterDynamicForm.prototype,"periodStartDate",2),ot([w({type:String})],exports.JupiterDynamicForm.prototype,"periodEndDate",2),ot([w({type:String})],exports.JupiterDynamicForm.prototype,"language",2),ot([w({type:String})],exports.JupiterDynamicForm.prototype,"reportingLanguage",2),ot([w({type:String})],exports.JupiterDynamicForm.prototype,"display",2),ot([w({type:String})],exports.JupiterDynamicForm.prototype,"mode",2),ot([w({type:String,attribute:"submit-button-label"})],exports.JupiterDynamicForm.prototype,"submitButtonLabel",2),ot([w({type:Array})],exports.JupiterDynamicForm.prototype,"roleFilterAxes",2),ot([w({type:Boolean,attribute:"show-last-validation-result-btn"})],exports.JupiterDynamicForm.prototype,"showLastValidationResultBtn",2),ot([w({type:Boolean,attribute:"is-draft-saving"})],exports.JupiterDynamicForm.prototype,"isDraftSaving",2),ot([w({type:Boolean,attribute:"has-unsaved-changes",reflect:!0})],exports.JupiterDynamicForm.prototype,"hasUnsavedChanges",2),ot([w({type:Array})],exports.JupiterDynamicForm.prototype,"defaultUnits",2),ot([w({type:String})],exports.JupiterDynamicForm.prototype,"decimals",2),ot([w({type:Object,attribute:"master-data"})],exports.JupiterDynamicForm.prototype,"masterData",2),ot([w({type:Object,attribute:"dynaforms-metadata"})],exports.JupiterDynamicForm.prototype,"dynaformsMetadata",2),ot([w({type:Object,attribute:"dynaforms-facts"})],exports.JupiterDynamicForm.prototype,"dynaformsFacts",2),ot([S()],exports.JupiterDynamicForm.prototype,"_formData",2),ot([S()],exports.JupiterDynamicForm.prototype,"_draftLoaded",2),ot([S()],exports.JupiterDynamicForm.prototype,"_draftLoadedAt",2),ot([S()],exports.JupiterDynamicForm.prototype,"_preservedFormData",2),ot([S()],exports.JupiterDynamicForm.prototype,"_periodData",2),ot([S()],exports.JupiterDynamicForm.prototype,"_preservedPeriodData",2),ot([S()],exports.JupiterDynamicForm.prototype,"_unitData",2),ot([S()],exports.JupiterDynamicForm.prototype,"_preservedUnitData",2),ot([S()],exports.JupiterDynamicForm.prototype,"_decimalsData",2),ot([S()],exports.JupiterDynamicForm.prototype,"_totalManuallyEditedData",2),ot([S()],exports.JupiterDynamicForm.prototype,"_effectiveMasterData",2),ot([S()],exports.JupiterDynamicForm.prototype,"_typedMemberData",2),ot([S()],exports.JupiterDynamicForm.prototype,"_preservedTypedMemberData",2),ot([S()],exports.JupiterDynamicForm.prototype,"_repeatCounts",2),ot([S()],exports.JupiterDynamicForm.prototype,"_hiddenColumnIds",2),ot([S()],exports.JupiterDynamicForm.prototype,"_columns",2),ot([S()],exports.JupiterDynamicForm.prototype,"_errors",2),ot([S()],exports.JupiterDynamicForm.prototype,"_touched",2),ot([S()],exports.JupiterDynamicForm.prototype,"_dirty",2),ot([S()],exports.JupiterDynamicForm.prototype,"_valid",2),ot([S()],exports.JupiterDynamicForm.prototype,"_submitted",2),ot([S()],exports.JupiterDynamicForm.prototype,"_xbrlFormErrors",2),ot([S()],exports.JupiterDynamicForm.prototype,"_calculationWarnings",2),ot([S()],exports.JupiterDynamicForm.prototype,"_showErrorPopup",2),ot([S()],exports.JupiterDynamicForm.prototype,"_submitDisabled",2),ot([S()],exports.JupiterDynamicForm.prototype,"_currentSchema",2),ot([S()],exports.JupiterDynamicForm.prototype,"_allSections",2),ot([S()],exports.JupiterDynamicForm.prototype,"_selectedRoleIds",2),ot([S()],exports.JupiterDynamicForm.prototype,"_showFilterDialog",2),ot([S()],exports.JupiterDynamicForm.prototype,"_showFactsOnly",2),ot([S()],exports.JupiterDynamicForm.prototype,"_conceptSearchText",2),ot([S()],exports.JupiterDynamicForm.prototype,"_periodPreferences",2),ot([S()],exports.JupiterDynamicForm.prototype,"_activeSidePanelRoleId",2),ot([S()],exports.JupiterDynamicForm.prototype,"_sidePanelSearchQuery",2),ot([S()],exports.JupiterDynamicForm.prototype,"_sidePanelCollapsed",2),ot([S()],exports.JupiterDynamicForm.prototype,"_adminRoleConfigs",2),ot([S()],exports.JupiterDynamicForm.prototype,"_roleBorderStatuses",2),ot([S()],exports.JupiterDynamicForm.prototype,"_roleCompletedStates",2),ot([S()],exports.JupiterDynamicForm.prototype,"_showRoleContextMenu",2),ot([S()],exports.JupiterDynamicForm.prototype,"_contextMenuX",2),ot([S()],exports.JupiterDynamicForm.prototype,"_contextMenuY",2),ot([S()],exports.JupiterDynamicForm.prototype,"_contextMenuRoleId",2),ot([S()],exports.JupiterDynamicForm.prototype,"_validationStatus",2),ot([S()],exports.JupiterDynamicForm.prototype,"_formulaValidationResults",2),ot([S()],exports.JupiterDynamicForm.prototype,"_formulaValidationSummary",2),ot([S()],exports.JupiterDynamicForm.prototype,"_showFormulaValidationDialog",2),exports.JupiterDynamicForm=ot([t("jupiter-dynamic-form")],exports.JupiterDynamicForm);exports.FactMatcher=De,exports.FormValidator=C,exports.TYPE_INPUT_MAP=Ie,exports.XBRLValidator=Re,exports.collectEnumerationsFromChain=Ee,exports.determineInputTypeFromBaseChain=ke,exports.getInputTypeForConceptType=$e,exports.isCheckboxType=Se,exports.isNumericType=Ce,exports.isSelectType=Fe,exports.isTextareaType=we,exports.resolveBaseTypeChain=Te,exports.version="1.5.0";
|
|
4665
4825
|
//# sourceMappingURL=index.js.map
|