jupiter-dynamic-forms 1.4.0 → 1.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -19,7 +19,7 @@ const D={attribute:!0,type:String,converter:v,reflect:!1,hasChanged:x},w=(e=D,t,
19
19
  * @license
20
20
  * Copyright 2017 Google LLC
21
21
  * SPDX-License-Identifier: BSD-3-Clause
22
- */function S(e){return C({...e,state:!0,attribute:!1})}class E{static validateField(e,t,i,o,r,n=[]){const s=[];for(const a of n){const n=this.validateRule(e,t,i,o,r,a);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 createUniqueConceptId(e){if(e.preferredLabel&&""!==e.preferredLabel.trim()){const t=e.preferredLabel.match(/\/([^\/]+)$/),i=t?t[1]:e.preferredLabel.replace(/[^a-zA-Z0-9]/g,"_");return`${e.id}_${i}`}return e.id}static buildFormSchema(e,t,i){var o;if(!e.presentation||0===e.presentation.length)throw new Error("XBRL presentation data is required");const r=e.presentation[0],n=null==(o=e.hypercubes)?void 0:o[0],s=[];return r.roles.forEach(e=>{const o=this.buildSectionFromRole(e,t,i,n);this.assignFieldColumnIds(o),s.push(o)}),{formId:`xbrl-form-${Date.now()}`,title:`XBRL Form - ${this.extractEntityName(r.entrypoint)}`,description:"Dynamic form generated from XBRL taxonomy data",version:"1.0.0",sections:s}}static buildSectionFromRole(e,t,i,o){var r;const n=this.extractRoleTitle(e.role),s=this.getAllNonAbstractConcepts(e),a=new Set(s.filter(e=>e.periodType).map(e=>e.periodType)),l={periodTypes:a},d=[];(null==(r=e.presentationLinkbase)?void 0:r.concepts)&&e.presentationLinkbase.concepts.forEach(e=>{const o=this.buildConceptTree(e,0,t,i,l);o&&d.push(o)});const c=null==o?void 0:o.roles.find(t=>t.roleId===e.id);c?console.log(`🏷️ Found matching hypercube role "${e.id}"`):console.log(`❌ No hypercube role found for "${e.id}"`);const p=this.generateDefaultColumnsForRole(e,t||"2025-01-01",i||"2025-12-31",c,s,a);return{id:e.id,title:n,description:`Section for ${n}`,concepts:d,columns:p,expanded:!1}}static buildConceptTree(e,t,i,o,r){const n=this.getPreferredLabel(e.labels),s=[];if(!e.elementAbstract){let t=!0;if((null==r?void 0:r.periodTypes)&&r.periodTypes.size>1&&"instant"===e.periodType&&(t=!1),t){let t;t=(null==r?void 0:r.periodTypes)&&0!==r.periodTypes.size?1===r.periodTypes.size&&r.periodTypes.has("instant")?"instant":1===r.periodTypes.size&&r.periodTypes.has("duration")?"duration":"period":"default";const n=this.createFieldFromConcept(e,i,o,t);n&&s.push(n)}}const a=[];return e.children&&e.children.length>0&&e.children.forEach(e=>{const n=this.buildConceptTree(e,t+1,i,o,r);n&&a.push(n)}),{id:this.createUniqueConceptId(e),originalConceptId:e.id,name:e.conceptName,label:n,description:`${e.conceptName} (${e.type})`,level:t,children:a,fields:s,collapsed:t>0,abstract:e.elementAbstract,periodType:e.periodType}}static createFieldFromConcept(e,t,i,o){const r=this.mapXBRLTypeToFieldType(e.type),n=this.getPreferredLabel(e.labels);let s;s=o||("instant"===e.periodType?"instant":"duration"===e.periodType?"duration":"default");const a={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};return"duration"!==e.periodType&&"instant"!==e.periodType||(a.periodStartDate=t||"2025-01-01",a.periodEndDate=i||"2025-12-31"),a}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){if(!e||0===e.length)return"Unnamed Concept";const t=e.find(e=>e.preferredLabel);if(t)return t.label;const i=e.find(e=>"http://www.xbrl.org/2003/role/label"===e.role);if(i)return i.label;const o=e.find(e=>"http://www.xbrl.org/2003/role/terseLabel"===e.role);return o?o.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 generateDefaultColumnsForRole(e,t,i,o,r,n){var s,a,l,d,c;const p=r||this.getAllNonAbstractConcepts(e),h=n||new Set(p.filter(e=>e.periodType).map(e=>e.periodType));if(console.log(`📊 Analyzing role "${e.role}" with ${p.length} non-abstract concepts`),0===p.length)return console.log("📊 No non-abstract concepts found, using default column"),[{id:"default",title:"Value",description:"Default value column",type:"base",order:0,removable:!1}];let u=null;if(1===(null==(s=null==o?void 0:o.items)?void 0:s.length)){const t=o.items[0];if(console.log(`🔍 Processing hypercube item for role "${e.role}":`,{itemId:t.id,conceptIds:(null==(a=t.conceptIds)?void 0:a.length)||0,dimensions:t.dimensions.length}),1===t.dimensions.length){const e=t.dimensions[0];if(console.log("📊 Found single dimension:",{id:e.id,conceptName:e.conceptName,membersCount:e.members.length}),e.members.length>0){const t=(null==(l=e.labels.find(e=>"http://www.xbrl.org/2003/role/label"===e.role))?void 0:l.label)||e.conceptName,i=e.members[0],o=(null==(d=i.labels.find(e=>"http://www.xbrl.org/2003/role/label"===e.role))?void 0:d.label)||i.conceptName;u={axisId:e.id,axisLabel:t,memberId:i.id,memberLabel:o,dimensionKey:`${t} | ${o}`,dimensionIdKey:`${e.id} | ${i.id}`},console.log("📊 Generated dimension info:",u)}}else console.log(`⚠️ Multiple dimensions found (${t.dimensions.length}), skipping for now`)}else(null==(c=null==o?void 0:o.items)?void 0:c.length)&&o.items.length>1&&console.log(`⚠️ Multiple items found (${o.items.length}), skipping for now`);console.log(`📅 Found period types: ${Array.from(h).join(", ")}`);const m=[];if(0===h.size){console.log("📅 No period types found, using default column");const e=u?`${u.memberLabel}`:"Value";m.push({id:"default",title:e,description:"Default value column",type:u?"dimension":"base",dimensionData:u?{dimensionId:"default",axisId:u.axisId,memberId:u.memberId,memberValue:u.memberLabel,memberLabel:u.memberLabel,axis:u.axisLabel,axisLabel:u.axisLabel,memberKey:u.dimensionKey,dimensionIdKey:u.dimensionIdKey}:void 0,order:0,removable:!1})}else if(1===h.size&&h.has("instant")){console.log("📅 All concepts are instant type, creating single column");const e=u?`${u.memberLabel} (${this.formatDateForDisplay(t)})`:`As of ${this.formatDateForDisplay(t)}`;m.push({id:"instant",title:e,description:`Values as of ${t}`,type:u?"dimension":"base",dimensionData:u?{dimensionId:"instant",axisId:u.axisId,memberId:u.memberId,memberValue:u.memberLabel,memberLabel:u.memberLabel,axis:u.axisLabel,axisLabel:u.axisLabel,memberKey:u.dimensionKey,dimensionIdKey:u.dimensionIdKey}:void 0,order:0,removable:!1})}else if(1===h.size&&h.has("duration")){console.log("📅 All concepts are duration type, creating single column with period range");const e=u?`${u.memberLabel} (${this.formatDateForDisplay(t)} / ${this.formatDateForDisplay(i)})`:`${this.formatDateForDisplay(t)} / ${this.formatDateForDisplay(i)}`;m.push({id:"duration",title:e,description:`Period: ${t} to ${i}`,type:u?"dimension":"base",dimensionData:u?{dimensionId:"duration",axisId:u.axisId,memberId:u.memberId,memberValue:u.memberLabel,memberLabel:u.memberLabel,axis:u.axisLabel,axisLabel:u.axisLabel,memberKey:u.dimensionKey,dimensionIdKey:u.dimensionIdKey}:void 0,order:0,removable:!1}),console.log("📅 Created duration column:",m.map(e=>({id:e.id,title:e.title})))}else{console.log("📅 Mixed period types found, creating single column with period range");const e=u?`${u.memberLabel} (${this.formatDateForDisplay(t)} / ${this.formatDateForDisplay(i)})`:`${this.formatDateForDisplay(t)} / ${this.formatDateForDisplay(i)}`;m.push({id:"period",title:e,description:`Period: ${t} to ${i}`,type:u?"dimension":"base",dimensionData:u?{dimensionId:"period",axisId:u.axisId,memberId:u.memberId,memberValue:u.memberLabel,memberLabel:u.memberLabel,axis:u.axisLabel,axisLabel:u.axisLabel,memberKey:u.dimensionKey,dimensionIdKey:u.dimensionIdKey}:void 0,order:0,removable:!1})}return u&&console.log(`📊 Applied dimension to ${m.length} columns: ${u.dimensionKey}`),console.log(`📊 Generated ${m.length} columns for role "${e.role}":`,m.map(e=>e.title)),m}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"}]}}var I=Object.defineProperty,T=Object.getOwnPropertyDescriptor,k=(e,t,i,o)=>{for(var r,n=o>1?void 0:o?T(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&&I(t,i,n),n};exports.JupiterFormField=class extends e.LitElement{constructor(){super(...arguments),this.value=null,this.disabled=!1,this.locale="en-US",this.hideLabel=!1,this._errors=[],this._touched=!1}willUpdate(e){(e.has("value")||e.has("field"))&&this._validateField()}_validateField(){var e;(null==(e=this.field)?void 0:e.validation)&&(this._errors=E.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.dispatchEvent(new CustomEvent("field-blur",{detail:{fieldId:this.field.id,conceptId:this.conceptId,columnId:this.columnId},bubbles:!0}))}_renderInput(){var t;const i=this._errors.some(e=>"error"===e.severity),o=this._errors.some(e=>"warning"===e.severity),r="field-input "+(i?"error":o?"warning":""),n=`${this.conceptId}__${this.columnId}`,s=`data[${this.conceptId}][${this.columnId}]`;switch(this.field.type){case"textarea":return e.html`
22
+ */function I(e){return C({...e,state:!0,attribute:!1})}class S{static validateField(e,t,i,o,r,n=[]){const s=[];for(const a of n){const n=this.validateRule(e,t,i,o,r,a);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 createUniqueConceptId(e){if(e.preferredLabel&&""!==e.preferredLabel.trim()){const t=e.preferredLabel.match(/\/([^\/]+)$/),i=t?t[1]:e.preferredLabel.replace(/[^a-zA-Z0-9]/g,"_");return`${e.id}_${i}`}return e.id}static buildFormSchema(e,t,i){var o;if(!e.presentation||0===e.presentation.length)throw new Error("XBRL presentation data is required");const r=e.presentation[0],n=null==(o=e.hypercubes)?void 0:o[0],s=[];return r.roles.forEach(e=>{const o=this.buildSectionFromRole(e,t,i,n);this.assignFieldColumnIds(o),s.push(o)}),{formId:`xbrl-form-${Date.now()}`,title:`XBRL Form - ${this.extractEntityName(r.entrypoint)}`,description:"Dynamic form generated from XBRL taxonomy data",version:"1.0.0",sections:s}}static buildSectionFromRole(e,t,i,o){var r;const n=this.extractRoleTitle(e.role),s=this.getAllNonAbstractConcepts(e),a=new Set(s.filter(e=>e.periodType).map(e=>e.periodType)),l=null==o?void 0:o.roles.find(t=>t.roleId===e.id);l?console.log(`🏷️ Found matching hypercube role "${e.id}"`):console.log(`❌ No hypercube role found for "${e.id}"`);const d=this.generateDefaultColumnsForRole(e,t||"2025-01-01",i||"2025-12-31",l,s,a),c=d.map(e=>e.id);console.log(`📋 Available column IDs for role "${e.id}":`,c);const p={periodTypes:a,availableColumnIds:c},h=[];return(null==(r=e.presentationLinkbase)?void 0:r.concepts)&&e.presentationLinkbase.concepts.forEach(e=>{const o=this.buildConceptTree(e,0,t,i,p);o&&h.push(o)}),{id:e.id,title:n,description:`Section for ${n}`,concepts:h,columns:d,expanded:!1}}static buildConceptTree(e,t,i,o,r){const n=this.getPreferredLabel(e.labels),s=[];if(!e.elementAbstract){let t=[];(null==r?void 0:r.availableColumnIds)&&r.availableColumnIds.length>0?(t=r.availableColumnIds.filter(t=>"instant"===e.periodType?t.includes("instant")||"instant"===t:"duration"!==e.periodType||(t.includes("duration")||"duration"===t)),0===t.length&&(t=r.availableColumnIds)):t=(null==r?void 0:r.periodTypes)&&0!==r.periodTypes.size?1===r.periodTypes.size&&r.periodTypes.has("instant")?["instant"]:1===r.periodTypes.size&&r.periodTypes.has("duration")?["duration"]:"instant"===e.periodType?["instant"]:"duration"===e.periodType?["duration"]:["duration","instant"]:["default"],t.forEach(t=>{const r=this.createFieldFromConcept(e,i,o,t);r&&s.push(r)})}const a=[];e.children&&e.children.length>0&&e.children.forEach(e=>{const n=this.buildConceptTree(e,t+1,i,o,r);n&&a.push(n)});return s.length>0||a.length>0?{id:this.createUniqueConceptId(e),originalConceptId:e.id,name:e.conceptName,label:n,description:`${e.conceptName} (${e.type})`,level:t,children:a,fields:s,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||("instant"===e.periodType?"instant":"duration"===e.periodType?"duration":"default");const a={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};return"duration"!==e.periodType&&"instant"!==e.periodType||(a.periodStartDate=t||"2025-01-01",a.periodEndDate=i||"2025-12-31"),a}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){if(!e||0===e.length)return"Unnamed Concept";const t=e.find(e=>e.preferredLabel);if(t)return t.label;const i=e.find(e=>"http://www.xbrl.org/2003/role/label"===e.role);if(i)return i.label;const o=e.find(e=>"http://www.xbrl.org/2003/role/terseLabel"===e.role);return o?o.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 generateDefaultColumnsForRole(e,t,i,o,r,n){var s,a,l;const d=r||this.getAllNonAbstractConcepts(e),c=n||new Set(d.filter(e=>e.periodType).map(e=>e.periodType));if(console.log(`📊 Analyzing role "${e.role}" with ${d.length} non-abstract concepts`),0===d.length)return console.log("📊 No non-abstract concepts found, using default column"),[{id:"default",title:"Value",description:"Default value column",type:"base",order:0,removable:!1}];let p=[];if(1===(null==(s=null==o?void 0:o.items)?void 0:s.length)){const r=o.items[0];console.log(`🔍 Processing hypercube item for role "${e.role}":`,{itemId:r.id,conceptIds:(null==(a=r.conceptIds)?void 0:a.length)||0,dimensions:r.dimensions.length}),1===r.dimensions.length?p=this.generateSingleDimensionColumns(r.dimensions[0],t,i,c):r.dimensions.length>1&&(p=this.generateMultiDimensionColumns(r.dimensions,t,i,c))}else(null==(l=null==o?void 0:o.items)?void 0:l.length)&&o.items.length>1&&console.log(`⚠️ Multiple items found (${o.items.length}), skipping for now`);console.log(`📅 Found period types: ${Array.from(c).join(", ")}`);const h=[];return p.length>0?h.push(...p):0===c.size?(console.log("📅 No period types found, using default column"),h.push({id:"default",title:"Value",description:"Default value column",type:"base",order:0,removable:!1})):1===c.size&&c.has("instant")?(console.log("📅 All concepts are instant type, creating single column"),h.push({id:"instant",title:`As of ${this.formatDateForDisplay(t)}`,description:`Values as of ${t}`,type:"base",order:0,removable:!1})):1===c.size&&c.has("duration")?(console.log("📅 All concepts are duration type, creating single column with period range"),h.push({id:"duration",title:`${this.formatDateForDisplay(t)} / ${this.formatDateForDisplay(i)}`,description:`Period: ${t} to ${i}`,type:"base",order:0,removable:!1})):(console.log("📅 Mixed period types found, creating both duration and instant columns"),h.push({id:"duration",title:`${this.formatDateForDisplay(t)} / ${this.formatDateForDisplay(i)}`,description:`Period: ${t} to ${i}`,type:"base",order:0,removable:!1}),h.push({id:"instant",title:`As of ${this.formatDateForDisplay(t)}`,description:`Values as of ${t}`,type:"base",order:1,removable:!1})),console.log(`📊 Generated ${h.length} columns for role "${e.role}":`,h.map(e=>e.title)),h}static generateSingleDimensionColumns(e,t,i,o){var r,n;if(console.log("📊 Found single dimension:",{id:e.id,conceptName:e.conceptName,membersCount:e.members.length}),0===e.members.length)return[];const s=(null==(r=e.labels.find(e=>"http://www.xbrl.org/2003/role/label"===e.role))?void 0:r.label)||e.conceptName,a=e.members[0],l=(null==(n=a.labels.find(e=>"http://www.xbrl.org/2003/role/label"===e.role))?void 0:n.label)||a.conceptName,d={axisId:e.id,axisLabel:s,memberId:a.id,memberLabel:l,dimensionKey:`${s} | ${l}`,dimensionIdKey:`${e.id} | ${a.id}`};console.log("📊 Generated dimension info:",d);const c=[];return 0===o.size?c.push({id:"default",title:d.memberLabel,description:"Default value column",type:"dimension",dimensionData:{dimensionId:"default",axisId:d.axisId,memberId:d.memberId,memberValue:d.memberLabel,memberLabel:d.memberLabel,axis:d.axisLabel,axisLabel:d.axisLabel,memberKey:d.dimensionKey,dimensionIdKey:d.dimensionIdKey},order:0,removable:!1}):1===o.size&&o.has("instant")?c.push({id:"instant",title:`${d.memberLabel} (${this.formatDateForDisplay(t)})`,description:`Values as of ${t}`,type:"dimension",dimensionData:{dimensionId:"instant",axisId:d.axisId,memberId:d.memberId,memberValue:d.memberLabel,memberLabel:d.memberLabel,axis:d.axisLabel,axisLabel:d.axisLabel,memberKey:d.dimensionKey,dimensionIdKey:d.dimensionIdKey},order:0,removable:!1}):1===o.size&&o.has("duration")?c.push({id:"duration",title:`${d.memberLabel} (${this.formatDateForDisplay(t)} / ${this.formatDateForDisplay(i)})`,description:`Period: ${t} to ${i}`,type:"dimension",dimensionData:{dimensionId:"duration",axisId:d.axisId,memberId:d.memberId,memberValue:d.memberLabel,memberLabel:d.memberLabel,axis:d.axisLabel,axisLabel:d.axisLabel,memberKey:d.dimensionKey,dimensionIdKey:d.dimensionIdKey},order:0,removable:!1}):(c.push({id:"duration",title:`${d.memberLabel} (${this.formatDateForDisplay(t)} / ${this.formatDateForDisplay(i)})`,description:`Period: ${t} to ${i}`,type:"dimension",dimensionData:{dimensionId:"duration",axisId:d.axisId,memberId:d.memberId,memberValue:d.memberLabel,memberLabel:d.memberLabel,axis:d.axisLabel,axisLabel:d.axisLabel,memberKey:d.dimensionKey,dimensionIdKey:d.dimensionIdKey},order:0,removable:!1}),c.push({id:"instant",title:`${d.memberLabel} (${this.formatDateForDisplay(t)})`,description:`Values as of ${t}`,type:"dimension",dimensionData:{dimensionId:"instant",axisId:d.axisId,memberId:d.memberId,memberValue:d.memberLabel,memberLabel:d.memberLabel,axis:d.axisLabel,axisLabel:d.axisLabel,memberKey:d.dimensionKey,dimensionIdKey:d.dimensionIdKey},order:1,removable:!1})),c}static generateMultiDimensionColumns(e,t,i,o){console.log(`📊 Processing ${e.length} dimensions for multi-dimensional columns`);const r=e.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,o=this.getAllDimensionMembers(e.members);return{id:e.id,axisLabel:i,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}})}}),n=this.generateDimensionCombinations(r);console.log(`📊 Generated ${n.length} dimension combinations`);const s=[];return n.forEach((e,r)=>{const n=e.map(e=>e.memberLabel).join(" | "),a={dimensionId:`multi_${r}`,memberValue:n,memberLabel:n,combinations:e.map(e=>({axisId:e.axisId,axisLabel:e.axisLabel,memberId:e.memberId,memberLabel:e.memberLabel})),memberKey:n,dimensionIdKey:e.map(e=>`${e.axisId}|${e.memberId}`).join("::")};0===o.size||1===o.size&&o.has("duration")?s.push({id:`duration_${r}`,title:`${n} (${this.formatDateForDisplay(t)} / ${this.formatDateForDisplay(i)})`,description:`Period: ${t} to ${i}`,type:"dimension",dimensionData:{...a,dimensionId:`duration_${r}`},order:2*r,removable:!1}):1===o.size&&o.has("instant")?s.push({id:`instant_${r}`,title:`${n} (${this.formatDateForDisplay(t)})`,description:`Values as of ${t}`,type:"dimension",dimensionData:{...a,dimensionId:`instant_${r}`},order:2*r,removable:!1}):(s.push({id:`duration_${r}`,title:`${n} (${this.formatDateForDisplay(t)} / ${this.formatDateForDisplay(i)})`,description:`Period: ${t} to ${i}`,type:"dimension",dimensionData:{...a,dimensionId:`duration_${r}`},order:2*r,removable:!1}),s.push({id:`instant_${r}`,title:`${n} (${this.formatDateForDisplay(t)})`,description:`Values as of ${t}`,type:"dimension",dimensionData:{...a,dimensionId:`instant_${r}`},order:2*r+1,removable:!1}))}),console.log(`📊 Generated ${s.length} multi-dimensional columns`),s}static getAllDimensionMembers(e){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}]);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}]):o.forEach(i=>{r.push([{axisId:t.id,axisLabel:t.axisLabel,memberId:e.id,memberLabel:e.label},...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"}]}}var E=Object.defineProperty,T=Object.getOwnPropertyDescriptor,k=(e,t,i,o)=>{for(var r,n=o>1?void 0:o?T(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&&E(t,i,n),n};exports.JupiterFormField=class extends e.LitElement{constructor(){super(...arguments),this.value=null,this.disabled=!1,this.locale="en-US",this.hideLabel=!1,this._errors=[],this._touched=!1}willUpdate(e){(e.has("value")||e.has("field"))&&this._validateField()}_validateField(){var e;(null==(e=this.field)?void 0:e.validation)&&(this._errors=S.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.dispatchEvent(new CustomEvent("field-blur",{detail:{fieldId:this.field.id,conceptId:this.conceptId,columnId:this.columnId},bubbles:!0}))}_renderInput(){var t;const i=this._errors.some(e=>"error"===e.severity),o=this._errors.some(e=>"warning"===e.severity),r="field-input "+(i?"error":o?"warning":""),n=`${this.conceptId}__${this.columnId}`,s=`data[${this.conceptId}][${this.columnId}]`;switch(this.field.type){case"textarea":return e.html`
23
23
  <textarea
24
24
  id="${n}"
25
25
  name="${s}"
@@ -206,7 +206,7 @@ const D={attribute:!0,type:String,converter:v,reflect:!1,hasChanged:x},w=(e=D,t,
206
206
  margin: 0;
207
207
  width: auto;
208
208
  }
209
- `,k([C({type:Object})],exports.JupiterFormField.prototype,"field",2),k([C({type:String})],exports.JupiterFormField.prototype,"conceptId",2),k([C({type:String})],exports.JupiterFormField.prototype,"columnId",2),k([C()],exports.JupiterFormField.prototype,"value",2),k([C({type:Boolean})],exports.JupiterFormField.prototype,"disabled",2),k([C({type:String})],exports.JupiterFormField.prototype,"locale",2),k([C({type:Boolean})],exports.JupiterFormField.prototype,"hideLabel",2),k([S()],exports.JupiterFormField.prototype,"_errors",2),k([S()],exports.JupiterFormField.prototype,"_touched",2),exports.JupiterFormField=k([t("jupiter-form-field")],exports.JupiterFormField);var j=Object.defineProperty,A=Object.getOwnPropertyDescriptor,P=(e,t,i,o)=>{for(var r,n=o>1?void 0:o?A(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.JupiterConceptTree=class extends e.LitElement{constructor(){super(...arguments),this.columns=[],this.formData={},this.disabled=!1,this.locale="en-US",this.expandedConcepts=new Set,this._expanded=!0}connectedCallback(){super.connectedCallback(),this._expanded=this.expandedConcepts.has(this.concept.id)}willUpdate(e){super.willUpdate(e),e.has("expandedConcepts")&&(this._expanded=this.expandedConcepts.has(this.concept.id))}_toggleExpanded(){this._expanded=!this._expanded,this.dispatchEvent(new CustomEvent("concept-expand",{detail:{conceptId:this.concept.id,expanded:this._expanded},bubbles:!0}))}_getFieldForColumn(e){var t;return null==(t=this.concept.fields)?void 0:t.find(t=>t.columnId===e)}_getFieldValue(e){var t;return null==(t=this.formData[this.concept.id])?void 0:t[e.columnId]}_handleFieldChange(e){e.stopPropagation(),this.dispatchEvent(new CustomEvent("field-change",{detail:e.detail,bubbles:!0}))}render(){const t=this.concept.children&&this.concept.children.length>0,i=this.concept.level||0,o=this.concept.abstract||!1;return e.html`
209
+ `,k([C({type:Object})],exports.JupiterFormField.prototype,"field",2),k([C({type:String})],exports.JupiterFormField.prototype,"conceptId",2),k([C({type:String})],exports.JupiterFormField.prototype,"columnId",2),k([C()],exports.JupiterFormField.prototype,"value",2),k([C({type:Boolean})],exports.JupiterFormField.prototype,"disabled",2),k([C({type:String})],exports.JupiterFormField.prototype,"locale",2),k([C({type:Boolean})],exports.JupiterFormField.prototype,"hideLabel",2),k([I()],exports.JupiterFormField.prototype,"_errors",2),k([I()],exports.JupiterFormField.prototype,"_touched",2),exports.JupiterFormField=k([t("jupiter-form-field")],exports.JupiterFormField);var j=Object.defineProperty,L=Object.getOwnPropertyDescriptor,A=(e,t,i,o)=>{for(var r,n=o>1?void 0:o?L(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.JupiterConceptTree=class extends e.LitElement{constructor(){super(...arguments),this.columns=[],this.formData={},this.disabled=!1,this.locale="en-US",this.expandedConcepts=new Set,this._expanded=!0}connectedCallback(){super.connectedCallback(),this._expanded=this.expandedConcepts.has(this.concept.id)}willUpdate(e){super.willUpdate(e),e.has("expandedConcepts")&&(this._expanded=this.expandedConcepts.has(this.concept.id))}_toggleExpanded(){this._expanded=!this._expanded,this.dispatchEvent(new CustomEvent("concept-expand",{detail:{conceptId:this.concept.id,expanded:this._expanded},bubbles:!0}))}_getFieldForColumn(e){var t;return null==(t=this.concept.fields)?void 0:t.find(t=>t.columnId===e)}_getFieldValue(e){var t;return null==(t=this.formData[this.concept.id])?void 0:t[e.columnId]}_handleFieldChange(e){e.stopPropagation(),this.dispatchEvent(new CustomEvent("field-change",{detail:e.detail,bubbles:!0}))}render(){const t=this.concept.children&&this.concept.children.length>0,i=this.concept.level||0,o=this.concept.abstract||!1;return e.html`
210
210
  <!-- Concept Name Cell (Left Column) -->
211
211
  <td class="concept-name-cell ${o?"abstract":t?"":"leaf"}">
212
212
  <div class="concept-content" style="--level: ${i}">
@@ -340,7 +340,7 @@ const D={attribute:!0,type:String,converter:v,reflect:!1,hasChanged:x},w=(e=D,t,
340
340
  .children-wrapper {
341
341
  display: none;
342
342
  }
343
- `,P([C({type:Object})],exports.JupiterConceptTree.prototype,"concept",2),P([C({type:Array})],exports.JupiterConceptTree.prototype,"columns",2),P([C({type:Object})],exports.JupiterConceptTree.prototype,"formData",2),P([C({type:Boolean})],exports.JupiterConceptTree.prototype,"disabled",2),P([C({type:String})],exports.JupiterConceptTree.prototype,"locale",2),P([C({type:Set})],exports.JupiterConceptTree.prototype,"expandedConcepts",2),P([S()],exports.JupiterConceptTree.prototype,"_expanded",2),exports.JupiterConceptTree=P([t("jupiter-concept-tree")],exports.JupiterConceptTree);var L=Object.defineProperty,J=Object.getOwnPropertyDescriptor,O=(e,t,i,o)=>{for(var r,n=o>1?void 0:o?J(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&&L(t,i,n),n};exports.JupiterAddColumnDialog=class extends e.LitElement{constructor(){super(...arguments),this.periodType="duration",this.open=!1,this._startDate="",this._endDate="",this._instantDate="",this._selectedType="duration"}updated(e){e.has("open")&&this.open&&this._resetForm()}connectedCallback(){super.connectedCallback(),this._resetForm()}willUpdate(e){super.willUpdate(e),e.has("open")&&this.open&&this._resetForm()}_resetForm(){const e=(new Date).toISOString().split("T")[0];this._startDate=e,this._endDate=e,this._instantDate=e,this._selectedType="duration"}_handleCancel(){this.open=!1,this.dispatchEvent(new CustomEvent("dialog-cancel",{bubbles:!0}))}_handleConfirm(){if(!this._isFormValid())return;const e={periodType:"mixed"===this.periodType?this._selectedType:this.periodType};"instant"===this.periodType||"mixed"===this.periodType&&"instant"===this._selectedType?e.instantDate=this._instantDate:(e.startDate=this._startDate,e.endDate=this._endDate),this.dispatchEvent(new CustomEvent("column-add",{detail:e,bubbles:!0}))}_isFormValid(){return"mixed"===this.periodType?"instant"===this._selectedType?!!this._instantDate:!!this._startDate&&!!this._endDate&&this._startDate<=this._endDate:"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}render(){if(!this.open)return e.html``;const t=this._isFormValid();return e.html`
343
+ `,A([C({type:Object})],exports.JupiterConceptTree.prototype,"concept",2),A([C({type:Array})],exports.JupiterConceptTree.prototype,"columns",2),A([C({type:Object})],exports.JupiterConceptTree.prototype,"formData",2),A([C({type:Boolean})],exports.JupiterConceptTree.prototype,"disabled",2),A([C({type:String})],exports.JupiterConceptTree.prototype,"locale",2),A([C({type:Set})],exports.JupiterConceptTree.prototype,"expandedConcepts",2),A([I()],exports.JupiterConceptTree.prototype,"_expanded",2),exports.JupiterConceptTree=A([t("jupiter-concept-tree")],exports.JupiterConceptTree);var P=Object.defineProperty,J=Object.getOwnPropertyDescriptor,z=(e,t,i,o)=>{for(var r,n=o>1?void 0:o?J(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&&P(t,i,n),n};exports.JupiterAddColumnDialog=class extends e.LitElement{constructor(){super(...arguments),this.periodType="duration",this.open=!1,this._startDate="",this._endDate="",this._instantDate="",this._selectedType="duration"}updated(e){e.has("open")&&this.open&&this._resetForm()}connectedCallback(){super.connectedCallback(),this._resetForm()}willUpdate(e){super.willUpdate(e),e.has("open")&&this.open&&this._resetForm()}_resetForm(){const e=(new Date).toISOString().split("T")[0];this._startDate=e,this._endDate=e,this._instantDate=e,this._selectedType="duration"}_handleCancel(){this.open=!1,this.dispatchEvent(new CustomEvent("dialog-cancel",{bubbles:!0}))}_handleConfirm(){if(!this._isFormValid())return;const e={periodType:"mixed"===this.periodType?this._selectedType:this.periodType};"instant"===this.periodType||"mixed"===this.periodType&&"instant"===this._selectedType?e.instantDate=this._instantDate:(e.startDate=this._startDate,e.endDate=this._endDate),this.dispatchEvent(new CustomEvent("column-add",{detail:e,bubbles:!0}))}_isFormValid(){return"mixed"===this.periodType?"instant"===this._selectedType?!!this._instantDate:!!this._startDate&&!!this._endDate&&this._startDate<=this._endDate:"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}render(){if(!this.open)return e.html``;const t=this._isFormValid();return e.html`
344
344
  <div class="dialog" @click="${e=>e.stopPropagation()}">
345
345
  <div class="dialog-header">
346
346
  <h2 class="dialog-title">Add Column</h2>
@@ -548,7 +548,7 @@ const D={attribute:!0,type:String,converter:v,reflect:!1,hasChanged:x},w=(e=D,t,
548
548
  background: var(--jupiter-disabled-background, #ccc);
549
549
  cursor: not-allowed;
550
550
  }
551
- `,O([C({type:String})],exports.JupiterAddColumnDialog.prototype,"periodType",2),O([C({type:Boolean})],exports.JupiterAddColumnDialog.prototype,"open",2),O([S()],exports.JupiterAddColumnDialog.prototype,"_startDate",2),O([S()],exports.JupiterAddColumnDialog.prototype,"_endDate",2),O([S()],exports.JupiterAddColumnDialog.prototype,"_instantDate",2),O([S()],exports.JupiterAddColumnDialog.prototype,"_selectedType",2),exports.JupiterAddColumnDialog=O([t("jupiter-add-column-dialog")],exports.JupiterAddColumnDialog);var z=Object.defineProperty,U=Object.getOwnPropertyDescriptor,N=(e,t,i,o)=>{for(var r,n=o>1?void 0:o?U(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&&z(t,i,n),n};exports.JupiterFormSection=class extends e.LitElement{constructor(){super(...arguments),this.columns=[],this.formData={},this.disabled=!1,this.collapsible=!0,this.locale="en-US",this._expanded=!0,this._showAddColumnDialog=!1,this._sectionPeriodType="duration",this._expandedConcepts=new Set}connectedCallback(){super.connectedCallback(),this._expanded=!1!==this.section.expanded,this._determinePeriodType()}_determinePeriodType(){const e=this._getAllNonAbstractConcepts(this.section.concepts);if(console.log(`🔍 Section ${this.section.id} (${this.section.title}): Found ${e.length} non-abstract concepts`),console.log("📝 All concepts in section:",this.section.concepts.map(e=>({name:e.name,abstract:e.abstract,periodType:e.periodType}))),0===e.length)return this._sectionPeriodType="duration",void console.log(`📊 Section ${this.section.id}: No concepts, defaulting to duration`);const t=new Set(e.map(e=>e.periodType).filter(Boolean));if(console.log(`🏷️ Section ${this.section.id}: Found period types:`,Array.from(t)),console.log(`📝 Section ${this.section.id}: Non-abstract concepts and their period types:`,e.map(e=>({name:e.name,periodType:e.periodType,abstract:e.abstract}))),0===t.size)this._sectionPeriodType="duration",console.log(`📊 Section ${this.section.id}: No period types defined, defaulting to duration`);else if(1===t.size){const e=Array.from(t)[0];this._sectionPeriodType="instant"===e?"instant":"duration",console.log(`📊 Section ${this.section.id}: Single period type '${e}', setting to '${this._sectionPeriodType}'`)}else this._sectionPeriodType="mixed",console.log(`📊 Section ${this.section.id}: Mixed period types, setting to 'mixed'`);console.log(`✅ Section ${this.section.id}: Final period type: ${this._sectionPeriodType}`)}_getAllNonAbstractConcepts(e){const t=[];for(const i of e)i.abstract||t.push(i),i.children&&t.push(...this._getAllNonAbstractConcepts(i.children));return t}_toggleExpanded(){this.collapsible&&(this._expanded=!this._expanded,this.dispatchEvent(new CustomEvent("section-expand",{detail:{sectionId:this.section.id,expanded:this._expanded},bubbles:!0})))}_handleRemoveColumn(e){this.dispatchEvent(new CustomEvent("column-remove",{detail:{columnId:e,sectionId:this.section.id},bubbles:!0}))}_handleAddColumn(){const e=this._determineButtonPeriodType();this._sectionPeriodType=e,this._showAddColumnDialog=!0}_determineButtonPeriodType(){const e=this._getAllNonAbstractConcepts(this.section.concepts);if(0===e.length)return"duration";const t=new Set(e.map(e=>e.periodType).filter(e=>null!=e));if(0===t.size)return"duration";if(1===t.size){return"instant"===Array.from(t)[0]?"instant":"duration"}return"mixed"}_getConceptsWithFields(e){const t=[];for(const i of e)!i.abstract&&i.fields&&i.fields.length>0&&t.push(i),i.children&&t.push(...this._getConceptsWithFields(i.children));return t}_handleDialogCancel(){this._showAddColumnDialog=!1}_handleColumnAdd(e){e.stopPropagation(),this._showAddColumnDialog=!1,this.dispatchEvent(new CustomEvent("column-add-request",{detail:{sectionId:this.section.id,columnRequest:e.detail},bubbles:!0}))}_handleFieldChange(e){e.stopPropagation(),this.dispatchEvent(new CustomEvent("field-change",{detail:e.detail,bubbles:!0}))}_flattenConcepts(e,t=new Set){const i=[];for(const o of e)if(i.push(o),o.children&&o.children.length>0&&t.has(o.id)){const e=this._flattenConcepts(o.children,t);i.push(...e)}return i}_handleConceptExpand(e){e.stopPropagation();const{conceptId:t,expanded:i}=e.detail;i?this._expandedConcepts.add(t):this._expandedConcepts.delete(t),this.requestUpdate(),this.dispatchEvent(new CustomEvent("concept-expand",{detail:e.detail,bubbles:!0}))}render(){return this.section.concepts&&0!==this.section.concepts.length?e.html`
551
+ `,z([C({type:String})],exports.JupiterAddColumnDialog.prototype,"periodType",2),z([C({type:Boolean})],exports.JupiterAddColumnDialog.prototype,"open",2),z([I()],exports.JupiterAddColumnDialog.prototype,"_startDate",2),z([I()],exports.JupiterAddColumnDialog.prototype,"_endDate",2),z([I()],exports.JupiterAddColumnDialog.prototype,"_instantDate",2),z([I()],exports.JupiterAddColumnDialog.prototype,"_selectedType",2),exports.JupiterAddColumnDialog=z([t("jupiter-add-column-dialog")],exports.JupiterAddColumnDialog);var O=Object.defineProperty,U=Object.getOwnPropertyDescriptor,N=(e,t,i,o)=>{for(var r,n=o>1?void 0:o?U(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&&O(t,i,n),n};exports.JupiterFormSection=class extends e.LitElement{constructor(){super(...arguments),this.columns=[],this.formData={},this.disabled=!1,this.collapsible=!0,this.locale="en-US",this._expanded=!0,this._showAddColumnDialog=!1,this._sectionPeriodType="duration",this._expandedConcepts=new Set}connectedCallback(){super.connectedCallback(),this._expanded=!1!==this.section.expanded,this._determinePeriodType()}_determinePeriodType(){const e=this._getAllNonAbstractConcepts(this.section.concepts);if(console.log(`🔍 Section ${this.section.id} (${this.section.title}): Found ${e.length} non-abstract concepts`),console.log("📝 All concepts in section:",this.section.concepts.map(e=>({name:e.name,abstract:e.abstract,periodType:e.periodType}))),0===e.length)return this._sectionPeriodType="duration",void console.log(`📊 Section ${this.section.id}: No concepts, defaulting to duration`);const t=new Set(e.map(e=>e.periodType).filter(Boolean));if(console.log(`🏷️ Section ${this.section.id}: Found period types:`,Array.from(t)),console.log(`📝 Section ${this.section.id}: Non-abstract concepts and their period types:`,e.map(e=>({name:e.name,periodType:e.periodType,abstract:e.abstract}))),0===t.size)this._sectionPeriodType="duration",console.log(`📊 Section ${this.section.id}: No period types defined, defaulting to duration`);else if(1===t.size){const e=Array.from(t)[0];this._sectionPeriodType="instant"===e?"instant":"duration",console.log(`📊 Section ${this.section.id}: Single period type '${e}', setting to '${this._sectionPeriodType}'`)}else this._sectionPeriodType="mixed",console.log(`📊 Section ${this.section.id}: Mixed period types, setting to 'mixed'`);console.log(`✅ Section ${this.section.id}: Final period type: ${this._sectionPeriodType}`)}_getAllNonAbstractConcepts(e){const t=[];for(const i of e)i.abstract||t.push(i),i.children&&t.push(...this._getAllNonAbstractConcepts(i.children));return t}_toggleExpanded(){this.collapsible&&(this._expanded=!this._expanded,this.dispatchEvent(new CustomEvent("section-expand",{detail:{sectionId:this.section.id,expanded:this._expanded},bubbles:!0})))}_handleRemoveColumn(e){this.dispatchEvent(new CustomEvent("column-remove",{detail:{columnId:e,sectionId:this.section.id},bubbles:!0}))}_handleAddColumn(){const e=this._determineButtonPeriodType();this._sectionPeriodType=e,this._showAddColumnDialog=!0}_determineButtonPeriodType(){const e=this._getAllNonAbstractConcepts(this.section.concepts);if(0===e.length)return"duration";const t=new Set(e.map(e=>e.periodType).filter(e=>null!=e));if(0===t.size)return"duration";if(1===t.size){return"instant"===Array.from(t)[0]?"instant":"duration"}return"mixed"}_getConceptsWithFields(e){const t=[];for(const i of e)!i.abstract&&i.fields&&i.fields.length>0&&t.push(i),i.children&&t.push(...this._getConceptsWithFields(i.children));return t}_handleDialogCancel(){this._showAddColumnDialog=!1}_handleColumnAdd(e){e.stopPropagation(),this._showAddColumnDialog=!1,this.dispatchEvent(new CustomEvent("column-add-request",{detail:{sectionId:this.section.id,columnRequest:e.detail},bubbles:!0}))}_handleFieldChange(e){e.stopPropagation(),this.dispatchEvent(new CustomEvent("field-change",{detail:e.detail,bubbles:!0}))}_flattenConcepts(e,t=new Set){const i=[];for(const o of e)if(i.push(o),o.children&&o.children.length>0&&t.has(o.id)){const e=this._flattenConcepts(o.children,t);i.push(...e)}return i}_handleConceptExpand(e){e.stopPropagation();const{conceptId:t,expanded:i}=e.detail;i?this._expandedConcepts.add(t):this._expandedConcepts.delete(t),this.requestUpdate(),this.dispatchEvent(new CustomEvent("concept-expand",{detail:e.detail,bubbles:!0}))}render(){return this.section.concepts&&0!==this.section.concepts.length?e.html`
552
552
  <div class="section-header ${this.collapsible?"":"not-collapsible"}"
553
553
  @click="${this._toggleExpanded}">
554
554
  <div>
@@ -798,7 +798,7 @@ const D={attribute:!0,type:String,converter:v,reflect:!1,hasChanged:x},w=(e=D,t,
798
798
  color: var(--jupiter-text-secondary, #666);
799
799
  font-style: italic;
800
800
  }
801
- `,N([C({type:Object})],exports.JupiterFormSection.prototype,"section",2),N([C({type:Array})],exports.JupiterFormSection.prototype,"columns",2),N([C({type:Object})],exports.JupiterFormSection.prototype,"formData",2),N([C({type:Boolean})],exports.JupiterFormSection.prototype,"disabled",2),N([C({type:Boolean})],exports.JupiterFormSection.prototype,"collapsible",2),N([C({type:String})],exports.JupiterFormSection.prototype,"locale",2),N([S()],exports.JupiterFormSection.prototype,"_expanded",2),N([S()],exports.JupiterFormSection.prototype,"_showAddColumnDialog",2),N([S()],exports.JupiterFormSection.prototype,"_sectionPeriodType",2),N([S()],exports.JupiterFormSection.prototype,"_expandedConcepts",2),exports.JupiterFormSection=N([t("jupiter-form-section")],exports.JupiterFormSection);var R=Object.defineProperty,q=Object.getOwnPropertyDescriptor,V=(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&&R(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._formData={},this._columns=[],this._errors=[],this._touched=new Set,this._dirty=!1,this._valid=!0,this._submitted=!1}connectedCallback(){super.connectedCallback(),this._initializeForm()}updated(e){(e.has("xbrlInput")||e.has("schema"))&&this._initializeForm()}_initializeForm(){var e;if(this.xbrlInput)try{console.log("🔄 Initializing form from XBRL input:",this.xbrlInput),console.log("📅 Using period dates:",this.periodStartDate,"to",this.periodEndDate),this._currentSchema=F.buildFormSchema(this.xbrlInput,this.periodStartDate,this.periodEndDate),console.log("✅ Generated schema with sections:",this._currentSchema.sections.length),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._columns=this._getDefaultColumns()}else this.schema?(this._currentSchema=this.schema,this._columns=this._getDefaultColumns()):(this._currentSchema=this._getDefaultSchema(),this._columns=this._getDefaultColumns());this._formData={...this.initialData},(null==(e=this.xbrlInput)?void 0:e.initialData)&&(this._formData={...this._formData,...this.xbrlInput.initialData}),this._validateForm()}_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}]}_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=E.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;this._formData[i]||(this._formData[i]={});const n=this._formData[i][o];this._formData[i][o]=r,this._touched.add(`${i}-${o}`),this._dirty=!0,this._validateForm(),this.requestUpdate(),this.dispatchEvent(new CustomEvent("field-change",{detail:{fieldId:t,conceptId:i,columnId:o,value:r,oldValue:n},bubbles:!0}))}_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}=e.detail;this._addColumnFromRequest(i,t)}_addColumnFromRequest(e,t){var i,o,r,n,s;const a=`col-${Date.now()}`;let l="",d="";"instant"===e.periodType?(l=e.instantDate||"Instant Date",d=`Instant period: ${e.instantDate}`):"duration"!==e.periodType&&"mixed"!==e.periodType||(l=`${e.startDate} / ${e.endDate}`,d=`Duration period: ${e.startDate} to ${e.endDate}`);let c={dimensionId:"period",memberValue:"instant"===e.periodType?`instant-${e.instantDate}`:`duration-${e.startDate}-${e.endDate}`,memberLabel:l};if(null==(o=null==(i=this.xbrlInput)?void 0:i.hypercubes)?void 0:o[0]){const i=this.xbrlInput.hypercubes[0].roles.find(e=>e.roleId===t);if(1===(null==(r=null==i?void 0:i.items)?void 0:r.length)){const t=i.items[0];if(1===t.dimensions.length){const i=t.dimensions[0];if(i.members.length>0){const t=(null==(n=i.labels.find(e=>"http://www.xbrl.org/2003/role/label"===e.role))?void 0:n.label)||i.conceptName,o=i.members[0],r=(null==(s=o.labels.find(e=>"http://www.xbrl.org/2003/role/label"===e.role))?void 0:s.label)||o.conceptName;l=`${r} ${"instant"===e.periodType?`(${e.instantDate})`:`(${e.startDate} / ${e.endDate})`}`,c={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: ${c.memberKey}`)}}}}const p={id:a,title:l,description:d,type:(c.memberKey,"dimension"),order:this._columns.length,removable:!0,dimensionData:c};if(this._currentSchema){const e=this._currentSchema.sections.find(e=>e.id===t);e&&(e.columns||(e.columns=[...this._columns]),e.columns=[...e.columns,p])}this._replicateFieldsForNewColumn(a,e,t),this._dirty=!0,this.requestUpdate(),this.dispatchEvent(new CustomEvent("column-add",{detail:{column:p},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(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,periodStartDate:"instant"===i.periodType?i.instantDate:i.startDate,periodEndDate:"instant"===i.periodType?i.instantDate:i.endDate}:{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:"",periodStartDate:"instant"===i.periodType?i.instantDate:i.startDate,periodEndDate:"instant"===i.periodType?i.instantDate:i.endDate},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(){this._submitted=!0,this._validateForm();const e=this._generateSubmissionData();this.dispatchEvent(new CustomEvent("form-submit",{detail:{data:this._formData,submissionData:e,valid:this._valid,errors:this._errors},bubbles:!0}))}_handleSaveDraft(){const e=this._generateSubmissionData();this.dispatchEvent(new CustomEvent("form-save-draft",{detail:{data:this._formData,draftData:e,valid:this._valid,errors:this._errors},bubbles:!0}))}_generateSubmissionData(){const e=[];return this._currentSchema?(this._currentSchema.sections.forEach(t=>{this._processConceptsForSubmission(t.concepts,e,t)}),e):e}_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}}_processConceptsForSubmission(e,t,i){e.forEach(e=>{e.fields&&e.fields.length>0&&e.fields.forEach(o=>{var r,n,s;const a=this._formData[e.id],l=null==a?void 0:a[o.columnId];if(null!=l&&""!==l){const a=this._findColumnById(o.columnId),d={conceptId:e.id,value:l,period:{type:e.periodType||"duration"}};if("instant"===e.periodType?d.period.date=o.periodStartDate||this.periodStartDate:(d.period.startDate=o.periodStartDate||this.periodStartDate,d.period.endDate=o.periodEndDate||this.periodEndDate),"dimension"===(null==a?void 0:a.type)&&(null==(r=a.dimensionData)?void 0:r.dimensionIdKey))d.dimension=a.dimensionData.dimensionIdKey;else if(null==(n=null==i?void 0:i.columns)?void 0:n.length){const e=i.columns.find(e=>{var t;return"dimension"===e.type&&(null==(t=e.dimensionData)?void 0:t.dimensionIdKey)});(null==(s=null==e?void 0:e.dimensionData)?void 0:s.dimensionIdKey)&&(d.dimension=e.dimensionData.dimensionIdKey)}t.push(d)}}),e.children&&this._processConceptsForSubmission(e.children,t,i)})}_handleReset(){this._formData={...this.initialData},this._touched.clear(),this._dirty=!1,this._submitted=!1,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}}getData(){return{...this._formData}}setData(e){this._formData={...e},this._dirty=!0,this._validateForm(),this.requestUpdate()}validate(){return this._validateForm(),this._valid}reset(){this._handleReset()}getState(){return this._getFormState()}render(){const t=this._errors.filter(e=>"error"===e.severity).length,i=this.config||{},o=!1!==i.showValidationSummary&&t>0&&this._submitted,r=this._currentSchema;return r?e.html`
801
+ `,N([C({type:Object})],exports.JupiterFormSection.prototype,"section",2),N([C({type:Array})],exports.JupiterFormSection.prototype,"columns",2),N([C({type:Object})],exports.JupiterFormSection.prototype,"formData",2),N([C({type:Boolean})],exports.JupiterFormSection.prototype,"disabled",2),N([C({type:Boolean})],exports.JupiterFormSection.prototype,"collapsible",2),N([C({type:String})],exports.JupiterFormSection.prototype,"locale",2),N([I()],exports.JupiterFormSection.prototype,"_expanded",2),N([I()],exports.JupiterFormSection.prototype,"_showAddColumnDialog",2),N([I()],exports.JupiterFormSection.prototype,"_sectionPeriodType",2),N([I()],exports.JupiterFormSection.prototype,"_expandedConcepts",2),exports.JupiterFormSection=N([t("jupiter-form-section")],exports.JupiterFormSection);var R=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&&R(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._formData={},this._columns=[],this._errors=[],this._touched=new Set,this._dirty=!1,this._valid=!0,this._submitted=!1}connectedCallback(){super.connectedCallback(),this._initializeForm()}updated(e){(e.has("xbrlInput")||e.has("schema"))&&this._initializeForm()}_initializeForm(){var e;if(this.xbrlInput)try{console.log("🔄 Initializing form from XBRL input:",this.xbrlInput),console.log("📅 Using period dates:",this.periodStartDate,"to",this.periodEndDate),this._currentSchema=F.buildFormSchema(this.xbrlInput,this.periodStartDate,this.periodEndDate),console.log("✅ Generated schema with sections:",this._currentSchema.sections.length),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._columns=this._getDefaultColumns()}else this.schema?(this._currentSchema=this.schema,this._columns=this._getDefaultColumns()):(this._currentSchema=this._getDefaultSchema(),this._columns=this._getDefaultColumns());this._formData={...this.initialData},(null==(e=this.xbrlInput)?void 0:e.initialData)&&(this._formData={...this._formData,...this.xbrlInput.initialData}),this._validateForm()}_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}]}_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=S.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;this._formData[i]||(this._formData[i]={});const n=this._formData[i][o];this._formData[i][o]=r,this._touched.add(`${i}-${o}`),this._dirty=!0,this._validateForm(),this.requestUpdate(),this.dispatchEvent(new CustomEvent("field-change",{detail:{fieldId:t,conceptId:i,columnId:o,value:r,oldValue:n},bubbles:!0}))}_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}=e.detail;this._addColumnFromRequest(i,t)}_addColumnFromRequest(e,t){var i,o,r,n,s;const a=`col-${Date.now()}`;let l="",d="";"instant"===e.periodType?(l=e.instantDate||"Instant Date",d=`Instant period: ${e.instantDate}`):"duration"!==e.periodType&&"mixed"!==e.periodType||(l=`${e.startDate} / ${e.endDate}`,d=`Duration period: ${e.startDate} to ${e.endDate}`);let c={dimensionId:"period",memberValue:"instant"===e.periodType?`instant-${e.instantDate}`:`duration-${e.startDate}-${e.endDate}`,memberLabel:l};if(null==(o=null==(i=this.xbrlInput)?void 0:i.hypercubes)?void 0:o[0]){const i=this.xbrlInput.hypercubes[0].roles.find(e=>e.roleId===t);if(1===(null==(r=null==i?void 0:i.items)?void 0:r.length)){const t=i.items[0];if(1===t.dimensions.length){const i=t.dimensions[0];if(i.members.length>0){const t=(null==(n=i.labels.find(e=>"http://www.xbrl.org/2003/role/label"===e.role))?void 0:n.label)||i.conceptName,o=i.members[0],r=(null==(s=o.labels.find(e=>"http://www.xbrl.org/2003/role/label"===e.role))?void 0:s.label)||o.conceptName;l=`${r} ${"instant"===e.periodType?`(${e.instantDate})`:`(${e.startDate} / ${e.endDate})`}`,c={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: ${c.memberKey}`)}}}}const p={id:a,title:l,description:d,type:(c.memberKey,"dimension"),order:this._columns.length,removable:!0,dimensionData:c};if(this._currentSchema){const e=this._currentSchema.sections.find(e=>e.id===t);e&&(e.columns||(e.columns=[...this._columns]),e.columns=[...e.columns,p])}this._replicateFieldsForNewColumn(a,e,t),this._dirty=!0,this.requestUpdate(),this.dispatchEvent(new CustomEvent("column-add",{detail:{column:p},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(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,periodStartDate:"instant"===i.periodType?i.instantDate:i.startDate,periodEndDate:"instant"===i.periodType?i.instantDate:i.endDate}:{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:"",periodStartDate:"instant"===i.periodType?i.instantDate:i.startDate,periodEndDate:"instant"===i.periodType?i.instantDate:i.endDate},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(){this._submitted=!0,this._validateForm();const e=this._generateSubmissionData();this.dispatchEvent(new CustomEvent("form-submit",{detail:{data:this._formData,submissionData:e,valid:this._valid,errors:this._errors},bubbles:!0}))}_handleSaveDraft(){const e=this._generateSubmissionData();this.dispatchEvent(new CustomEvent("form-save-draft",{detail:{data:this._formData,draftData:e,valid:this._valid,errors:this._errors},bubbles:!0}))}_generateSubmissionData(){const e=[];return this._currentSchema?(this._currentSchema.sections.forEach(t=>{this._processConceptsForSubmission(t.concepts,e,t)}),e):e}_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}}_processConceptsForSubmission(e,t,i){e.forEach(e=>{e.fields&&e.fields.length>0&&e.fields.forEach(o=>{var r,n,s;const a=this._formData[e.id],l=null==a?void 0:a[o.columnId];if(null!=l&&""!==l){const a=this._findColumnById(o.columnId),d={conceptId:e.id,value:l,period:{type:e.periodType||"duration"}};if("instant"===e.periodType?d.period.date=o.periodStartDate||this.periodStartDate:(d.period.startDate=o.periodStartDate||this.periodStartDate,d.period.endDate=o.periodEndDate||this.periodEndDate),"dimension"===(null==a?void 0:a.type)&&(null==(r=a.dimensionData)?void 0:r.dimensionIdKey))d.dimension=a.dimensionData.dimensionIdKey;else if(null==(n=null==i?void 0:i.columns)?void 0:n.length){const e=i.columns.find(e=>{var t;return"dimension"===e.type&&(null==(t=e.dimensionData)?void 0:t.dimensionIdKey)});(null==(s=null==e?void 0:e.dimensionData)?void 0:s.dimensionIdKey)&&(d.dimension=e.dimensionData.dimensionIdKey)}t.push(d)}}),e.children&&this._processConceptsForSubmission(e.children,t,i)})}_handleReset(){this._formData={...this.initialData},this._touched.clear(),this._dirty=!1,this._submitted=!1,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}}getData(){return{...this._formData}}setData(e){this._formData={...e},this._dirty=!0,this._validateForm(),this.requestUpdate()}validate(){return this._validateForm(),this._valid}reset(){this._handleReset()}getState(){return this._getFormState()}render(){const t=this._errors.filter(e=>"error"===e.severity).length,i=this.config||{},o=!1!==i.showValidationSummary&&t>0&&this._submitted,r=this._currentSchema;return r?e.html`
802
802
  <div class="form-container">
803
803
  <!-- Form Header -->
804
804
  <div class="form-header">
@@ -995,5 +995,5 @@ const D={attribute:!0,type:String,converter:v,reflect:!1,hasChanged:x},w=(e=D,t,
995
995
  color: var(--jupiter-text-secondary, #666);
996
996
  margin-left: auto;
997
997
  }
998
- `,V([C({type:Object})],exports.JupiterDynamicForm.prototype,"schema",2),V([C({type:Object})],exports.JupiterDynamicForm.prototype,"xbrlInput",2),V([C({type:Object})],exports.JupiterDynamicForm.prototype,"config",2),V([C({type:Object})],exports.JupiterDynamicForm.prototype,"initialData",2),V([C({type:Boolean})],exports.JupiterDynamicForm.prototype,"disabled",2),V([C({type:Boolean})],exports.JupiterDynamicForm.prototype,"readonly",2),V([C({type:String})],exports.JupiterDynamicForm.prototype,"periodStartDate",2),V([C({type:String})],exports.JupiterDynamicForm.prototype,"periodEndDate",2),V([S()],exports.JupiterDynamicForm.prototype,"_formData",2),V([S()],exports.JupiterDynamicForm.prototype,"_columns",2),V([S()],exports.JupiterDynamicForm.prototype,"_errors",2),V([S()],exports.JupiterDynamicForm.prototype,"_touched",2),V([S()],exports.JupiterDynamicForm.prototype,"_dirty",2),V([S()],exports.JupiterDynamicForm.prototype,"_valid",2),V([S()],exports.JupiterDynamicForm.prototype,"_submitted",2),V([S()],exports.JupiterDynamicForm.prototype,"_currentSchema",2),exports.JupiterDynamicForm=V([t("jupiter-dynamic-form")],exports.JupiterDynamicForm);exports.FormValidator=E,exports.version="1.0.0";
998
+ `,q([C({type:Object})],exports.JupiterDynamicForm.prototype,"schema",2),q([C({type:Object})],exports.JupiterDynamicForm.prototype,"xbrlInput",2),q([C({type:Object})],exports.JupiterDynamicForm.prototype,"config",2),q([C({type:Object})],exports.JupiterDynamicForm.prototype,"initialData",2),q([C({type:Boolean})],exports.JupiterDynamicForm.prototype,"disabled",2),q([C({type:Boolean})],exports.JupiterDynamicForm.prototype,"readonly",2),q([C({type:String})],exports.JupiterDynamicForm.prototype,"periodStartDate",2),q([C({type:String})],exports.JupiterDynamicForm.prototype,"periodEndDate",2),q([I()],exports.JupiterDynamicForm.prototype,"_formData",2),q([I()],exports.JupiterDynamicForm.prototype,"_columns",2),q([I()],exports.JupiterDynamicForm.prototype,"_errors",2),q([I()],exports.JupiterDynamicForm.prototype,"_touched",2),q([I()],exports.JupiterDynamicForm.prototype,"_dirty",2),q([I()],exports.JupiterDynamicForm.prototype,"_valid",2),q([I()],exports.JupiterDynamicForm.prototype,"_submitted",2),q([I()],exports.JupiterDynamicForm.prototype,"_currentSchema",2),exports.JupiterDynamicForm=q([t("jupiter-dynamic-form")],exports.JupiterDynamicForm);exports.FormValidator=S,exports.version="1.0.0";
999
999
  //# sourceMappingURL=index.js.map