jupiter-dynamic-forms 1.9.1 → 1.9.3

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},I=(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 w({...e,state:!0,attribute:!1})}class C{static validateField(e,t,i,o,r,s=[]){const n=[];for(const a of s){const s=this.validateRule(e,t,i,o,r,a);s&&n.push(s)}return n}static validateRule(e,t,i,o,r,s){const n=null==o||""===o;switch(s.type){case"required":if(n)return this.createError(e,t,i,s);break;case"min":if(!n&&"number"==typeof o&&o<s.value)return this.createError(e,t,i,s);break;case"max":if(!n&&"number"==typeof o&&o>s.value)return this.createError(e,t,i,s);break;case"minLength":if(!n&&"string"==typeof o&&o.length<s.value)return this.createError(e,t,i,s);break;case"maxLength":if(!n&&"string"==typeof o&&o.length>s.value)return this.createError(e,t,i,s);break;case"pattern":if(!n&&"string"==typeof o){if(!new RegExp(s.value).test(o))return this.createError(e,t,i,s)}break;case"email":if(!n&&"string"==typeof o){if(!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(o))return this.createError(e,t,i,s)}break;case"url":if(!n&&"string"==typeof o)try{new URL(o)}catch{return this.createError(e,t,i,s)}break;case"custom":break;default:console.warn(`Unknown validation rule type: ${s.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,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"){var r;if(!e.presentation||0===e.presentation.length)throw new Error("XBRL presentation data is required");const s=e.presentation[0],n=null==(r=e.hypercubes)?void 0:r[0],a=[];return[...s.roles].sort((e,t)=>e.role.localeCompare(t.role)).forEach(e=>{const r=this.buildSectionFromRole(e,t,i,n,o);this.assignFieldColumnIds(r),a.push(r)}),{formId:`xbrl-form-${Date.now()}`,title:`XBRL Form - ${this.extractEntityName(s.entrypoint)}`,description:"Dynamic form generated from XBRL taxonomy data",version:"1.0.0",sections:a}}static buildSectionFromRole(e,t,i,o,r="en"){var s;const n=this.extractRoleTitle(e.role),a=this.getAllNonAbstractConcepts(e),l=new Set(a.filter(e=>e.periodType).map(e=>e.periodType)),d=null==o?void 0:o.roles.find(t=>t.roleId===e.id),c=this.generateDefaultColumnsForRole(e,t||"2025-01-01",i||"2025-12-31",d,a,l),p={periodTypes:l,availableColumnIds:c.map(e=>e.id)},h=[];return(null==(s=e.presentationLinkbase)?void 0:s.concepts)&&e.presentationLinkbase.concepts.forEach(o=>{const s=this.buildConceptTree(o,0,t,i,p,e.id,r);s&&h.push(s)}),{id:e.id,title:n,description:e.description||`Section for ${n}`,concepts:h,columns:c,expanded:!1,metadata:{roleURI:e.roleURI,originalRole:e.role}}}static buildConceptTree(e,t,i,o,r,s,n="en"){const a=this.getPreferredLabel(e.labels,n),l=[];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&&l.push(r)})}const d=[];e.children&&e.children.length>0&&e.children.forEach(e=>{const a=this.buildConceptTree(e,t+1,i,o,r,s,n);a&&d.push(a)});return l.length>0||d.length>0?{id:this.createUniqueConceptId(e,s),originalConceptId:e.id,name:e.conceptName,label:a,description:`${e.conceptName} (${e.type})`,level:t,children:d,fields:l,collapsed:t>0,abstract:e.elementAbstract,periodType:e.periodType}:null}static createFieldFromConcept(e,t,i,o){const r=this.mapXBRLTypeToFieldType(e.type),s=this.getPreferredLabel(e.labels);let n;n=o||("instant"===e.periodType?"instant":"duration"===e.periodType?"duration":"default");const a={id:`${e.id}_${n}_field`,conceptId:e.id,columnId:n,type:r,label:s,placeholder:`Enter ${s.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,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 s=o.find(e=>"http://www.xbrl.org/2003/role/label"===e.role);if(s)return s.label;const n=o.find(e=>"http://www.xbrl.org/2003/role/terseLabel"===e.role);return n?n.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 generateDefaultColumnsForRole(e,t,i,o,r,s){var n,a;const l=r||this.getAllNonAbstractConcepts(e),d=s||new Set(l.filter(e=>e.periodType).map(e=>e.periodType));if(0===l.length)return[{id:"default",title:"Value",description:"Default value column",type:"base",order:0,removable:!1}];let c=[];if(1===(null==(n=null==o?void 0:o.items)?void 0:n.length)){const e=o.items[0];1===e.dimensions.length?c=this.generateSingleDimensionColumns(e.dimensions[0],t,i,d):e.dimensions.length>1&&(c=this.generateMultiDimensionColumns(e.dimensions,t,i,d))}else(null==(a=null==o?void 0:o.items)?void 0:a.length)&&o.items.length;const p=[];return c.length>0?p.push(...c):0===d.size?p.push({id:"default",title:"Value",description:"Default value column",type:"base",order:0,removable:!1}):1===d.size&&d.has("instant")?p.push({id:"instant",title:"Current",description:`Values as of ${t}`,type:"base",order:0,removable:!1}):1===d.size&&d.has("duration")?p.push({id:"duration",title:"Current Period",description:`Period: ${t} to ${i}`,type:"base",order:0,removable:!1}):(p.push({id:"duration",title:"Current Period",description:`Period: ${t} to ${i}`,type:"base",order:0,removable:!1}),p.push({id:"instant",title:"Current",description:`Values as of ${t}`,type:"base",order:1,removable:!1})),p}static generateSingleDimensionColumns(e,t,i,o){var r,s,n;if(e.typedMember&&(!e.members||0===e.members.length)){const s=(null==(r=e.labels.find(e=>"http://www.xbrl.org/2003/role/label"===e.role))?void 0:r.label)||e.conceptName,n={axisId:e.id,axisLabel:s,typedMemberId:e.typedMember.id,dimensionKey:`${s} | [Typed Input]`,dimensionIdKey:`${e.id}|[typed]`},a=[];return 0===o.size?a.push({id:"typed-default",title:s,description:"Typed dimension input column",type:"dimension",dimensionData:{dimensionId:"typed-default",axisId:n.axisId,memberId:"[typed]",memberValue:"Typed Input",memberLabel:"Typed Input",axis:n.axisLabel,axisLabel:n.axisLabel,memberKey:n.dimensionKey,dimensionIdKey:n.dimensionIdKey,hasTypedMembers:!0,typedMemberId:n.typedMemberId,typedMembers:[{axisId:n.axisId,axisLabel:n.axisLabel,typedMemberId:n.typedMemberId,memberLabel:n.axisLabel}]},order:0,removable:!1}):1===o.size&&o.has("instant")?a.push({id:"typed-instant",title:`${s} [Typed Input Available]`,description:`Typed values as of ${t}`,type:"dimension",dimensionData:{dimensionId:"typed-instant",axisId:n.axisId,memberId:"[typed]",memberValue:"Typed Input",memberLabel:"Typed Input",axis:n.axisLabel,axisLabel:n.axisLabel,memberKey:n.dimensionKey,dimensionIdKey:n.dimensionIdKey,hasTypedMembers:!0,typedMemberId:n.typedMemberId,typedMembers:[{axisId:n.axisId,axisLabel:n.axisLabel,typedMemberId:n.typedMemberId,memberLabel:n.axisLabel}]},order:0,removable:!1}):1===o.size&&o.has("duration")?a.push({id:"typed-duration",title:`${s} [Typed Input Available]`,description:`Typed values for period ${t} to ${i}`,type:"dimension",dimensionData:{dimensionId:"typed-duration",axisId:n.axisId,memberId:"[typed]",memberValue:"Typed Input",memberLabel:"Typed Input",axis:n.axisLabel,axisLabel:n.axisLabel,memberKey:n.dimensionKey,dimensionIdKey:n.dimensionIdKey,hasTypedMembers:!0,typedMemberId:n.typedMemberId,typedMembers:[{axisId:n.axisId,axisLabel:n.axisLabel,typedMemberId:n.typedMemberId,memberLabel:n.axisLabel}]},order:0,removable:!1}):(a.push({id:"typed-duration",title:`${s} [Typed Input Available]`,description:`Typed values for period ${t} to ${i}`,type:"dimension",dimensionData:{dimensionId:"typed-duration",axisId:n.axisId,memberId:"[typed]",memberValue:"Typed Input",memberLabel:"Typed Input",axis:n.axisLabel,axisLabel:n.axisLabel,memberKey:n.dimensionKey,dimensionIdKey:n.dimensionIdKey,hasTypedMembers:!0,typedMemberId:n.typedMemberId,typedMembers:[{axisId:n.axisId,axisLabel:n.axisLabel,typedMemberId:n.typedMemberId,memberLabel:n.axisLabel}]},order:0,removable:!1}),a.push({id:"typed-instant",title:`${s} [Typed Input Available]`,description:`Typed values as of ${t}`,type:"dimension",dimensionData:{dimensionId:"typed-instant",axisId:n.axisId,memberId:"[typed]",memberValue:"Typed Input",memberLabel:"Typed Input",axis:n.axisLabel,axisLabel:n.axisLabel,memberKey:n.dimensionKey,dimensionIdKey:n.dimensionIdKey,hasTypedMembers:!0,typedMemberId:n.typedMemberId,typedMembers:[{axisId:n.axisId,axisLabel:n.axisLabel,typedMemberId:n.typedMemberId,memberLabel:n.axisLabel}]},order:1,removable:!1})),a}if(!e.members||!Array.isArray(e.members))return[];if(0===e.members.length)return[];const a=(null==(s=e.labels.find(e=>"http://www.xbrl.org/2003/role/label"===e.role))?void 0:s.label)||e.conceptName,l=e.members[0],d=(null==(n=l.labels.find(e=>"http://www.xbrl.org/2003/role/label"===e.role))?void 0:n.label)||l.conceptName,c={axisId:e.id,axisLabel:a,memberId:l.id,memberLabel:d,dimensionKey:`${a} | ${d}`,dimensionIdKey:`${e.id} | ${l.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}):1===o.size&&o.has("instant")?p.push({id:"instant",title:`${c.memberLabel}`,description:`Values as of ${t}`,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}):1===o.size&&o.has("duration")?p.push({id:"duration",title:`${c.memberLabel}`,description:`Period: ${t} to ${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}):(p.push({id:"duration",title:`${c.memberLabel}`,description:`Period: ${t} to ${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}),p.push({id:"instant",title:`${c.memberLabel}`,description:`Values as of ${t}`,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:1,removable:!1})),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 s=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} [Typed Input Available]`}]};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}})}}),n=this.generateDimensionCombinations(s),a=[];return n.forEach((e,r)=>{const s=e.map(e=>e.memberLabel).join(" | "),n=e.filter(e=>e.isTyped),l=e.filter(e=>!e.isTyped),d={dimensionId:`multi_${r}`,memberValue:s,memberLabel:s,combinations:l.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:s,dimensionIdKey:[...l.map(e=>`${e.axisId}|${e.memberId}`),...n.map(e=>`${e.axisId}|[typed]`)].join("::")};0===o.size||1===o.size&&o.has("duration")?a.push({id:`duration_${r}`,title:`${s}`,description:`Period: ${t} to ${i}`,type:"dimension",dimensionData:{...d,dimensionId:`duration_${r}`},order:2*r,removable:!1}):1===o.size&&o.has("instant")?a.push({id:`instant_${r}`,title:`${s}`,description:`Values as of ${t}`,type:"dimension",dimensionData:{...d,dimensionId:`instant_${r}`},order:2*r,removable:!1}):(a.push({id:`duration_${r}`,title:`${s}`,description:`Period: ${t} to ${i}`,type:"dimension",dimensionData:{...d,dimensionId:`duration_${r}`},order:2*r,removable:!1}),a.push({id:`instant_${r}`,title:`${s}`,description:`Values as of ${t}`,type:"dimension",dimensionData:{...d,dimensionId:`instant_${r}`},order:2*r+1,removable:!1}))}),a}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"}]}}var T=Object.defineProperty,E=Object.getOwnPropertyDescriptor,k=(e,t,i,o)=>{for(var r,s=o>1?void 0:o?E(t,i):t,n=e.length-1;n>=0;n--)(r=e[n])&&(s=(o?r(t,i,s):r(s))||s);return o&&s&&T(t,i,s),s};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=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.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":""),s=`${this.conceptId}__${this.columnId}`,n=`data[${this.conceptId}][${this.columnId}]`;switch(this.field.type){case"textarea":return e.html`
22
+ */function S(e){return w({...e,state:!0,attribute:!1})}class C{static validateField(e,t,i,o,r,s=[]){const n=[];for(const a of s){const s=this.validateRule(e,t,i,o,r,a);s&&n.push(s)}return n}static validateRule(e,t,i,o,r,s){const n=null==o||""===o;switch(s.type){case"required":if(n)return this.createError(e,t,i,s);break;case"min":if(!n&&"number"==typeof o&&o<s.value)return this.createError(e,t,i,s);break;case"max":if(!n&&"number"==typeof o&&o>s.value)return this.createError(e,t,i,s);break;case"minLength":if(!n&&"string"==typeof o&&o.length<s.value)return this.createError(e,t,i,s);break;case"maxLength":if(!n&&"string"==typeof o&&o.length>s.value)return this.createError(e,t,i,s);break;case"pattern":if(!n&&"string"==typeof o){if(!new RegExp(s.value).test(o))return this.createError(e,t,i,s)}break;case"email":if(!n&&"string"==typeof o){if(!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(o))return this.createError(e,t,i,s)}break;case"url":if(!n&&"string"==typeof o)try{new URL(o)}catch{return this.createError(e,t,i,s)}break;case"custom":break;default:console.warn(`Unknown validation rule type: ${s.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,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"){var r;if(!e.presentation||0===e.presentation.length)throw new Error("XBRL presentation data is required");const s=e.presentation[0],n=null==(r=e.hypercubes)?void 0:r[0],a=[];return[...s.roles].sort((e,t)=>e.role.localeCompare(t.role)).forEach(e=>{const r=this.buildSectionFromRole(e,t,i,n,o);this.assignFieldColumnIds(r),a.push(r)}),{formId:`xbrl-form-${Date.now()}`,title:`XBRL Form - ${this.extractEntityName(s.entrypoint)}`,description:"Dynamic form generated from XBRL taxonomy data",version:"1.0.0",sections:a}}static buildSectionFromRole(e,t,i,o,r="en"){var s;const n=this.extractRoleTitle(e.role),a=this.getAllNonAbstractConcepts(e),l=new Set(a.filter(e=>e.periodType).map(e=>e.periodType)),d=null==o?void 0:o.roles.find(t=>t.roleId===e.id),c=this.generateDefaultColumnsForRole(e,t||"2025-01-01",i||"2025-12-31",d,a,l),p={periodTypes:l,availableColumnIds:c.map(e=>e.id)},h=[];return(null==(s=e.presentationLinkbase)?void 0:s.concepts)&&e.presentationLinkbase.concepts.forEach(o=>{const s=this.buildConceptTree(o,0,t,i,p,e.id,r);s&&h.push(s)}),{id:e.id,title:n,description:e.description||`Section for ${n}`,concepts:h,columns:c,expanded:!1,metadata:{roleURI:e.roleURI,originalRole:e.role}}}static buildConceptTree(e,t,i,o,r,s,n="en"){const a=this.getPreferredLabel(e.labels,n),l=[];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,n);r&&l.push(r)})}const d=[];e.children&&e.children.length>0&&e.children.forEach(e=>{const a=this.buildConceptTree(e,t+1,i,o,r,s,n);a&&d.push(a)});return l.length>0||d.length>0?{id:this.createUniqueConceptId(e,s),originalConceptId:e.id,name:e.conceptName,label:a,description:`${e.conceptName} (${e.type})`,level:t,children:d,fields:l,collapsed:t>0,abstract:e.elementAbstract,periodType:e.periodType}:null}static createFieldFromConcept(e,t,i,o,r="en"){const s=this.mapXBRLTypeToFieldType(e.type),n=this.getPreferredLabel(e.labels,r);let a;a=o||("instant"===e.periodType?"instant":"duration"===e.periodType?"duration":"default");const l={id:`${e.id}_${a}_field`,conceptId:e.id,columnId:a,type:s,label:n,placeholder:`Enter ${n.toLowerCase()}`,required:!1,disabled:e.elementAbstract,defaultValue:null};return"duration"!==e.periodType&&"instant"!==e.periodType||(l.periodStartDate=t||"2025-01-01",l.periodEndDate=i||"2025-12-31"),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 s=o.find(e=>"http://www.xbrl.org/2003/role/label"===e.role);if(s)return s.label;const n=o.find(e=>"http://www.xbrl.org/2003/role/terseLabel"===e.role);return n?n.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 generateDefaultColumnsForRole(e,t,i,o,r,s){var n,a;const l=r||this.getAllNonAbstractConcepts(e),d=s||new Set(l.filter(e=>e.periodType).map(e=>e.periodType));if(0===l.length)return[{id:"default",title:"Value",description:"Default value column",type:"base",order:0,removable:!1}];let c=[];if(1===(null==(n=null==o?void 0:o.items)?void 0:n.length)){const e=o.items[0];1===e.dimensions.length?c=this.generateSingleDimensionColumns(e.dimensions[0],t,i,d):e.dimensions.length>1&&(c=this.generateMultiDimensionColumns(e.dimensions,t,i,d))}else(null==(a=null==o?void 0:o.items)?void 0:a.length)&&o.items.length;const p=[];return c.length>0?p.push(...c):0===d.size?p.push({id:"default",title:"Value",description:"Default value column",type:"base",order:0,removable:!1}):1===d.size&&d.has("instant")?p.push({id:"instant",title:"Current",description:`Values as of ${t}`,type:"base",order:0,removable:!1}):1===d.size&&d.has("duration")?p.push({id:"duration",title:"Current Period",description:`Period: ${t} to ${i}`,type:"base",order:0,removable:!1}):(p.push({id:"duration",title:"Current Period",description:`Period: ${t} to ${i}`,type:"base",order:0,removable:!1}),p.push({id:"instant",title:"Current",description:`Values as of ${t}`,type:"base",order:1,removable:!1})),p}static generateSingleDimensionColumns(e,t,i,o){var r,s,n;if(e.typedMember&&(!e.members||0===e.members.length)){const s=(null==(r=e.labels.find(e=>"http://www.xbrl.org/2003/role/label"===e.role))?void 0:r.label)||e.conceptName,n={axisId:e.id,axisLabel:s,typedMemberId:e.typedMember.id,dimensionKey:`${s} | [Typed Input]`,dimensionIdKey:`${e.id}|[typed]`},a=[];return 0===o.size?a.push({id:"typed-default",title:s,description:"Typed dimension input column",type:"dimension",dimensionData:{dimensionId:"typed-default",axisId:n.axisId,memberId:"[typed]",memberValue:"Typed Input",memberLabel:"Typed Input",axis:n.axisLabel,axisLabel:n.axisLabel,memberKey:n.dimensionKey,dimensionIdKey:n.dimensionIdKey,hasTypedMembers:!0,typedMemberId:n.typedMemberId,typedMembers:[{axisId:n.axisId,axisLabel:n.axisLabel,typedMemberId:n.typedMemberId,memberLabel:n.axisLabel}]},order:0,removable:!1}):1===o.size&&o.has("instant")?a.push({id:"typed-instant",title:`${s} [Typed Input Available]`,description:`Typed values as of ${t}`,type:"dimension",dimensionData:{dimensionId:"typed-instant",axisId:n.axisId,memberId:"[typed]",memberValue:"Typed Input",memberLabel:"Typed Input",axis:n.axisLabel,axisLabel:n.axisLabel,memberKey:n.dimensionKey,dimensionIdKey:n.dimensionIdKey,hasTypedMembers:!0,typedMemberId:n.typedMemberId,typedMembers:[{axisId:n.axisId,axisLabel:n.axisLabel,typedMemberId:n.typedMemberId,memberLabel:n.axisLabel}]},order:0,removable:!1}):1===o.size&&o.has("duration")?a.push({id:"typed-duration",title:`${s} [Typed Input Available]`,description:`Typed values for period ${t} to ${i}`,type:"dimension",dimensionData:{dimensionId:"typed-duration",axisId:n.axisId,memberId:"[typed]",memberValue:"Typed Input",memberLabel:"Typed Input",axis:n.axisLabel,axisLabel:n.axisLabel,memberKey:n.dimensionKey,dimensionIdKey:n.dimensionIdKey,hasTypedMembers:!0,typedMemberId:n.typedMemberId,typedMembers:[{axisId:n.axisId,axisLabel:n.axisLabel,typedMemberId:n.typedMemberId,memberLabel:n.axisLabel}]},order:0,removable:!1}):(a.push({id:"typed-duration",title:`${s} [Typed Input Available]`,description:`Typed values for period ${t} to ${i}`,type:"dimension",dimensionData:{dimensionId:"typed-duration",axisId:n.axisId,memberId:"[typed]",memberValue:"Typed Input",memberLabel:"Typed Input",axis:n.axisLabel,axisLabel:n.axisLabel,memberKey:n.dimensionKey,dimensionIdKey:n.dimensionIdKey,hasTypedMembers:!0,typedMemberId:n.typedMemberId,typedMembers:[{axisId:n.axisId,axisLabel:n.axisLabel,typedMemberId:n.typedMemberId,memberLabel:n.axisLabel}]},order:0,removable:!1}),a.push({id:"typed-instant",title:`${s} [Typed Input Available]`,description:`Typed values as of ${t}`,type:"dimension",dimensionData:{dimensionId:"typed-instant",axisId:n.axisId,memberId:"[typed]",memberValue:"Typed Input",memberLabel:"Typed Input",axis:n.axisLabel,axisLabel:n.axisLabel,memberKey:n.dimensionKey,dimensionIdKey:n.dimensionIdKey,hasTypedMembers:!0,typedMemberId:n.typedMemberId,typedMembers:[{axisId:n.axisId,axisLabel:n.axisLabel,typedMemberId:n.typedMemberId,memberLabel:n.axisLabel}]},order:1,removable:!1})),a}if(!e.members||!Array.isArray(e.members))return[];if(0===e.members.length)return[];const a=(null==(s=e.labels.find(e=>"http://www.xbrl.org/2003/role/label"===e.role))?void 0:s.label)||e.conceptName,l=e.members[0],d=(null==(n=l.labels.find(e=>"http://www.xbrl.org/2003/role/label"===e.role))?void 0:n.label)||l.conceptName,c={axisId:e.id,axisLabel:a,memberId:l.id,memberLabel:d,dimensionKey:`${a} | ${d}`,dimensionIdKey:`${e.id} | ${l.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}):1===o.size&&o.has("instant")?p.push({id:"instant",title:`${c.memberLabel}`,description:`Values as of ${t}`,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}):1===o.size&&o.has("duration")?p.push({id:"duration",title:`${c.memberLabel}`,description:`Period: ${t} to ${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}):(p.push({id:"duration",title:`${c.memberLabel}`,description:`Period: ${t} to ${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}),p.push({id:"instant",title:`${c.memberLabel}`,description:`Values as of ${t}`,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:1,removable:!1})),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 s=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} [Typed Input Available]`}]};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}})}}),n=this.generateDimensionCombinations(s),a=[];return n.forEach((e,r)=>{const s=e.map(e=>e.memberLabel).join(" | "),n=e.filter(e=>e.isTyped),l=e.filter(e=>!e.isTyped),d={dimensionId:`multi_${r}`,memberValue:s,memberLabel:s,combinations:l.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:s,dimensionIdKey:[...l.map(e=>`${e.axisId}|${e.memberId}`),...n.map(e=>`${e.axisId}|[typed]`)].join("::")};0===o.size||1===o.size&&o.has("duration")?a.push({id:`duration_${r}`,title:`${s}`,description:`Period: ${t} to ${i}`,type:"dimension",dimensionData:{...d,dimensionId:`duration_${r}`},order:2*r,removable:!1}):1===o.size&&o.has("instant")?a.push({id:`instant_${r}`,title:`${s}`,description:`Values as of ${t}`,type:"dimension",dimensionData:{...d,dimensionId:`instant_${r}`},order:2*r,removable:!1}):(a.push({id:`duration_${r}`,title:`${s}`,description:`Period: ${t} to ${i}`,type:"dimension",dimensionData:{...d,dimensionId:`duration_${r}`},order:2*r,removable:!1}),a.push({id:`instant_${r}`,title:`${s}`,description:`Values as of ${t}`,type:"dimension",dimensionData:{...d,dimensionId:`instant_${r}`},order:2*r+1,removable:!1}))}),a}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"}]}}var T=Object.defineProperty,E=Object.getOwnPropertyDescriptor,k=(e,t,i,o)=>{for(var r,s=o>1?void 0:o?E(t,i):t,n=e.length-1;n>=0;n--)(r=e[n])&&(s=(o?r(t,i,s):r(s))||s);return o&&s&&T(t,i,s),s};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=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.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":""),s=`${this.conceptId}__${this.columnId}`,n=`data[${this.conceptId}][${this.columnId}]`;switch(this.field.type){case"textarea":return e.html`
23
23
  <textarea
24
24
  id="${s}"
25
25
  name="${n}"