jupiter-dynamic-forms 1.14.8 → 1.14.9
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/dynamic-form.d.ts +23 -8
- package/dist/core/dynamic-form.d.ts.map +1 -1
- package/dist/index.js +82 -82
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +95 -57
- package/dist/index.mjs.map +1 -1
- package/dist/schema/types.d.ts +11 -0
- package/dist/schema/types.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -19,7 +19,7 @@ const $={attribute:!0,type:String,converter:v,reflect:!1,hasChanged:x},I=(e=$,t,
|
|
|
19
19
|
* @license
|
|
20
20
|
* Copyright 2017 Google LLC
|
|
21
21
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
22
|
-
*/function w(e){return S({...e,state:!0,attribute:!1})}class C{static validateField(e,t,i,o,r,n=[]){const s=[];for(const l of n){const n=this.validateRule(e,t,i,o,r,l);n&&s.push(n)}return s}static validateRule(e,t,i,o,r,n){const s=null==o||""===o;switch(n.type){case"required":if(s)return this.createError(e,t,i,n);break;case"min":if(!s&&"number"==typeof o&&o<n.value)return this.createError(e,t,i,n);break;case"max":if(!s&&"number"==typeof o&&o>n.value)return this.createError(e,t,i,n);break;case"minLength":if(!s&&"string"==typeof o&&o.length<n.value)return this.createError(e,t,i,n);break;case"maxLength":if(!s&&"string"==typeof o&&o.length>n.value)return this.createError(e,t,i,n);break;case"pattern":if(!s&&"string"==typeof o){if(!new RegExp(n.value).test(o))return this.createError(e,t,i,n)}break;case"email":if(!s&&"string"==typeof o){if(!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(o))return this.createError(e,t,i,n)}break;case"url":if(!s&&"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 buildFormSchema(e,t,i,o="en",r){var n,s;if(!e.presentation||0===e.presentation.length)throw new Error("XBRL presentation data is required");const l=e.presentation[0],a=null==(n=e.hypercubes)?void 0:n[0],d=Array.isArray(e.datatypes)?e.datatypes:(null==(s=e.datatypes)?void 0:s.concepts)||[],c=[];return l.roles.forEach(e=>{const n=this.buildSectionFromRole(e,t,i,a,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(l.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 s;const l=this.extractRoleTitle(e.role),a=this.getAllNonAbstractConcepts(e),d=new Set(a.filter(e=>e.periodType).map(e=>e.periodType));let c=null==o?void 0:o.roles.find(t=>t.roleId===e.id);const p=null==n?void 0:n[e.id];c&&(null==p?void 0:p.dimensionSelections)&&p.dimensionSelections.length>0&&(console.log(`🔍 Filtering dimensions for role ${e.id} based on user selections`),c=this.filterHypercubeDimensionsBySelection(c,p.dimensionSelections));const h=this.generateDefaultColumnsForRole(e,t||"2025-01-01",i||"2025-12-31",c,a,d,p),u={periodTypes:d,availableColumnIds:h.map(e=>e.id)},m=[];return(null==(s=e.presentationLinkbase)?void 0:s.concepts)&&e.presentationLinkbase.concepts.forEach(o=>{const n=this.buildConceptTree(o,0,t,i,u,e.id,r);n&&m.push(n)}),{id:e.id,title:l,description:e.description||`Section for ${l}`,concepts:m,columns:h,expanded:!1,metadata:{roleURI:e.roleURI,originalRole:e.role},showPeriodControl:d.size>1,showPreviousYear:!0===e.showPreviousYear,instant:!0===e.instant,duration:!0===e.duration}}static buildConceptTree(e,t,i,o,r,n,s="en"){const l=this.getPreferredLabel(e.labels,s),a=[];if(!e.elementAbstract){let t=[];t=(null==r?void 0:r.availableColumnIds)&&r.availableColumnIds.length>0?r.availableColumnIds:["duration"],t.forEach(t=>{const r=this.createFieldFromConcept(e,i,o,t);r&&a.push(r)})}const d=[];e.children&&e.children.length>0&&e.children.forEach(e=>{const l=this.buildConceptTree(e,t+1,i,o,r,n,s);l&&d.push(l)});return a.length>0||d.length>0?{id:this.createUniqueConceptId(e,n),originalConceptId:e.id,name:e.conceptName,label:l,description:`${e.conceptName} (${e.type})`,type:e.type,level:t,children:d,fields:a,facts:e.facts||[],collapsed:t>0,abstract:e.elementAbstract,periodType:e.periodType}:null}static createFieldFromConcept(e,t,i,o){const r=this.mapXBRLTypeToFieldType(e.type),n=this.getPreferredLabel(e.labels);let s;s=o||"duration";const l={id:`${e.id}_${s}_field`,conceptId:e.id,columnId:s,type:r,label:n,placeholder:`Enter ${n.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?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: ${l.periodType}, ColumnId: ${s}`),l}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"){if(!e||0===e.length)return"Unnamed Concept";const i=e.filter(e=>e.lang===t),o=i.length>0?i:e,r=o.find(e=>e.preferredLabel);if(r)return r.label;const n=o.find(e=>"http://www.xbrl.org/2003/role/label"===e.role);if(n)return n.label;const s=o.find(e=>"http://www.xbrl.org/2003/role/terseLabel"===e.role);return s?s.label:o.length>0?o[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 generateDefaultColumnsForRole(e,t,i,o,r,n,s){var l,a;const d=r||this.getAllNonAbstractConcepts(e),c=n||new Set(d.filter(e=>e.periodType).map(e=>e.periodType));if(0===d.length)return[{id:"default",title:"Value",description:"Default value column",type:"base",order:0,removable:!1}];let p=[];if(1===(null==(l=null==o?void 0:o.items)?void 0:l.length)){const e=o.items[0];1===e.dimensions.length?p=this.generateSingleDimensionColumns(e.dimensions[0],t,i,c):e.dimensions.length>1&&(p=this.generateMultiDimensionColumns(e.dimensions,t,i,c)),s&&(p=this.filterColumnsByPeriodPreferences(p,s))}else(null==(a=null==o?void 0:o.items)?void 0:a.length)&&o.items.length;const h=[];p.length>0?h.push(...p):0===c.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 u=h;if(s&&(u=this.filterColumnsByPeriodPreferences(h,s)),null==s?void 0:s.showPreviousYear){const e=this.generatePreviousYearColumns(u,t,i);u=[...u,...e]}return u}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 generatePreviousYearColumns(e,t,i){const o=[],r=this.getPreviousYearDate(t),n=this.getPreviousYearDate(i);return e.forEach((e,t)=>{let i=e.title,s="",l="";e.dimensionData?(i=e.title,s=this.formatPeriodDisplay(r,n),l=`${e.id}_prev`):(i=this.formatPeriodDisplay(r,n),s="",l=`duration_prev_${t}`),o.push({...e,id:l,title:i,description:s,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 s=e.id.includes("duration")||(null==(o=null==(i=e.dimensionData)?void 0:i.dimensionId)?void 0:o.includes("duration")),l=e.id.includes("instant")||(null==(n=null==(r=e.dimensionData)?void 0:r.dimensionId)?void 0:n.includes("instant"));return!s&&!l||!(s&&!t.showDuration)&&!(l&&!t.showInstant)})}static generateSingleDimensionColumns(e,t,i,o){var r,n,s;if(e.typedMember&&(!e.members||0===e.members.length)){const n=(null==(r=e.labels.find(e=>"http://www.xbrl.org/2003/role/label"===e.role))?void 0:r.label)||e.conceptName,s={axisId:e.id,axisLabel:n,typedMemberId:e.typedMember.id,dimensionKey:`${n} | [Typed Input]`,dimensionIdKey:`${e.id}|[typed]`},l=[];return 0===o.size?l.push({id:"typed-default",title:n,description:"Typed dimension input column",type:"dimension",dimensionData:{dimensionId:"typed-default",axisId:s.axisId,memberId:"[typed]",memberValue:"Typed Input",memberLabel:"Typed Input",axis:s.axisLabel,axisLabel:s.axisLabel,memberKey:s.dimensionKey,dimensionIdKey:s.dimensionIdKey,hasTypedMembers:!0,typedMemberId:s.typedMemberId,typedMembers:[{axisId:s.axisId,axisLabel:s.axisLabel,typedMemberId:s.typedMemberId,memberLabel:s.axisLabel}]},order:0,removable:!1,periodStartDate:t,periodEndDate:i}):1===o.size&&o.has("instant")?l.push({id:"typed-instant",title:`${n} `,description:i,type:"dimension",dimensionData:{dimensionId:"typed-instant",axisId:s.axisId,memberId:"[typed]",memberValue:"Typed Input",memberLabel:"Typed Input",axis:s.axisLabel,axisLabel:s.axisLabel,memberKey:s.dimensionKey,dimensionIdKey:s.dimensionIdKey,hasTypedMembers:!0,typedMemberId:s.typedMemberId,typedMembers:[{axisId:s.axisId,axisLabel:s.axisLabel,typedMemberId:s.typedMemberId,memberLabel:s.axisLabel}]},order:0,removable:!1,periodStartDate:i,periodEndDate:i}):(1===o.size&&o.has("duration"),l.push({id:"typed-duration",title:`${n} `,description:this.formatPeriodDisplay(t,i),type:"dimension",dimensionData:{dimensionId:"typed-duration",axisId:s.axisId,memberId:"[typed]",memberValue:"Typed Input",memberLabel:"Typed Input",axis:s.axisLabel,axisLabel:s.axisLabel,memberKey:s.dimensionKey,dimensionIdKey:s.dimensionIdKey,hasTypedMembers:!0,typedMemberId:s.typedMemberId,typedMembers:[{axisId:s.axisId,axisLabel:s.axisLabel,typedMemberId:s.typedMemberId,memberLabel:s.axisLabel}]},order:0,removable:!1,periodStartDate:t,periodEndDate:i})),l}if(!e.members||!Array.isArray(e.members))return[];if(0===e.members.length)return[];const l=(null==(n=e.labels.find(e=>"http://www.xbrl.org/2003/role/label"===e.role))?void 0:n.label)||e.conceptName,a=e.members[0],d=(null==(s=a.labels.find(e=>"http://www.xbrl.org/2003/role/label"===e.role))?void 0:s.label)||a.conceptName,c={axisId:e.id,axisLabel:l,memberId:a.id,memberLabel:d,dimensionKey:`${l} | ${d}`,dimensionIdKey:`${e.id} | ${a.id}`},p=[];return 0===o.size?p.push({id:"default",title:c.memberLabel,description:"Default value column",type:"dimension",dimensionData:{dimensionId:"default",axisId:c.axisId,memberId:c.memberId,memberValue:c.memberLabel,memberLabel:c.memberLabel,axis:c.axisLabel,axisLabel:c.axisLabel,memberKey:c.dimensionKey,dimensionIdKey:c.dimensionIdKey},order:0,removable:!1,periodStartDate:t,periodEndDate:i}):1===o.size&&o.has("instant")?p.push({id:"instant",title:`${c.memberLabel}`,description:i,type:"dimension",dimensionData:{dimensionId:"instant",axisId:c.axisId,memberId:c.memberId,memberValue:c.memberLabel,memberLabel:c.memberLabel,axis:c.axisLabel,axisLabel:c.axisLabel,memberKey:c.dimensionKey,dimensionIdKey:c.dimensionIdKey},order:0,removable:!1,periodStartDate:i,periodEndDate:i}):1===o.size&&o.has("duration")?p.push({id:"duration",title:`${c.memberLabel}`,description:`${t} / ${i}`,type:"dimension",dimensionData:{dimensionId:"duration",axisId:c.axisId,memberId:c.memberId,memberValue:c.memberLabel,memberLabel:c.memberLabel,axis:c.axisLabel,axisLabel:c.axisLabel,memberKey:c.dimensionKey,dimensionIdKey:c.dimensionIdKey},order:0,removable:!1,periodStartDate:t,periodEndDate:i}):p.push({id:"duration",title:`${c.memberLabel}`,description:this.formatPeriodDisplay(t,i),type:"dimension",dimensionData:{dimensionId:"duration",axisId:c.axisId,memberId:c.memberId,memberValue:c.memberLabel,memberLabel:c.memberLabel,axis:c.axisLabel,axisLabel:c.axisLabel,memberKey:c.dimensionKey,dimensionIdKey:c.dimensionIdKey},order:0,removable:!1,periodStartDate:t,periodEndDate:i}),p}static generateMultiDimensionColumns(e,t,i,o){e.some(e=>e.typedMember);const r=e.filter(e=>!!e.typedMember||!!(e.members&&Array.isArray(e.members)&&e.members.length>0));if(0===r.length)return[];const n=r.map(e=>{var t;const i=(null==(t=e.labels.find(e=>"http://www.xbrl.org/2003/role/label"===e.role))?void 0:t.label)||e.conceptName;if(e.typedMember)return{id:e.id,axisLabel:i,isTyped:!0,typedMemberId:e.typedMember.id,members:[{id:"[typed]",label:`${i}`}]};const o=this.getAllDimensionMembers(e.members);return{id:e.id,axisLabel:i,isTyped:!1,members:o.map(e=>{var t;return{id:e.id,label:(null==(t=e.labels.find(e=>"http://www.xbrl.org/2003/role/label"===e.role))?void 0:t.label)||e.conceptName}})}}),s=this.generateDimensionCombinations(n),l=[];return s.forEach((e,o)=>{const r=e.map(e=>e.memberLabel).join(" | "),n=e.filter(e=>e.isTyped),s=e.filter(e=>!e.isTyped),a={dimensionId:`multi_${o}`,memberValue:r,memberLabel:r,combinations:s.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:[...s.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:{...a,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){const t=e.match(/^\[[\d]+\]\s*(.+)$/);return t?t[1].trim():e}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 R={en:{form:{loading:"Loading form...",submit:"Submit",saveDraft:"Save 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"},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"},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",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:"Enter percentage",emailPlaceholder:"email@example.com",urlPlaceholder:"https://example.com",phonePlaceholder:"+1 (555) 000-0000",enterValue:"Enter value",enterDetailedInformation:"Enter detailed information..."},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"},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"}}},nl:{form:{loading:"Formulier laden...",submit:"Indienen",saveDraft:"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"},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"},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",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:"Voer percentage in",emailPlaceholder:"email@voorbeeld.nl",urlPlaceholder:"https://voorbeeld.nl",phonePlaceholder:"+31 (0)20 123 4567",enterValue:"Voer waarde in",enterDetailedInformation:"Voer gedetailleerde informatie in..."},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"},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"}}}};class T{static setLanguage(e){R[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=R[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=R[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(R)}}T.currentLanguage="en";class E{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,s,l,a){return{periodStartDate:e,periodEndDate:t,language:i,selectedRoleIds:o,customColumns:this.extractCustomColumns(r),typedMemberData:n,periodPreferences:s,periodData:l,unitData:a,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 k{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 A{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,s=String(t);if(n.pattern){const e=this.validatePattern(s,n.pattern);e&&o.push(e)}if(void 0!==n.length){const e=this.validateExactLength(s,n.length);e&&o.push(e)}if(void 0!==n.minLength){const e=this.validateMinLength(s,n.minLength);e&&o.push(e)}if(void 0!==n.maxLength){const e=this.validateMaxLength(s,n.maxLength);e&&o.push(e)}if(void 0!==n.totalDigits){const e=this.validateTotalDigits(s,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:`Value does not match required pattern: ${t}`,expectedValue:t,actualValue:e}}catch(i){return console.error(`Invalid regex pattern: ${t}`,i),{type:"pattern",message:`Invalid pattern configuration: ${t}`,expectedValue:t,actualValue:e}}return null}static validateExactLength(e,t){return e.length!==t?{type:"length",message:`Value must be exactly ${t} characters (current: ${e.length})`,expectedValue:t,actualValue:e.length}:null}static validateMinLength(e,t){return e.length<t?{type:"minLength",message:`Value must be at least ${t} characters (current: ${e.length})`,expectedValue:t,actualValue:e.length}:null}static validateMaxLength(e,t){return e.length>t?{type:"maxLength",message:`Value must not exceed ${t} characters (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:`Value must not exceed ${t} total digits (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(`Must match pattern: ${o.pattern}`),void 0!==o.length&&r.push(`Must be exactly ${o.length} characters`),void 0!==o.minLength&&r.push(`Minimum ${o.minLength} characters`),void 0!==o.maxLength&&r.push(`Maximum ${o.maxLength} characters`),void 0!==o.totalDigits&&r.push(`Maximum ${o.totalDigits} total digits`),r}}const P={"nl-types:formattedExplanationItemType":{fieldType:"textarea",placeholder:T.t("field.enterDetailedExplanation")},"nl-types:monetaryNoDecimals20ItemType":{fieldType:"number",htmlInputType:"number",allowDecimals:!1,step:1,placeholder:T.t("field.enterAmountNoDecimals")},"xbrli:monetaryItemType":{fieldType:"currency",htmlInputType:"number",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:"number",allowDecimals:!1,step:1,placeholder:T.t("field.enterWholeNumber")},"xbrli:nonNegativeIntegerItemType":{fieldType:"integer",htmlInputType:"number",allowDecimals:!1,min:0,step:1,placeholder:T.t("field.enterPositiveNumber")},"xbrli:positiveIntegerItemType":{fieldType:"integer",htmlInputType:"number",allowDecimals:!1,min:1,step:1,placeholder:T.t("field.enterPositiveNumber")},"xbrli:decimalItemType":{fieldType:"decimal",htmlInputType:"number",allowDecimals:!0,step:"any",placeholder:T.t("field.enterDecimalValue")},"xbrli:sharesItemType":{fieldType:"number",htmlInputType:"number",allowDecimals:!0,min:0,step:.01,placeholder:T.t("field.enterNumberOfShares")},"xbrli:shares":{fieldType:"number",htmlInputType:"number",allowDecimals:!0,min:0,step:.01,placeholder:T.t("field.enterNumberOfShares")},"xbrli:gYearItemType":{fieldType:"number",htmlInputType:"number",allowDecimals:!1,min:1900,max:2100,step:1,placeholder:T.t("field.yearFormat")},"xbrli:booleanItemType":{fieldType:"boolean"},"xbrli:pureItemType":{fieldType:"percentage",htmlInputType:"number",allowDecimals:!0,step:.01,placeholder:T.t("field.enterPercentage")},"xbrli:percentItemType":{fieldType:"percentage",htmlInputType:"number",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 M(e,t){if(!e)return{fieldType:"text",htmlInputType:"text",placeholder:T.t("field.enterValue")};if(t&&t.length>0){const i=O(e,t);if(i.length>0){const o=N(i,t);return console.log(`🔍 [Type Resolution] ${e} → Chain:`,i,"→ Type:",o.fieldType,o.enumerations?`(${o.enumerations.length} options)`:""),o}}if(console.log(`⚠️ [Type Resolution Fallback] Using pattern matching for: ${e}`),P[e])return P[e];const i=e.toLowerCase();if(i.includes("monetary"))return i.includes("nodecimals")||i.includes("no-decimals")?{fieldType:"number",htmlInputType:"number",allowDecimals:!1,step:1,placeholder:T.t("field.enterAmountNoDecimals")}:{fieldType:"currency",htmlInputType:"number",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:"number",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:"number",allowDecimals:!0,step:"any",placeholder:T.t("field.enterDecimalValue")}:i.includes("percent")||i.includes("pure")?{fieldType:"percentage",htmlInputType:"number",allowDecimals:!0,step:.01,placeholder:T.t("field.enterPercentage")}:{fieldType:"text",htmlInputType:"text",placeholder:T.t("field.enterValue")}}function j(e){return"textarea"===e}function L(e){return"boolean"===e}function U(e){return["number","decimal","integer","currency","percentage"].includes(e)}function O(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 z(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 N(e,t){if(!e||0===e.length)return{fieldType:"text",htmlInputType:"text",placeholder:T.t("field.enterValue")};if(t&&t.length>0){const i=z(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:"number",allowDecimals:!1,min:o.includes("positive")?1:e?0:void 0,step:1,placeholder:T.t("field.enterWholeNumber")}}return 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:"number",allowDecimals:!1,step:1,placeholder:T.t("field.enterAmountNoDecimals")}:{fieldType:"currency",htmlInputType:"number",allowDecimals:!0,step:.01,placeholder:T.t("field.enterCurrency")}:{fieldType:"decimal",htmlInputType:"number",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 J=Object.defineProperty,V=Object.getOwnPropertyDescriptor,q=(e,t,i,o)=>{for(var r,n=o>1?void 0:o?V(t,i):t,s=e.length-1;s>=0;s--)(r=e[s])&&(n=(o?r(t,i,n):r(n))||n);return o&&n&&J(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._errors=[],this._xbrlErrors=[],this._touched=!1,this._showPeriodPopup=!1,this._availableUnits=[]}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))}_handleInput(e){const t=e.target;let i=t.value;"number"===this.field.type||"decimal"===this.field.type?i=""===i?null:Number(i):"boolean"===this.field.type&&(i=t.checked),this.value=i,this._touched=!0,this.dispatchEvent(new CustomEvent("field-change",{detail:{fieldId:this.field.id,conceptId:this.conceptId,columnId:this.columnId,value:i,oldValue:this.value},bubbles:!0}))}_handleFocus(){this.dispatchEvent(new CustomEvent("field-focus",{detail:{fieldId:this.field.id,conceptId:this.conceptId,columnId:this.columnId},bubbles:!0}))}_handleBlur(){this._touched=!0,this._validateXBRLDatatype(),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 O(this.conceptType,this.datatypes).some(e=>e.includes("monetary")||e.includes("Monetary"))}_handleKeyDown(e){const t=e.target;if("number"!==t.type)return;["Backspace","Delete","Tab","Escape","Enter","ArrowLeft","ArrowRight","ArrowUp","ArrowDown","Home","End"].includes(e.key)||e.ctrlKey||e.metaKey||("-"!==e.key||0!==t.selectionStart||t.value.includes("-"))&&("."!==e.key||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=A.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}))}_handlePeriodIconClick(){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=O(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")}_handlePopupOverlayClick(e){e.target===e.currentTarget&&this._closePeriodPopup()}_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})}_renderInput(t=this.value,i=this.disabled){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":""}`,s=`${this.conceptId}__${this.columnId}`,l=`data[${this.conceptId}][${this.columnId}]`,a=M(this.conceptType,this.datatypes);this.conceptType;const d=a.fieldType||this.field.type||"text";if("textarea"===d||j(d))return e.html`
|
|
22
|
+
*/function w(e){return S({...e,state:!0,attribute:!1})}class C{static validateField(e,t,i,o,r,n=[]){const s=[];for(const l of n){const n=this.validateRule(e,t,i,o,r,l);n&&s.push(n)}return s}static validateRule(e,t,i,o,r,n){const s=null==o||""===o;switch(n.type){case"required":if(s)return this.createError(e,t,i,n);break;case"min":if(!s&&"number"==typeof o&&o<n.value)return this.createError(e,t,i,n);break;case"max":if(!s&&"number"==typeof o&&o>n.value)return this.createError(e,t,i,n);break;case"minLength":if(!s&&"string"==typeof o&&o.length<n.value)return this.createError(e,t,i,n);break;case"maxLength":if(!s&&"string"==typeof o&&o.length>n.value)return this.createError(e,t,i,n);break;case"pattern":if(!s&&"string"==typeof o){if(!new RegExp(n.value).test(o))return this.createError(e,t,i,n)}break;case"email":if(!s&&"string"==typeof o){if(!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(o))return this.createError(e,t,i,n)}break;case"url":if(!s&&"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 buildFormSchema(e,t,i,o="en",r){var n,s;if(!e.presentation||0===e.presentation.length)throw new Error("XBRL presentation data is required");const l=e.presentation[0],a=null==(n=e.hypercubes)?void 0:n[0],d=Array.isArray(e.datatypes)?e.datatypes:(null==(s=e.datatypes)?void 0:s.concepts)||[],c=[];return l.roles.forEach(e=>{const n=this.buildSectionFromRole(e,t,i,a,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(l.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 s;const l=this.extractRoleTitle(e.role),a=this.getAllNonAbstractConcepts(e),d=new Set(a.filter(e=>e.periodType).map(e=>e.periodType));let c=null==o?void 0:o.roles.find(t=>t.roleId===e.id);const p=null==n?void 0:n[e.id];c&&(null==p?void 0:p.dimensionSelections)&&p.dimensionSelections.length>0&&(console.log(`🔍 Filtering dimensions for role ${e.id} based on user selections`),c=this.filterHypercubeDimensionsBySelection(c,p.dimensionSelections));const h=this.generateDefaultColumnsForRole(e,t||"2025-01-01",i||"2025-12-31",c,a,d,p),u={periodTypes:d,availableColumnIds:h.map(e=>e.id)},m=[];return(null==(s=e.presentationLinkbase)?void 0:s.concepts)&&e.presentationLinkbase.concepts.forEach(o=>{const n=this.buildConceptTree(o,0,t,i,u,e.id,r);n&&m.push(n)}),{id:e.id,title:l,description:e.description||`Section for ${l}`,concepts:m,columns:h,expanded:!1,metadata:{roleURI:e.roleURI,originalRole:e.role},showPeriodControl:d.size>1,showPreviousYear:!0===e.showPreviousYear,instant:!0===e.instant,duration:!0===e.duration}}static buildConceptTree(e,t,i,o,r,n,s="en"){const l=this.getPreferredLabel(e.labels,s),a=[];if(!e.elementAbstract){let t=[];t=(null==r?void 0:r.availableColumnIds)&&r.availableColumnIds.length>0?r.availableColumnIds:["duration"],t.forEach(t=>{const r=this.createFieldFromConcept(e,i,o,t);r&&a.push(r)})}const d=[];e.children&&e.children.length>0&&e.children.forEach(e=>{const l=this.buildConceptTree(e,t+1,i,o,r,n,s);l&&d.push(l)});return a.length>0||d.length>0?{id:this.createUniqueConceptId(e,n),originalConceptId:e.id,name:e.conceptName,label:l,description:`${e.conceptName} (${e.type})`,type:e.type,level:t,children:d,fields:a,facts:e.facts||[],collapsed:t>0,abstract:e.elementAbstract,periodType:e.periodType}:null}static createFieldFromConcept(e,t,i,o){const r=this.mapXBRLTypeToFieldType(e.type),n=this.getPreferredLabel(e.labels);let s;s=o||"duration";const l={id:`${e.id}_${s}_field`,conceptId:e.id,columnId:s,type:r,label:n,placeholder:`Enter ${n.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?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: ${l.periodType}, ColumnId: ${s}`),l}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"){if(!e||0===e.length)return"Unnamed Concept";const i=e.filter(e=>e.lang===t),o=i.length>0?i:e,r=o.find(e=>e.preferredLabel);if(r)return r.label;const n=o.find(e=>"http://www.xbrl.org/2003/role/label"===e.role);if(n)return n.label;const s=o.find(e=>"http://www.xbrl.org/2003/role/terseLabel"===e.role);return s?s.label:o.length>0?o[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 generateDefaultColumnsForRole(e,t,i,o,r,n,s){var l,a;const d=r||this.getAllNonAbstractConcepts(e),c=n||new Set(d.filter(e=>e.periodType).map(e=>e.periodType));if(0===d.length)return[{id:"default",title:"Value",description:"Default value column",type:"base",order:0,removable:!1}];let p=[];if(1===(null==(l=null==o?void 0:o.items)?void 0:l.length)){const e=o.items[0];1===e.dimensions.length?p=this.generateSingleDimensionColumns(e.dimensions[0],t,i,c):e.dimensions.length>1&&(p=this.generateMultiDimensionColumns(e.dimensions,t,i,c)),s&&(p=this.filterColumnsByPeriodPreferences(p,s))}else(null==(a=null==o?void 0:o.items)?void 0:a.length)&&o.items.length;const h=[];p.length>0?h.push(...p):0===c.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 u=h;if(s&&(u=this.filterColumnsByPeriodPreferences(h,s)),null==s?void 0:s.showPreviousYear){const e=this.generatePreviousYearColumns(u,t,i);u=[...u,...e]}return u}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 generatePreviousYearColumns(e,t,i){const o=[],r=this.getPreviousYearDate(t),n=this.getPreviousYearDate(i);return e.forEach((e,t)=>{let i=e.title,s="",l="";e.dimensionData?(i=e.title,s=this.formatPeriodDisplay(r,n),l=`${e.id}_prev`):(i=this.formatPeriodDisplay(r,n),s="",l=`duration_prev_${t}`),o.push({...e,id:l,title:i,description:s,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 s=e.id.includes("duration")||(null==(o=null==(i=e.dimensionData)?void 0:i.dimensionId)?void 0:o.includes("duration")),l=e.id.includes("instant")||(null==(n=null==(r=e.dimensionData)?void 0:r.dimensionId)?void 0:n.includes("instant"));return!s&&!l||!(s&&!t.showDuration)&&!(l&&!t.showInstant)})}static generateSingleDimensionColumns(e,t,i,o){var r,n,s;if(e.typedMember&&(!e.members||0===e.members.length)){const n=(null==(r=e.labels.find(e=>"http://www.xbrl.org/2003/role/label"===e.role))?void 0:r.label)||e.conceptName,s={axisId:e.id,axisLabel:n,typedMemberId:e.typedMember.id,dimensionKey:`${n} | [Typed Input]`,dimensionIdKey:`${e.id}|[typed]`},l=[];return 0===o.size?l.push({id:"typed-default",title:n,description:"Typed dimension input column",type:"dimension",dimensionData:{dimensionId:"typed-default",axisId:s.axisId,memberId:"[typed]",memberValue:"Typed Input",memberLabel:"Typed Input",axis:s.axisLabel,axisLabel:s.axisLabel,memberKey:s.dimensionKey,dimensionIdKey:s.dimensionIdKey,hasTypedMembers:!0,typedMemberId:s.typedMemberId,typedMembers:[{axisId:s.axisId,axisLabel:s.axisLabel,typedMemberId:s.typedMemberId,memberLabel:s.axisLabel}]},order:0,removable:!1,periodStartDate:t,periodEndDate:i}):1===o.size&&o.has("instant")?l.push({id:"typed-instant",title:`${n} `,description:i,type:"dimension",dimensionData:{dimensionId:"typed-instant",axisId:s.axisId,memberId:"[typed]",memberValue:"Typed Input",memberLabel:"Typed Input",axis:s.axisLabel,axisLabel:s.axisLabel,memberKey:s.dimensionKey,dimensionIdKey:s.dimensionIdKey,hasTypedMembers:!0,typedMemberId:s.typedMemberId,typedMembers:[{axisId:s.axisId,axisLabel:s.axisLabel,typedMemberId:s.typedMemberId,memberLabel:s.axisLabel}]},order:0,removable:!1,periodStartDate:i,periodEndDate:i}):(1===o.size&&o.has("duration"),l.push({id:"typed-duration",title:`${n} `,description:this.formatPeriodDisplay(t,i),type:"dimension",dimensionData:{dimensionId:"typed-duration",axisId:s.axisId,memberId:"[typed]",memberValue:"Typed Input",memberLabel:"Typed Input",axis:s.axisLabel,axisLabel:s.axisLabel,memberKey:s.dimensionKey,dimensionIdKey:s.dimensionIdKey,hasTypedMembers:!0,typedMemberId:s.typedMemberId,typedMembers:[{axisId:s.axisId,axisLabel:s.axisLabel,typedMemberId:s.typedMemberId,memberLabel:s.axisLabel}]},order:0,removable:!1,periodStartDate:t,periodEndDate:i})),l}if(!e.members||!Array.isArray(e.members))return[];if(0===e.members.length)return[];const l=(null==(n=e.labels.find(e=>"http://www.xbrl.org/2003/role/label"===e.role))?void 0:n.label)||e.conceptName,a=e.members[0],d=(null==(s=a.labels.find(e=>"http://www.xbrl.org/2003/role/label"===e.role))?void 0:s.label)||a.conceptName,c={axisId:e.id,axisLabel:l,memberId:a.id,memberLabel:d,dimensionKey:`${l} | ${d}`,dimensionIdKey:`${e.id} | ${a.id}`},p=[];return 0===o.size?p.push({id:"default",title:c.memberLabel,description:"Default value column",type:"dimension",dimensionData:{dimensionId:"default",axisId:c.axisId,memberId:c.memberId,memberValue:c.memberLabel,memberLabel:c.memberLabel,axis:c.axisLabel,axisLabel:c.axisLabel,memberKey:c.dimensionKey,dimensionIdKey:c.dimensionIdKey},order:0,removable:!1,periodStartDate:t,periodEndDate:i}):1===o.size&&o.has("instant")?p.push({id:"instant",title:`${c.memberLabel}`,description:i,type:"dimension",dimensionData:{dimensionId:"instant",axisId:c.axisId,memberId:c.memberId,memberValue:c.memberLabel,memberLabel:c.memberLabel,axis:c.axisLabel,axisLabel:c.axisLabel,memberKey:c.dimensionKey,dimensionIdKey:c.dimensionIdKey},order:0,removable:!1,periodStartDate:i,periodEndDate:i}):1===o.size&&o.has("duration")?p.push({id:"duration",title:`${c.memberLabel}`,description:`${t} / ${i}`,type:"dimension",dimensionData:{dimensionId:"duration",axisId:c.axisId,memberId:c.memberId,memberValue:c.memberLabel,memberLabel:c.memberLabel,axis:c.axisLabel,axisLabel:c.axisLabel,memberKey:c.dimensionKey,dimensionIdKey:c.dimensionIdKey},order:0,removable:!1,periodStartDate:t,periodEndDate:i}):p.push({id:"duration",title:`${c.memberLabel}`,description:this.formatPeriodDisplay(t,i),type:"dimension",dimensionData:{dimensionId:"duration",axisId:c.axisId,memberId:c.memberId,memberValue:c.memberLabel,memberLabel:c.memberLabel,axis:c.axisLabel,axisLabel:c.axisLabel,memberKey:c.dimensionKey,dimensionIdKey:c.dimensionIdKey},order:0,removable:!1,periodStartDate:t,periodEndDate:i}),p}static generateMultiDimensionColumns(e,t,i,o){e.some(e=>e.typedMember);const r=e.filter(e=>!!e.typedMember||!!(e.members&&Array.isArray(e.members)&&e.members.length>0));if(0===r.length)return[];const n=r.map(e=>{var t;const i=(null==(t=e.labels.find(e=>"http://www.xbrl.org/2003/role/label"===e.role))?void 0:t.label)||e.conceptName;if(e.typedMember)return{id:e.id,axisLabel:i,isTyped:!0,typedMemberId:e.typedMember.id,members:[{id:"[typed]",label:`${i}`}]};const o=this.getAllDimensionMembers(e.members);return{id:e.id,axisLabel:i,isTyped:!1,members:o.map(e=>{var t;return{id:e.id,label:(null==(t=e.labels.find(e=>"http://www.xbrl.org/2003/role/label"===e.role))?void 0:t.label)||e.conceptName}})}}),s=this.generateDimensionCombinations(n),l=[];return s.forEach((e,o)=>{const r=e.map(e=>e.memberLabel).join(" | "),n=e.filter(e=>e.isTyped),s=e.filter(e=>!e.isTyped),a={dimensionId:`multi_${o}`,memberValue:r,memberLabel:r,combinations:s.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:[...s.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:{...a,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){const t=e.match(/^\[[\d]+\]\s*(.+)$/);return t?t[1].trim():e}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 R={en:{form:{loading:"Loading form...",submit:"Submit",saveDraft:"Save 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"},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"},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",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:"Enter percentage",emailPlaceholder:"email@example.com",urlPlaceholder:"https://example.com",phonePlaceholder:"+1 (555) 000-0000",enterValue:"Enter value",enterDetailedInformation:"Enter detailed information..."},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"},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"}}},nl:{form:{loading:"Formulier laden...",submit:"Indienen",saveDraft:"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"},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"},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",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:"Voer percentage in",emailPlaceholder:"email@voorbeeld.nl",urlPlaceholder:"https://voorbeeld.nl",phonePlaceholder:"+31 (0)20 123 4567",enterValue:"Voer waarde in",enterDetailedInformation:"Voer gedetailleerde informatie in..."},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"},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"}}}};class E{static setLanguage(e){R[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=R[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=R[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(R)}}E.currentLanguage="en";class T{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,s,l,a){return{periodStartDate:e,periodEndDate:t,language:i,selectedRoleIds:o,customColumns:this.extractCustomColumns(r),typedMemberData:n,periodPreferences:s,periodData:l,unitData:a,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 k{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 A{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,s=String(t);if(n.pattern){const e=this.validatePattern(s,n.pattern);e&&o.push(e)}if(void 0!==n.length){const e=this.validateExactLength(s,n.length);e&&o.push(e)}if(void 0!==n.minLength){const e=this.validateMinLength(s,n.minLength);e&&o.push(e)}if(void 0!==n.maxLength){const e=this.validateMaxLength(s,n.maxLength);e&&o.push(e)}if(void 0!==n.totalDigits){const e=this.validateTotalDigits(s,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:`Value does not match required pattern: ${t}`,expectedValue:t,actualValue:e}}catch(i){return console.error(`Invalid regex pattern: ${t}`,i),{type:"pattern",message:`Invalid pattern configuration: ${t}`,expectedValue:t,actualValue:e}}return null}static validateExactLength(e,t){return e.length!==t?{type:"length",message:`Value must be exactly ${t} characters (current: ${e.length})`,expectedValue:t,actualValue:e.length}:null}static validateMinLength(e,t){return e.length<t?{type:"minLength",message:`Value must be at least ${t} characters (current: ${e.length})`,expectedValue:t,actualValue:e.length}:null}static validateMaxLength(e,t){return e.length>t?{type:"maxLength",message:`Value must not exceed ${t} characters (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:`Value must not exceed ${t} total digits (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(`Must match pattern: ${o.pattern}`),void 0!==o.length&&r.push(`Must be exactly ${o.length} characters`),void 0!==o.minLength&&r.push(`Minimum ${o.minLength} characters`),void 0!==o.maxLength&&r.push(`Maximum ${o.maxLength} characters`),void 0!==o.totalDigits&&r.push(`Maximum ${o.totalDigits} total digits`),r}}const P={"nl-types:formattedExplanationItemType":{fieldType:"textarea",placeholder:E.t("field.enterDetailedExplanation")},"nl-types:monetaryNoDecimals20ItemType":{fieldType:"number",htmlInputType:"number",allowDecimals:!1,step:1,placeholder:E.t("field.enterAmountNoDecimals")},"xbrli:monetaryItemType":{fieldType:"currency",htmlInputType:"number",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"},"xbrli:dateTimeItemType":{fieldType:"datetime",htmlInputType:"datetime-local"},"xbrli:integerItemType":{fieldType:"integer",htmlInputType:"number",allowDecimals:!1,step:1,placeholder:E.t("field.enterWholeNumber")},"xbrli:nonNegativeIntegerItemType":{fieldType:"integer",htmlInputType:"number",allowDecimals:!1,min:0,step:1,placeholder:E.t("field.enterPositiveNumber")},"xbrli:positiveIntegerItemType":{fieldType:"integer",htmlInputType:"number",allowDecimals:!1,min:1,step:1,placeholder:E.t("field.enterPositiveNumber")},"xbrli:decimalItemType":{fieldType:"decimal",htmlInputType:"number",allowDecimals:!0,step:"any",placeholder:E.t("field.enterDecimalValue")},"xbrli:sharesItemType":{fieldType:"number",htmlInputType:"number",allowDecimals:!0,min:0,step:.01,placeholder:E.t("field.enterNumberOfShares")},"xbrli:shares":{fieldType:"number",htmlInputType:"number",allowDecimals:!0,min:0,step:.01,placeholder:E.t("field.enterNumberOfShares")},"xbrli:gYearItemType":{fieldType:"number",htmlInputType:"number",allowDecimals:!1,min:1900,max:2100,step:1,placeholder:E.t("field.yearFormat")},"xbrli:booleanItemType":{fieldType:"boolean"},"xbrli:pureItemType":{fieldType:"percentage",htmlInputType:"number",allowDecimals:!0,step:.01,placeholder:E.t("field.enterPercentage")},"xbrli:percentItemType":{fieldType:"percentage",htmlInputType:"number",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 M(e,t){if(!e)return{fieldType:"text",htmlInputType:"text",placeholder:E.t("field.enterValue")};if(t&&t.length>0){const i=O(e,t);if(i.length>0){const o=N(i,t);return console.log(`🔍 [Type Resolution] ${e} → Chain:`,i,"→ Type:",o.fieldType,o.enumerations?`(${o.enumerations.length} options)`:""),o}}if(console.log(`⚠️ [Type Resolution Fallback] Using pattern matching for: ${e}`),P[e])return P[e];const i=e.toLowerCase();if(i.includes("monetary"))return i.includes("nodecimals")||i.includes("no-decimals")?{fieldType:"number",htmlInputType:"number",allowDecimals:!1,step:1,placeholder:E.t("field.enterAmountNoDecimals")}:{fieldType:"currency",htmlInputType:"number",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"}:{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:"number",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:"number",allowDecimals:!0,step:"any",placeholder:E.t("field.enterDecimalValue")}:i.includes("percent")||i.includes("pure")?{fieldType:"percentage",htmlInputType:"number",allowDecimals:!0,step:.01,placeholder:E.t("field.enterPercentage")}:{fieldType:"text",htmlInputType:"text",placeholder:E.t("field.enterValue")}}function j(e){return"textarea"===e}function L(e){return"boolean"===e}function U(e){return["number","decimal","integer","currency","percentage"].includes(e)}function O(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 z(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 N(e,t){if(!e||0===e.length)return{fieldType:"text",htmlInputType:"text",placeholder:E.t("field.enterValue")};if(t&&t.length>0){const i=z(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"}:{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:"number",allowDecimals:!1,min:o.includes("positive")?1:e?0:void 0,step:1,placeholder:E.t("field.enterWholeNumber")}}return 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:"number",allowDecimals:!1,step:1,placeholder:E.t("field.enterAmountNoDecimals")}:{fieldType:"currency",htmlInputType:"number",allowDecimals:!0,step:.01,placeholder:E.t("field.enterCurrency")}:{fieldType:"decimal",htmlInputType:"number",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")}}var J=Object.defineProperty,V=Object.getOwnPropertyDescriptor,q=(e,t,i,o)=>{for(var r,n=o>1?void 0:o?V(t,i):t,s=e.length-1;s>=0;s--)(r=e[s])&&(n=(o?r(t,i,n):r(n))||n);return o&&n&&J(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._errors=[],this._xbrlErrors=[],this._touched=!1,this._showPeriodPopup=!1,this._availableUnits=[]}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))}_handleInput(e){const t=e.target;let i=t.value;"number"===this.field.type||"decimal"===this.field.type?i=""===i?null:Number(i):"boolean"===this.field.type&&(i=t.checked),this.value=i,this._touched=!0,this.dispatchEvent(new CustomEvent("field-change",{detail:{fieldId:this.field.id,conceptId:this.conceptId,columnId:this.columnId,value:i,oldValue:this.value},bubbles:!0}))}_handleFocus(){this.dispatchEvent(new CustomEvent("field-focus",{detail:{fieldId:this.field.id,conceptId:this.conceptId,columnId:this.columnId},bubbles:!0}))}_handleBlur(){this._touched=!0,this._validateXBRLDatatype(),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 O(this.conceptType,this.datatypes).some(e=>e.includes("monetary")||e.includes("Monetary"))}_handleKeyDown(e){const t=e.target;if("number"!==t.type)return;["Backspace","Delete","Tab","Escape","Enter","ArrowLeft","ArrowRight","ArrowUp","ArrowDown","Home","End"].includes(e.key)||e.ctrlKey||e.metaKey||("-"!==e.key||0!==t.selectionStart||t.value.includes("-"))&&("."!==e.key||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=A.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}))}_handlePeriodIconClick(){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=O(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")}_handlePopupOverlayClick(e){e.target===e.currentTarget&&this._closePeriodPopup()}_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})}_renderInput(t=this.value,i=this.disabled){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":""}`,s=`${this.conceptId}__${this.columnId}`,l=`data[${this.conceptId}][${this.columnId}]`,a=M(this.conceptType,this.datatypes);this.conceptType;const d=a.fieldType||this.field.type||"text";if("textarea"===d||j(d))return e.html`
|
|
23
23
|
<textarea
|
|
24
24
|
id="${s}"
|
|
25
25
|
name="${l}"
|
|
@@ -42,7 +42,7 @@ const $={attribute:!0,type:String,converter:v,reflect:!1,hasChanged:x},I=(e=$,t,
|
|
|
42
42
|
@focus="${this._handleFocus}"
|
|
43
43
|
@blur="${this._handleBlur}"
|
|
44
44
|
>
|
|
45
|
-
<option value="">${a.placeholder||
|
|
45
|
+
<option value="">${a.placeholder||E.t("field.select")}</option>
|
|
46
46
|
${o.map(i=>{const o=i.value,r=i.label||i.value,n=i.disabled||!1;return e.html`
|
|
47
47
|
<option
|
|
48
48
|
value="${o}"
|
|
@@ -643,14 +643,14 @@ const $={attribute:!0,type:String,converter:v,reflect:!1,hasChanged:x},I=(e=$,t,
|
|
|
643
643
|
`,Y([S({type:Object})],exports.JupiterConceptTree.prototype,"concept",2),Y([S({type:Array})],exports.JupiterConceptTree.prototype,"columns",2),Y([S({type:Object})],exports.JupiterConceptTree.prototype,"formData",2),Y([S({type:Object})],exports.JupiterConceptTree.prototype,"periodData",2),Y([S({type:Object})],exports.JupiterConceptTree.prototype,"unitData",2),Y([S({type:Array})],exports.JupiterConceptTree.prototype,"defaultUnits",2),Y([S({type:Boolean})],exports.JupiterConceptTree.prototype,"disabled",2),Y([S({type:String})],exports.JupiterConceptTree.prototype,"locale",2),Y([S({type:Set})],exports.JupiterConceptTree.prototype,"expandedConcepts",2),Y([S({type:Array})],exports.JupiterConceptTree.prototype,"datatypes",2),Y([S({type:String})],exports.JupiterConceptTree.prototype,"mode",2),Y([S({type:Object})],exports.JupiterConceptTree.prototype,"masterData",2),Y([S({type:Array})],exports.JupiterConceptTree.prototype,"facts",2),Y([w()],exports.JupiterConceptTree.prototype,"_expanded",2),exports.JupiterConceptTree=Y([t("jupiter-concept-tree")],exports.JupiterConceptTree);var H=Object.defineProperty,Q=Object.getOwnPropertyDescriptor,G=(e,t,i,o)=>{for(var r,n=o>1?void 0:o?Q(t,i):t,s=e.length-1;s>=0;s--)(r=e[s])&&(n=(o?r(t,i,n):r(n))||n);return o&&n&&H(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}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){if(t.target.checked){const t=this.availableDimensions.find(t=>t.id===e);if(t){const i={axisId:t.id,axisLabel:t.axisLabel,isTyped:!(!t.typedMember||t.members&&0!==t.members.length)};this._selectedDimensions.set(e,i)}}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=this._selectedDimensions.get(e);o&&(o.typedValue=i.value,this._selectedDimensions.set(e,o))}_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._autoSelectSingleMemberDimensions(),this.requestUpdate()}_autoSelectSingleMemberDimensions(){this.availableDimensions.forEach(e=>{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 t={axisId:e.id,axisLabel:e.axisLabel,isTyped:!0};this._selectedDimensions.set(e.id,t),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`
|
|
644
644
|
<div class="dialog" @click="${e=>e.stopPropagation()}">
|
|
645
645
|
<div class="dialog-header">
|
|
646
|
-
<h2 class="dialog-title">${
|
|
646
|
+
<h2 class="dialog-title">${E.t("column.addColumn")}</h2>
|
|
647
647
|
|
|
648
648
|
</div>
|
|
649
649
|
|
|
650
650
|
<div class="dialog-content">
|
|
651
651
|
${"instant"===this.periodType?e.html`
|
|
652
652
|
<div class="form-group">
|
|
653
|
-
<label class="form-label required">${
|
|
653
|
+
<label class="form-label required">${E.t("column.instantDate")}</label>
|
|
654
654
|
<input
|
|
655
655
|
type="date"
|
|
656
656
|
class="form-input"
|
|
@@ -662,7 +662,7 @@ const $={attribute:!0,type:String,converter:v,reflect:!1,hasChanged:x},I=(e=$,t,
|
|
|
662
662
|
`:e.html`
|
|
663
663
|
<div class="form-group date-row">
|
|
664
664
|
<div class="date-field">
|
|
665
|
-
<label class="form-label required">${
|
|
665
|
+
<label class="form-label required">${E.t("column.startPeriodDate")}</label>
|
|
666
666
|
<input
|
|
667
667
|
type="date"
|
|
668
668
|
class="form-input"
|
|
@@ -672,7 +672,7 @@ const $={attribute:!0,type:String,converter:v,reflect:!1,hasChanged:x},I=(e=$,t,
|
|
|
672
672
|
/>
|
|
673
673
|
</div>
|
|
674
674
|
<div class="date-field">
|
|
675
|
-
<label class="form-label required">${
|
|
675
|
+
<label class="form-label required">${E.t("column.endPeriodDate")}</label>
|
|
676
676
|
<input
|
|
677
677
|
type="date"
|
|
678
678
|
class="form-input"
|
|
@@ -687,8 +687,8 @@ const $={attribute:!0,type:String,converter:v,reflect:!1,hasChanged:x},I=(e=$,t,
|
|
|
687
687
|
<!-- Dimensions Section -->
|
|
688
688
|
${this.availableDimensions.length>0?e.html`
|
|
689
689
|
<div class="dimensions-section">
|
|
690
|
-
<h3>${
|
|
691
|
-
<p class="form-description">${
|
|
690
|
+
<h3>${E.t("column.availableDimensions")}</h3>
|
|
691
|
+
<p class="form-description">${E.t("column.dimensionsDescription")}</p>
|
|
692
692
|
|
|
693
693
|
${this.availableDimensions.map(t=>{const i=this._selectedDimensions.has(t.id),o=this._selectedDimensions.get(t.id),r=!(!t.typedMember||t.members&&0!==t.members.length);return e.html`
|
|
694
694
|
<div class="dimension-item">
|
|
@@ -710,20 +710,20 @@ const $={attribute:!0,type:String,converter:v,reflect:!1,hasChanged:x},I=(e=$,t,
|
|
|
710
710
|
${r?e.html`
|
|
711
711
|
<!-- Typed Dimension Input -->
|
|
712
712
|
<div class="member-selection">
|
|
713
|
-
<label>${
|
|
713
|
+
<label>${E.t("column.enterValue")} ${t.conceptName}:</label>
|
|
714
714
|
<input
|
|
715
715
|
type="text"
|
|
716
716
|
class="typed-input"
|
|
717
717
|
.value="${(null==o?void 0:o.typedValue)||""}"
|
|
718
718
|
@input="${e=>this._handleTypedValueChange(t.id,e)}"
|
|
719
|
-
placeholder="${
|
|
719
|
+
placeholder="${E.t("column.enterValuePlaceholder")}"
|
|
720
720
|
/>
|
|
721
721
|
</div>
|
|
722
722
|
`:e.html`
|
|
723
723
|
<!-- Domain Members Selection -->
|
|
724
724
|
${t.members&&t.members.length>0?e.html`
|
|
725
725
|
<div class="member-selection">
|
|
726
|
-
<label>${
|
|
726
|
+
<label>${E.t("column.selectMember")}</label>
|
|
727
727
|
<div class="member-list">
|
|
728
728
|
${t.members.map(i=>e.html`
|
|
729
729
|
<div class="member-option">
|
|
@@ -742,7 +742,7 @@ const $={attribute:!0,type:String,converter:v,reflect:!1,hasChanged:x},I=(e=$,t,
|
|
|
742
742
|
</div>
|
|
743
743
|
</div>
|
|
744
744
|
`:e.html`
|
|
745
|
-
<p class="form-description">${
|
|
745
|
+
<p class="form-description">${E.t("column.noMembersAvailable")}</p>
|
|
746
746
|
`}
|
|
747
747
|
`}
|
|
748
748
|
</div>
|
|
@@ -755,14 +755,14 @@ const $={attribute:!0,type:String,converter:v,reflect:!1,hasChanged:x},I=(e=$,t,
|
|
|
755
755
|
|
|
756
756
|
<div class="dialog-actions">
|
|
757
757
|
<button class="btn btn-cancel" @click="${this._handleCancel}">
|
|
758
|
-
${
|
|
758
|
+
${E.t("column.cancel")}
|
|
759
759
|
</button>
|
|
760
760
|
<button
|
|
761
761
|
class="btn btn-primary"
|
|
762
762
|
?disabled="${!t}"
|
|
763
763
|
@click="${this._handleConfirm}"
|
|
764
764
|
>
|
|
765
|
-
${
|
|
765
|
+
${E.t("column.addColumn")}
|
|
766
766
|
</button>
|
|
767
767
|
</div>
|
|
768
768
|
</div>
|
|
@@ -1063,7 +1063,7 @@ const $={attribute:!0,type:String,converter:v,reflect:!1,hasChanged:x},I=(e=$,t,
|
|
|
1063
1063
|
<input
|
|
1064
1064
|
type="text"
|
|
1065
1065
|
class="typed-member-header-field"
|
|
1066
|
-
placeholder="${
|
|
1066
|
+
placeholder="${E.t("section.enterPlaceholder")} ${i.axisLabel}"
|
|
1067
1067
|
.value="${this._getTypedMemberHeaderValue(t.id,i.axisId)}"
|
|
1068
1068
|
@input="${e=>this._handleTypedMemberHeaderChange(e,t.id,i.axisId)}"
|
|
1069
1069
|
/>
|
|
@@ -1077,7 +1077,7 @@ const $={attribute:!0,type:String,converter:v,reflect:!1,hasChanged:x},I=(e=$,t,
|
|
|
1077
1077
|
<div
|
|
1078
1078
|
class="column-menu-icon"
|
|
1079
1079
|
@click="${e=>this._toggleColumnMenu(t.id,e)}"
|
|
1080
|
-
title="${
|
|
1080
|
+
title="${E.t("column.columnOptions")}"
|
|
1081
1081
|
>⋮</div>
|
|
1082
1082
|
|
|
1083
1083
|
<!-- Context menu -->
|
|
@@ -1087,14 +1087,14 @@ const $={attribute:!0,type:String,converter:v,reflect:!1,hasChanged:x},I=(e=$,t,
|
|
|
1087
1087
|
class="column-context-menu-item"
|
|
1088
1088
|
@click="${e=>this._handleAddColumnFromMenu(t.id,e)}"
|
|
1089
1089
|
>
|
|
1090
|
-
${
|
|
1090
|
+
${E.t("column.addColumn")}
|
|
1091
1091
|
</button>
|
|
1092
1092
|
${t.removable?e.html`
|
|
1093
1093
|
<button
|
|
1094
1094
|
class="column-context-menu-item remove"
|
|
1095
1095
|
@click="${e=>{e.stopPropagation(),this._handleRemoveColumn(t.id)}}"
|
|
1096
1096
|
>
|
|
1097
|
-
${
|
|
1097
|
+
${E.t("column.removeColumn")}
|
|
1098
1098
|
</button>
|
|
1099
1099
|
`:""}
|
|
1100
1100
|
</div>
|
|
@@ -1427,7 +1427,7 @@ const $={attribute:!0,type:String,converter:v,reflect:!1,hasChanged:x},I=(e=$,t,
|
|
|
1427
1427
|
<svg class="filter-icon" viewBox="0 0 24 24">
|
|
1428
1428
|
<path d="M10 18h4v-2h-4v2zM3 6v2h18V6H3zm3 7h12v-2H6v2z"/>
|
|
1429
1429
|
</svg>
|
|
1430
|
-
<h2 class="dialog-title">${
|
|
1430
|
+
<h2 class="dialog-title">${E.t("filter.title")}</h2>
|
|
1431
1431
|
<button class="close-button" @click="${this._handleCancel}">×</button>
|
|
1432
1432
|
</div>
|
|
1433
1433
|
|
|
@@ -1439,19 +1439,19 @@ const $={attribute:!0,type:String,converter:v,reflect:!1,hasChanged:x},I=(e=$,t,
|
|
|
1439
1439
|
<!-- Available Roles Panel -->
|
|
1440
1440
|
<div class="picklist-panel">
|
|
1441
1441
|
<div class="picklist-header">
|
|
1442
|
-
${
|
|
1442
|
+
${E.t("filter.availableRoles")} (${this._getAvailableRoles().length})
|
|
1443
1443
|
</div>
|
|
1444
1444
|
<div class="picklist-search">
|
|
1445
1445
|
<div class="search-container">
|
|
1446
1446
|
<input
|
|
1447
1447
|
type="text"
|
|
1448
1448
|
class="search-input"
|
|
1449
|
-
placeholder="${
|
|
1449
|
+
placeholder="${E.t("filter.searchPlaceholder")}"
|
|
1450
1450
|
.value="${this._searchQuery}"
|
|
1451
1451
|
@input="${this._handleSearchInput}"
|
|
1452
1452
|
/>
|
|
1453
1453
|
${this._searchQuery?e.html`
|
|
1454
|
-
<button class="clear-search" @click="${this._clearSearch}" title="${
|
|
1454
|
+
<button class="clear-search" @click="${this._clearSearch}" title="${E.t("filter.clearSearch")}">
|
|
1455
1455
|
×
|
|
1456
1456
|
</button>
|
|
1457
1457
|
`:e.html`
|
|
@@ -1476,7 +1476,7 @@ const $={attribute:!0,type:String,converter:v,reflect:!1,hasChanged:x},I=(e=$,t,
|
|
|
1476
1476
|
`})}
|
|
1477
1477
|
</div>
|
|
1478
1478
|
<div class="picklist-count">
|
|
1479
|
-
${this._getAvailableRoles().length} ${
|
|
1479
|
+
${this._getAvailableRoles().length} ${E.t("filter.roleCount")}
|
|
1480
1480
|
</div>
|
|
1481
1481
|
</div>
|
|
1482
1482
|
|
|
@@ -1486,7 +1486,7 @@ const $={attribute:!0,type:String,converter:v,reflect:!1,hasChanged:x},I=(e=$,t,
|
|
|
1486
1486
|
class="picklist-button"
|
|
1487
1487
|
@click="${this._moveToChosen}"
|
|
1488
1488
|
?disabled="${!this._selectedAvailableRole}"
|
|
1489
|
-
title="${
|
|
1489
|
+
title="${E.t("filter.addSelectedRole")}"
|
|
1490
1490
|
>
|
|
1491
1491
|
›
|
|
1492
1492
|
</button>
|
|
@@ -1494,7 +1494,7 @@ const $={attribute:!0,type:String,converter:v,reflect:!1,hasChanged:x},I=(e=$,t,
|
|
|
1494
1494
|
class="picklist-button"
|
|
1495
1495
|
@click="${this._moveAllToChosen}"
|
|
1496
1496
|
?disabled="${0===this._getAvailableRoles().length}"
|
|
1497
|
-
title="${
|
|
1497
|
+
title="${E.t("filter.addAllRoles")}"
|
|
1498
1498
|
>
|
|
1499
1499
|
»
|
|
1500
1500
|
</button>
|
|
@@ -1502,7 +1502,7 @@ const $={attribute:!0,type:String,converter:v,reflect:!1,hasChanged:x},I=(e=$,t,
|
|
|
1502
1502
|
class="picklist-button"
|
|
1503
1503
|
@click="${this._moveToAvailable}"
|
|
1504
1504
|
?disabled="${!this._selectedChosenRole}"
|
|
1505
|
-
title="${
|
|
1505
|
+
title="${E.t("filter.removeSelectedRole")}"
|
|
1506
1506
|
>
|
|
1507
1507
|
‹
|
|
1508
1508
|
</button>
|
|
@@ -1510,7 +1510,7 @@ const $={attribute:!0,type:String,converter:v,reflect:!1,hasChanged:x},I=(e=$,t,
|
|
|
1510
1510
|
class="picklist-button"
|
|
1511
1511
|
@click="${this._moveAllToAvailable}"
|
|
1512
1512
|
?disabled="${0===this._tempSelectedRoles.size}"
|
|
1513
|
-
title="${
|
|
1513
|
+
title="${E.t("filter.removeAllRoles")}"
|
|
1514
1514
|
>
|
|
1515
1515
|
«
|
|
1516
1516
|
</button>
|
|
@@ -1519,19 +1519,19 @@ const $={attribute:!0,type:String,converter:v,reflect:!1,hasChanged:x},I=(e=$,t,
|
|
|
1519
1519
|
<!-- Chosen Roles Panel -->
|
|
1520
1520
|
<div class="picklist-panel">
|
|
1521
1521
|
<div class="picklist-header">
|
|
1522
|
-
${
|
|
1522
|
+
${E.t("filter.chosenRoles")} (${this._tempSelectedRoles.size})
|
|
1523
1523
|
</div>
|
|
1524
1524
|
<div class="picklist-search">
|
|
1525
1525
|
<div class="search-container">
|
|
1526
1526
|
<input
|
|
1527
1527
|
type="text"
|
|
1528
1528
|
class="search-input chosen-search-input"
|
|
1529
|
-
placeholder="${
|
|
1529
|
+
placeholder="${E.t("filter.searchPlaceholder")}"
|
|
1530
1530
|
.value="${this._chosenSearchQuery}"
|
|
1531
1531
|
@input="${this._handleChosenSearchInput}"
|
|
1532
1532
|
/>
|
|
1533
1533
|
${this._chosenSearchQuery?e.html`
|
|
1534
|
-
<button class="clear-search" @click="${this._clearChosenSearch}" title="${
|
|
1534
|
+
<button class="clear-search" @click="${this._clearChosenSearch}" title="${E.t("filter.clearSearch")}">
|
|
1535
1535
|
×
|
|
1536
1536
|
</button>
|
|
1537
1537
|
`:e.html`
|
|
@@ -1562,13 +1562,13 @@ const $={attribute:!0,type:String,converter:v,reflect:!1,hasChanged:x},I=(e=$,t,
|
|
|
1562
1562
|
`})}
|
|
1563
1563
|
</div>
|
|
1564
1564
|
<div class="picklist-count">
|
|
1565
|
-
${this._tempSelectedRoles.size} ${
|
|
1565
|
+
${this._tempSelectedRoles.size} ${E.t("filter.rolesSelected")}
|
|
1566
1566
|
</div>
|
|
1567
1567
|
</div>
|
|
1568
1568
|
</div>
|
|
1569
1569
|
`:e.html`
|
|
1570
1570
|
<p class="description">
|
|
1571
|
-
${
|
|
1571
|
+
${E.t("filter.description")}
|
|
1572
1572
|
</p>
|
|
1573
1573
|
|
|
1574
1574
|
<!-- Search Input -->
|
|
@@ -1576,12 +1576,12 @@ const $={attribute:!0,type:String,converter:v,reflect:!1,hasChanged:x},I=(e=$,t,
|
|
|
1576
1576
|
<input
|
|
1577
1577
|
type="text"
|
|
1578
1578
|
class="search-input"
|
|
1579
|
-
placeholder="${
|
|
1579
|
+
placeholder="${E.t("filter.searchPlaceholder")}"
|
|
1580
1580
|
.value="${this._searchQuery}"
|
|
1581
1581
|
@input="${this._handleSearchInput}"
|
|
1582
1582
|
/>
|
|
1583
1583
|
${this._searchQuery?e.html`
|
|
1584
|
-
<button class="clear-search" @click="${this._clearSearch}" title="${
|
|
1584
|
+
<button class="clear-search" @click="${this._clearSearch}" title="${E.t("filter.clearSearch")}">
|
|
1585
1585
|
×
|
|
1586
1586
|
</button>
|
|
1587
1587
|
`:e.html`
|
|
@@ -1594,8 +1594,8 @@ const $={attribute:!0,type:String,converter:v,reflect:!1,hasChanged:x},I=(e=$,t,
|
|
|
1594
1594
|
<!-- Search Results Info -->
|
|
1595
1595
|
${r?e.html`
|
|
1596
1596
|
<div class="search-results-info">
|
|
1597
|
-
${
|
|
1598
|
-
${o!==i?e.html`${
|
|
1597
|
+
${E.t("filter.showingResults")} ${o} ${E.t("filter.of")} ${i} ${E.t("filter.roles")}
|
|
1598
|
+
${o!==i?e.html`${E.t("filter.matching")} "${this._searchQuery}"`:""}
|
|
1599
1599
|
</div>
|
|
1600
1600
|
`:""}
|
|
1601
1601
|
|
|
@@ -1603,27 +1603,27 @@ const $={attribute:!0,type:String,converter:v,reflect:!1,hasChanged:x},I=(e=$,t,
|
|
|
1603
1603
|
<div class="selection-controls">
|
|
1604
1604
|
${r?e.html`
|
|
1605
1605
|
<button class="selection-control" @click="${this._selectAll}">
|
|
1606
|
-
${
|
|
1606
|
+
${E.t("filter.selectFiltered")} (${o})
|
|
1607
1607
|
</button>
|
|
1608
1608
|
<button class="selection-control" @click="${this._selectNone}">
|
|
1609
|
-
${
|
|
1609
|
+
${E.t("filter.deselectFiltered")}
|
|
1610
1610
|
</button>
|
|
1611
1611
|
<button class="selection-control" @click="${this._selectAllGlobal}">
|
|
1612
|
-
${
|
|
1612
|
+
${E.t("filter.selectAll")} (${i})
|
|
1613
1613
|
</button>
|
|
1614
1614
|
<button class="selection-control" @click="${this._selectNoneGlobal}">
|
|
1615
|
-
${
|
|
1615
|
+
${E.t("filter.deselectAll")}
|
|
1616
1616
|
</button>
|
|
1617
1617
|
`:e.html`
|
|
1618
1618
|
<button class="selection-control" @click="${this._selectAll}">
|
|
1619
|
-
${
|
|
1619
|
+
${E.t("filter.selectAll")}
|
|
1620
1620
|
</button>
|
|
1621
1621
|
<button class="selection-control" @click="${this._selectNone}">
|
|
1622
|
-
${
|
|
1622
|
+
${E.t("filter.selectNone")}
|
|
1623
1623
|
</button>
|
|
1624
1624
|
`}
|
|
1625
1625
|
<button class="selection-control" @click="${this._resetToOriginal}">
|
|
1626
|
-
${
|
|
1626
|
+
${E.t("filter.reset")}
|
|
1627
1627
|
</button>
|
|
1628
1628
|
</div>
|
|
1629
1629
|
|
|
@@ -1632,10 +1632,10 @@ const $={attribute:!0,type:String,converter:v,reflect:!1,hasChanged:x},I=(e=$,t,
|
|
|
1632
1632
|
${0===this._filteredRoles.length?e.html`
|
|
1633
1633
|
<div class="no-results">
|
|
1634
1634
|
${r?e.html`
|
|
1635
|
-
${
|
|
1636
|
-
${
|
|
1635
|
+
${E.t("filter.noRolesFound")} "${this._searchQuery}".<br>
|
|
1636
|
+
${E.t("filter.tryDifferentSearch")}
|
|
1637
1637
|
`:e.html`
|
|
1638
|
-
${
|
|
1638
|
+
${E.t("filter.noRolesAvailable")}
|
|
1639
1639
|
`}
|
|
1640
1640
|
</div>
|
|
1641
1641
|
`:e.html`
|
|
@@ -1650,11 +1650,11 @@ const $={attribute:!0,type:String,converter:v,reflect:!1,hasChanged:x},I=(e=$,t,
|
|
|
1650
1650
|
<div class="role-info">
|
|
1651
1651
|
<h4 class="role-title">${t.title}</h4>
|
|
1652
1652
|
${(null==(i=t.metadata)?void 0:i.roleURI)?e.html`
|
|
1653
|
-
<p class="role-description">${
|
|
1653
|
+
<p class="role-description">${E.t("filter.uri")}: ${t.metadata.roleURI}</p>
|
|
1654
1654
|
`:""}
|
|
1655
1655
|
|
|
1656
1656
|
<div class="period-controls">
|
|
1657
|
-
<p class="period-controls-label">${
|
|
1657
|
+
<p class="period-controls-label">${E.t("filter.additionalOptions")}</p>
|
|
1658
1658
|
<div class="period-checkboxes">
|
|
1659
1659
|
<label class="period-checkbox-item">
|
|
1660
1660
|
<input
|
|
@@ -1663,14 +1663,14 @@ const $={attribute:!0,type:String,converter:v,reflect:!1,hasChanged:x},I=(e=$,t,
|
|
|
1663
1663
|
.checked="${r.showPreviousYear}"
|
|
1664
1664
|
@change="${e=>this._handlePeriodCheckboxChange(e,t.id,"previousYear")}"
|
|
1665
1665
|
/>
|
|
1666
|
-
<span class="period-checkbox-label">${
|
|
1666
|
+
<span class="period-checkbox-label">${E.t("filter.showPreviousYear")}</span>
|
|
1667
1667
|
</label>
|
|
1668
1668
|
</div>
|
|
1669
1669
|
</div>
|
|
1670
1670
|
|
|
1671
1671
|
${s?e.html`
|
|
1672
1672
|
<div class="dimension-section">
|
|
1673
|
-
<div class="dimension-header">📊 ${
|
|
1673
|
+
<div class="dimension-header">📊 ${E.t("filter.dimensionMemberSelection")}</div>
|
|
1674
1674
|
${n.map(i=>{var o,r;const n=this._getAllDimensionMembers(i.members),s=(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,l=this._isSingleMemberDimension(i);return e.html`
|
|
1675
1675
|
<div class="dimension-group">
|
|
1676
1676
|
<div class="dimension-label">${s}</div>
|
|
@@ -1694,13 +1694,13 @@ const $={attribute:!0,type:String,converter:v,reflect:!1,hasChanged:x},I=(e=$,t,
|
|
|
1694
1694
|
class="member-select-btn"
|
|
1695
1695
|
@click="${()=>this._selectAllDimensionMembers(t.id,i.id)}"
|
|
1696
1696
|
>
|
|
1697
|
-
${
|
|
1697
|
+
${E.t("filter.selectAllMembers")}
|
|
1698
1698
|
</button>
|
|
1699
1699
|
<button
|
|
1700
1700
|
class="member-select-btn"
|
|
1701
1701
|
@click="${()=>this._deselectAllDimensionMembers(t.id,i.id)}"
|
|
1702
1702
|
>
|
|
1703
|
-
${
|
|
1703
|
+
${E.t("filter.clearMembers")}
|
|
1704
1704
|
</button>
|
|
1705
1705
|
</div>
|
|
1706
1706
|
`}
|
|
@@ -1719,14 +1719,14 @@ const $={attribute:!0,type:String,converter:v,reflect:!1,hasChanged:x},I=(e=$,t,
|
|
|
1719
1719
|
<!-- Dialog Actions -->
|
|
1720
1720
|
<div class="dialog-actions">
|
|
1721
1721
|
<button class="btn-secondary" @click="${this._handleCancel}">
|
|
1722
|
-
${
|
|
1722
|
+
${E.t("filter.cancel")}
|
|
1723
1723
|
</button>
|
|
1724
1724
|
<button
|
|
1725
1725
|
class="btn-primary"
|
|
1726
1726
|
@click="${this._handleApply}"
|
|
1727
1727
|
?disabled="${0===t}"
|
|
1728
1728
|
>
|
|
1729
|
-
${
|
|
1729
|
+
${E.t("filter.applyFilter")} (${t})
|
|
1730
1730
|
</button>
|
|
1731
1731
|
</div>
|
|
1732
1732
|
</div>
|
|
@@ -2267,7 +2267,7 @@ const $={attribute:!0,type:String,converter:v,reflect:!1,hasChanged:x},I=(e=$,t,
|
|
|
2267
2267
|
border-top: 1px solid var(--jupiter-border-color, #ddd);
|
|
2268
2268
|
text-align: center;
|
|
2269
2269
|
}
|
|
2270
|
-
`,ie([S({type:Boolean,reflect:!0})],exports.JupiterFilterRolesDialog.prototype,"open",2),ie([S({type:Array})],exports.JupiterFilterRolesDialog.prototype,"availableRoles",2),ie([S({type:Array})],exports.JupiterFilterRolesDialog.prototype,"selectedRoleIds",2),ie([S({type:Object})],exports.JupiterFilterRolesDialog.prototype,"periodPreferences",2),ie([S({type:String})],exports.JupiterFilterRolesDialog.prototype,"mode",2),ie([S({type:Object})],exports.JupiterFilterRolesDialog.prototype,"hypercubeData",2),ie([w()],exports.JupiterFilterRolesDialog.prototype,"_tempSelectedRoles",2),ie([w()],exports.JupiterFilterRolesDialog.prototype,"_searchQuery",2),ie([w()],exports.JupiterFilterRolesDialog.prototype,"_filteredRoles",2),ie([w()],exports.JupiterFilterRolesDialog.prototype,"_tempPeriodPreferences",2),ie([w()],exports.JupiterFilterRolesDialog.prototype,"_selectedAvailableRole",2),ie([w()],exports.JupiterFilterRolesDialog.prototype,"_selectedChosenRole",2),ie([w()],exports.JupiterFilterRolesDialog.prototype,"_chosenSearchQuery",2),ie([w()],exports.JupiterFilterRolesDialog.prototype,"_draggedRoleId",2),ie([w()],exports.JupiterFilterRolesDialog.prototype,"_dragOverRoleId",2),ie([w()],exports.JupiterFilterRolesDialog.prototype,"_chosenRoleOrder",2),exports.JupiterFilterRolesDialog=ie([t("jupiter-filter-roles-dialog")],exports.JupiterFilterRolesDialog);var oe=Object.defineProperty,re=Object.getOwnPropertyDescriptor,ne=(e,t,i,o)=>{for(var r,n=o>1?void 0:o?re(t,i):t,s=e.length-1;s>=0;s--)(r=e[s])&&(n=(o?r(t,i,n):r(n))||n);return o&&n&&oe(t,i,n),n};exports.JupiterDynamicForm=class extends e.LitElement{constructor(){super(...arguments),this.config={},this.initialData={},this.disabled=!1,this.readonly=!1,this.periodStartDate="2025-01-01",this.periodEndDate="2025-12-31",this.language="en",this.display="accordion",this.mode="inputForm",this.financialStatementsTypeAxis=[],this.defaultUnits=[],this._formData={},this._draftLoaded=!1,this._preservedFormData={},this._periodData={},this._preservedPeriodData={},this._unitData={},this._preservedUnitData={},this._typedMemberData={},this._preservedTypedMemberData={},this._columns=[],this._errors=[],this._touched=new Set,this._dirty=!1,this._valid=!0,this._submitted=!1,this._xbrlFormErrors=[],this._showErrorPopup=!1,this._allSections=[],this._selectedRoleIds=[],this._showFilterDialog=!1,this._periodPreferences={},this._activeSidePanelRoleId=null,this._sidePanelSearchQuery="",this._sidePanelCollapsed=!1,this._adminRoleConfigs={},this._roleBorderStatuses=new Map,this._showRoleContextMenu=!1,this._contextMenuX=0,this._contextMenuY=0,this._contextMenuRoleId=null,this._skipDraftLoading=!1,this._skipPeriodPreferencesRestore=!1}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("field-blur",e=>{console.log("🚨 [DynamicForm] field-blur event listener triggered!",e);const t=e;this._handleFieldBlur(t)}),document.addEventListener("click",()=>{this._showRoleContextMenu&&(this._showRoleContextMenu=!1,this.requestUpdate())}),this._initializeForm()}updated(e){e.has("language")&&T.setLanguage(this.language),e.has("financialStatementsTypeAxis")&&console.log("🔄 financialStatementsTypeAxis changed:",this.financialStatementsTypeAxis),(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("financialStatementsTypeAxis"))&&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 E(!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(),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))}this.financialStatementsTypeAxis&&this.financialStatementsTypeAxis.length>0&&(console.log("🔍 Applying financialStatementsTypeAxis filter:",this.financialStatementsTypeAxis),console.log("📊 Sections before filter:",this._allSections.length),this._allSections=this._filterRolesByFinancialStatementsType(this._allSections),console.log("📊 Sections after filter:",this._allSections.length)),0===this._selectedRoleIds.length&&(this._selectedRoleIds=this._allSections.map(e=>e.id),console.log("✅ Auto-selected all roles:",this._selectedRoleIds.length)),this._applyRoleFilter(),this._columns=[{id:"base",title:"Value",description:"Base values for concepts",type:"base",order:0,removable:!1}]}catch(t){console.error("❌ Error building form from XBRL input:",t),this._currentSchema=this._getDefaultSchema(),this._allSections=[],this._selectedRoleIds=[],this._columns=this._getDefaultColumns()}else this.schema?(this._currentSchema=this.schema,this._allSections=[...this.schema.sections],this._selectedRoleIds=this._allSections.map(e=>e.id),this._columns=this._getDefaultColumns()):(this._currentSchema=this._getDefaultSchema(),this._allSections=[],this._selectedRoleIds=[],this._columns=this._getDefaultColumns());this._formData={...this.initialData},(null==(e=this.xbrlInput)?void 0:e.initialData)&&(this._formData={...this._formData,...this.xbrlInput.initialData}),this._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)&&(console.log("🔍 [DynamicForm] Extracting typed member values from facts"),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 s=this._normalizeAxisId(i.dimension),l=null==(n=null==(o=r.dimensionData)?void 0:o.typedMembers)?void 0:n.find(e=>e.axisId===s||this._normalizeAxisId(e.axisId)===s);if(l){this._typedMemberData[r.id]||(this._typedMemberData[r.id]={});const o=l.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: ${s}`)})):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}_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}_filterRolesByFinancialStatementsType(e){var t;if(!this.financialStatementsTypeAxis||0===this.financialStatementsTypeAxis.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 console.log("🔍 Filter values:",this.financialStatementsTypeAxis),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 console.log(`✅ ${e.title}: No hypercube entry - INCLUDED`),!0;let r=!1,n=!1;for(const i of o.items){if(!i.dimensions||0===i.dimensions.length)continue;const e=i.dimensions.find(e=>{var t;return"bw2-titel9_FinancialStatementsTypeAxis"===e.id||(null==(t=e.conceptName)?void 0:t.includes("FinancialStatementsTypeAxis"))});if(e&&(r=!0,e.members&&e.members.length>0)){if(e.members.some(e=>{if(e.conceptName){const t=e.conceptName.split(":"),i=t.length>1?t[1]:e.conceptName;return this.financialStatementsTypeAxis.some(e=>{const t=e.split(":"),o=t.length>1?t[1]:e;return i===o})}return this.financialStatementsTypeAxis.includes(e.id)})){n=!0;break}}}return!r||n})}_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(e=>{this._typedMemberData[e.columnId]&&(this._preservedTypedMemberData[e.columnId]={...this._typedMemberData[e.columnId]})}),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(e=>{this._preservedTypedMemberData[e.columnId]&&(this._typedMemberData[e.columnId]={...this._preservedTypedMemberData[e.columnId]})}),e.children&&e.children.forEach(e=>{this._restoreConceptData(e)})}_shouldShowFilterButton(){return!0}_handleFilterRolesClick(){this._showFilterDialog=!0}_handleFilterDialogCancel(){this._showFilterDialog=!1;const e=this._getRoleIdsArray().length;console.log(`🚫 Filter dialog cancelled. Current selection: ${e}/${this._allSections.length}`)}_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(),s=this._draftStorageService.createMetadataSnapshot(this.periodStartDate,this.periodEndDate,this.language,this._selectedRoleIds,this._allSections,this._typedMemberData,this._periodPreferences,this._periodData,this._unitData);this._draftStorageService.saveDraft(n,s),console.log("✅ Current form data saved to draft storage with NEW preferences"),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 l=Array.isArray(this._selectedRoleIds)&&this._selectedRoleIds.length>0?(this._selectedRoleIds[0],this._selectedRoleIds.length):0;console.log(`🎯 Applied role filter: ${l}/${this._allSections.length} roles selected`),console.log("📋 Enhanced selectedRoleIds structure:",this._selectedRoleIds),this.dispatchEvent(new CustomEvent("roles-filter-changed",{detail:{selectedRoleIds:o,totalRoles:this._allSections.length,visibleRoles:l,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)||[],s=(null==r?void 0:r.dimensionSelections)||[];if(JSON.stringify(n.sort((e,t)=>e.dimensionId.localeCompare(t.dimensionId)))!==JSON.stringify(s.sort((e,t)=>e.dimensionId.localeCompare(t.dimensionId))))return console.log(`🔍 Dimension selection changed for role: ${o}`),console.log(" Old:",n),console.log(" New:",s),!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)}this._errors=t,this._valid=0===t.filter(e=>"error"===e.severity).length}}_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._formData};n[i]||(n[i]={});const s=n[i][o];n[i]={...n[i],[o]:r},this._formData=n,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:s},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:s,unit:l}=e.detail;console.log(`📅 Period change received: conceptId=${t}, columnId=${i}, periodType=${o}, startDate=${r}, endDate=${n}, instantDate=${s}, unit=${l}`);const a={...this._periodData};a[t]||(a[t]={}),a[t]={...a[t],[i]:{startDate:r,endDate:n,instantDate:s}},this._periodData=a,console.log(`💾 Period data stored for [${t}][${i}]:`,this._periodData[t][i]),console.log("📦 Full period data state:",JSON.stringify(this._periodData,null,2)),l&&this._storeUnit(t,i,l),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))}_generateUniqueConceptKey(e,t){return`${e}::${t}`}_extractOriginalConceptId(e){const t=e.split("::");return t.length>1?t[1]:e}_handleTypedMemberChange(e){const{columnId:t,axisId:i,value:o}=e.detail;console.log(`🔍 [DynamicForm] Typed member change: columnId=${t}, axisId=${i}, value=${o}`);const r={...this._typedMemberData};r[t]||(r[t]={}),r[t]={...r[t],[i]:o},this._typedMemberData=r,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 s="";const l=e.composedPath();console.log(`🟧 [DynamicForm] Event path length: ${l.length}`);for(const a of l){const e=a;if("JUPITER-FORM-SECTION"===e.tagName){s=e.getAttribute("section-id")||"",console.log(`🟧 [DynamicForm] Found section element with id: ${s}`);break}}if(console.log(`🟧 [DynamicForm] Found sectionId: ${s}`),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: ${s}`);const e=(null==(t=this._formData[o])?void 0:t[r])||"",l=this._xbrlFormErrors.findIndex(e=>e.fieldId===i&&e.sectionId===s),a={sectionId:s,fieldId:i,conceptId:o,columnId:r,value:e,errors:n};console.log("🟧 [DynamicForm] New error object:",a),console.log(`🟧 [DynamicForm] Existing index: ${l}`),l>=0?(this._xbrlFormErrors=[...this._xbrlFormErrors.slice(0,l),a,...this._xbrlFormErrors.slice(l+1)],console.log(`🟧 [DynamicForm] Updated existing error at index ${l}`)):(this._xbrlFormErrors=[...this._xbrlFormErrors,a],console.log("🟧 [DynamicForm] Added new error"))}else{console.log(`🟧 [DynamicForm] Removing error (if exists) for fieldId: ${i}, sectionId: ${s}`);const e=this._xbrlFormErrors.length;this._xbrlFormErrors=this._xbrlFormErrors.filter(e=>!(e.fieldId===i&&e.sectionId===s)),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,s;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 l=null==(o=this.shadowRoot)?void 0:o.querySelectorAll("jupiter-form-section");let a=null;if(null==l||l.forEach(e=>{var t;(null==(t=e.section)?void 0:t.id)===i&&(a=e)}),!a)return void console.warn(`⚠️ Section not found: ${i}`);if(console.log("✅ Found section element:",a),(null==(r=a.section)?void 0:r.collapsed)?(console.log("📂 Expanding collapsed section"),a.section.collapsed=!1,a.requestUpdate(),await a.updateComplete,await new Promise(e=>setTimeout(e,500))):(await a.updateComplete,await new Promise(e=>setTimeout(e,100))),console.log(`🔍 Section shadow DOM exists: ${!!a.shadowRoot}`),a.shadowRoot){console.log(`🔍 Shadow DOM innerHTML length: ${(null==(n=a.shadowRoot.innerHTML)?void 0:n.length)||0}`);const e=a.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==(s=a.shadowRoot)?void 0:s.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 h=p;a.scrollIntoView({behavior:"smooth",block:"start"}),await new Promise(e=>setTimeout(e,300)),h.focus(),"INPUT"!==h.tagName&&"TEXTAREA"!==h.tagName||h.select(),h.style.boxShadow="0 0 0 3px rgba(220, 38, 38, 0.5)",setTimeout(()=>{h.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}))}_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=[];return r.items.forEach(e=>{e.dimensions&&e.dimensions.length>0&&e.dimensions.forEach(e=>{var t;if(!n.find(t=>t.id===e.id)){const i=(null==(t=e.labels.find(e=>"http://www.xbrl.org/2003/role/label"===e.role))?void 0:t.label)||e.conceptName,o={id:e.id,conceptName:e.conceptName,axisLabel:i};e.members&&e.members.length>0&&(o.members=e.members.map(e=>{var t,i;return{id:e.id,label:(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}})),e.typedMember&&(o.typedMember={id:e.typedMember.id,dataType:"string"}),n.push(o)}})}),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}`}_addColumnFromRequest(e,t,i){var o,r,n,s,l;const a=`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:a,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==(s=i.labels.find(e=>"http://www.xbrl.org/2003/role/label"===e.role))?void 0:s.label)||i.conceptName,o=i.members[0],r=(null==(l=o.labels.find(e=>"http://www.xbrl.org/2003/role/label"===e.role))?void 0:l.label)||o.conceptName;d=r,c="instant"===e.periodType?e.instantDate||"":this._formatPeriodDisplay(e.startDate,e.endDate),p={dimensionId:a,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 h={id:a,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[a]=t,h.dimensionData&&(h.dimensionData.hasTypedMembers=!0,h.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),h,...e.columns.slice(t+1)]:[...e.columns,h]}else e.columns=[...e.columns,h]}this._replicateFieldsForNewColumn(a,e,t),this._dirty=!0,this.requestUpdate(),this.dispatchEvent(new CustomEvent("column-add",{detail:{column:h},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;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:"instant"===i.periodType?i.instantDate:i.startDate,periodEndDate:"instant"===i.periodType?i.instantDate:i.endDate,periodInstantDate:"instant"===e.periodType?i.instantDate||i.startDate: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:"instant"===i.periodType?i.instantDate:i.startDate,periodEndDate:"instant"===i.periodType?i.instantDate:i.endDate,periodInstantDate:"instant"===e.periodType?i.instantDate||i.startDate: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,"admin"===this.mode)return this._handleSaveDraft(),void this._handleAdminModeSubmit();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,void this.requestUpdate();console.log("✅ [Submit] No validation errors, proceeding with submission..."),this._validateForm();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},bubbles:!0})),console.log("✅ Form submit event dispatched")}_handleSaveDraft(){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);const e=this._generateSubmissionData();console.log("📤 Generated submission data:",e),console.log("📊 Submission data breakdown:"),e.forEach((e,t)=>{console.log(` [${t}] conceptId: ${e.conceptId}, columnId: ${e.columnId}, value: ${e.value}, unit: ${e.unit||"none"}`)});const t=this._draftStorageService.createMetadataSnapshot(this.periodStartDate,this.periodEndDate,this.language,this._selectedRoleIds,this._allSections,this._typedMemberData,this._periodPreferences,this._periodData,this._unitData),i=this._draftStorageService.saveDraft(e,t);console.log("💾 [Save Draft] Metadata saved with enhanced selectedRoleIds:",t.selectedRoleIds),this.dynaformsFacts=e,this.dynaformsMetadata=t,this.dispatchEvent(new CustomEvent("form-save-draft",{detail:{data:this._formData,draftData:e,metadata:t,saved:i,valid:this._valid,errors:this._errors,dynaformsFacts:e,dynaformsMetadata:t},bubbles:!0,composed:!0}));const o=this._getRoleIdsArray().length;console.log("💾 Draft saved - localStorage + event emitted",{entries:e.length,saved:i,roles:o,customColumns:t.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.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.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],this.financialStatementsTypeAxis&&this.financialStatementsTypeAxis.length>0&&(this._allSections=this._filterRolesByFinancialStatementsType(this._allSections)),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={},s={};i.forEach(e=>{let{conceptId:t,value:i,columnId:o,period:l,unit:a}=e;if(!o&&l&&(o=this._inferColumnIdFromPeriod(l,t),!o))return void console.warn(`⚠️ Could not infer columnId for concept ${t}, skipping...`);const d=this._findActualConceptId(t)||t;r[d]||(r[d]={}),r[d][o]=i,console.log(`📦 Restored: ${d}[${o}] = ${i}`),l&&(n[d]||(n[d]={}),"instant"===l.type?(n[d][o]={instantDate:l.date},console.log(`📅 [Restore Period] Extracted instant date for ${d}/${o}: ${l.date}`)):"duration"===l.type&&(n[d][o]={startDate:l.startDate,endDate:l.endDate},console.log(`📅 [Restore Period] Extracted duration dates for ${d}/${o}: ${l.startDate} - ${l.endDate}`))),a&&(s[d]||(s[d]={}),s[d][o]=a,console.log(`🏷️ [Restore Unit] Extracted unit for ${d}/${o}: ${a}`))}),this._formData={...this._formData,...r},console.log(`🔄 Restored ${Object.keys(r).length} concepts with data`),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||{},...s},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._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 l=(null==(t=this.shadowRoot)?void 0:t.querySelectorAll("input, textarea, select").length)||0;console.log(`🔍 Found ${l} fields in DOM after update`),l>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,s;const l=r[e],a=`${o}__${e}`;console.log(`🔍 Looking for field: ${a}`);const d=null==(n=this.shadowRoot)?void 0:n.querySelector(`#${CSS.escape(a)}`);d?(d instanceof HTMLInputElement||d instanceof HTMLTextAreaElement||d instanceof HTMLSelectElement)&&("checkbox"===d.type?d.checked=Boolean(l):d.value=null!=l?String(l):"",console.log(` ✅ Populated field ${a} with value:`,l),t++):(console.warn(` ❌ Field element NOT FOUND: ${a}`),console.warn(" Available fields in DOM:",Array.from((null==(s=this.shadowRoot)?void 0:s.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`)}_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 s=t.id.startsWith("col-"),l=t.id.startsWith("duration_")||t.id.startsWith("instant_"),a=!0===e.showPeriodControl;if(!(!n||"duration"===t.id||"default"===t.id||s&&a||l)&&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?t.periodEndDate||t.periodStartDate: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,s,l;const a=e.fields.find(e=>e.columnId===t);if(!a)return;const d="instant"===e.periodType,c=null==(n=this._periodData[e.id])?void 0:n[t],p=null==(s=this._unitData[e.id])?void 0:s[t],h=this._findColumnByIdInAllSections(t);console.log(`🔍 [Submission] Concept: ${e.id}, Column: ${t}, Field Period: ${c?JSON.stringify(c):"none"}, Unit: ${p||"none"}, Column Period: ${(null==h?void 0:h.periodStartDate)||"none"} - ${(null==h?void 0:h.periodEndDate)||"none"}`);const u=(null==c?void 0:c.startDate)||(null==h?void 0:h.periodStartDate)||a.periodStartDate||this.periodStartDate,m=(null==c?void 0:c.endDate)||(null==h?void 0:h.periodEndDate)||a.periodEndDate||this.periodEndDate,f=(null==c?void 0:c.instantDate)||a.periodInstantDate||m||u,b={conceptId:e.originalConceptId||e.id,columnId:t,value:i,period:{type:e.periodType||"duration",...d?{date:f}:{startDate:u,endDate:m}}};p&&(b.unit=p,console.log(`✅ [Submission] Adding unit to entry: ${p} for ${e.id}/${t}`)),(null==(l=null==h?void 0:h.dimensionData)?void 0:l.memberLabel)&&(b.dimension=h.dimensionData.memberLabel),console.log("📤 [Submission Entry] Created entry:",JSON.stringify(b,null,2)),o.push(b)}_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 s=null==t?void 0:t.id;if(!s)return null;const l=null==(r=this.xbrlInput.hypercubes[0].roles)?void 0:r.find(e=>e.roleId===s);if(!(null==l?void 0:l.items))return null;for(const a of l.items)if(a.dimensions){const t=a.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 s=null==t?void 0:t.id;if(!s)return!1;const l=this.xbrlInput.hypercubes[0].roles.find(e=>e.roleId===s);if(!(null==(n=null==l?void 0:l.items)?void 0:n.length))return!1;for(const a of l.items){const t=e.originalConceptId||e.id;if(a.conceptIds&&a.conceptIds.includes(t)){const e=a.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 ${s}`),!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 s=e.originalConceptId||e.id;for(const l of n.items)if(l.conceptIds&&l.conceptIds.includes(s)){const e=l.dimensions.filter(e=>e.typedMember).map(e=>e.id);return console.log(`🔍 [DynamicForm] Found applicable typed dimensions for concept ${s}:`,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=>{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 s,l,a,d;const c=this._formData[e.id],p=null==c?void 0:c[n.columnId];if(null!=p&&""!==p){const c=this._findColumnByIdInSection(n.columnId,i),h=null==(s=this._periodData[e.id])?void 0:s[n.columnId],u={conceptId:e.id,columnId:n.columnId,value:p,period:{type:e.periodType||"duration"}};if("instant"===e.periodType){const e=(null==h?void 0:h.instantDate)||(null==h?void 0:h.endDate)||(null==c?void 0:c.periodEndDate)||n.periodInstantDate||n.periodEndDate||n.periodStartDate||this.periodStartDate;u.period.date=e}else{const e=(null==h?void 0:h.startDate)||(null==c?void 0:c.periodStartDate)||n.periodStartDate||this.periodStartDate,t=(null==h?void 0:h.endDate)||(null==c?void 0:c.periodEndDate)||n.periodEndDate||this.periodEndDate;u.period.startDate=e,u.period.endDate=t}console.log(`🔍 [Submission] Concept: ${e.id}, Column: ${n.columnId}, Field Period: ${h?JSON.stringify(h):"none"}, Column Period: ${(null==c?void 0:c.periodStartDate)||"none"} - ${(null==c?void 0:c.periodEndDate)||"none"}, Used Period: ${"instant"===u.period.type?u.period.date:`${u.period.startDate} - ${u.period.endDate}`}`);const m=null==(l=this._unitData[e.id])?void 0:l[n.columnId];if(m?(u.unit=m,console.log(`✅ [Submission] Adding unit to entry: ${m} 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)),"dimension"===(null==c?void 0:c.type)&&(null==(a=c.dimensionData)?void 0:a.dimensionIdKey)?(u.dimension=c.dimensionData.dimensionIdKey,console.log(`🔍 [DynamicForm] Using dimension key from field's column (${n.columnId}):`,c.dimensionData.dimensionIdKey)):console.log(`🔍 [DynamicForm] No dimension data found for field column ${n.columnId}. Column type: ${null==c?void 0:c.type}, has dimensionData: ${!!(null==c?void 0:c.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?(u.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)),c&&console.log("🔍 [DynamicForm] Column details:",{id:c.id,type:c.type,hasTypedMembers:null==(d=c.dimensionData)?void 0:d.hasTypedMembers,dimensionData:c.dimensionData});r===o&&console.warn("[DUPLICATE DEBUG] Final submission entry:",u),t.push(u)}}),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()}_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),console.warn(`📊 Total fields found: ${i.length}`),console.warn("\n📋 FIELD DETAILS:"),i.forEach((e,t)=>{const i=e.isEmpty?"❌ EMPTY":"✅ FILLED";console.warn(` ${t+1}. ${e.conceptId} [${e.columnId}]: ${i} = ${JSON.stringify(e.value)}`)});const o=this._roleHasErrors(e),r=i.filter(e=>e.isEmpty).length,n=i.filter(e=>!e.isEmpty).length;let s;console.warn("\n📈 SUMMARY:"),console.warn(` Total Fields: ${i.length}`),console.warn(` Filled: ${n}`),console.warn(` Empty: ${r}`),console.warn(` Has Errors: ${o}`),o?(s="INVALID",console.warn("\n🔴 RESULT: INVALID (contains validation errors)")):r>0?(s="INCOMPLETE",console.warn(`\n🟠 RESULT: INCOMPLETE (${r} field(s) blank)`)):(s="COMPLETE",console.warn("\n🟢 RESULT: COMPLETE (all fields filled)")),console.warn("========================================\n"),"INVALID"===s||("INCOMPLETE"===s?(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;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;if(this.masterData&&void 0!==this.masterData[l]&&this.masterData){const e=this.masterData[l];console.warn(` ⏭️ SKIPPING masterData field: ${l} [${t.columnId}] = ${JSON.stringify(e)}`);continue}let a=null==(r=this._formData[e])?void 0:r[t.columnId];void 0===a&&e!==l&&(a=null==(n=this._formData[l])?void 0:n[t.columnId]);let d=null==a||"string"==typeof a&&""===a.trim();if(d&&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=k.findMatchingFact(s.facts,o);r&&null!==r.value&&void 0!==r.value&&""!==r.value&&(a=r.value,d=!1,console.warn(` ✨ FACT PRE-POPULATED: ${l} [${t.columnId}] = ${JSON.stringify(a)}`))}console.warn(` 🔍 Field lookup: concept.id="${e}", field.conceptId="${l}", value=${JSON.stringify(a)}, isEmpty=${d}`),o.push({conceptId:l,columnId:t.columnId,value:a,isEmpty:d})}}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}_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),s=e.id.toLowerCase().includes(t),l=(null==(i=e.description)?void 0:i.toLowerCase().includes(t))||!1,a=(null==(r=null==(o=e.metadata)?void 0:o.roleURI)?void 0:r.toLowerCase().includes(t))||!1;return n||s||l||a})}_renderAdminModeContent(t){var i,o;if(!t)return e.html`
|
|
2270
|
+
`,ie([S({type:Boolean,reflect:!0})],exports.JupiterFilterRolesDialog.prototype,"open",2),ie([S({type:Array})],exports.JupiterFilterRolesDialog.prototype,"availableRoles",2),ie([S({type:Array})],exports.JupiterFilterRolesDialog.prototype,"selectedRoleIds",2),ie([S({type:Object})],exports.JupiterFilterRolesDialog.prototype,"periodPreferences",2),ie([S({type:String})],exports.JupiterFilterRolesDialog.prototype,"mode",2),ie([S({type:Object})],exports.JupiterFilterRolesDialog.prototype,"hypercubeData",2),ie([w()],exports.JupiterFilterRolesDialog.prototype,"_tempSelectedRoles",2),ie([w()],exports.JupiterFilterRolesDialog.prototype,"_searchQuery",2),ie([w()],exports.JupiterFilterRolesDialog.prototype,"_filteredRoles",2),ie([w()],exports.JupiterFilterRolesDialog.prototype,"_tempPeriodPreferences",2),ie([w()],exports.JupiterFilterRolesDialog.prototype,"_selectedAvailableRole",2),ie([w()],exports.JupiterFilterRolesDialog.prototype,"_selectedChosenRole",2),ie([w()],exports.JupiterFilterRolesDialog.prototype,"_chosenSearchQuery",2),ie([w()],exports.JupiterFilterRolesDialog.prototype,"_draggedRoleId",2),ie([w()],exports.JupiterFilterRolesDialog.prototype,"_dragOverRoleId",2),ie([w()],exports.JupiterFilterRolesDialog.prototype,"_chosenRoleOrder",2),exports.JupiterFilterRolesDialog=ie([t("jupiter-filter-roles-dialog")],exports.JupiterFilterRolesDialog);var oe=Object.defineProperty,re=Object.getOwnPropertyDescriptor,ne=(e,t,i,o)=>{for(var r,n=o>1?void 0:o?re(t,i):t,s=e.length-1;s>=0;s--)(r=e[s])&&(n=(o?r(t,i,n):r(n))||n);return o&&n&&oe(t,i,n),n};exports.JupiterDynamicForm=class extends e.LitElement{constructor(){super(...arguments),this.config={},this.initialData={},this.disabled=!1,this.readonly=!1,this.periodStartDate="2025-01-01",this.periodEndDate="2025-12-31",this.language="en",this.display="accordion",this.mode="inputForm",this.roleFilterAxes=[],this.defaultUnits=[],this._formData={},this._draftLoaded=!1,this._preservedFormData={},this._periodData={},this._preservedPeriodData={},this._unitData={},this._preservedUnitData={},this._typedMemberData={},this._preservedTypedMemberData={},this._columns=[],this._errors=[],this._touched=new Set,this._dirty=!1,this._valid=!0,this._submitted=!1,this._xbrlFormErrors=[],this._showErrorPopup=!1,this._allSections=[],this._selectedRoleIds=[],this._showFilterDialog=!1,this._periodPreferences={},this._activeSidePanelRoleId=null,this._sidePanelSearchQuery="",this._sidePanelCollapsed=!1,this._adminRoleConfigs={},this._roleBorderStatuses=new Map,this._showRoleContextMenu=!1,this._contextMenuX=0,this._contextMenuY=0,this._contextMenuRoleId=null,this._skipDraftLoading=!1,this._skipPeriodPreferencesRestore=!1}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("field-blur",e=>{console.log("🚨 [DynamicForm] field-blur event listener triggered!",e);const t=e;this._handleFieldBlur(t)}),document.addEventListener("click",()=>{this._showRoleContextMenu&&(this._showRoleContextMenu=!1,this.requestUpdate())}),this._initializeForm()}updated(e){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 T(!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(),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))}this.roleFilterAxes&&this.roleFilterAxes.length>0&&(this._allSections=this._filterRolesByAxisConfig(this._allSections)),0===this._selectedRoleIds.length&&(this._selectedRoleIds=this._allSections.map(e=>e.id),console.log("✅ Auto-selected all roles:",this._selectedRoleIds.length)),this._applyRoleFilter(),this._columns=[{id:"base",title:"Value",description:"Base values for concepts",type:"base",order:0,removable:!1}]}catch(t){console.error("❌ Error building form from XBRL input:",t),this._currentSchema=this._getDefaultSchema(),this._allSections=[],this._selectedRoleIds=[],this._columns=this._getDefaultColumns()}else this.schema?(this._currentSchema=this.schema,this._allSections=[...this.schema.sections],this._selectedRoleIds=this._allSections.map(e=>e.id),this._columns=this._getDefaultColumns()):(this._currentSchema=this._getDefaultSchema(),this._allSections=[],this._selectedRoleIds=[],this._columns=this._getDefaultColumns());this._formData={...this.initialData},(null==(e=this.xbrlInput)?void 0:e.initialData)&&(this._formData={...this._formData,...this.xbrlInput.initialData}),this._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)&&(console.log("🔍 [DynamicForm] Extracting typed member values from facts"),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 s=this._normalizeAxisId(i.dimension),l=null==(n=null==(o=r.dimensionData)?void 0:o.typedMembers)?void 0:n.find(e=>e.axisId===s||this._normalizeAxisId(e.axisId)===s);if(l){this._typedMemberData[r.id]||(this._typedMemberData[r.id]={});const o=l.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: ${s}`)})):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 s of r){const e=s.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 s.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}_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(e=>{this._typedMemberData[e.columnId]&&(this._preservedTypedMemberData[e.columnId]={...this._typedMemberData[e.columnId]})}),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(e=>{this._preservedTypedMemberData[e.columnId]&&(this._typedMemberData[e.columnId]={...this._preservedTypedMemberData[e.columnId]})}),e.children&&e.children.forEach(e=>{this._restoreConceptData(e)})}_shouldShowFilterButton(){return!0}_handleFilterRolesClick(){this._showFilterDialog=!0}_handleFilterDialogCancel(){this._showFilterDialog=!1;const e=this._getRoleIdsArray().length;console.log(`🚫 Filter dialog cancelled. Current selection: ${e}/${this._allSections.length}`)}_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(),s=this._draftStorageService.createMetadataSnapshot(this.periodStartDate,this.periodEndDate,this.language,this._selectedRoleIds,this._allSections,this._typedMemberData,this._periodPreferences,this._periodData,this._unitData);this._draftStorageService.saveDraft(n,s),console.log("✅ Current form data saved to draft storage with NEW preferences"),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 l=Array.isArray(this._selectedRoleIds)&&this._selectedRoleIds.length>0?(this._selectedRoleIds[0],this._selectedRoleIds.length):0;console.log(`🎯 Applied role filter: ${l}/${this._allSections.length} roles selected`),console.log("📋 Enhanced selectedRoleIds structure:",this._selectedRoleIds),this.dispatchEvent(new CustomEvent("roles-filter-changed",{detail:{selectedRoleIds:o,totalRoles:this._allSections.length,visibleRoles:l,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)||[],s=(null==r?void 0:r.dimensionSelections)||[];if(JSON.stringify(n.sort((e,t)=>e.dimensionId.localeCompare(t.dimensionId)))!==JSON.stringify(s.sort((e,t)=>e.dimensionId.localeCompare(t.dimensionId))))return console.log(`🔍 Dimension selection changed for role: ${o}`),console.log(" Old:",n),console.log(" New:",s),!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)}this._errors=t,this._valid=0===t.filter(e=>"error"===e.severity).length}}_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._formData};n[i]||(n[i]={});const s=n[i][o];n[i]={...n[i],[o]:r},this._formData=n,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:s},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:s,unit:l}=e.detail;console.log(`📅 Period change received: conceptId=${t}, columnId=${i}, periodType=${o}, startDate=${r}, endDate=${n}, instantDate=${s}, unit=${l}`);const a={...this._periodData};a[t]||(a[t]={}),a[t]={...a[t],[i]:{startDate:r,endDate:n,instantDate:s}},this._periodData=a,console.log(`💾 Period data stored for [${t}][${i}]:`,this._periodData[t][i]),console.log("📦 Full period data state:",JSON.stringify(this._periodData,null,2)),l&&this._storeUnit(t,i,l),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))}_generateUniqueConceptKey(e,t){return`${e}::${t}`}_extractOriginalConceptId(e){const t=e.split("::");return t.length>1?t[1]:e}_handleTypedMemberChange(e){const{columnId:t,axisId:i,value:o}=e.detail;console.log(`🔍 [DynamicForm] Typed member change: columnId=${t}, axisId=${i}, value=${o}`);const r={...this._typedMemberData};r[t]||(r[t]={}),r[t]={...r[t],[i]:o},this._typedMemberData=r,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 s="";const l=e.composedPath();console.log(`🟧 [DynamicForm] Event path length: ${l.length}`);for(const a of l){const e=a;if("JUPITER-FORM-SECTION"===e.tagName){s=e.getAttribute("section-id")||"",console.log(`🟧 [DynamicForm] Found section element with id: ${s}`);break}}if(console.log(`🟧 [DynamicForm] Found sectionId: ${s}`),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: ${s}`);const e=(null==(t=this._formData[o])?void 0:t[r])||"",l=this._xbrlFormErrors.findIndex(e=>e.fieldId===i&&e.sectionId===s),a={sectionId:s,fieldId:i,conceptId:o,columnId:r,value:e,errors:n};console.log("🟧 [DynamicForm] New error object:",a),console.log(`🟧 [DynamicForm] Existing index: ${l}`),l>=0?(this._xbrlFormErrors=[...this._xbrlFormErrors.slice(0,l),a,...this._xbrlFormErrors.slice(l+1)],console.log(`🟧 [DynamicForm] Updated existing error at index ${l}`)):(this._xbrlFormErrors=[...this._xbrlFormErrors,a],console.log("🟧 [DynamicForm] Added new error"))}else{console.log(`🟧 [DynamicForm] Removing error (if exists) for fieldId: ${i}, sectionId: ${s}`);const e=this._xbrlFormErrors.length;this._xbrlFormErrors=this._xbrlFormErrors.filter(e=>!(e.fieldId===i&&e.sectionId===s)),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,s;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 l=null==(o=this.shadowRoot)?void 0:o.querySelectorAll("jupiter-form-section");let a=null;if(null==l||l.forEach(e=>{var t;(null==(t=e.section)?void 0:t.id)===i&&(a=e)}),!a)return void console.warn(`⚠️ Section not found: ${i}`);if(console.log("✅ Found section element:",a),(null==(r=a.section)?void 0:r.collapsed)?(console.log("📂 Expanding collapsed section"),a.section.collapsed=!1,a.requestUpdate(),await a.updateComplete,await new Promise(e=>setTimeout(e,500))):(await a.updateComplete,await new Promise(e=>setTimeout(e,100))),console.log(`🔍 Section shadow DOM exists: ${!!a.shadowRoot}`),a.shadowRoot){console.log(`🔍 Shadow DOM innerHTML length: ${(null==(n=a.shadowRoot.innerHTML)?void 0:n.length)||0}`);const e=a.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==(s=a.shadowRoot)?void 0:s.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 h=p;a.scrollIntoView({behavior:"smooth",block:"start"}),await new Promise(e=>setTimeout(e,300)),h.focus(),"INPUT"!==h.tagName&&"TEXTAREA"!==h.tagName||h.select(),h.style.boxShadow="0 0 0 3px rgba(220, 38, 38, 0.5)",setTimeout(()=>{h.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}))}_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=[];return r.items.forEach(e=>{e.dimensions&&e.dimensions.length>0&&e.dimensions.forEach(e=>{var t;if(!n.find(t=>t.id===e.id)){const i=(null==(t=e.labels.find(e=>"http://www.xbrl.org/2003/role/label"===e.role))?void 0:t.label)||e.conceptName,o={id:e.id,conceptName:e.conceptName,axisLabel:i};e.members&&e.members.length>0&&(o.members=e.members.map(e=>{var t,i;return{id:e.id,label:(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}})),e.typedMember&&(o.typedMember={id:e.typedMember.id,dataType:"string"}),n.push(o)}})}),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}`}_addColumnFromRequest(e,t,i){var o,r,n,s,l;const a=`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:a,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==(s=i.labels.find(e=>"http://www.xbrl.org/2003/role/label"===e.role))?void 0:s.label)||i.conceptName,o=i.members[0],r=(null==(l=o.labels.find(e=>"http://www.xbrl.org/2003/role/label"===e.role))?void 0:l.label)||o.conceptName;d=r,c="instant"===e.periodType?e.instantDate||"":this._formatPeriodDisplay(e.startDate,e.endDate),p={dimensionId:a,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 h={id:a,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[a]=t,h.dimensionData&&(h.dimensionData.hasTypedMembers=!0,h.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),h,...e.columns.slice(t+1)]:[...e.columns,h]}else e.columns=[...e.columns,h]}this._replicateFieldsForNewColumn(a,e,t),this._dirty=!0,this.requestUpdate(),this.dispatchEvent(new CustomEvent("column-add",{detail:{column:h},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;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:"instant"===i.periodType?i.instantDate:i.startDate,periodEndDate:"instant"===i.periodType?i.instantDate:i.endDate,periodInstantDate:"instant"===e.periodType?i.instantDate||i.startDate: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:"instant"===i.periodType?i.instantDate:i.startDate,periodEndDate:"instant"===i.periodType?i.instantDate:i.endDate,periodInstantDate:"instant"===e.periodType?i.instantDate||i.startDate: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,"admin"===this.mode)return this._handleSaveDraft(),void this._handleAdminModeSubmit();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,void this.requestUpdate();console.log("✅ [Submit] No validation errors, proceeding with submission..."),this._validateForm();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},bubbles:!0})),console.log("✅ Form submit event dispatched")}_handleSaveDraft(){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);const e=this._generateSubmissionData();console.log("📤 Generated submission data:",e),console.log("📊 Submission data breakdown:"),e.forEach((e,t)=>{console.log(` [${t}] conceptId: ${e.conceptId}, columnId: ${e.columnId}, value: ${e.value}, unit: ${e.unit||"none"}`)});const t=this._draftStorageService.createMetadataSnapshot(this.periodStartDate,this.periodEndDate,this.language,this._selectedRoleIds,this._allSections,this._typedMemberData,this._periodPreferences,this._periodData,this._unitData),i=this._draftStorageService.saveDraft(e,t);console.log("💾 [Save Draft] Metadata saved with enhanced selectedRoleIds:",t.selectedRoleIds),this.dynaformsFacts=e,this.dynaformsMetadata=t,this.dispatchEvent(new CustomEvent("form-save-draft",{detail:{data:this._formData,draftData:e,metadata:t,saved:i,valid:this._valid,errors:this._errors,dynaformsFacts:e,dynaformsMetadata:t},bubbles:!0,composed:!0}));const o=this._getRoleIdsArray().length;console.log("💾 Draft saved - localStorage + event emitted",{entries:e.length,saved:i,roles:o,customColumns:t.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.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.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],this.roleFilterAxes&&this.roleFilterAxes.length>0&&(this._allSections=this._filterRolesByAxisConfig(this._allSections)),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={},s={};i.forEach(e=>{let{conceptId:t,value:i,columnId:o,period:l,unit:a}=e;if(!o&&l&&(o=this._inferColumnIdFromPeriod(l,t),!o))return void console.warn(`⚠️ Could not infer columnId for concept ${t}, skipping...`);const d=this._findActualConceptId(t)||t;r[d]||(r[d]={}),r[d][o]=i,console.log(`📦 Restored: ${d}[${o}] = ${i}`),l&&(n[d]||(n[d]={}),"instant"===l.type?(n[d][o]={instantDate:l.date},console.log(`📅 [Restore Period] Extracted instant date for ${d}/${o}: ${l.date}`)):"duration"===l.type&&(n[d][o]={startDate:l.startDate,endDate:l.endDate},console.log(`📅 [Restore Period] Extracted duration dates for ${d}/${o}: ${l.startDate} - ${l.endDate}`))),a&&(s[d]||(s[d]={}),s[d][o]=a,console.log(`🏷️ [Restore Unit] Extracted unit for ${d}/${o}: ${a}`))}),this._formData={...this._formData,...r},console.log(`🔄 Restored ${Object.keys(r).length} concepts with data`),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||{},...s},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._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 l=(null==(t=this.shadowRoot)?void 0:t.querySelectorAll("input, textarea, select").length)||0;console.log(`🔍 Found ${l} fields in DOM after update`),l>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,s;const l=r[e],a=`${o}__${e}`;console.log(`🔍 Looking for field: ${a}`);const d=null==(n=this.shadowRoot)?void 0:n.querySelector(`#${CSS.escape(a)}`);d?(d instanceof HTMLInputElement||d instanceof HTMLTextAreaElement||d instanceof HTMLSelectElement)&&("checkbox"===d.type?d.checked=Boolean(l):d.value=null!=l?String(l):"",console.log(` ✅ Populated field ${a} with value:`,l),t++):(console.warn(` ❌ Field element NOT FOUND: ${a}`),console.warn(" Available fields in DOM:",Array.from((null==(s=this.shadowRoot)?void 0:s.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`)}_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 s=t.id.startsWith("col-"),l=t.id.startsWith("duration_")||t.id.startsWith("instant_"),a=!0===e.showPeriodControl;if(!(!n||"duration"===t.id||"default"===t.id||s&&a||l)&&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?t.periodEndDate||t.periodStartDate: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,s,l;const a=e.fields.find(e=>e.columnId===t);if(!a)return;const d="instant"===e.periodType,c=null==(n=this._periodData[e.id])?void 0:n[t],p=null==(s=this._unitData[e.id])?void 0:s[t],h=this._findColumnByIdInAllSections(t);console.log(`🔍 [Submission] Concept: ${e.id}, Column: ${t}, Field Period: ${c?JSON.stringify(c):"none"}, Unit: ${p||"none"}, Column Period: ${(null==h?void 0:h.periodStartDate)||"none"} - ${(null==h?void 0:h.periodEndDate)||"none"}`);const u=(null==c?void 0:c.startDate)||(null==h?void 0:h.periodStartDate)||a.periodStartDate||this.periodStartDate,m=(null==c?void 0:c.endDate)||(null==h?void 0:h.periodEndDate)||a.periodEndDate||this.periodEndDate,f=(null==c?void 0:c.instantDate)||a.periodInstantDate||m||u,b={conceptId:e.originalConceptId||e.id,columnId:t,value:i,period:{type:e.periodType||"duration",...d?{date:f}:{startDate:u,endDate:m}}};p&&(b.unit=p,console.log(`✅ [Submission] Adding unit to entry: ${p} for ${e.id}/${t}`)),(null==(l=null==h?void 0:h.dimensionData)?void 0:l.memberLabel)&&(b.dimension=h.dimensionData.memberLabel),console.log("📤 [Submission Entry] Created entry:",JSON.stringify(b,null,2)),o.push(b)}_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 s=null==t?void 0:t.id;if(!s)return null;const l=null==(r=this.xbrlInput.hypercubes[0].roles)?void 0:r.find(e=>e.roleId===s);if(!(null==l?void 0:l.items))return null;for(const a of l.items)if(a.dimensions){const t=a.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 s=null==t?void 0:t.id;if(!s)return!1;const l=this.xbrlInput.hypercubes[0].roles.find(e=>e.roleId===s);if(!(null==(n=null==l?void 0:l.items)?void 0:n.length))return!1;for(const a of l.items){const t=e.originalConceptId||e.id;if(a.conceptIds&&a.conceptIds.includes(t)){const e=a.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 ${s}`),!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 s=e.originalConceptId||e.id;for(const l of n.items)if(l.conceptIds&&l.conceptIds.includes(s)){const e=l.dimensions.filter(e=>e.typedMember).map(e=>e.id);return console.log(`🔍 [DynamicForm] Found applicable typed dimensions for concept ${s}:`,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=>{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 s,l,a,d;const c=this._formData[e.id],p=null==c?void 0:c[n.columnId];if(null!=p&&""!==p){const c=this._findColumnByIdInSection(n.columnId,i),h=null==(s=this._periodData[e.id])?void 0:s[n.columnId],u={conceptId:e.id,columnId:n.columnId,value:p,period:{type:e.periodType||"duration"}};if("instant"===e.periodType){const e=(null==h?void 0:h.instantDate)||(null==h?void 0:h.endDate)||(null==c?void 0:c.periodEndDate)||n.periodInstantDate||n.periodEndDate||n.periodStartDate||this.periodStartDate;u.period.date=e}else{const e=(null==h?void 0:h.startDate)||(null==c?void 0:c.periodStartDate)||n.periodStartDate||this.periodStartDate,t=(null==h?void 0:h.endDate)||(null==c?void 0:c.periodEndDate)||n.periodEndDate||this.periodEndDate;u.period.startDate=e,u.period.endDate=t}console.log(`🔍 [Submission] Concept: ${e.id}, Column: ${n.columnId}, Field Period: ${h?JSON.stringify(h):"none"}, Column Period: ${(null==c?void 0:c.periodStartDate)||"none"} - ${(null==c?void 0:c.periodEndDate)||"none"}, Used Period: ${"instant"===u.period.type?u.period.date:`${u.period.startDate} - ${u.period.endDate}`}`);const m=null==(l=this._unitData[e.id])?void 0:l[n.columnId];if(m?(u.unit=m,console.log(`✅ [Submission] Adding unit to entry: ${m} 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)),"dimension"===(null==c?void 0:c.type)&&(null==(a=c.dimensionData)?void 0:a.dimensionIdKey)?(u.dimension=c.dimensionData.dimensionIdKey,console.log(`🔍 [DynamicForm] Using dimension key from field's column (${n.columnId}):`,c.dimensionData.dimensionIdKey)):console.log(`🔍 [DynamicForm] No dimension data found for field column ${n.columnId}. Column type: ${null==c?void 0:c.type}, has dimensionData: ${!!(null==c?void 0:c.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?(u.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)),c&&console.log("🔍 [DynamicForm] Column details:",{id:c.id,type:c.type,hasTypedMembers:null==(d=c.dimensionData)?void 0:d.hasTypedMembers,dimensionData:c.dimensionData});r===o&&console.warn("[DUPLICATE DEBUG] Final submission entry:",u),t.push(u)}}),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()}_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),console.warn(`📊 Total fields found: ${i.length}`),console.warn("\n📋 FIELD DETAILS:"),i.forEach((e,t)=>{const i=e.isEmpty?"❌ EMPTY":"✅ FILLED";console.warn(` ${t+1}. ${e.conceptId} [${e.columnId}]: ${i} = ${JSON.stringify(e.value)}`)});const o=this._roleHasErrors(e),r=i.filter(e=>e.isEmpty).length,n=i.filter(e=>!e.isEmpty).length;let s;console.warn("\n📈 SUMMARY:"),console.warn(` Total Fields: ${i.length}`),console.warn(` Filled: ${n}`),console.warn(` Empty: ${r}`),console.warn(` Has Errors: ${o}`),o?(s="INVALID",console.warn("\n🔴 RESULT: INVALID (contains validation errors)")):r>0?(s="INCOMPLETE",console.warn(`\n🟠 RESULT: INCOMPLETE (${r} field(s) blank)`)):(s="COMPLETE",console.warn("\n🟢 RESULT: COMPLETE (all fields filled)")),console.warn("========================================\n"),"INVALID"===s||("INCOMPLETE"===s?(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;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;if(this.masterData&&void 0!==this.masterData[l]&&this.masterData){const e=this.masterData[l];console.warn(` ⏭️ SKIPPING masterData field: ${l} [${t.columnId}] = ${JSON.stringify(e)}`);continue}let a=null==(r=this._formData[e])?void 0:r[t.columnId];void 0===a&&e!==l&&(a=null==(n=this._formData[l])?void 0:n[t.columnId]);let d=null==a||"string"==typeof a&&""===a.trim();if(d&&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=k.findMatchingFact(s.facts,o);r&&null!==r.value&&void 0!==r.value&&""!==r.value&&(a=r.value,d=!1,console.warn(` ✨ FACT PRE-POPULATED: ${l} [${t.columnId}] = ${JSON.stringify(a)}`))}console.warn(` 🔍 Field lookup: concept.id="${e}", field.conceptId="${l}", value=${JSON.stringify(a)}, isEmpty=${d}`),o.push({conceptId:l,columnId:t.columnId,value:a,isEmpty:d})}}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}_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),s=e.id.toLowerCase().includes(t),l=(null==(i=e.description)?void 0:i.toLowerCase().includes(t))||!1,a=(null==(r=null==(o=e.metadata)?void 0:o.roleURI)?void 0:r.toLowerCase().includes(t))||!1;return n||s||l||a})}_renderAdminModeContent(t){var i,o;if(!t)return e.html`
|
|
2271
2271
|
<div class="admin-mode-container">
|
|
2272
2272
|
<p>No role selected</p>
|
|
2273
2273
|
</div>
|
|
@@ -2289,7 +2289,7 @@ const $={attribute:!0,type:String,converter:v,reflect:!1,hasChanged:x},I=(e=$,t,
|
|
|
2289
2289
|
|
|
2290
2290
|
${s?e.html`
|
|
2291
2291
|
<div class="admin-dimension-section">
|
|
2292
|
-
<div class="admin-dimension-header">📊 ${
|
|
2292
|
+
<div class="admin-dimension-header">📊 ${E.t("filter.dimensionMemberSelection")}</div>
|
|
2293
2293
|
${n.map(i=>{var o,r;const n=this._getAllDimensionMembers(i.members),s=(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,l=this._isSingleMemberDimension(i);return e.html`
|
|
2294
2294
|
<div class="admin-dimension-group">
|
|
2295
2295
|
<div class="admin-dimension-label">${s}${l?" (Mandatory)":""}</div>
|
|
@@ -2313,13 +2313,13 @@ const $={attribute:!0,type:String,converter:v,reflect:!1,hasChanged:x},I=(e=$,t,
|
|
|
2313
2313
|
class="admin-member-select-btn"
|
|
2314
2314
|
@click="${()=>this._selectAllAdminDimensionMembers(t.id,i.id)}"
|
|
2315
2315
|
>
|
|
2316
|
-
${
|
|
2316
|
+
${E.t("filter.selectAllMembers")}
|
|
2317
2317
|
</button>
|
|
2318
2318
|
<button
|
|
2319
2319
|
class="admin-member-select-btn"
|
|
2320
2320
|
@click="${()=>this._deselectAllAdminDimensionMembers(t.id,i.id)}"
|
|
2321
2321
|
>
|
|
2322
|
-
${
|
|
2322
|
+
${E.t("filter.clearMembers")}
|
|
2323
2323
|
</button>
|
|
2324
2324
|
</div>
|
|
2325
2325
|
`}
|
|
@@ -2334,7 +2334,7 @@ const $={attribute:!0,type:String,converter:v,reflect:!1,hasChanged:x},I=(e=$,t,
|
|
|
2334
2334
|
<!-- Validation Summary -->
|
|
2335
2335
|
${o?e.html`
|
|
2336
2336
|
<div class="validation-summary">
|
|
2337
|
-
<h4 class="validation-summary-title">${
|
|
2337
|
+
<h4 class="validation-summary-title">${E.t("validation.summary")}</h4>
|
|
2338
2338
|
<ul class="validation-summary-list">
|
|
2339
2339
|
${this._errors.filter(e=>"error"===e.severity).map(t=>e.html`
|
|
2340
2340
|
<li class="validation-summary-item">${t.message}</li>
|
|
@@ -2350,9 +2350,9 @@ const $={attribute:!0,type:String,converter:v,reflect:!1,hasChanged:x},I=(e=$,t,
|
|
|
2350
2350
|
</div>
|
|
2351
2351
|
`):0===t.sections.length?e.html`
|
|
2352
2352
|
<div class="no-roles-message">
|
|
2353
|
-
<h3>${
|
|
2354
|
-
<p>${
|
|
2355
|
-
<p>${
|
|
2353
|
+
<h3>${E.t("form.noRoleSelected")}</h3>
|
|
2354
|
+
<p>${E.t("filter.selectRoles")}</p>
|
|
2355
|
+
<p>${E.t("filter.roles")}: ${this._allSections.length}</p>
|
|
2356
2356
|
</div>
|
|
2357
2357
|
`:t.sections.map((t,o)=>{var r;return e.html`
|
|
2358
2358
|
<jupiter-form-section
|
|
@@ -2392,7 +2392,7 @@ const $={attribute:!0,type:String,converter:v,reflect:!1,hasChanged:x},I=(e=$,t,
|
|
|
2392
2392
|
<button
|
|
2393
2393
|
class="side-panel-toggle-btn ${this._sidePanelCollapsed?"collapsed":""}"
|
|
2394
2394
|
@click="${this._toggleSidePanelCollapse}"
|
|
2395
|
-
title="${this._sidePanelCollapsed?
|
|
2395
|
+
title="${this._sidePanelCollapsed?E.t("form.expandPanel"):E.t("form.collapsePanel")}"
|
|
2396
2396
|
>
|
|
2397
2397
|
<svg viewBox="0 0 24 24">
|
|
2398
2398
|
<path d="M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z"/>
|
|
@@ -2405,12 +2405,12 @@ const $={attribute:!0,type:String,converter:v,reflect:!1,hasChanged:x},I=(e=$,t,
|
|
|
2405
2405
|
<input
|
|
2406
2406
|
type="text"
|
|
2407
2407
|
class="side-panel-search-input"
|
|
2408
|
-
placeholder="${
|
|
2408
|
+
placeholder="${E.t("filter.searchPlaceholder")}"
|
|
2409
2409
|
.value="${this._sidePanelSearchQuery}"
|
|
2410
2410
|
@input="${this._handleSidePanelSearchInput}"
|
|
2411
2411
|
/>
|
|
2412
2412
|
${this._sidePanelSearchQuery?e.html`
|
|
2413
|
-
<button class="side-panel-clear-search" @click="${this._clearSidePanelSearch}" title="${
|
|
2413
|
+
<button class="side-panel-clear-search" @click="${this._clearSidePanelSearch}" title="${E.t("filter.clearSearch")}">
|
|
2414
2414
|
×
|
|
2415
2415
|
</button>
|
|
2416
2416
|
`:e.html`
|
|
@@ -2423,15 +2423,15 @@ const $={attribute:!0,type:String,converter:v,reflect:!1,hasChanged:x},I=(e=$,t,
|
|
|
2423
2423
|
<!-- Search Results Info -->
|
|
2424
2424
|
${this._sidePanelSearchQuery.trim()&&l.length!==s.length?e.html`
|
|
2425
2425
|
<div class="side-panel-search-results-info">
|
|
2426
|
-
${l.length} ${
|
|
2426
|
+
${l.length} ${E.t("filter.of")} ${s.length} ${E.t("filter.roles")}
|
|
2427
2427
|
</div>
|
|
2428
2428
|
`:""}
|
|
2429
2429
|
|
|
2430
2430
|
<!-- Roles List -->
|
|
2431
2431
|
${0===l.length?e.html`
|
|
2432
2432
|
<div class="side-panel-no-results">
|
|
2433
|
-
${
|
|
2434
|
-
${
|
|
2433
|
+
${E.t("filter.noRolesFound")} "${this._sidePanelSearchQuery}"<br>
|
|
2434
|
+
${E.t("filter.tryDifferentSearch")}
|
|
2435
2435
|
</div>
|
|
2436
2436
|
`:e.html`
|
|
2437
2437
|
${l.map(t=>{const i=this._roleHasErrors(t.id),o=this._roleBorderStatuses.get(t.id),r=i?"has-errors":"incomplete"===o?"has-empty-fields":"complete"===o?"has-complete-data":"";return e.html`
|
|
@@ -2497,8 +2497,8 @@ const $={attribute:!0,type:String,converter:v,reflect:!1,hasChanged:x},I=(e=$,t,
|
|
|
2497
2497
|
></jupiter-form-section>
|
|
2498
2498
|
`:e.html`
|
|
2499
2499
|
<div class="no-roles-message">
|
|
2500
|
-
<h3>${
|
|
2501
|
-
<p>${
|
|
2500
|
+
<h3>${E.t("form.noRoleSelected")}</h3>
|
|
2501
|
+
<p>${E.t("form.pleaseSelectRole")}</p>
|
|
2502
2502
|
</div>
|
|
2503
2503
|
`}
|
|
2504
2504
|
</div>
|
|
@@ -2531,7 +2531,7 @@ const $={attribute:!0,type:String,converter:v,reflect:!1,hasChanged:x},I=(e=$,t,
|
|
|
2531
2531
|
<svg class="filter-icon" viewBox="0 0 24 24">
|
|
2532
2532
|
<path d="M10 18h4v-2h-4v2zM3 6v2h18V6H3zm3 7h12v-2H6v2z"/>
|
|
2533
2533
|
</svg>
|
|
2534
|
-
${0===this._selectedRoleIds.length?
|
|
2534
|
+
${0===this._selectedRoleIds.length?E.t("filter.selectRoles"):E.t("filter.filterRoles")}
|
|
2535
2535
|
<span class="roles-count">${this._selectedRoleIds.length}/${this._allSections.length}</span>
|
|
2536
2536
|
</button>
|
|
2537
2537
|
`:""}
|
|
@@ -2542,7 +2542,7 @@ const $={attribute:!0,type:String,converter:v,reflect:!1,hasChanged:x},I=(e=$,t,
|
|
|
2542
2542
|
@click="${this._handleSaveDraft}"
|
|
2543
2543
|
?disabled="${this.disabled||this.readonly}"
|
|
2544
2544
|
>
|
|
2545
|
-
${
|
|
2545
|
+
${E.t("form.saveDraft")}
|
|
2546
2546
|
</button>
|
|
2547
2547
|
`:""}
|
|
2548
2548
|
|
|
@@ -2551,7 +2551,7 @@ const $={attribute:!0,type:String,converter:v,reflect:!1,hasChanged:x},I=(e=$,t,
|
|
|
2551
2551
|
@click="${this._handleSubmit}"
|
|
2552
2552
|
?disabled="${this.disabled||this.readonly}"
|
|
2553
2553
|
>
|
|
2554
|
-
${this.submitButtonLabel||
|
|
2554
|
+
${this.submitButtonLabel||E.t("form.submit")}
|
|
2555
2555
|
</button>
|
|
2556
2556
|
|
|
2557
2557
|
|
|
@@ -2577,25 +2577,25 @@ const $={attribute:!0,type:String,converter:v,reflect:!1,hasChanged:x},I=(e=$,t,
|
|
|
2577
2577
|
<div class="error-popup-overlay" @click="${()=>{this._showErrorPopup=!1,this.requestUpdate()}}">
|
|
2578
2578
|
<div class="error-popup" @click="${e=>e.stopPropagation()}">
|
|
2579
2579
|
<div class="error-popup-header">
|
|
2580
|
-
<h3>⚠️ ${
|
|
2580
|
+
<h3>⚠️ ${E.t("error.popup.title")}</h3>
|
|
2581
2581
|
<button class="error-popup-close" @click="${()=>{this._showErrorPopup=!1,this.requestUpdate()}}">×</button>
|
|
2582
2582
|
</div>
|
|
2583
2583
|
<div class="error-popup-content">
|
|
2584
|
-
<p>${
|
|
2584
|
+
<p>${E.t("error.popup.message")}</p>
|
|
2585
2585
|
<ul class="error-list">
|
|
2586
2586
|
${this._xbrlFormErrors.map(t=>e.html`
|
|
2587
2587
|
<li>
|
|
2588
|
-
<strong>${
|
|
2588
|
+
<strong>${E.t("error.popup.field")}</strong>
|
|
2589
2589
|
<a
|
|
2590
2590
|
href="javascript:void(0)"
|
|
2591
2591
|
class="error-field-link"
|
|
2592
2592
|
@click="${()=>this._handleErrorFieldClick(t.conceptId,t.columnId,t.sectionId)}"
|
|
2593
|
-
title="${
|
|
2593
|
+
title="${E.t("error.popup.clickToFocus")}"
|
|
2594
2594
|
>
|
|
2595
2595
|
${t.conceptId}__${t.columnId}
|
|
2596
2596
|
</a><br>
|
|
2597
|
-
<strong>${
|
|
2598
|
-
<strong>${
|
|
2597
|
+
<strong>${E.t("error.popup.value")}</strong> ${t.value}<br>
|
|
2598
|
+
<strong>${E.t("error.popup.errors")}</strong>
|
|
2599
2599
|
<ul>
|
|
2600
2600
|
${t.errors.map(t=>e.html`<li>${t.message}</li>`)}
|
|
2601
2601
|
</ul>
|
|
@@ -2604,7 +2604,7 @@ const $={attribute:!0,type:String,converter:v,reflect:!1,hasChanged:x},I=(e=$,t,
|
|
|
2604
2604
|
</ul>
|
|
2605
2605
|
</div>
|
|
2606
2606
|
<div class="error-popup-footer">
|
|
2607
|
-
<button class="btn-primary" @click="${()=>{this._showErrorPopup=!1,this.requestUpdate()}}">${
|
|
2607
|
+
<button class="btn-primary" @click="${()=>{this._showErrorPopup=!1,this.requestUpdate()}}">${E.t("error.popup.ok")}</button>
|
|
2608
2608
|
</div>
|
|
2609
2609
|
</div>
|
|
2610
2610
|
</div>
|
|
@@ -2629,7 +2629,7 @@ const $={attribute:!0,type:String,converter:v,reflect:!1,hasChanged:x},I=(e=$,t,
|
|
|
2629
2629
|
</div>
|
|
2630
2630
|
`:""}
|
|
2631
2631
|
</div>
|
|
2632
|
-
`:e.html`<div>${
|
|
2632
|
+
`:e.html`<div>${E.t("form.loading")}</div>`}},exports.JupiterDynamicForm.styles=e.css`
|
|
2633
2633
|
:host {
|
|
2634
2634
|
display: block;
|
|
2635
2635
|
font-family: var(--jupiter-font-family, system-ui, -apple-system, sans-serif);
|
|
@@ -3333,5 +3333,5 @@ const $={attribute:!0,type:String,converter:v,reflect:!1,hasChanged:x},I=(e=$,t,
|
|
|
3333
3333
|
.context-menu-item.danger:hover {
|
|
3334
3334
|
background: #ffebee;
|
|
3335
3335
|
}
|
|
3336
|
-
`,ne([S({type:Object})],exports.JupiterDynamicForm.prototype,"schema",2),ne([S({type:Object})],exports.JupiterDynamicForm.prototype,"xbrlInput",2),ne([S({type:Object})],exports.JupiterDynamicForm.prototype,"config",2),ne([S({type:Object})],exports.JupiterDynamicForm.prototype,"initialData",2),ne([S({type:Boolean})],exports.JupiterDynamicForm.prototype,"disabled",2),ne([S({type:Boolean})],exports.JupiterDynamicForm.prototype,"readonly",2),ne([S({type:String})],exports.JupiterDynamicForm.prototype,"periodStartDate",2),ne([S({type:String})],exports.JupiterDynamicForm.prototype,"periodEndDate",2),ne([S({type:String})],exports.JupiterDynamicForm.prototype,"language",2),ne([S({type:String})],exports.JupiterDynamicForm.prototype,"display",2),ne([S({type:String})],exports.JupiterDynamicForm.prototype,"mode",2),ne([S({type:String,attribute:"submit-button-label"})],exports.JupiterDynamicForm.prototype,"submitButtonLabel",2),ne([S({type:Array})],exports.JupiterDynamicForm.prototype,"
|
|
3336
|
+
`,ne([S({type:Object})],exports.JupiterDynamicForm.prototype,"schema",2),ne([S({type:Object})],exports.JupiterDynamicForm.prototype,"xbrlInput",2),ne([S({type:Object})],exports.JupiterDynamicForm.prototype,"config",2),ne([S({type:Object})],exports.JupiterDynamicForm.prototype,"initialData",2),ne([S({type:Boolean})],exports.JupiterDynamicForm.prototype,"disabled",2),ne([S({type:Boolean})],exports.JupiterDynamicForm.prototype,"readonly",2),ne([S({type:String})],exports.JupiterDynamicForm.prototype,"periodStartDate",2),ne([S({type:String})],exports.JupiterDynamicForm.prototype,"periodEndDate",2),ne([S({type:String})],exports.JupiterDynamicForm.prototype,"language",2),ne([S({type:String})],exports.JupiterDynamicForm.prototype,"display",2),ne([S({type:String})],exports.JupiterDynamicForm.prototype,"mode",2),ne([S({type:String,attribute:"submit-button-label"})],exports.JupiterDynamicForm.prototype,"submitButtonLabel",2),ne([S({type:Array})],exports.JupiterDynamicForm.prototype,"roleFilterAxes",2),ne([S({type:Array})],exports.JupiterDynamicForm.prototype,"defaultUnits",2),ne([S({type:Object,attribute:"master-data"})],exports.JupiterDynamicForm.prototype,"masterData",2),ne([S({type:Object,attribute:"dynaforms-metadata"})],exports.JupiterDynamicForm.prototype,"dynaformsMetadata",2),ne([S({type:Object,attribute:"dynaforms-facts"})],exports.JupiterDynamicForm.prototype,"dynaformsFacts",2),ne([w()],exports.JupiterDynamicForm.prototype,"_formData",2),ne([w()],exports.JupiterDynamicForm.prototype,"_draftLoaded",2),ne([w()],exports.JupiterDynamicForm.prototype,"_draftLoadedAt",2),ne([w()],exports.JupiterDynamicForm.prototype,"_preservedFormData",2),ne([w()],exports.JupiterDynamicForm.prototype,"_periodData",2),ne([w()],exports.JupiterDynamicForm.prototype,"_preservedPeriodData",2),ne([w()],exports.JupiterDynamicForm.prototype,"_unitData",2),ne([w()],exports.JupiterDynamicForm.prototype,"_preservedUnitData",2),ne([w()],exports.JupiterDynamicForm.prototype,"_typedMemberData",2),ne([w()],exports.JupiterDynamicForm.prototype,"_preservedTypedMemberData",2),ne([w()],exports.JupiterDynamicForm.prototype,"_columns",2),ne([w()],exports.JupiterDynamicForm.prototype,"_errors",2),ne([w()],exports.JupiterDynamicForm.prototype,"_touched",2),ne([w()],exports.JupiterDynamicForm.prototype,"_dirty",2),ne([w()],exports.JupiterDynamicForm.prototype,"_valid",2),ne([w()],exports.JupiterDynamicForm.prototype,"_submitted",2),ne([w()],exports.JupiterDynamicForm.prototype,"_xbrlFormErrors",2),ne([w()],exports.JupiterDynamicForm.prototype,"_showErrorPopup",2),ne([w()],exports.JupiterDynamicForm.prototype,"_currentSchema",2),ne([w()],exports.JupiterDynamicForm.prototype,"_allSections",2),ne([w()],exports.JupiterDynamicForm.prototype,"_selectedRoleIds",2),ne([w()],exports.JupiterDynamicForm.prototype,"_showFilterDialog",2),ne([w()],exports.JupiterDynamicForm.prototype,"_periodPreferences",2),ne([w()],exports.JupiterDynamicForm.prototype,"_activeSidePanelRoleId",2),ne([w()],exports.JupiterDynamicForm.prototype,"_sidePanelSearchQuery",2),ne([w()],exports.JupiterDynamicForm.prototype,"_sidePanelCollapsed",2),ne([w()],exports.JupiterDynamicForm.prototype,"_adminRoleConfigs",2),ne([w()],exports.JupiterDynamicForm.prototype,"_roleBorderStatuses",2),ne([w()],exports.JupiterDynamicForm.prototype,"_showRoleContextMenu",2),ne([w()],exports.JupiterDynamicForm.prototype,"_contextMenuX",2),ne([w()],exports.JupiterDynamicForm.prototype,"_contextMenuY",2),ne([w()],exports.JupiterDynamicForm.prototype,"_contextMenuRoleId",2),exports.JupiterDynamicForm=ne([t("jupiter-dynamic-form")],exports.JupiterDynamicForm);exports.FactMatcher=k,exports.FormValidator=C,exports.TYPE_INPUT_MAP=P,exports.XBRLValidator=A,exports.collectEnumerationsFromChain=z,exports.determineInputTypeFromBaseChain=N,exports.getInputTypeForConceptType=M,exports.isCheckboxType=L,exports.isNumericType=U,exports.isSelectType=function(e){return"select"===e},exports.isTextareaType=j,exports.resolveBaseTypeChain=O,exports.version="1.5.0";
|
|
3337
3337
|
//# sourceMappingURL=index.js.map
|