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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../node_modules/@lit/reactive-element/decorators/custom-element.js","../node_modules/@lit/reactive-element/css-tag.js","../node_modules/@lit/reactive-element/reactive-element.js","../node_modules/@lit/reactive-element/decorators/property.js","../node_modules/@lit/reactive-element/decorators/state.js","../src/utils/validation.ts","../src/utils/xbrl-form-builder.ts","../src/core/form-field.ts","../src/core/concept-tree.ts","../src/core/add-column-dialog.ts","../src/core/form-section.ts","../src/core/dynamic-form.ts","../src/index.ts"],"sourcesContent":["/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t=t=>(e,o)=>{void 0!==o?o.addInitializer((()=>{customElements.define(t,e)})):customElements.define(t,e)};export{t as customElement};\n//# sourceMappingURL=custom-element.js.map\n","/**\n * @license\n * Copyright 2019 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t=globalThis,e=t.ShadowRoot&&(void 0===t.ShadyCSS||t.ShadyCSS.nativeShadow)&&\"adoptedStyleSheets\"in Document.prototype&&\"replace\"in CSSStyleSheet.prototype,s=Symbol(),o=new WeakMap;class n{constructor(t,e,o){if(this._$cssResult$=!0,o!==s)throw Error(\"CSSResult is not constructable. Use `unsafeCSS` or `css` instead.\");this.cssText=t,this.t=e}get styleSheet(){let t=this.o;const s=this.t;if(e&&void 0===t){const e=void 0!==s&&1===s.length;e&&(t=o.get(s)),void 0===t&&((this.o=t=new CSSStyleSheet).replaceSync(this.cssText),e&&o.set(s,t))}return t}toString(){return this.cssText}}const r=t=>new n(\"string\"==typeof t?t:t+\"\",void 0,s),i=(t,...e)=>{const o=1===t.length?t[0]:e.reduce(((e,s,o)=>e+(t=>{if(!0===t._$cssResult$)return t.cssText;if(\"number\"==typeof t)return t;throw Error(\"Value passed to 'css' function must be a 'css' function result: \"+t+\". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.\")})(s)+t[o+1]),t[0]);return new n(o,t,s)},S=(s,o)=>{if(e)s.adoptedStyleSheets=o.map((t=>t instanceof CSSStyleSheet?t:t.styleSheet));else for(const e of o){const o=document.createElement(\"style\"),n=t.litNonce;void 0!==n&&o.setAttribute(\"nonce\",n),o.textContent=e.cssText,s.appendChild(o)}},c=e?t=>t:t=>t instanceof CSSStyleSheet?(t=>{let e=\"\";for(const s of t.cssRules)e+=s.cssText;return r(e)})(t):t;export{n as CSSResult,S as adoptStyles,i as css,c as getCompatibleStyle,e as supportsAdoptingStyleSheets,r as unsafeCSS};\n//# sourceMappingURL=css-tag.js.map\n","import{getCompatibleStyle as t,adoptStyles as s}from\"./css-tag.js\";export{CSSResult,css,supportsAdoptingStyleSheets,unsafeCSS}from\"./css-tag.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const{is:i,defineProperty:e,getOwnPropertyDescriptor:h,getOwnPropertyNames:r,getOwnPropertySymbols:o,getPrototypeOf:n}=Object,a=globalThis,c=a.trustedTypes,l=c?c.emptyScript:\"\",p=a.reactiveElementPolyfillSupport,d=(t,s)=>t,u={toAttribute(t,s){switch(s){case Boolean:t=t?l:null;break;case Object:case Array:t=null==t?t:JSON.stringify(t)}return t},fromAttribute(t,s){let i=t;switch(s){case Boolean:i=null!==t;break;case Number:i=null===t?null:Number(t);break;case Object:case Array:try{i=JSON.parse(t)}catch(t){i=null}}return i}},f=(t,s)=>!i(t,s),b={attribute:!0,type:String,converter:u,reflect:!1,useDefault:!1,hasChanged:f};Symbol.metadata??=Symbol(\"metadata\"),a.litPropertyMetadata??=new WeakMap;class y extends HTMLElement{static addInitializer(t){this._$Ei(),(this.l??=[]).push(t)}static get observedAttributes(){return this.finalize(),this._$Eh&&[...this._$Eh.keys()]}static createProperty(t,s=b){if(s.state&&(s.attribute=!1),this._$Ei(),this.prototype.hasOwnProperty(t)&&((s=Object.create(s)).wrapped=!0),this.elementProperties.set(t,s),!s.noAccessor){const i=Symbol(),h=this.getPropertyDescriptor(t,i,s);void 0!==h&&e(this.prototype,t,h)}}static getPropertyDescriptor(t,s,i){const{get:e,set:r}=h(this.prototype,t)??{get(){return this[s]},set(t){this[s]=t}};return{get:e,set(s){const h=e?.call(this);r?.call(this,s),this.requestUpdate(t,h,i)},configurable:!0,enumerable:!0}}static getPropertyOptions(t){return this.elementProperties.get(t)??b}static _$Ei(){if(this.hasOwnProperty(d(\"elementProperties\")))return;const t=n(this);t.finalize(),void 0!==t.l&&(this.l=[...t.l]),this.elementProperties=new Map(t.elementProperties)}static finalize(){if(this.hasOwnProperty(d(\"finalized\")))return;if(this.finalized=!0,this._$Ei(),this.hasOwnProperty(d(\"properties\"))){const t=this.properties,s=[...r(t),...o(t)];for(const i of s)this.createProperty(i,t[i])}const t=this[Symbol.metadata];if(null!==t){const s=litPropertyMetadata.get(t);if(void 0!==s)for(const[t,i]of s)this.elementProperties.set(t,i)}this._$Eh=new Map;for(const[t,s]of this.elementProperties){const i=this._$Eu(t,s);void 0!==i&&this._$Eh.set(i,t)}this.elementStyles=this.finalizeStyles(this.styles)}static finalizeStyles(s){const i=[];if(Array.isArray(s)){const e=new Set(s.flat(1/0).reverse());for(const s of e)i.unshift(t(s))}else void 0!==s&&i.push(t(s));return i}static _$Eu(t,s){const i=s.attribute;return!1===i?void 0:\"string\"==typeof i?i:\"string\"==typeof t?t.toLowerCase():void 0}constructor(){super(),this._$Ep=void 0,this.isUpdatePending=!1,this.hasUpdated=!1,this._$Em=null,this._$Ev()}_$Ev(){this._$ES=new Promise((t=>this.enableUpdating=t)),this._$AL=new Map,this._$E_(),this.requestUpdate(),this.constructor.l?.forEach((t=>t(this)))}addController(t){(this._$EO??=new Set).add(t),void 0!==this.renderRoot&&this.isConnected&&t.hostConnected?.()}removeController(t){this._$EO?.delete(t)}_$E_(){const t=new Map,s=this.constructor.elementProperties;for(const i of s.keys())this.hasOwnProperty(i)&&(t.set(i,this[i]),delete this[i]);t.size>0&&(this._$Ep=t)}createRenderRoot(){const t=this.shadowRoot??this.attachShadow(this.constructor.shadowRootOptions);return s(t,this.constructor.elementStyles),t}connectedCallback(){this.renderRoot??=this.createRenderRoot(),this.enableUpdating(!0),this._$EO?.forEach((t=>t.hostConnected?.()))}enableUpdating(t){}disconnectedCallback(){this._$EO?.forEach((t=>t.hostDisconnected?.()))}attributeChangedCallback(t,s,i){this._$AK(t,i)}_$ET(t,s){const i=this.constructor.elementProperties.get(t),e=this.constructor._$Eu(t,i);if(void 0!==e&&!0===i.reflect){const h=(void 0!==i.converter?.toAttribute?i.converter:u).toAttribute(s,i.type);this._$Em=t,null==h?this.removeAttribute(e):this.setAttribute(e,h),this._$Em=null}}_$AK(t,s){const i=this.constructor,e=i._$Eh.get(t);if(void 0!==e&&this._$Em!==e){const t=i.getPropertyOptions(e),h=\"function\"==typeof t.converter?{fromAttribute:t.converter}:void 0!==t.converter?.fromAttribute?t.converter:u;this._$Em=e;const r=h.fromAttribute(s,t.type);this[e]=r??this._$Ej?.get(e)??r,this._$Em=null}}requestUpdate(t,s,i){if(void 0!==t){const e=this.constructor,h=this[t];if(i??=e.getPropertyOptions(t),!((i.hasChanged??f)(h,s)||i.useDefault&&i.reflect&&h===this._$Ej?.get(t)&&!this.hasAttribute(e._$Eu(t,i))))return;this.C(t,s,i)}!1===this.isUpdatePending&&(this._$ES=this._$EP())}C(t,s,{useDefault:i,reflect:e,wrapped:h},r){i&&!(this._$Ej??=new Map).has(t)&&(this._$Ej.set(t,r??s??this[t]),!0!==h||void 0!==r)||(this._$AL.has(t)||(this.hasUpdated||i||(s=void 0),this._$AL.set(t,s)),!0===e&&this._$Em!==t&&(this._$Eq??=new Set).add(t))}async _$EP(){this.isUpdatePending=!0;try{await this._$ES}catch(t){Promise.reject(t)}const t=this.scheduleUpdate();return null!=t&&await t,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){if(!this.isUpdatePending)return;if(!this.hasUpdated){if(this.renderRoot??=this.createRenderRoot(),this._$Ep){for(const[t,s]of this._$Ep)this[t]=s;this._$Ep=void 0}const t=this.constructor.elementProperties;if(t.size>0)for(const[s,i]of t){const{wrapped:t}=i,e=this[s];!0!==t||this._$AL.has(s)||void 0===e||this.C(s,void 0,i,e)}}let t=!1;const s=this._$AL;try{t=this.shouldUpdate(s),t?(this.willUpdate(s),this._$EO?.forEach((t=>t.hostUpdate?.())),this.update(s)):this._$EM()}catch(s){throw t=!1,this._$EM(),s}t&&this._$AE(s)}willUpdate(t){}_$AE(t){this._$EO?.forEach((t=>t.hostUpdated?.())),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(t)),this.updated(t)}_$EM(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$ES}shouldUpdate(t){return!0}update(t){this._$Eq&&=this._$Eq.forEach((t=>this._$ET(t,this[t]))),this._$EM()}updated(t){}firstUpdated(t){}}y.elementStyles=[],y.shadowRootOptions={mode:\"open\"},y[d(\"elementProperties\")]=new Map,y[d(\"finalized\")]=new Map,p?.({ReactiveElement:y}),(a.reactiveElementVersions??=[]).push(\"2.1.1\");export{y as ReactiveElement,s as adoptStyles,u as defaultConverter,t as getCompatibleStyle,f as notEqual};\n//# sourceMappingURL=reactive-element.js.map\n","import{defaultConverter as t,notEqual as e}from\"../reactive-element.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const o={attribute:!0,type:String,converter:t,reflect:!1,hasChanged:e},r=(t=o,e,r)=>{const{kind:n,metadata:i}=r;let s=globalThis.litPropertyMetadata.get(i);if(void 0===s&&globalThis.litPropertyMetadata.set(i,s=new Map),\"setter\"===n&&((t=Object.create(t)).wrapped=!0),s.set(r.name,t),\"accessor\"===n){const{name:o}=r;return{set(r){const n=e.get.call(this);e.set.call(this,r),this.requestUpdate(o,n,t)},init(e){return void 0!==e&&this.C(o,void 0,t,e),e}}}if(\"setter\"===n){const{name:o}=r;return function(r){const n=this[o];e.call(this,r),this.requestUpdate(o,n,t)}}throw Error(\"Unsupported decorator location: \"+n)};function n(t){return(e,o)=>\"object\"==typeof o?r(t,e,o):((t,e,o)=>{const r=e.hasOwnProperty(o);return e.constructor.createProperty(o,t),r?Object.getOwnPropertyDescriptor(e,o):void 0})(t,e,o)}export{n as property,r as standardProperty};\n//# sourceMappingURL=property.js.map\n","import{property as t}from\"./property.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */function r(r){return t({...r,state:!0,attribute:!1})}export{r as state};\n//# sourceMappingURL=state.js.map\n","import { ValidationRule, ValidationError, FieldType } from '../schema/types';\n\nexport class FormValidator {\n /**\n * Validates a field value against its validation rules\n */\n static validateField(\n fieldId: string,\n conceptId: string,\n columnId: string,\n value: any,\n fieldType: FieldType,\n rules: ValidationRule[] = []\n ): ValidationError[] {\n const errors: ValidationError[] = [];\n\n for (const rule of rules) {\n const error = this.validateRule(fieldId, conceptId, columnId, value, fieldType, rule);\n if (error) {\n errors.push(error);\n }\n }\n\n return errors;\n }\n\n /**\n * Validates a single rule against a value\n */\n private static validateRule(\n fieldId: string,\n conceptId: string,\n columnId: string,\n value: any,\n _fieldType: FieldType,\n rule: ValidationRule\n ): ValidationError | null {\n const isEmpty = value === null || value === undefined || value === '';\n\n switch (rule.type) {\n case 'required':\n if (isEmpty) {\n return this.createError(fieldId, conceptId, columnId, rule);\n }\n break;\n\n case 'min':\n if (!isEmpty && typeof value === 'number' && value < rule.value) {\n return this.createError(fieldId, conceptId, columnId, rule);\n }\n break;\n\n case 'max':\n if (!isEmpty && typeof value === 'number' && value > rule.value) {\n return this.createError(fieldId, conceptId, columnId, rule);\n }\n break;\n\n case 'minLength':\n if (!isEmpty && typeof value === 'string' && value.length < rule.value) {\n return this.createError(fieldId, conceptId, columnId, rule);\n }\n break;\n\n case 'maxLength':\n if (!isEmpty && typeof value === 'string' && value.length > rule.value) {\n return this.createError(fieldId, conceptId, columnId, rule);\n }\n break;\n\n case 'pattern':\n if (!isEmpty && typeof value === 'string') {\n const regex = new RegExp(rule.value);\n if (!regex.test(value)) {\n return this.createError(fieldId, conceptId, columnId, rule);\n }\n }\n break;\n\n case 'email':\n if (!isEmpty && typeof value === 'string') {\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n if (!emailRegex.test(value)) {\n return this.createError(fieldId, conceptId, columnId, rule);\n }\n }\n break;\n\n case 'url':\n if (!isEmpty && typeof value === 'string') {\n try {\n new URL(value);\n } catch {\n return this.createError(fieldId, conceptId, columnId, rule);\n }\n }\n break;\n\n case 'custom':\n // Custom validation would be handled by consuming application\n break;\n\n default:\n console.warn(`Unknown validation rule type: ${rule.type}`);\n }\n\n return null;\n }\n\n /**\n * Creates a validation error object\n */\n private static createError(\n fieldId: string,\n conceptId: string,\n columnId: string,\n rule: ValidationRule\n ): ValidationError {\n return {\n fieldId,\n conceptId,\n columnId,\n message: rule.message,\n severity: rule.severity || 'error',\n rule\n };\n }\n\n /**\n * Validates data type conversion\n */\n static validateDataType(value: any, fieldType: FieldType): { valid: boolean; convertedValue?: any; error?: string } {\n if (value === null || value === undefined || value === '') {\n return { valid: true, convertedValue: value };\n }\n\n switch (fieldType) {\n case 'number':\n case 'decimal':\n case 'currency':\n case 'percentage': {\n const numValue = Number(value);\n if (isNaN(numValue)) {\n return { valid: false, error: 'Invalid number format' };\n }\n return { valid: true, convertedValue: numValue };\n }\n\n case 'date': {\n const dateValue = new Date(value);\n if (isNaN(dateValue.getTime())) {\n return { valid: false, error: 'Invalid date format' };\n }\n return { valid: true, convertedValue: dateValue.toISOString().split('T')[0] };\n }\n\n case 'datetime': {\n const datetimeValue = new Date(value);\n if (isNaN(datetimeValue.getTime())) {\n return { valid: false, error: 'Invalid datetime format' };\n }\n return { valid: true, convertedValue: datetimeValue.toISOString() };\n }\n\n case 'boolean':\n if (typeof value === 'boolean') {\n return { valid: true, convertedValue: value };\n }\n if (typeof value === 'string') {\n const boolValue = value.toLowerCase();\n if (boolValue === 'true' || boolValue === '1') {\n return { valid: true, convertedValue: true };\n }\n if (boolValue === 'false' || boolValue === '0') {\n return { valid: true, convertedValue: false };\n }\n }\n return { valid: false, error: 'Invalid boolean format' };\n\n case 'text':\n case 'textarea':\n case 'email':\n case 'url':\n case 'tel':\n return { valid: true, convertedValue: String(value) };\n\n case 'select':\n case 'multiselect':\n return { valid: true, convertedValue: value };\n\n default:\n return { valid: true, convertedValue: value };\n }\n }\n\n /**\n * Formats value for display based on field type\n */\n static formatValue(value: any, fieldType: FieldType, locale = 'en-US'): string {\n if (value === null || value === undefined) return '';\n\n switch (fieldType) {\n case 'number':\n return new Intl.NumberFormat(locale).format(Number(value));\n\n case 'decimal':\n return new Intl.NumberFormat(locale, { \n minimumFractionDigits: 2,\n maximumFractionDigits: 2 \n }).format(Number(value));\n\n case 'currency':\n return new Intl.NumberFormat(locale, { \n style: 'currency',\n currency: 'USD' // Should be configurable\n }).format(Number(value));\n\n case 'percentage':\n return new Intl.NumberFormat(locale, { \n style: 'percent',\n minimumFractionDigits: 2\n }).format(Number(value) / 100);\n\n case 'date':\n return new Date(value).toLocaleDateString(locale);\n\n case 'datetime':\n return new Date(value).toLocaleString(locale);\n\n default:\n return String(value);\n }\n }\n}\n","import { \n XBRLFormInput, \n XBRLPresentationRole,\n XBRLPresentationConcept,\n XBRLLabel,\n XBRLHypercubeData,\n XBRLHypercubeRole\n} from '../schema/xbrl-types';\nimport { \n XBRLFormSchema, \n FormSection, \n FormField, \n FormColumn,\n ConceptTree,\n FieldType \n} from '../schema/types';\n\n/**\n * XBRL Form B private static assignColumnIdsToConceptFields(conceptTree: ConceptTree, columnIds: string[]): void {\n // Filter fields to only keep those that match available columns\n conceptTree.fields = conceptTree.fields.filter(field => {\n return columnIds.includes(field.columnId);\n });\n\n // Recursively process children\n if (conceptTree.children) {\n conceptTree.children.forEach(child => {\n this.assignColumnIdsToConceptFields(child, columnIds);\n });\n }\n }ransforms XBRL taxonomy data into Jupiter Dynamic Form schemas\n * Updated to handle actual presentation.json structure with roles\n */\nexport class XBRLFormBuilder {\n \n /**\n * Create unique concept ID by combining original ID with preferred label suffix\n * This handles cases where the same concept appears multiple times with different labels\n */\n private static createUniqueConceptId(concept: XBRLPresentationConcept): string {\n if (concept.preferredLabel && concept.preferredLabel.trim() !== '') {\n // Extract the last part of the role URL as suffix\n const roleMatch = concept.preferredLabel.match(/\\/([^\\/]+)$/);\n const roleSuffix = roleMatch ? roleMatch[1] : concept.preferredLabel.replace(/[^a-zA-Z0-9]/g, '_');\n return `${concept.id}_${roleSuffix}`;\n }\n return concept.id;\n }\n \n /**\n * Build form schema from XBRL input data\n * Creates accordion sections for each presentation role\n */\n static buildFormSchema(\n xbrlInput: XBRLFormInput, \n periodStartDate?: string, \n periodEndDate?: string\n ): XBRLFormSchema {\n if (!xbrlInput.presentation || xbrlInput.presentation.length === 0) {\n throw new Error('XBRL presentation data is required');\n }\n\n // Use the first entrypoint (typically there's only one)\n const presentationData = xbrlInput.presentation[0];\n \n // Extract hypercube data for dimension processing\n const hypercubeData = xbrlInput.hypercubes?.[0]; // Use first entrypoint\n \n const sections: FormSection[] = [];\n\n // Create a form section for each presentation role\n presentationData.roles.forEach(role => {\n const section = this.buildSectionFromRole(role, periodStartDate, periodEndDate, hypercubeData);\n \n // Post-process fields to assign correct column IDs based on generated columns\n this.assignFieldColumnIds(section);\n \n sections.push(section);\n });\n\n return {\n formId: `xbrl-form-${Date.now()}`,\n title: `XBRL Form - ${this.extractEntityName(presentationData.entrypoint)}`,\n description: `Dynamic form generated from XBRL taxonomy data`,\n version: '1.0.0',\n sections: sections\n };\n }\n\n /**\n * Build a form section from a presentation role\n */\n private static buildSectionFromRole(\n role: XBRLPresentationRole, \n periodStartDate?: string, \n periodEndDate?: string,\n hypercubeData?: XBRLHypercubeData\n ): FormSection {\n // Extract section title from role name (remove role number prefix)\n const title = this.extractRoleTitle(role.role);\n \n // Analyze period types in this role first to determine consistent column strategy\n const nonAbstractConcepts = this.getAllNonAbstractConcepts(role);\n const periodTypes = new Set(\n nonAbstractConcepts\n .filter(concept => concept.periodType)\n .map(concept => concept.periodType)\n );\n \n const roleInfo = { periodTypes };\n const conceptTrees: ConceptTree[] = [];\n\n // Process root concepts and build tree structure (if any exist)\n if (role.presentationLinkbase?.concepts) {\n role.presentationLinkbase.concepts.forEach(concept => {\n const conceptTree = this.buildConceptTree(concept, 0, periodStartDate, periodEndDate, roleInfo);\n if (conceptTree) {\n conceptTrees.push(conceptTree);\n }\n });\n }\n\n // Find matching hypercube role for dimension processing\n const hypercubeRole = hypercubeData?.roles.find(hr => hr.roleId === role.id);\n \n if (hypercubeRole) {\n console.log(`🏷️ Found matching hypercube role \"${role.id}\"`);\n } else {\n console.log(`❌ No hypercube role found for \"${role.id}\"`);\n }\n \n // Generate appropriate columns based on concept period types and hypercube dimensions\n const columns = this.generateDefaultColumnsForRole(role, periodStartDate || '2025-01-01', periodEndDate || '2025-12-31', hypercubeRole, nonAbstractConcepts, periodTypes);\n\n return {\n id: role.id,\n title: title,\n description: `Section for ${title}`,\n concepts: conceptTrees,\n columns: columns,\n expanded: false\n };\n }\n\n /**\n * Build concept tree from XBRL presentation concept\n */\n private static buildConceptTree(\n concept: XBRLPresentationConcept, \n level: number, \n periodStartDate?: string, \n periodEndDate?: string,\n roleInfo?: { periodTypes: Set<string> }\n ): ConceptTree | null {\n const label = this.getPreferredLabel(concept.labels);\n \n // Build fields for this concept (if not abstract)\n const fields: FormField[] = [];\n if (!concept.elementAbstract) {\n // For mixed period roles, only create fields for duration concepts in default column\n // Instant concepts will get fields when instant columns are added via add column dialog\n let shouldCreateField = true;\n if (roleInfo?.periodTypes && roleInfo.periodTypes.size > 1) {\n // Mixed period role - only create fields for duration concepts in default column\n if (concept.periodType === 'instant') {\n shouldCreateField = false;\n }\n }\n \n if (shouldCreateField) {\n // Determine the column ID based on role's period type distribution\n let columnId: string;\n \n if (!roleInfo?.periodTypes || roleInfo.periodTypes.size === 0) {\n columnId = 'default';\n } else if (roleInfo.periodTypes.size === 1 && roleInfo.periodTypes.has('instant')) {\n columnId = 'instant';\n } else if (roleInfo.periodTypes.size === 1 && roleInfo.periodTypes.has('duration')) {\n columnId = 'duration';\n } else {\n // Mixed period types - use 'period' column for duration concepts\n columnId = 'period';\n }\n \n const field = this.createFieldFromConcept(concept, periodStartDate, periodEndDate, columnId);\n if (field) fields.push(field);\n }\n }\n\n // Process children recursively\n const children: ConceptTree[] = [];\n if (concept.children && concept.children.length > 0) {\n concept.children.forEach(child => {\n const childTree = this.buildConceptTree(child, level + 1, periodStartDate, periodEndDate, roleInfo);\n if (childTree) {\n children.push(childTree);\n }\n });\n }\n\n return {\n id: this.createUniqueConceptId(concept), // Use unique ID for form management\n originalConceptId: concept.id, // Store original for submission data\n name: concept.conceptName,\n label: label,\n description: `${concept.conceptName} (${concept.type})`,\n level: level,\n children: children,\n fields: fields,\n collapsed: level > 0, // Collapse nested levels by default\n abstract: concept.elementAbstract,\n periodType: concept.periodType as 'instant' | 'duration'\n };\n }\n\n /**\n * Create form field from XBRL concept\n */\n private static createFieldFromConcept(\n concept: XBRLPresentationConcept, \n periodStartDate?: string, \n periodEndDate?: string,\n forcedColumnId?: string\n ): FormField | null {\n const fieldType = this.mapXBRLTypeToFieldType(concept.type);\n const label = this.getPreferredLabel(concept.labels);\n\n // Determine appropriate column ID based on concept's period type or forced value\n let columnId: string;\n \n if (forcedColumnId) {\n // Use the forced column ID if provided\n columnId = forcedColumnId;\n } else {\n // Determine column ID based on period type\n if (concept.periodType === 'instant') {\n columnId = 'instant';\n } else if (concept.periodType === 'duration') {\n columnId = 'duration'; // Single column for duration\n } else {\n columnId = 'default';\n }\n } const field: FormField = {\n id: `${concept.id}_${columnId}_field`,\n conceptId: concept.id,\n columnId: columnId,\n type: fieldType,\n label: label,\n placeholder: `Enter ${label.toLowerCase()}`,\n required: false, // Will be determined by validation rules\n disabled: concept.elementAbstract,\n defaultValue: null\n };\n\n // Add period information if the concept is period-specific\n if (concept.periodType === 'duration' || concept.periodType === 'instant') {\n field.periodStartDate = periodStartDate || '2025-01-01';\n field.periodEndDate = periodEndDate || '2025-12-31';\n }\n\n return field;\n }\n\n /**\n * Map XBRL data type to form field type\n */\n private static mapXBRLTypeToFieldType(xbrlType: string): FieldType {\n const typeMap: Record<string, FieldType> = {\n 'xbrli:stringItemType': 'text',\n 'xbrli:monetaryItemType': 'currency',\n 'xbrli:integerItemType': 'number',\n 'xbrli:decimalItemType': 'decimal',\n 'xbrli:percentItemType': 'percentage',\n 'xbrli:dateItemType': 'date',\n 'xbrli:booleanItemType': 'boolean',\n 'dtr-types:domainItemType': 'select',\n 'bw2-titel9:chamberOfCommerceRegistrationNumberItemType': 'text'\n };\n\n return typeMap[xbrlType] || 'text';\n }\n\n /**\n * Get preferred label from labels array\n */\n private static getPreferredLabel(labels: XBRLLabel[]): string {\n if (!labels || labels.length === 0) return 'Unnamed Concept';\n\n // Try to find preferred label\n const preferred = labels.find(l => l.preferredLabel);\n if (preferred) return preferred.label;\n\n // Try to find standard label\n const standard = labels.find(l => l.role === 'http://www.xbrl.org/2003/role/label');\n if (standard) return standard.label;\n\n // Try to find terse label\n const terse = labels.find(l => l.role === 'http://www.xbrl.org/2003/role/terseLabel');\n if (terse) return terse.label;\n\n // Return first available label\n return labels[0].label;\n }\n\n /**\n * Assign appropriate column IDs to fields based on section's generated columns\n */\n private static assignFieldColumnIds(section: FormSection): void {\n if (!section.columns || section.columns.length === 0) {\n return;\n }\n\n // Get available column IDs\n const columnIds = section.columns.map(col => col.id);\n \n // Process all fields in all concept trees\n section.concepts.forEach(conceptTree => {\n this.assignColumnIdsToConceptFields(conceptTree, columnIds);\n });\n }\n\n /**\n * Recursively assign column IDs to fields in a concept tree\n */\n private static assignColumnIdsToConceptFields(conceptTree: ConceptTree, columnIds: string[]): void {\n // Filter fields to only keep those that match available columns\n conceptTree.fields = conceptTree.fields.filter(field => {\n return columnIds.includes(field.columnId);\n });\n\n // Process children recursively\n if (conceptTree.children) {\n conceptTree.children.forEach(child => {\n this.assignColumnIdsToConceptFields(child, columnIds);\n });\n }\n }\n\n /**\n * Count total fields in a concept tree recursively\n */\n private static countFieldsInTree(conceptTree: ConceptTree): number {\n let count = conceptTree.fields.length;\n if (conceptTree.children) {\n conceptTree.children.forEach(child => {\n count += this.countFieldsInTree(child);\n });\n }\n return count;\n }\n\n /**\n * Get all non-abstract concepts from a role recursively\n */\n static getAllNonAbstractConcepts(role: XBRLPresentationRole): XBRLPresentationConcept[] {\n const nonAbstractConcepts: XBRLPresentationConcept[] = [];\n \n if (role.presentationLinkbase?.concepts) {\n role.presentationLinkbase.concepts.forEach(concept => {\n this.collectNonAbstractConcepts(concept, nonAbstractConcepts);\n });\n }\n \n return nonAbstractConcepts;\n }\n\n /**\n * Recursively collect non-abstract concepts from a concept tree\n */\n private static collectNonAbstractConcepts(\n concept: XBRLPresentationConcept, \n collection: XBRLPresentationConcept[]\n ): void {\n // Add this concept if it's not abstract\n if (!concept.elementAbstract) {\n collection.push(concept);\n }\n \n // Recursively process children\n if (concept.children && concept.children.length > 0) {\n concept.children.forEach(child => {\n this.collectNonAbstractConcepts(child, collection);\n });\n }\n }\n\n /**\n * Generate default columns based on period types of non-abstract concepts in a role\n */\n static generateDefaultColumnsForRole(\n role: XBRLPresentationRole, \n periodStartDate: string, \n periodEndDate: string,\n hypercubeRole?: XBRLHypercubeRole,\n nonAbstractConcepts?: XBRLPresentationConcept[],\n rolePeriodTypes?: Set<string>\n ): FormColumn[] {\n // Use pre-calculated values if provided, otherwise calculate them\n const concepts = nonAbstractConcepts || this.getAllNonAbstractConcepts(role);\n const periodTypes = rolePeriodTypes || new Set(\n concepts\n .filter(concept => concept.periodType) // Only concepts with period type\n .map(concept => concept.periodType)\n );\n \n console.log(`📊 Analyzing role \"${role.role}\" with ${concepts.length} non-abstract concepts`);\n \n if (concepts.length === 0) {\n // No non-abstract concepts, return single default column\n console.log('📊 No non-abstract concepts found, using default column');\n return [{\n id: 'default',\n title: 'Value',\n description: 'Default value column',\n type: 'base',\n order: 0,\n removable: false\n }];\n }\n \n // Check for simple hypercube dimensions (1 item, 1 dimension case)\n let dimensionInfo = null;\n if (hypercubeRole?.items?.length === 1) {\n const item = hypercubeRole.items[0];\n console.log(`🔍 Processing hypercube item for role \"${role.role}\":`, {\n itemId: item.id,\n conceptIds: item.conceptIds?.length || 0,\n dimensions: item.dimensions.length\n });\n \n if (item.dimensions.length === 1) {\n const dimension = item.dimensions[0];\n console.log(`📊 Found single dimension:`, {\n id: dimension.id,\n conceptName: dimension.conceptName,\n membersCount: dimension.members.length\n });\n \n if (dimension.members.length > 0) {\n // Find axis label\n const axisLabel = dimension.labels.find(l => l.role === 'http://www.xbrl.org/2003/role/label')?.label || dimension.conceptName;\n \n // For now, use the first member (following requirement for simple case)\n const firstMember = dimension.members[0];\n const memberLabel = firstMember.labels.find(l => l.role === 'http://www.xbrl.org/2003/role/label')?.label || firstMember.conceptName;\n \n dimensionInfo = {\n axisId: dimension.id,\n axisLabel,\n memberId: firstMember.id,\n memberLabel,\n dimensionKey: `${axisLabel} | ${memberLabel}`,\n dimensionIdKey: `${dimension.id} | ${firstMember.id}`\n };\n \n console.log(`📊 Generated dimension info:`, dimensionInfo);\n }\n } else {\n console.log(`⚠️ Multiple dimensions found (${item.dimensions.length}), skipping for now`);\n }\n } else if (hypercubeRole?.items?.length && hypercubeRole.items.length > 1) {\n console.log(`⚠️ Multiple items found (${hypercubeRole.items.length}), skipping for now`);\n }\n \n // Analyze period types (use the pre-calculated or newly calculated set)\n console.log(`📅 Found period types: ${Array.from(periodTypes).join(', ')}`);\n \n const columns: FormColumn[] = [];\n \n if (periodTypes.size === 0) {\n // No period types specified, use single default column\n console.log('📅 No period types found, using default column');\n const columnTitle = dimensionInfo ? `${dimensionInfo.memberLabel}` : 'Value';\n columns.push({\n id: 'default',\n title: columnTitle,\n description: 'Default value column',\n type: dimensionInfo ? 'dimension' : 'base',\n dimensionData: dimensionInfo ? {\n dimensionId: 'default',\n axisId: dimensionInfo.axisId,\n memberId: dimensionInfo.memberId,\n memberValue: dimensionInfo.memberLabel,\n memberLabel: dimensionInfo.memberLabel,\n axis: dimensionInfo.axisLabel,\n axisLabel: dimensionInfo.axisLabel,\n memberKey: dimensionInfo.dimensionKey,\n dimensionIdKey: dimensionInfo.dimensionIdKey\n } : undefined,\n order: 0,\n removable: false\n });\n } else if (periodTypes.size === 1 && periodTypes.has('instant')) {\n // All concepts are instant - single column with start date\n console.log('📅 All concepts are instant type, creating single column');\n const columnTitle = dimensionInfo ? `${dimensionInfo.memberLabel} (${this.formatDateForDisplay(periodStartDate)})` : `As of ${this.formatDateForDisplay(periodStartDate)}`;\n columns.push({\n id: 'instant',\n title: columnTitle,\n description: `Values as of ${periodStartDate}`,\n type: dimensionInfo ? 'dimension' : 'base',\n dimensionData: dimensionInfo ? {\n dimensionId: 'instant',\n axisId: dimensionInfo.axisId,\n memberId: dimensionInfo.memberId,\n memberValue: dimensionInfo.memberLabel,\n memberLabel: dimensionInfo.memberLabel,\n axis: dimensionInfo.axisLabel,\n axisLabel: dimensionInfo.axisLabel,\n memberKey: dimensionInfo.dimensionKey,\n dimensionIdKey: dimensionInfo.dimensionIdKey\n } : undefined,\n order: 0,\n removable: false\n });\n } else if (periodTypes.size === 1 && periodTypes.has('duration')) {\n // All concepts are duration - single column with period range\n console.log('📅 All concepts are duration type, creating single column with period range');\n const columnTitle = dimensionInfo ? `${dimensionInfo.memberLabel} (${this.formatDateForDisplay(periodStartDate)} / ${this.formatDateForDisplay(periodEndDate)})` : `${this.formatDateForDisplay(periodStartDate)} / ${this.formatDateForDisplay(periodEndDate)}`;\n columns.push({\n id: 'duration',\n title: columnTitle,\n description: `Period: ${periodStartDate} to ${periodEndDate}`,\n type: dimensionInfo ? 'dimension' : 'base',\n dimensionData: dimensionInfo ? {\n dimensionId: 'duration',\n axisId: dimensionInfo.axisId,\n memberId: dimensionInfo.memberId,\n memberValue: dimensionInfo.memberLabel,\n memberLabel: dimensionInfo.memberLabel,\n axis: dimensionInfo.axisLabel,\n axisLabel: dimensionInfo.axisLabel,\n memberKey: dimensionInfo.dimensionKey,\n dimensionIdKey: dimensionInfo.dimensionIdKey\n } : undefined,\n order: 0,\n removable: false\n });\n \n console.log('📅 Created duration column:', columns.map(c => ({ id: c.id, title: c.title })));\n } else {\n // Mixed period types - single column with period range \n console.log('📅 Mixed period types found, creating single column with period range');\n const columnTitle = dimensionInfo ? `${dimensionInfo.memberLabel} (${this.formatDateForDisplay(periodStartDate)} / ${this.formatDateForDisplay(periodEndDate)})` : `${this.formatDateForDisplay(periodStartDate)} / ${this.formatDateForDisplay(periodEndDate)}`;\n columns.push({\n id: 'period',\n title: columnTitle,\n description: `Period: ${periodStartDate} to ${periodEndDate}`,\n type: dimensionInfo ? 'dimension' : 'base',\n dimensionData: dimensionInfo ? {\n dimensionId: 'period',\n axisId: dimensionInfo.axisId,\n memberId: dimensionInfo.memberId,\n memberValue: dimensionInfo.memberLabel,\n memberLabel: dimensionInfo.memberLabel,\n axis: dimensionInfo.axisLabel,\n axisLabel: dimensionInfo.axisLabel,\n memberKey: dimensionInfo.dimensionKey,\n dimensionIdKey: dimensionInfo.dimensionIdKey\n } : undefined,\n order: 0,\n removable: false\n });\n }\n \n if (dimensionInfo) {\n console.log(`📊 Applied dimension to ${columns.length} columns: ${dimensionInfo.dimensionKey}`);\n }\n \n console.log(`📊 Generated ${columns.length} columns for role \"${role.role}\":`, columns.map(c => c.title));\n return columns;\n }\n\n /**\n * Format date for display in column headers\n */\n private static formatDateForDisplay(dateString: string): string {\n try {\n const date = new Date(dateString);\n return date.toLocaleDateString('en-US', {\n year: 'numeric',\n month: 'short',\n day: 'numeric'\n });\n } catch {\n return dateString;\n }\n }\n\n /**\n * Extract entity name from entrypoint URL\n */\n private static extractEntityName(entrypoint: string): string {\n try {\n const url = new URL(entrypoint);\n const pathParts = url.pathname.split('/');\n const filename = pathParts[pathParts.length - 1];\n return filename.replace('.xsd', '').replace(/[^a-zA-Z0-9]/g, ' ').trim() || 'Entity';\n } catch {\n return 'Entity';\n }\n }\n\n /**\n * Extract role title from role string\n */\n private static extractRoleTitle(role: string): string {\n // Remove role number prefix like \"[000001] \" and return the title\n const match = role.match(/^\\[[\\d]+\\]\\s*(.+)$/);\n return match ? match[1].trim() : role;\n }\n\n /**\n * Extract role order from role string\n */\n private static extractRoleOrder(role: string): number {\n const match = role.match(/^\\[([\\d]+)\\]/);\n return match ? parseInt(match[1], 10) : 0;\n }\n\n /**\n * Build columns from XBRL hypercube data (placeholder for now)\n */\n static buildColumnsFromHypercubes(/* _hypercubes: any[] */): any[] {\n // For now, return default column structure\n // This will be expanded when we implement hypercube support\n return [{\n id: 'default',\n label: 'Values',\n type: 'data'\n }];\n }\n}\n","import { LitElement, html, css, PropertyValues } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { FormField, ValidationError } from '../schema/types';\nimport { FormValidator } from '../utils/validation';\n\n@customElement('jupiter-form-field')\nexport class JupiterFormField extends LitElement {\n @property({ type: Object }) field!: FormField;\n @property({ type: String }) conceptId!: string;\n @property({ type: String }) columnId!: string;\n @property() value: any = null;\n @property({ type: Boolean }) disabled = false;\n @property({ type: String }) locale = 'en-US';\n @property({ type: Boolean }) hideLabel = false;\n\n @state() private _errors: ValidationError[] = [];\n @state() private _touched = false;\n\n static styles = css`\n :host {\n display: block;\n margin-bottom: 0px; /* Remove bottom margin for table layout */\n }\n\n :host([hideLabel]) {\n margin-bottom: 0px;\n }\n\n .field-container {\n position: relative;\n }\n\n .field-label {\n display: block;\n font-weight: 500;\n margin-bottom: 4px;\n color: var(--jupiter-text-primary, #333);\n font-size: 14px;\n }\n\n .field-label.required::after {\n content: ' *';\n color: var(--jupiter-error-color, #d32f2f);\n }\n\n .field-input {\n width: 100%;\n padding: 6px 8px; /* Reduced padding for table cells */\n border: 1px solid var(--jupiter-border-color, #ddd);\n border-radius: 4px;\n font-size: 13px; /* Slightly smaller font for table */\n font-family: inherit;\n background: var(--jupiter-input-background, #fff);\n color: var(--jupiter-text-primary, #333);\n box-sizing: border-box;\n }\n\n .field-input:focus {\n outline: none;\n border-color: var(--jupiter-primary-color, #1976d2);\n box-shadow: 0 0 0 2px var(--jupiter-primary-color-light, rgba(25, 118, 210, 0.2));\n }\n\n .field-input:disabled {\n background: var(--jupiter-disabled-background, #f5f5f5);\n color: var(--jupiter-disabled-text, #999);\n cursor: not-allowed;\n }\n\n .field-input.error {\n border-color: var(--jupiter-error-color, #d32f2f);\n }\n\n .field-input.warning {\n border-color: var(--jupiter-warning-color, #ff9800);\n }\n\n .field-errors {\n margin-top: 4px;\n }\n\n .field-error {\n display: block;\n font-size: 12px;\n margin-bottom: 2px;\n }\n\n .field-error.error {\n color: var(--jupiter-error-color, #d32f2f);\n }\n\n .field-error.warning {\n color: var(--jupiter-warning-color, #ff9800);\n }\n\n .field-error.info {\n color: var(--jupiter-info-color, #2196f3);\n }\n\n select.field-input {\n appearance: none;\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='m6 8 4 4 4-4'/%3e%3c/svg%3e\");\n background-position: right 8px center;\n background-repeat: no-repeat;\n background-size: 16px;\n padding-right: 32px;\n }\n\n textarea.field-input {\n resize: vertical;\n min-height: 60px;\n }\n\n .checkbox-container {\n display: flex;\n align-items: center;\n gap: 8px;\n }\n\n .checkbox-container input[type=\"checkbox\"] {\n margin: 0;\n width: auto;\n }\n `;\n\n protected willUpdate(changedProperties: PropertyValues) {\n if (changedProperties.has('value') || changedProperties.has('field')) {\n this._validateField();\n }\n }\n\n private _validateField() {\n if (this.field?.validation) {\n this._errors = FormValidator.validateField(\n this.field.id,\n this.conceptId,\n this.columnId,\n this.value,\n this.field.type,\n this.field.validation\n );\n }\n }\n\n private _handleInput(event: Event) {\n const target = event.target as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\n let value: any = target.value;\n\n // Convert value based on field type\n if (this.field.type === 'number' || this.field.type === 'decimal') {\n value = value === '' ? null : Number(value);\n } else if (this.field.type === 'boolean') {\n value = (target as HTMLInputElement).checked;\n }\n\n this.value = value;\n this._touched = true;\n \n this.dispatchEvent(new CustomEvent('field-change', {\n detail: {\n fieldId: this.field.id,\n conceptId: this.conceptId,\n columnId: this.columnId,\n value,\n oldValue: this.value\n },\n bubbles: true\n }));\n }\n\n private _handleFocus() {\n this.dispatchEvent(new CustomEvent('field-focus', {\n detail: {\n fieldId: this.field.id,\n conceptId: this.conceptId,\n columnId: this.columnId\n },\n bubbles: true\n }));\n }\n\n private _handleBlur() {\n this._touched = true;\n this.dispatchEvent(new CustomEvent('field-blur', {\n detail: {\n fieldId: this.field.id,\n conceptId: this.conceptId,\n columnId: this.columnId\n },\n bubbles: true\n }));\n }\n\n private _renderInput() {\n const hasErrors = this._errors.some(e => e.severity === 'error');\n const hasWarnings = this._errors.some(e => e.severity === 'warning');\n const cssClass = `field-input ${hasErrors ? 'error' : hasWarnings ? 'warning' : ''}`;\n \n // Generate unique field identifiers for form submission\n const fieldId = `${this.conceptId}__${this.columnId}`;\n const fieldName = `data[${this.conceptId}][${this.columnId}]`;\n\n switch (this.field.type) {\n case 'textarea':\n return html`\n <textarea\n id=\"${fieldId}\"\n name=\"${fieldName}\"\n class=\"${cssClass}\"\n .value=\"${this.value || ''}\"\n ?disabled=\"${this.disabled || this.field.disabled}\"\n placeholder=\"${this.field.placeholder || ''}\"\n @input=\"${this._handleInput}\"\n @focus=\"${this._handleFocus}\"\n @blur=\"${this._handleBlur}\"\n ></textarea>\n `;\n\n case 'select':\n return html`\n <select\n id=\"${fieldId}\"\n name=\"${fieldName}\"\n class=\"${cssClass}\"\n .value=\"${this.value || ''}\"\n ?disabled=\"${this.disabled || this.field.disabled}\"\n @change=\"${this._handleInput}\"\n @focus=\"${this._handleFocus}\"\n @blur=\"${this._handleBlur}\"\n >\n <option value=\"\">Select...</option>\n ${this.field.options?.map(option => html`\n <option \n value=\"${option.value}\"\n ?disabled=\"${option.disabled}\"\n ?selected=\"${this.value === option.value}\"\n >\n ${option.label}\n </option>\n `)}\n </select>\n `;\n\n case 'boolean':\n return html`\n <div class=\"checkbox-container\">\n <input\n id=\"${fieldId}\"\n name=\"${fieldName}\"\n type=\"checkbox\"\n class=\"field-input\"\n .checked=\"${Boolean(this.value)}\"\n ?disabled=\"${this.disabled || this.field.disabled}\"\n @change=\"${this._handleInput}\"\n @focus=\"${this._handleFocus}\"\n @blur=\"${this._handleBlur}\"\n />\n <span>${this.field.label}</span>\n </div>\n `;\n\n default:\n return html`\n <input\n id=\"${fieldId}\"\n name=\"${fieldName}\"\n type=\"${this._getInputType()}\"\n class=\"${cssClass}\"\n .value=\"${this.value || ''}\"\n ?disabled=\"${this.disabled || this.field.disabled}\"\n placeholder=\"${this.field.placeholder || ''}\"\n @input=\"${this._handleInput}\"\n @focus=\"${this._handleFocus}\"\n @blur=\"${this._handleBlur}\"\n />\n `;\n }\n }\n\n private _getInputType(): string {\n switch (this.field.type) {\n case 'number':\n case 'decimal':\n case 'currency':\n case 'percentage':\n return 'number';\n case 'date':\n return 'date';\n case 'datetime':\n return 'datetime-local';\n case 'email':\n return 'email';\n case 'url':\n return 'url';\n case 'tel':\n return 'tel';\n default:\n return 'text';\n }\n }\n\n render() {\n const showLabel = !this.hideLabel && this.field.type !== 'boolean';\n\n return html`\n <div class=\"field-container\">\n ${showLabel ? html`\n <label class=\"field-label ${this.field.required ? 'required' : ''}\">\n ${this.field.label}\n </label>\n ` : ''}\n \n ${this._renderInput()}\n \n ${this._errors.length > 0 && this._touched ? html`\n <div class=\"field-errors\">\n ${this._errors.map(error => html`\n <span class=\"field-error ${error.severity}\">\n ${error.message}\n </span>\n `)}\n </div>\n ` : ''}\n </div>\n `;\n }\n}\n","import { LitElement, html, css } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { ConceptTree, FormColumn, FormField } from '../schema/types';\nimport './form-field';\n\n@customElement('jupiter-concept-tree')\nexport class JupiterConceptTree extends LitElement {\n @property({ type: Object }) concept!: ConceptTree;\n @property({ type: Array }) columns: FormColumn[] = [];\n @property({ type: Object }) formData: Record<string, any> = {};\n @property({ type: Boolean }) disabled = false;\n @property({ type: String }) locale = 'en-US';\n @property({ type: Set }) expandedConcepts: Set<string> = new Set();\n\n @state() private _expanded = true;\n\n static styles = css`\n :host {\n /* Component renders table cells directly */\n display: contents;\n }\n\n .concept-name-cell {\n vertical-align: top;\n padding: 2px 4px;\n border: 1px solid var(--jupiter-border-color, #ddd);\n border-bottom: none;\n background: var(--jupiter-concept-background, #f8f9fa);\n position: sticky;\n left: 0;\n z-index: 1;\n width: 300px;\n min-width: 300px;\n max-width: 300px;\n }\n\n .concept-name-cell.abstract {\n background: var(--jupiter-abstract-background, #f0f2f5);\n font-weight: 600;\n }\n\n .concept-name-cell.leaf {\n background: var(--jupiter-leaf-background, #fff);\n font-weight: 400;\n }\n\n .concept-content {\n display: flex;\n align-items: center;\n min-height: 28px;\n font-size: 13px;\n line-height: 1.3;\n width: 100%;\n overflow: hidden;\n }\n\n .concept-indent {\n width: calc(var(--level, 0) * 16px);\n flex-shrink: 0;\n }\n\n .concept-toggle {\n width: 14px;\n height: 14px;\n margin-right: 6px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 10px;\n transition: transform 0.2s ease;\n cursor: pointer;\n }\n\n .concept-toggle.expanded {\n transform: rotate(90deg);\n }\n\n .concept-toggle.no-children {\n visibility: hidden;\n }\n\n .concept-label {\n flex: 1;\n color: var(--jupiter-text-primary, #333);\n cursor: pointer;\n word-wrap: break-word;\n overflow-wrap: break-word;\n hyphens: auto;\n line-height: 1.3;\n min-width: 0; /* Allows flex item to shrink below content size */\n }\n\n .field-cell {\n vertical-align: middle;\n padding: 2px 6px;\n border: 1px solid var(--jupiter-border-color, #ddd);\n border-bottom: none;\n background: var(--jupiter-cell-background, #fff);\n min-height: 28px;\n text-align: center;\n min-width: 180px;\n width: 180px;\n }\n\n .field-cell.empty {\n background: var(--jupiter-empty-cell-background, #f8f9fa);\n }\n\n .field-cell.abstract-row {\n background: var(--jupiter-abstract-cell-background, #f0f2f5);\n }\n\n /* Children are rendered as separate table rows, not nested */\n .children-wrapper {\n display: none;\n }\n `;\n\n connectedCallback() {\n super.connectedCallback();\n this._expanded = this.expandedConcepts.has(this.concept.id);\n }\n\n willUpdate(changedProperties: Map<string, unknown>) {\n super.willUpdate(changedProperties);\n if (changedProperties.has('expandedConcepts')) {\n this._expanded = this.expandedConcepts.has(this.concept.id);\n }\n }\n\n private _toggleExpanded() {\n this._expanded = !this._expanded;\n \n this.dispatchEvent(new CustomEvent('concept-expand', {\n detail: {\n conceptId: this.concept.id,\n expanded: this._expanded\n },\n bubbles: true\n }));\n }\n\n private _getFieldForColumn(columnId: string): FormField | undefined {\n return this.concept.fields?.find(field => field.columnId === columnId);\n }\n\n private _getFieldValue(field: FormField): any {\n return this.formData[this.concept.id]?.[field.columnId];\n }\n\n private _handleFieldChange(event: CustomEvent) {\n event.stopPropagation();\n // Re-dispatch with updated detail\n this.dispatchEvent(new CustomEvent('field-change', {\n detail: event.detail,\n bubbles: true\n }));\n }\n\n render() {\n const hasChildren = this.concept.children && this.concept.children.length > 0;\n const level = this.concept.level || 0;\n const isAbstract = this.concept.abstract || false;\n\n return html`\n <!-- Concept Name Cell (Left Column) -->\n <td class=\"concept-name-cell ${isAbstract ? 'abstract' : (hasChildren ? '' : 'leaf')}\">\n <div class=\"concept-content\" style=\"--level: ${level}\">\n <div class=\"concept-indent\"></div>\n <div class=\"concept-toggle ${hasChildren ? (this._expanded ? 'expanded' : '') : 'no-children'}\"\n @click=\"${this._toggleExpanded}\">\n ${hasChildren ? '▶' : ''}\n </div>\n <div class=\"concept-label\" \n @click=\"${this._toggleExpanded}\"\n title=\"${this.concept.id}${this.concept.description ? ' - ' + this.concept.description : ''}\">\n ${this.concept.label}\n </div>\n </div>\n </td>\n\n <!-- Input Field Cells (Period Columns) - Only for non-abstract concepts -->\n ${this.columns.map(column => {\n const field = this._getFieldForColumn(column.id);\n const shouldShowField = !isAbstract && field;\n \n return html`\n <td class=\"field-cell ${!shouldShowField ? 'empty' : ''} ${isAbstract ? 'abstract-row' : ''}\">\n ${shouldShowField ? html`\n <jupiter-form-field\n .field=\"${field}\"\n .conceptId=\"${this.concept.id}\"\n .columnId=\"${column.id}\"\n .value=\"${this._getFieldValue(field)}\"\n .disabled=\"${this.disabled}\"\n .locale=\"${this.locale}\"\n .hideLabel=\"${true}\"\n @field-change=\"${this._handleFieldChange}\"\n ></jupiter-form-field>\n ` : ''}\n </td>\n `;\n })}\n `;\n }\n}\n","import { LitElement, html, css, PropertyValues } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\n\nexport interface AddColumnRequest {\n periodType: 'duration' | 'instant' | 'mixed';\n startDate?: string;\n endDate?: string;\n instantDate?: string;\n}\n\n@customElement('jupiter-add-column-dialog')\nexport class JupiterAddColumnDialog extends LitElement {\n @property({ type: String }) periodType: 'duration' | 'instant' | 'mixed' = 'duration';\n @property({ type: Boolean }) open = false;\n\n @state() private _startDate = '';\n @state() private _endDate = '';\n @state() private _instantDate = '';\n @state() private _selectedType: 'duration' | 'instant' = 'duration';\n\n updated(changedProperties: PropertyValues) {\n if (changedProperties.has('open') && this.open) {\n // Reset form when dialog opens\n this._resetForm();\n }\n }\n\n static styles = css`\n :host {\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background: rgba(0, 0, 0, 0.5);\n z-index: 1000;\n display: flex;\n align-items: center;\n justify-content: center;\n opacity: 0;\n visibility: hidden;\n transition: opacity 0.3s ease, visibility 0.3s ease;\n }\n\n :host([open]) {\n opacity: 1;\n visibility: visible;\n }\n\n .dialog {\n background: white;\n border-radius: 8px;\n padding: 24px;\n min-width: 400px;\n max-width: 500px;\n box-shadow: 0 10px 30px rgba(0, 0, 0, 0.3);\n transform: scale(0.9);\n transition: transform 0.3s ease;\n }\n\n :host([open]) .dialog {\n transform: scale(1);\n }\n\n .dialog-header {\n margin-bottom: 20px;\n }\n\n .dialog-title {\n font-size: 20px;\n font-weight: 600;\n color: var(--jupiter-text-primary, #333);\n margin: 0 0 8px 0;\n }\n\n .dialog-description {\n font-size: 14px;\n color: var(--jupiter-text-secondary, #666);\n margin: 0;\n }\n\n .dialog-content {\n margin-bottom: 24px;\n }\n\n .form-group {\n margin-bottom: 16px;\n }\n\n .form-label {\n display: block;\n font-weight: 500;\n margin-bottom: 6px;\n color: var(--jupiter-text-primary, #333);\n font-size: 14px;\n }\n\n .form-label.required::after {\n content: ' *';\n color: var(--jupiter-error-color, #d32f2f);\n }\n\n .form-input {\n width: 100%;\n box-sizing: border-box;\n padding: 10px 12px;\n border: 1px solid var(--jupiter-border-color, #ddd);\n border-radius: 4px;\n font-size: 14px;\n font-family: inherit;\n transition: border-color 0.2s ease;\n }\n\n .form-input:focus {\n outline: none;\n border-color: var(--jupiter-primary-color, #007bff);\n box-shadow: 0 0 0 2px rgba(0, 123, 255, 0.25);\n }\n\n select.form-input {\n cursor: pointer;\n background-color: white;\n }\n\n .dialog-actions {\n display: flex;\n gap: 12px;\n justify-content: flex-end;\n }\n\n .btn {\n padding: 10px 20px;\n border: none;\n border-radius: 4px;\n font-size: 14px;\n font-weight: 500;\n cursor: pointer;\n transition: background-color 0.2s ease;\n }\n\n .btn-cancel {\n background: var(--jupiter-neutral-background, #f5f5f5);\n color: var(--jupiter-text-primary, #333);\n }\n\n .btn-cancel:hover {\n background: var(--jupiter-neutral-background-hover, #e0e0e0);\n }\n\n .btn-primary {\n background: var(--jupiter-primary-color, #667eea);\n color: white;\n }\n\n .btn-primary:hover {\n background: var(--jupiter-primary-color-dark, #5a6fd8);\n }\n\n .btn-primary:disabled {\n background: var(--jupiter-disabled-background, #ccc);\n cursor: not-allowed;\n }\n `;\n\n connectedCallback() {\n super.connectedCallback();\n this._resetForm();\n }\n\n willUpdate(changedProperties: Map<string, unknown>) {\n super.willUpdate(changedProperties);\n if (changedProperties.has('open') && this.open) {\n this._resetForm();\n }\n }\n\n private _resetForm() {\n const today = new Date().toISOString().split('T')[0];\n this._startDate = today;\n this._endDate = today;\n this._instantDate = today;\n this._selectedType = 'duration';\n }\n\n private _handleCancel() {\n this.open = false;\n this.dispatchEvent(new CustomEvent('dialog-cancel', { bubbles: true }));\n }\n\n private _handleConfirm() {\n if (!this._isFormValid()) return;\n\n const request: AddColumnRequest = {\n periodType: this.periodType === 'mixed' ? this._selectedType : this.periodType\n };\n\n if (this.periodType === 'instant' || (this.periodType === 'mixed' && this._selectedType === 'instant')) {\n request.instantDate = this._instantDate;\n } else {\n request.startDate = this._startDate;\n request.endDate = this._endDate;\n }\n\n this.dispatchEvent(new CustomEvent('column-add', {\n detail: request,\n bubbles: true\n }));\n }\n\n private _isFormValid(): boolean {\n if (this.periodType === 'mixed') {\n if (this._selectedType === 'instant') {\n return !!this._instantDate;\n } else {\n return !!this._startDate && !!this._endDate && this._startDate <= this._endDate;\n }\n } else if (this.periodType === 'duration') {\n return !!this._startDate && !!this._endDate && this._startDate <= this._endDate;\n } else if (this.periodType === 'instant') {\n return !!this._instantDate;\n }\n return false;\n }\n\n private _handleStartDateChange(e: Event) {\n this._startDate = (e.target as HTMLInputElement).value;\n }\n\n private _handleEndDateChange(e: Event) {\n this._endDate = (e.target as HTMLInputElement).value;\n }\n\n private _handleSelectedTypeChange(e: Event) {\n this._selectedType = (e.target as HTMLSelectElement).value as 'duration' | 'instant';\n }\n\n private _handleInstantDateChange(e: Event) {\n this._instantDate = (e.target as HTMLInputElement).value;\n }\n\n render() {\n if (!this.open) return html``;\n\n const isValid = this._isFormValid();\n\n return html`\n <div class=\"dialog\" @click=\"${(e: Event) => e.stopPropagation()}\">\n <div class=\"dialog-header\">\n <h2 class=\"dialog-title\">Add Column</h2>\n <p class=\"dialog-description\">\n ${this.periodType === 'instant' \n ? 'Add a new instant period column by specifying the date.'\n : this.periodType === 'duration'\n ? 'Add a new duration period column by specifying the start and end dates.'\n : 'This section contains both instant and duration concepts. Choose the type of column to add.'\n }\n </p>\n </div>\n\n <div class=\"dialog-content\">\n ${this.periodType === 'mixed' ? html`\n <div class=\"form-group\">\n <label class=\"form-label required\">Column Type</label>\n <select \n class=\"form-input\"\n .value=\"${this._selectedType}\"\n @change=\"${this._handleSelectedTypeChange}\"\n required\n >\n <option value=\"instant\">Instant (single date)</option>\n <option value=\"duration\">Duration (start and end dates)</option>\n </select>\n </div>\n ` : ''}\n\n ${(this.periodType === 'instant' || (this.periodType === 'mixed' && this._selectedType === 'instant')) ? html`\n <div class=\"form-group\">\n <label class=\"form-label required\">Instant Date</label>\n <input \n type=\"date\" \n class=\"form-input\"\n .value=\"${this._instantDate}\"\n @change=\"${this._handleInstantDateChange}\"\n required\n />\n </div>\n ` : html`\n <div class=\"form-group\">\n <label class=\"form-label required\">Start Period Date</label>\n <input \n type=\"date\" \n class=\"form-input\"\n .value=\"${this._startDate}\"\n @change=\"${this._handleStartDateChange}\"\n required\n />\n </div>\n <div class=\"form-group\">\n <label class=\"form-label required\">End Period Date</label>\n <input \n type=\"date\" \n class=\"form-input\"\n .value=\"${this._endDate}\"\n @change=\"${this._handleEndDateChange}\"\n required\n />\n </div>\n `}\n </div>\n\n <div class=\"dialog-actions\">\n <button class=\"btn btn-cancel\" @click=\"${this._handleCancel}\">\n Cancel\n </button>\n <button \n class=\"btn btn-primary\" \n ?disabled=\"${!isValid}\"\n @click=\"${this._handleConfirm}\"\n >\n Add Column\n </button>\n </div>\n </div>\n `;\n }\n}\n","import { LitElement, html, css } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { FormSection, FormColumn, ConceptTree } from '../schema/types';\nimport './concept-tree';\nimport './add-column-dialog';\nimport { AddColumnRequest } from './add-column-dialog';\n\n@customElement('jupiter-form-section')\nexport class JupiterFormSection extends LitElement {\n @property({ type: Object }) section!: FormSection;\n @property({ type: Array }) columns: FormColumn[] = [];\n @property({ type: Object }) formData: Record<string, any> = {};\n @property({ type: Boolean }) disabled = false;\n @property({ type: Boolean }) collapsible = true;\n @property({ type: String }) locale = 'en-US';\n\n @state() private _expanded = true;\n @state() private _showAddColumnDialog = false;\n @state() private _sectionPeriodType: 'duration' | 'instant' | 'mixed' = 'duration';\n\n static styles = css`\n :host {\n display: block;\n margin-bottom: 16px;\n border: 1px solid var(--jupiter-border-color, #ddd);\n border-radius: 6px;\n overflow: hidden;\n }\n\n .section-header {\n background: var(--jupiter-section-header-background, #f0f2f5);\n padding: 16px;\n border-bottom: 1px solid var(--jupiter-border-color, #ddd);\n cursor: pointer;\n user-select: none;\n display: flex;\n align-items: center;\n justify-content: space-between;\n }\n\n .section-header:hover {\n background: var(--jupiter-section-header-hover-background, #e4e7ea);\n }\n\n .section-header.not-collapsible {\n cursor: default;\n }\n\n .section-header.not-collapsible:hover {\n background: var(--jupiter-section-header-background, #f0f2f5);\n }\n\n .section-title {\n font-size: 18px;\n font-weight: 600;\n color: var(--jupiter-text-primary, #333);\n margin: 0;\n }\n\n .section-description {\n font-size: 14px;\n color: var(--jupiter-text-secondary, #666);\n margin: 4px 0 0 0;\n }\n\n .section-toggle {\n width: 24px;\n height: 24px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 16px;\n transition: transform 0.2s ease;\n color: var(--jupiter-text-secondary, #666);\n }\n\n .section-toggle.expanded {\n transform: rotate(90deg);\n }\n\n .section-toggle.hidden {\n visibility: hidden;\n }\n\n .section-content {\n display: block;\n transition: max-height 0.3s ease;\n overflow: hidden;\n }\n\n .section-content.collapsed {\n display: none;\n }\n\n .table-container {\n overflow-x: auto;\n }\n\n .form-table {\n width: 100%;\n border-collapse: separate;\n border-spacing: 0;\n background: var(--jupiter-table-background, #fff);\n }\n\n .table-header {\n background: var(--jupiter-header-background, #f8f9fa);\n position: sticky;\n top: 0;\n z-index: 1;\n }\n\n .header-row {\n /* Table row - no special display needed */\n }\n\n .header-cell {\n padding: 8px 12px;\n text-align: left;\n font-weight: 600;\n color: var(--jupiter-text-primary, #333);\n border: 1px solid var(--jupiter-border-color, #ddd);\n background: var(--jupiter-header-background, #f8f9fa);\n min-width: 180px;\n width: 180px;\n font-size: 14px;\n vertical-align: middle;\n }\n\n .header-cell.concept-column {\n width: 300px;\n min-width: 300px;\n max-width: 300px;\n position: sticky;\n left: 0;\n z-index: 2;\n }\n\n .header-cell.removable {\n position: relative;\n }\n\n .remove-column-btn {\n position: absolute;\n top: 4px;\n right: 4px;\n width: 20px;\n height: 20px;\n border: none;\n background: var(--jupiter-error-color, #d32f2f);\n color: white;\n border-radius: 50%;\n font-size: 12px;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n .remove-column-btn:hover {\n background: var(--jupiter-error-color-dark, #b71c1c);\n }\n\n .add-column-btn {\n background: var(--jupiter-primary-color, #667eea);\n color: white;\n border: none;\n padding: 8px 16px;\n border-radius: 4px;\n cursor: pointer;\n font-size: 12px;\n margin: 8px;\n }\n\n .add-column-btn:hover {\n background: var(--jupiter-primary-color-dark, #5a6fd8);\n }\n\n .empty-section {\n padding: 24px;\n text-align: center;\n color: var(--jupiter-text-secondary, #666);\n font-style: italic;\n }\n `;\n\n connectedCallback() {\n super.connectedCallback();\n this._expanded = this.section.expanded !== false;\n this._determinePeriodType();\n }\n\n private _determinePeriodType() {\n // Get all non-abstract concepts\n const nonAbstractConcepts = this._getAllNonAbstractConcepts(this.section.concepts);\n \n console.log(`🔍 Section ${this.section.id} (${this.section.title}): Found ${nonAbstractConcepts.length} non-abstract concepts`);\n console.log(`📝 All concepts in section:`, this.section.concepts.map(c => ({ \n name: c.name, \n abstract: c.abstract, \n periodType: c.periodType \n })));\n \n if (nonAbstractConcepts.length === 0) {\n this._sectionPeriodType = 'duration';\n console.log(`📊 Section ${this.section.id}: No concepts, defaulting to duration`);\n return;\n }\n\n // Check period types\n const periodTypes = new Set(nonAbstractConcepts.map(c => c.periodType).filter(Boolean));\n \n console.log(`🏷️ Section ${this.section.id}: Found period types:`, Array.from(periodTypes));\n console.log(`📝 Section ${this.section.id}: Non-abstract concepts and their period types:`, \n nonAbstractConcepts.map(c => ({ name: c.name, periodType: c.periodType, abstract: c.abstract }))\n );\n \n if (periodTypes.size === 0) {\n this._sectionPeriodType = 'duration';\n console.log(`📊 Section ${this.section.id}: No period types defined, defaulting to duration`);\n } else if (periodTypes.size === 1) {\n const singleType = Array.from(periodTypes)[0];\n this._sectionPeriodType = singleType === 'instant' ? 'instant' : 'duration';\n console.log(`📊 Section ${this.section.id}: Single period type '${singleType}', setting to '${this._sectionPeriodType}'`);\n } else {\n this._sectionPeriodType = 'mixed';\n console.log(`📊 Section ${this.section.id}: Mixed period types, setting to 'mixed'`);\n }\n \n console.log(`✅ Section ${this.section.id}: Final period type: ${this._sectionPeriodType}`);\n }\n\n private _getAllNonAbstractConcepts(concepts: ConceptTree[]): ConceptTree[] {\n const result: ConceptTree[] = [];\n \n for (const concept of concepts) {\n if (!concept.abstract) {\n result.push(concept);\n }\n if (concept.children) {\n result.push(...this._getAllNonAbstractConcepts(concept.children));\n }\n }\n \n return result;\n }\n\n private _toggleExpanded() {\n if (!this.collapsible) return;\n \n this._expanded = !this._expanded;\n \n this.dispatchEvent(new CustomEvent('section-expand', {\n detail: {\n sectionId: this.section.id,\n expanded: this._expanded\n },\n bubbles: true\n }));\n }\n\n private _handleRemoveColumn(columnId: string) {\n this.dispatchEvent(new CustomEvent('column-remove', {\n detail: { \n columnId,\n sectionId: this.section.id \n },\n bubbles: true\n }));\n }\n\n private _handleAddColumn() {\n // Determine period type specifically for this add column action\n const buttonPeriodType = this._determineButtonPeriodType();\n \n // Override the section period type for this dialog\n this._sectionPeriodType = buttonPeriodType;\n this._showAddColumnDialog = true;\n }\n\n private _determineButtonPeriodType(): 'duration' | 'instant' | 'mixed' {\n // Get all non-abstract concepts in the section (not just those with fields)\n // This ensures we correctly identify mixed period sections even when some concepts\n // don't have fields in the default column due to period type filtering\n const allNonAbstractConcepts = this._getAllNonAbstractConcepts(this.section.concepts);\n \n if (allNonAbstractConcepts.length === 0) {\n return 'duration';\n }\n\n // Check period types of all non-abstract concepts in the section\n const periodTypes = new Set(\n allNonAbstractConcepts\n .map(c => c.periodType)\n .filter(periodType => periodType !== undefined && periodType !== null)\n );\n \n if (periodTypes.size === 0) {\n return 'duration';\n } else if (periodTypes.size === 1) {\n const singleType = Array.from(periodTypes)[0];\n return singleType === 'instant' ? 'instant' : 'duration';\n } else {\n return 'mixed';\n }\n }\n\n private _getConceptsWithFields(concepts: ConceptTree[]): ConceptTree[] {\n const result: ConceptTree[] = [];\n \n for (const concept of concepts) {\n // Include concepts that have fields and are not abstract\n if (!concept.abstract && concept.fields && concept.fields.length > 0) {\n result.push(concept);\n }\n \n // Recursively check children\n if (concept.children) {\n result.push(...this._getConceptsWithFields(concept.children));\n }\n }\n \n return result;\n }\n\n private _handleDialogCancel() {\n this._showAddColumnDialog = false;\n }\n\n private _handleColumnAdd(event: CustomEvent<AddColumnRequest>) {\n event.stopPropagation();\n this._showAddColumnDialog = false;\n \n // Dispatch event to parent component with the column request\n this.dispatchEvent(new CustomEvent('column-add-request', {\n detail: {\n sectionId: this.section.id,\n columnRequest: event.detail\n },\n bubbles: true\n }));\n }\n\n private _handleFieldChange(event: CustomEvent) {\n event.stopPropagation();\n this.dispatchEvent(new CustomEvent('field-change', {\n detail: event.detail,\n bubbles: true\n }));\n }\n\n private _flattenConcepts(concepts: ConceptTree[], expanded: Set<string> = new Set()): ConceptTree[] {\n const result: ConceptTree[] = [];\n \n for (const concept of concepts) {\n result.push(concept);\n \n // If concept is expanded and has children, include them\n if (concept.children && concept.children.length > 0 && expanded.has(concept.id)) {\n const childrenFlattened = this._flattenConcepts(concept.children, expanded);\n result.push(...childrenFlattened);\n }\n }\n \n return result;\n }\n\n @state() private _expandedConcepts = new Set<string>();\n\n private _handleConceptExpand(event: CustomEvent) {\n event.stopPropagation();\n const { conceptId, expanded } = event.detail;\n \n if (expanded) {\n this._expandedConcepts.add(conceptId);\n } else {\n this._expandedConcepts.delete(conceptId);\n }\n \n // Force re-render\n this.requestUpdate();\n \n this.dispatchEvent(new CustomEvent('concept-expand', {\n detail: event.detail,\n bubbles: true\n }));\n }\n\n render() {\n if (!this.section.concepts || this.section.concepts.length === 0) {\n return html`\n <div class=\"section-header ${!this.collapsible ? 'not-collapsible' : ''}\" \n @click=\"${this._toggleExpanded}\">\n <div>\n <h3 class=\"section-title\">${this.section.title}</h3>\n ${this.section.description ? html`\n <p class=\"section-description\">${this.section.description}</p>\n ` : ''}\n </div>\n <div class=\"section-toggle ${this.collapsible ? (this._expanded ? 'expanded' : '') : 'hidden'}\">\n ${this.collapsible ? '▶' : ''}\n </div>\n </div>\n \n <div class=\"section-content ${!this._expanded ? 'collapsed' : ''}\">\n <div class=\"empty-section\">\n No concepts defined for this section.\n </div>\n </div>\n `;\n }\n\n return html`\n <div class=\"section-header ${!this.collapsible ? 'not-collapsible' : ''}\" \n @click=\"${this._toggleExpanded}\">\n <div>\n <h3 class=\"section-title\">${this.section.title}</h3>\n ${this.section.description ? html`\n <p class=\"section-description\">${this.section.description}</p>\n ` : ''}\n </div>\n <div class=\"section-toggle ${this.collapsible ? (this._expanded ? 'expanded' : '') : 'hidden'}\">\n ${this.collapsible ? '▶' : ''}\n </div>\n </div>\n\n <div class=\"section-content ${!this._expanded ? 'collapsed' : ''}\">\n <div class=\"table-container\">\n <table class=\"form-table\">\n <thead class=\"table-header\">\n <tr class=\"header-row\">\n <th class=\"header-cell concept-column\">Concept</th>\n ${this.columns.map(column => html`\n <th class=\"header-cell ${column.removable ? 'removable' : ''}\">\n ${column.title}\n ${column.description ? html`<div style=\"font-weight: normal; font-size: 12px; color: var(--jupiter-text-secondary, #666);\">${column.description}</div>` : ''}\n ${column.removable ? html`\n <button \n class=\"remove-column-btn\"\n @click=\"${(e: Event) => {\n e.stopPropagation();\n this._handleRemoveColumn(column.id);\n }}\"\n title=\"Remove column\"\n >×</button>\n ` : ''}\n </th>\n `)}\n <th class=\"header-cell\">\n <button class=\"add-column-btn\" @click=\"${(e: Event) => {\n e.stopPropagation();\n this._handleAddColumn();\n }}\" title=\"Add Column\">\n + Add Column\n </button>\n </th>\n </tr>\n </thead>\n <tbody class=\"table-body\">\n ${this._flattenConcepts(this.section.concepts, this._expandedConcepts).map(concept => html`\n <tr>\n <jupiter-concept-tree\n .concept=\"${concept}\"\n .columns=\"${this.columns}\"\n .formData=\"${this.formData}\"\n .disabled=\"${this.disabled}\"\n .locale=\"${this.locale}\"\n .expandedConcepts=\"${this._expandedConcepts}\"\n @field-change=\"${this._handleFieldChange}\"\n @concept-expand=\"${this._handleConceptExpand}\"\n ></jupiter-concept-tree>\n </tr>\n `)}\n </tbody>\n </table>\n </div>\n </div>\n\n <!-- Add Column Dialog -->\n <jupiter-add-column-dialog\n .periodType=\"${this._sectionPeriodType}\"\n ?open=\"${this._showAddColumnDialog}\"\n @dialog-cancel=\"${this._handleDialogCancel}\"\n @column-add=\"${this._handleColumnAdd}\"\n ></jupiter-add-column-dialog>\n `;\n }\n}\n","import { LitElement, html, css } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { \n XBRLFormSchema, \n FormData, \n FormColumn, \n ValidationError, \n FormState,\n ComponentConfig,\n ConceptTree,\n FormField,\n FieldType,\n SubmissionData,\n FormSection\n} from '../schema/types';\nimport { XBRLFormInput } from '../schema/xbrl-types';\nimport { FormValidator } from '../utils/validation';\nimport { XBRLFormBuilder } from '../utils/xbrl-form-builder';\nimport { AddColumnRequest } from './add-column-dialog';\nimport './form-section';\n\n@customElement('jupiter-dynamic-form')\nexport class JupiterDynamicForm extends LitElement {\n @property({ type: Object }) schema?: XBRLFormSchema;\n @property({ type: Object }) xbrlInput?: XBRLFormInput;\n @property({ type: Object }) config: ComponentConfig = {};\n @property({ type: Object }) initialData: FormData = {};\n @property({ type: Boolean }) disabled = false;\n @property({ type: Boolean }) readonly = false;\n @property({ type: String }) periodStartDate = '2025-01-01';\n @property({ type: String }) periodEndDate = '2025-12-31';\n\n @state() private _formData: FormData = {};\n @state() private _columns: FormColumn[] = [];\n @state() private _errors: ValidationError[] = [];\n @state() private _touched = new Set<string>();\n @state() private _dirty = false;\n @state() private _valid = true;\n @state() private _submitted = false;\n @state() private _currentSchema?: XBRLFormSchema;\n\n static styles = css`\n :host {\n display: block;\n font-family: var(--jupiter-font-family, system-ui, -apple-system, sans-serif);\n color: var(--jupiter-text-primary, #333);\n background: var(--jupiter-background, #fff);\n }\n\n .form-container {\n width: 100%;\n max-width: var(--jupiter-max-width, none);\n margin: 0 auto;\n }\n\n .form-header {\n padding: 24px;\n border-bottom: 1px solid var(--jupiter-border-color, #ddd);\n background: var(--jupiter-form-header-background, #fff);\n }\n\n .form-title {\n font-size: 24px;\n font-weight: 600;\n margin: 0 0 8px 0;\n color: var(--jupiter-text-primary, #333);\n }\n\n .form-description {\n font-size: 16px;\n color: var(--jupiter-text-secondary, #666);\n margin: 0;\n line-height: 1.5;\n }\n\n .form-actions {\n position: fixed;\n bottom: 0;\n left: 0;\n right: 0;\n padding: 16px 24px;\n border-top: 1px solid var(--jupiter-border-color, #ddd);\n background: var(--jupiter-form-actions-background, #f8f9fa);\n display: flex;\n gap: 12px;\n align-items: center;\n z-index: 1000;\n box-shadow: 0 -2px 8px rgba(0, 0, 0, 0.1);\n }\n\n .form-sections {\n padding: 24px;\n padding-bottom: 100px; /* Add space for fixed footer */\n }\n\n .validation-summary {\n margin-bottom: 16px;\n padding: 16px;\n border-radius: 4px;\n background: var(--jupiter-error-background, #ffebee);\n border: 1px solid var(--jupiter-error-color, #d32f2f);\n }\n\n .validation-summary-title {\n font-weight: 600;\n color: var(--jupiter-error-color, #d32f2f);\n margin: 0 0 8px 0;\n }\n\n .validation-summary-list {\n margin: 0;\n padding-left: 20px;\n }\n\n .validation-summary-item {\n color: var(--jupiter-error-color, #d32f2f);\n margin-bottom: 4px;\n }\n\n .form-actions button {\n padding: 10px 20px;\n border: none;\n border-radius: 4px;\n font-size: 14px;\n font-weight: 500;\n cursor: pointer;\n transition: background-color 0.2s ease;\n }\n\n .btn-primary {\n background: var(--jupiter-primary-color, #1976d2);\n color: white;\n }\n\n .btn-primary:hover:not(:disabled) {\n background: var(--jupiter-primary-color-dark, #1565c0);\n }\n\n .btn-secondary {\n background: var(--jupiter-secondary-color, #757575);\n color: white;\n }\n\n .btn-secondary:hover:not(:disabled) {\n background: var(--jupiter-secondary-color-dark, #616161);\n }\n\n .btn-outline {\n background: transparent;\n color: var(--jupiter-primary-color, #1976d2);\n border: 1px solid var(--jupiter-primary-color, #1976d2);\n }\n\n .btn-outline:hover:not(:disabled) {\n background: var(--jupiter-primary-color, #1976d2);\n color: white;\n }\n\n button:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n }\n\n .form-meta {\n display: flex;\n gap: 16px;\n align-items: center;\n font-size: 12px;\n color: var(--jupiter-text-secondary, #666);\n margin-left: auto;\n }\n `;\n\n connectedCallback() {\n super.connectedCallback();\n this._initializeForm();\n }\n\n updated(changedProperties: Map<string, any>) {\n if (changedProperties.has('xbrlInput') || changedProperties.has('schema')) {\n this._initializeForm();\n }\n }\n\n private _initializeForm() {\n // Generate schema from XBRL input if provided, otherwise use provided schema\n if (this.xbrlInput) {\n try {\n console.log('🔄 Initializing form from XBRL input:', this.xbrlInput);\n console.log('📅 Using period dates:', this.periodStartDate, 'to', this.periodEndDate);\n this._currentSchema = XBRLFormBuilder.buildFormSchema(\n this.xbrlInput, \n this.periodStartDate, \n this.periodEndDate\n );\n console.log('✅ Generated schema with sections:', this._currentSchema.sections.length);\n \n // Use simple column structure for now\n this._columns = [\n {\n id: 'base',\n title: 'Value',\n description: 'Base values for concepts',\n type: 'base',\n order: 0,\n removable: false\n }\n ];\n } catch (error) {\n console.error('❌ Error building form from XBRL input:', error);\n this._currentSchema = this._getDefaultSchema();\n this._columns = this._getDefaultColumns();\n }\n } else if (this.schema) {\n this._currentSchema = this.schema;\n this._columns = this._getDefaultColumns();\n } else {\n this._currentSchema = this._getDefaultSchema();\n this._columns = this._getDefaultColumns();\n }\n\n // Initialize form data\n this._formData = { ...this.initialData };\n if (this.xbrlInput?.initialData) {\n this._formData = { ...this._formData, ...this.xbrlInput.initialData };\n }\n \n // Validate initial data\n this._validateForm();\n }\n\n private _getDefaultSchema(): XBRLFormSchema {\n return {\n version: '1.0',\n formId: 'default-form',\n title: 'Dynamic Form',\n description: 'Please provide form schema or XBRL input data',\n sections: []\n };\n }\n\n private _getDefaultColumns(): FormColumn[] {\n return [\n {\n id: 'base',\n title: 'Value',\n description: 'Base values for concepts',\n type: 'base',\n order: 0,\n removable: false\n }\n ];\n }\n\n private _validateForm() {\n const errors: ValidationError[] = [];\n \n // Use current schema for validation\n const schema = this._currentSchema;\n if (!schema) return;\n \n // Validate each section and its concepts\n for (const section of schema.sections) {\n for (const concept of section.concepts) {\n for (const field of concept.fields) {\n const value = this._formData[concept.id]?.[field.columnId];\n const fieldErrors = FormValidator.validateField(\n field.id,\n concept.id,\n field.columnId,\n value,\n field.type,\n field.validation || []\n );\n errors.push(...fieldErrors);\n }\n }\n }\n\n this._errors = errors;\n this._valid = errors.filter(e => e.severity === 'error').length === 0;\n }\n\n private _handleFieldChange(event: CustomEvent) {\n const { fieldId, conceptId, columnId, value } = event.detail;\n \n // Update form data\n if (!this._formData[conceptId]) {\n this._formData[conceptId] = {};\n }\n const oldValue = this._formData[conceptId][columnId];\n this._formData[conceptId][columnId] = value;\n \n // Mark as touched and dirty\n this._touched.add(`${conceptId}-${columnId}`);\n this._dirty = true;\n \n // Re-validate\n this._validateForm();\n \n // Trigger update\n this.requestUpdate();\n \n // Dispatch change event\n this.dispatchEvent(new CustomEvent('field-change', {\n detail: { fieldId, conceptId, columnId, value, oldValue },\n bubbles: true\n }));\n }\n\n private _handleSectionExpand(event: CustomEvent) {\n this.dispatchEvent(new CustomEvent('section-expand', {\n detail: event.detail,\n bubbles: true\n }));\n }\n\n private _handleConceptExpand(event: CustomEvent) {\n this.dispatchEvent(new CustomEvent('concept-expand', {\n detail: event.detail,\n bubbles: true\n }));\n }\n\n private _handleColumnRemove(event: CustomEvent) {\n const { columnId, sectionId } = event.detail;\n \n // Remove column from ONLY the specific section\n if (this._currentSchema && sectionId) {\n const targetSection = this._currentSchema.sections.find(section => section.id === sectionId);\n if (targetSection && targetSection.columns) {\n targetSection.columns = targetSection.columns.filter(col => col.id !== columnId);\n }\n } else {\n // Fallback: remove from all sections (for backward compatibility)\n this._columns = this._columns.filter(col => col.id !== columnId);\n \n if (this._currentSchema) {\n this._currentSchema.sections.forEach(section => {\n if (section.columns) {\n section.columns = section.columns.filter(col => col.id !== columnId);\n }\n });\n }\n }\n \n // Remove data for this column from the specific section's concepts\n this._removeColumnData(columnId, sectionId);\n \n this._dirty = true;\n this._validateForm();\n this.requestUpdate();\n \n this.dispatchEvent(new CustomEvent('column-remove', {\n detail: { columnId, sectionId },\n bubbles: true\n }));\n }\n\n private _handleColumnAddRequest(event: CustomEvent) {\n const { sectionId, columnRequest } = event.detail;\n this._addColumnFromRequest(columnRequest, sectionId);\n }\n\n private _addColumnFromRequest(request: AddColumnRequest, sectionId: string) {\n const timestamp = Date.now();\n const newColumnId = `col-${timestamp}`;\n \n let title = '';\n let description = '';\n \n if (request.periodType === 'instant') {\n title = request.instantDate || 'Instant Date';\n description = `Instant period: ${request.instantDate}`;\n } else if (request.periodType === 'duration' || request.periodType === 'mixed') {\n title = `${request.startDate} / ${request.endDate}`;\n description = `Duration period: ${request.startDate} to ${request.endDate}`;\n }\n \n // Check for hypercube dimension information for this section\n let dimensionData: any = {\n dimensionId: 'period',\n memberValue: request.periodType === 'instant' ? \n `instant-${request.instantDate}` : \n `duration-${request.startDate}-${request.endDate}`,\n memberLabel: title,\n };\n \n // Look for matching hypercube role for dimension information\n if (this.xbrlInput?.hypercubes?.[0]) {\n const hypercubeRole = this.xbrlInput.hypercubes[0].roles.find(hr => hr.roleId === sectionId);\n \n if (hypercubeRole?.items?.length === 1) {\n const item = hypercubeRole.items[0];\n if (item.dimensions.length === 1) {\n const dimension = item.dimensions[0];\n if (dimension.members.length > 0) {\n // Find axis label\n const axisLabel = dimension.labels.find(l => l.role === 'http://www.xbrl.org/2003/role/label')?.label || dimension.conceptName;\n \n // For manually added columns, we could offer choice or use first member\n // For now, using first member as specified in requirements\n const firstMember = dimension.members[0];\n const memberLabel = firstMember.labels.find(l => l.role === 'http://www.xbrl.org/2003/role/label')?.label || firstMember.conceptName;\n \n // Update title to include dimension information\n const periodPart = request.periodType === 'instant' ? \n `(${request.instantDate})` : \n `(${request.startDate} / ${request.endDate})`;\n title = `${memberLabel} ${periodPart}`;\n \n dimensionData = {\n dimensionId: newColumnId,\n axisId: dimension.id,\n memberId: firstMember.id,\n memberValue: memberLabel,\n memberLabel: memberLabel,\n axis: axisLabel,\n axisLabel: axisLabel,\n memberKey: `${axisLabel} | ${memberLabel}`,\n dimensionIdKey: `${dimension.id} | ${firstMember.id}`\n };\n \n console.log(`📊 Applied hypercube dimension to new column: ${dimensionData.memberKey}`);\n }\n }\n }\n }\n \n const newColumn: FormColumn = {\n id: newColumnId,\n title,\n description,\n type: dimensionData.memberKey ? 'dimension' : 'dimension',\n order: this._columns.length,\n removable: true,\n dimensionData\n };\n \n // Add column ONLY to the specific section that requested it\n if (this._currentSchema) {\n const targetSection = this._currentSchema.sections.find(section => section.id === sectionId);\n if (targetSection) {\n if (!targetSection.columns) {\n targetSection.columns = [...this._columns];\n }\n targetSection.columns = [...targetSection.columns, newColumn];\n }\n }\n \n // Replicate form fields for existing concepts in ONLY the target section\n this._replicateFieldsForNewColumn(newColumnId, request, sectionId);\n \n this._dirty = true;\n this.requestUpdate();\n \n this.dispatchEvent(new CustomEvent('column-add', {\n detail: { column: newColumn },\n bubbles: true\n }));\n }\n\n private _removeColumnData(columnId: string, sectionId?: string) {\n if (!this._currentSchema) return;\n \n if (sectionId) {\n // Remove data only for concepts in the specific section\n const targetSection = this._currentSchema.sections.find(section => section.id === sectionId);\n if (targetSection) {\n this._removeColumnDataFromConcepts(targetSection.concepts, columnId);\n }\n } else {\n // Remove data for all concepts in all sections\n for (const conceptId in this._formData) {\n if (this._formData[conceptId][columnId] !== undefined) {\n delete this._formData[conceptId][columnId];\n }\n }\n }\n }\n\n private _removeColumnDataFromConcepts(concepts: ConceptTree[], columnId: string) {\n concepts.forEach(concept => {\n // Remove form data for this concept and column\n if (this._formData[concept.id] && this._formData[concept.id][columnId] !== undefined) {\n delete this._formData[concept.id][columnId];\n }\n \n // Remove field from concept's fields array\n if (concept.fields) {\n concept.fields = concept.fields.filter(field => field.columnId !== columnId);\n }\n \n // Recursively process children\n if (concept.children) {\n this._removeColumnDataFromConcepts(concept.children, columnId);\n }\n });\n }\n\n private _shouldCreateFieldForConcept(concept: ConceptTree, request: AddColumnRequest): boolean {\n // Don't create fields for abstract concepts\n if (concept.abstract) {\n return false;\n }\n \n // Check period type compatibility\n if (concept.periodType) {\n if (request.periodType === 'instant' && concept.periodType !== 'instant') {\n return false;\n }\n if (request.periodType === 'duration' && concept.periodType !== 'duration') {\n return false;\n }\n }\n \n return true;\n }\n\n private _replicateFieldsForNewColumn(columnId: string, request: AddColumnRequest, sectionId: string) {\n if (!this._currentSchema) return;\n \n // Build fields for the new column for ONLY the specific section\n const formBuilder = new XBRLFormBuilder();\n \n const targetSection = this._currentSchema.sections.find(section => section.id === sectionId);\n if (targetSection) {\n this._replicateFieldsForSection(targetSection.concepts, columnId, request, formBuilder);\n }\n }\n\n private _replicateFieldsForSection(concepts: ConceptTree[], columnId: string, request: AddColumnRequest, formBuilder: XBRLFormBuilder) {\n concepts.forEach(concept => {\n // Check if we should create a field for this concept in the new column\n if (this._shouldCreateFieldForConcept(concept, request)) {\n // Create a new field manually based on existing field structure or from scratch\n const existingField = concept.fields?.[0]; // Use first existing field as template\n \n let field: FormField;\n if (existingField) {\n // Template from existing field\n field = {\n id: `${concept.id}_${columnId}`,\n conceptId: concept.id,\n columnId: columnId,\n type: existingField.type,\n label: existingField.label,\n placeholder: existingField.placeholder,\n required: existingField.required,\n disabled: existingField.disabled,\n validation: existingField.validation,\n defaultValue: existingField.defaultValue,\n // Set period dates from the add column request\n periodStartDate: request.periodType === 'instant' ? request.instantDate : request.startDate,\n periodEndDate: request.periodType === 'instant' ? request.instantDate : request.endDate\n };\n } else {\n // Create field from scratch for concepts without existing fields\n field = {\n id: `${concept.id}_${columnId}`,\n conceptId: concept.id,\n columnId: columnId,\n type: 'text' as FieldType,\n label: concept.label || concept.name,\n placeholder: `Enter ${concept.name}`,\n required: false,\n disabled: false,\n validation: [],\n defaultValue: '',\n // Set period dates from the add column request\n periodStartDate: request.periodType === 'instant' ? request.instantDate : request.startDate,\n periodEndDate: request.periodType === 'instant' ? request.instantDate : request.endDate\n };\n }\n \n // Add field to concept's fields array\n if (!concept.fields) {\n concept.fields = [];\n }\n concept.fields.push(field);\n }\n \n // Recursively process children\n if (concept.children) {\n this._replicateFieldsForSection(concept.children, columnId, request, formBuilder);\n }\n });\n }\n\n private _addColumn() {\n // This would typically open a dialog to configure the new dimension column\n // For now, we'll add a generic dimension column\n const newColumnId = `dim-${Date.now()}`;\n const newColumn: FormColumn = {\n id: newColumnId,\n title: `Dimension ${this._columns.length}`,\n description: 'Additional dimension column',\n type: 'dimension',\n order: this._columns.length,\n removable: true,\n dimensionData: {\n dimensionId: 'custom',\n memberValue: 'default',\n memberLabel: 'Default Member',\n }\n };\n \n this._columns = [...this._columns, newColumn];\n this.requestUpdate();\n \n this.dispatchEvent(new CustomEvent('column-add', {\n detail: { column: newColumn },\n bubbles: true\n }));\n }\n\n private _handleSubmit() {\n this._submitted = true;\n this._validateForm();\n \n // Generate submission data in the required format\n const submissionData = this._generateSubmissionData();\n \n this.dispatchEvent(new CustomEvent('form-submit', {\n detail: {\n data: this._formData,\n submissionData: submissionData,\n valid: this._valid,\n errors: this._errors\n },\n bubbles: true\n }));\n }\n\n private _handleSaveDraft() {\n // Generate draft data in the same format as submission\n const draftData = this._generateSubmissionData();\n \n this.dispatchEvent(new CustomEvent('form-save-draft', {\n detail: {\n data: this._formData,\n draftData: draftData,\n valid: this._valid,\n errors: this._errors\n },\n bubbles: true\n }));\n }\n\n private _generateSubmissionData(): SubmissionData {\n const submissionData: SubmissionData = [];\n \n if (!this._currentSchema) {\n return submissionData;\n }\n\n // Iterate through all sections and their concepts to find filled form fields\n this._currentSchema.sections.forEach(section => {\n this._processConceptsForSubmission(section.concepts, submissionData, section);\n });\n\n return submissionData;\n }\n\n private _findColumnById(columnId: string): FormColumn | undefined {\n if (!this._currentSchema) {\n return undefined;\n }\n\n for (const section of this._currentSchema.sections) {\n if (section.columns) {\n const column = section.columns.find(col => col.id === columnId);\n if (column) {\n return column;\n }\n }\n }\n return undefined;\n }\n\n private _processConceptsForSubmission(concepts: ConceptTree[], submissionData: SubmissionData, section?: FormSection) {\n concepts.forEach(concept => {\n // Process fields for this concept\n if (concept.fields && concept.fields.length > 0) {\n concept.fields.forEach(field => {\n // Get the value from the nested form data structure\n const conceptData = this._formData[concept.id];\n const fieldValue = conceptData?.[field.columnId];\n \n // Only include fields that have values\n if (fieldValue !== undefined && fieldValue !== null && fieldValue !== '') {\n // Find the column information to check for dimension data\n const column = this._findColumnById(field.columnId);\n \n const submissionEntry: any = {\n conceptId: concept.id,\n value: fieldValue,\n period: {\n type: concept.periodType || 'duration'\n } as { type: 'instant' | 'duration'; date?: string; startDate?: string; endDate?: string; }\n };\n\n // Determine period structure based on concept's period type\n if (concept.periodType === 'instant') {\n // For instant concepts, use a single date\n submissionEntry.period.date = field.periodStartDate || this.periodStartDate;\n } else {\n // For duration concepts, use start and end dates\n submissionEntry.period.startDate = field.periodStartDate || this.periodStartDate;\n submissionEntry.period.endDate = field.periodEndDate || this.periodEndDate;\n }\n\n // Add dimension information\n // First check if the column has dimension data (explicit dimension)\n if (column?.type === 'dimension' && column.dimensionData?.dimensionIdKey) {\n submissionEntry.dimension = column.dimensionData.dimensionIdKey;\n } \n // Otherwise, check if the section has dimension data (role-level dimension)\n else if (section?.columns?.length) {\n const sectionDimensionColumn = section.columns.find(col => col.type === 'dimension' && col.dimensionData?.dimensionIdKey);\n if (sectionDimensionColumn?.dimensionData?.dimensionIdKey) {\n submissionEntry.dimension = sectionDimensionColumn.dimensionData.dimensionIdKey;\n }\n }\n\n submissionData.push(submissionEntry);\n }\n });\n }\n\n // Recursively process children\n if (concept.children) {\n this._processConceptsForSubmission(concept.children, submissionData, section);\n }\n });\n }\n\n private _handleReset() {\n this._formData = { ...this.initialData };\n this._touched.clear();\n this._dirty = false;\n this._submitted = false;\n this._validateForm();\n this.requestUpdate();\n \n this.dispatchEvent(new CustomEvent('form-reset', {\n detail: {},\n bubbles: true\n }));\n }\n\n private _getFormState(): FormState {\n return {\n data: this._formData,\n errors: this._errors,\n touched: this._touched,\n dirty: this._dirty,\n valid: this._valid,\n submitted: this._submitted\n };\n }\n\n // Public API methods\n public getData(): FormData {\n return { ...this._formData };\n }\n\n public setData(data: FormData) {\n this._formData = { ...data };\n this._dirty = true;\n this._validateForm();\n this.requestUpdate();\n }\n\n public validate(): boolean {\n this._validateForm();\n return this._valid;\n }\n\n public reset() {\n this._handleReset();\n }\n\n public getState(): FormState {\n return this._getFormState();\n }\n\n render() {\n const errorCount = this._errors.filter(e => e.severity === 'error').length;\n const config = this.config || {};\n const showValidationSummary = config.showValidationSummary !== false && \n errorCount > 0 && \n this._submitted;\n\n const schema = this._currentSchema;\n if (!schema) {\n return html`<div>Loading form...</div>`;\n }\n\n return html`\n <div class=\"form-container\">\n <!-- Form Header -->\n <div class=\"form-header\">\n <h1 class=\"form-title\">${schema.title}</h1>\n ${schema.description ? html`\n <p class=\"form-description\">${schema.description}</p>\n ` : ''}\n </div>\n\n <!-- Form Content -->\n <div class=\"form-sections\">\n <!-- Validation Summary -->\n ${showValidationSummary ? html`\n <div class=\"validation-summary\">\n <h4 class=\"validation-summary-title\">Please fix the following errors:</h4>\n <ul class=\"validation-summary-list\">\n ${this._errors\n .filter(e => e.severity === 'error')\n .map(error => html`\n <li class=\"validation-summary-item\">${error.message}</li>\n `)}\n </ul>\n </div>\n ` : ''}\n\n <!-- Form Sections -->\n ${schema.sections.map(section => html`\n <jupiter-form-section\n .section=\"${section}\"\n .columns=\"${section.columns || this._columns}\"\n .formData=\"${this._formData}\"\n .disabled=\"${this.disabled || this.readonly}\"\n .collapsible=\"${config.collapsibleSections !== false}\"\n .locale=\"${config.locale || 'en-US'}\"\n @field-change=\"${this._handleFieldChange}\"\n @section-expand=\"${this._handleSectionExpand}\"\n @concept-expand=\"${this._handleConceptExpand}\"\n @column-remove=\"${this._handleColumnRemove}\"\n @column-add-request=\"${this._handleColumnAddRequest}\"\n ></jupiter-form-section>\n `)}\n </div>\n\n <!-- Form Actions - Fixed Footer -->\n <div class=\"form-actions\">\n <button \n class=\"btn-secondary\"\n @click=\"${this._handleSaveDraft}\"\n ?disabled=\"${this.disabled || this.readonly}\"\n >\n Save Draft\n </button>\n \n <button \n class=\"btn-primary\"\n @click=\"${this._handleSubmit}\"\n ?disabled=\"${this.disabled || this.readonly}\"\n >\n Submit\n </button>\n\n <div class=\"form-meta\">\n <span>Errors: ${errorCount}</span>\n <span>Modified: ${this._dirty ? 'Yes' : 'No'}</span>\n <span>Valid: ${this._valid ? 'Yes' : 'No'}</span>\n </div>\n </div>\n </div>\n `;\n }\n}\n","// Main entry point for Jupiter Dynamic Forms\nexport * from './core/dynamic-form';\nexport * from './core/form-section';\nexport * from './core/concept-tree';\nexport * from './core/form-field';\nexport * from './core/add-column-dialog';\nexport * from './schema/types';\nexport * from './utils/validation';\n\n// Register all custom elements\nimport './core/dynamic-form';\nimport './core/form-section';\nimport './core/concept-tree';\nimport './core/form-field';\nimport './core/add-column-dialog';\n\n// Version export\nexport const version = '1.0.0';\n"],"names":["t","e","o","s","r","n","c","i","h","_a","l","__decorateClass","property","state","customElement"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4]}
1
+ {"version":3,"file":"index.mjs","sources":["../node_modules/@lit/reactive-element/decorators/custom-element.js","../node_modules/@lit/reactive-element/css-tag.js","../node_modules/@lit/reactive-element/reactive-element.js","../node_modules/@lit/reactive-element/decorators/property.js","../node_modules/@lit/reactive-element/decorators/state.js","../src/utils/validation.ts","../src/utils/xbrl-form-builder.ts","../src/core/form-field.ts","../src/core/concept-tree.ts","../src/core/add-column-dialog.ts","../src/core/form-section.ts","../src/core/dynamic-form.ts","../src/index.ts"],"sourcesContent":["/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t=t=>(e,o)=>{void 0!==o?o.addInitializer((()=>{customElements.define(t,e)})):customElements.define(t,e)};export{t as customElement};\n//# sourceMappingURL=custom-element.js.map\n","/**\n * @license\n * Copyright 2019 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t=globalThis,e=t.ShadowRoot&&(void 0===t.ShadyCSS||t.ShadyCSS.nativeShadow)&&\"adoptedStyleSheets\"in Document.prototype&&\"replace\"in CSSStyleSheet.prototype,s=Symbol(),o=new WeakMap;class n{constructor(t,e,o){if(this._$cssResult$=!0,o!==s)throw Error(\"CSSResult is not constructable. Use `unsafeCSS` or `css` instead.\");this.cssText=t,this.t=e}get styleSheet(){let t=this.o;const s=this.t;if(e&&void 0===t){const e=void 0!==s&&1===s.length;e&&(t=o.get(s)),void 0===t&&((this.o=t=new CSSStyleSheet).replaceSync(this.cssText),e&&o.set(s,t))}return t}toString(){return this.cssText}}const r=t=>new n(\"string\"==typeof t?t:t+\"\",void 0,s),i=(t,...e)=>{const o=1===t.length?t[0]:e.reduce(((e,s,o)=>e+(t=>{if(!0===t._$cssResult$)return t.cssText;if(\"number\"==typeof t)return t;throw Error(\"Value passed to 'css' function must be a 'css' function result: \"+t+\". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.\")})(s)+t[o+1]),t[0]);return new n(o,t,s)},S=(s,o)=>{if(e)s.adoptedStyleSheets=o.map((t=>t instanceof CSSStyleSheet?t:t.styleSheet));else for(const e of o){const o=document.createElement(\"style\"),n=t.litNonce;void 0!==n&&o.setAttribute(\"nonce\",n),o.textContent=e.cssText,s.appendChild(o)}},c=e?t=>t:t=>t instanceof CSSStyleSheet?(t=>{let e=\"\";for(const s of t.cssRules)e+=s.cssText;return r(e)})(t):t;export{n as CSSResult,S as adoptStyles,i as css,c as getCompatibleStyle,e as supportsAdoptingStyleSheets,r as unsafeCSS};\n//# sourceMappingURL=css-tag.js.map\n","import{getCompatibleStyle as t,adoptStyles as s}from\"./css-tag.js\";export{CSSResult,css,supportsAdoptingStyleSheets,unsafeCSS}from\"./css-tag.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const{is:i,defineProperty:e,getOwnPropertyDescriptor:h,getOwnPropertyNames:r,getOwnPropertySymbols:o,getPrototypeOf:n}=Object,a=globalThis,c=a.trustedTypes,l=c?c.emptyScript:\"\",p=a.reactiveElementPolyfillSupport,d=(t,s)=>t,u={toAttribute(t,s){switch(s){case Boolean:t=t?l:null;break;case Object:case Array:t=null==t?t:JSON.stringify(t)}return t},fromAttribute(t,s){let i=t;switch(s){case Boolean:i=null!==t;break;case Number:i=null===t?null:Number(t);break;case Object:case Array:try{i=JSON.parse(t)}catch(t){i=null}}return i}},f=(t,s)=>!i(t,s),b={attribute:!0,type:String,converter:u,reflect:!1,useDefault:!1,hasChanged:f};Symbol.metadata??=Symbol(\"metadata\"),a.litPropertyMetadata??=new WeakMap;class y extends HTMLElement{static addInitializer(t){this._$Ei(),(this.l??=[]).push(t)}static get observedAttributes(){return this.finalize(),this._$Eh&&[...this._$Eh.keys()]}static createProperty(t,s=b){if(s.state&&(s.attribute=!1),this._$Ei(),this.prototype.hasOwnProperty(t)&&((s=Object.create(s)).wrapped=!0),this.elementProperties.set(t,s),!s.noAccessor){const i=Symbol(),h=this.getPropertyDescriptor(t,i,s);void 0!==h&&e(this.prototype,t,h)}}static getPropertyDescriptor(t,s,i){const{get:e,set:r}=h(this.prototype,t)??{get(){return this[s]},set(t){this[s]=t}};return{get:e,set(s){const h=e?.call(this);r?.call(this,s),this.requestUpdate(t,h,i)},configurable:!0,enumerable:!0}}static getPropertyOptions(t){return this.elementProperties.get(t)??b}static _$Ei(){if(this.hasOwnProperty(d(\"elementProperties\")))return;const t=n(this);t.finalize(),void 0!==t.l&&(this.l=[...t.l]),this.elementProperties=new Map(t.elementProperties)}static finalize(){if(this.hasOwnProperty(d(\"finalized\")))return;if(this.finalized=!0,this._$Ei(),this.hasOwnProperty(d(\"properties\"))){const t=this.properties,s=[...r(t),...o(t)];for(const i of s)this.createProperty(i,t[i])}const t=this[Symbol.metadata];if(null!==t){const s=litPropertyMetadata.get(t);if(void 0!==s)for(const[t,i]of s)this.elementProperties.set(t,i)}this._$Eh=new Map;for(const[t,s]of this.elementProperties){const i=this._$Eu(t,s);void 0!==i&&this._$Eh.set(i,t)}this.elementStyles=this.finalizeStyles(this.styles)}static finalizeStyles(s){const i=[];if(Array.isArray(s)){const e=new Set(s.flat(1/0).reverse());for(const s of e)i.unshift(t(s))}else void 0!==s&&i.push(t(s));return i}static _$Eu(t,s){const i=s.attribute;return!1===i?void 0:\"string\"==typeof i?i:\"string\"==typeof t?t.toLowerCase():void 0}constructor(){super(),this._$Ep=void 0,this.isUpdatePending=!1,this.hasUpdated=!1,this._$Em=null,this._$Ev()}_$Ev(){this._$ES=new Promise((t=>this.enableUpdating=t)),this._$AL=new Map,this._$E_(),this.requestUpdate(),this.constructor.l?.forEach((t=>t(this)))}addController(t){(this._$EO??=new Set).add(t),void 0!==this.renderRoot&&this.isConnected&&t.hostConnected?.()}removeController(t){this._$EO?.delete(t)}_$E_(){const t=new Map,s=this.constructor.elementProperties;for(const i of s.keys())this.hasOwnProperty(i)&&(t.set(i,this[i]),delete this[i]);t.size>0&&(this._$Ep=t)}createRenderRoot(){const t=this.shadowRoot??this.attachShadow(this.constructor.shadowRootOptions);return s(t,this.constructor.elementStyles),t}connectedCallback(){this.renderRoot??=this.createRenderRoot(),this.enableUpdating(!0),this._$EO?.forEach((t=>t.hostConnected?.()))}enableUpdating(t){}disconnectedCallback(){this._$EO?.forEach((t=>t.hostDisconnected?.()))}attributeChangedCallback(t,s,i){this._$AK(t,i)}_$ET(t,s){const i=this.constructor.elementProperties.get(t),e=this.constructor._$Eu(t,i);if(void 0!==e&&!0===i.reflect){const h=(void 0!==i.converter?.toAttribute?i.converter:u).toAttribute(s,i.type);this._$Em=t,null==h?this.removeAttribute(e):this.setAttribute(e,h),this._$Em=null}}_$AK(t,s){const i=this.constructor,e=i._$Eh.get(t);if(void 0!==e&&this._$Em!==e){const t=i.getPropertyOptions(e),h=\"function\"==typeof t.converter?{fromAttribute:t.converter}:void 0!==t.converter?.fromAttribute?t.converter:u;this._$Em=e;const r=h.fromAttribute(s,t.type);this[e]=r??this._$Ej?.get(e)??r,this._$Em=null}}requestUpdate(t,s,i){if(void 0!==t){const e=this.constructor,h=this[t];if(i??=e.getPropertyOptions(t),!((i.hasChanged??f)(h,s)||i.useDefault&&i.reflect&&h===this._$Ej?.get(t)&&!this.hasAttribute(e._$Eu(t,i))))return;this.C(t,s,i)}!1===this.isUpdatePending&&(this._$ES=this._$EP())}C(t,s,{useDefault:i,reflect:e,wrapped:h},r){i&&!(this._$Ej??=new Map).has(t)&&(this._$Ej.set(t,r??s??this[t]),!0!==h||void 0!==r)||(this._$AL.has(t)||(this.hasUpdated||i||(s=void 0),this._$AL.set(t,s)),!0===e&&this._$Em!==t&&(this._$Eq??=new Set).add(t))}async _$EP(){this.isUpdatePending=!0;try{await this._$ES}catch(t){Promise.reject(t)}const t=this.scheduleUpdate();return null!=t&&await t,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){if(!this.isUpdatePending)return;if(!this.hasUpdated){if(this.renderRoot??=this.createRenderRoot(),this._$Ep){for(const[t,s]of this._$Ep)this[t]=s;this._$Ep=void 0}const t=this.constructor.elementProperties;if(t.size>0)for(const[s,i]of t){const{wrapped:t}=i,e=this[s];!0!==t||this._$AL.has(s)||void 0===e||this.C(s,void 0,i,e)}}let t=!1;const s=this._$AL;try{t=this.shouldUpdate(s),t?(this.willUpdate(s),this._$EO?.forEach((t=>t.hostUpdate?.())),this.update(s)):this._$EM()}catch(s){throw t=!1,this._$EM(),s}t&&this._$AE(s)}willUpdate(t){}_$AE(t){this._$EO?.forEach((t=>t.hostUpdated?.())),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(t)),this.updated(t)}_$EM(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$ES}shouldUpdate(t){return!0}update(t){this._$Eq&&=this._$Eq.forEach((t=>this._$ET(t,this[t]))),this._$EM()}updated(t){}firstUpdated(t){}}y.elementStyles=[],y.shadowRootOptions={mode:\"open\"},y[d(\"elementProperties\")]=new Map,y[d(\"finalized\")]=new Map,p?.({ReactiveElement:y}),(a.reactiveElementVersions??=[]).push(\"2.1.1\");export{y as ReactiveElement,s as adoptStyles,u as defaultConverter,t as getCompatibleStyle,f as notEqual};\n//# sourceMappingURL=reactive-element.js.map\n","import{defaultConverter as t,notEqual as e}from\"../reactive-element.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const o={attribute:!0,type:String,converter:t,reflect:!1,hasChanged:e},r=(t=o,e,r)=>{const{kind:n,metadata:i}=r;let s=globalThis.litPropertyMetadata.get(i);if(void 0===s&&globalThis.litPropertyMetadata.set(i,s=new Map),\"setter\"===n&&((t=Object.create(t)).wrapped=!0),s.set(r.name,t),\"accessor\"===n){const{name:o}=r;return{set(r){const n=e.get.call(this);e.set.call(this,r),this.requestUpdate(o,n,t)},init(e){return void 0!==e&&this.C(o,void 0,t,e),e}}}if(\"setter\"===n){const{name:o}=r;return function(r){const n=this[o];e.call(this,r),this.requestUpdate(o,n,t)}}throw Error(\"Unsupported decorator location: \"+n)};function n(t){return(e,o)=>\"object\"==typeof o?r(t,e,o):((t,e,o)=>{const r=e.hasOwnProperty(o);return e.constructor.createProperty(o,t),r?Object.getOwnPropertyDescriptor(e,o):void 0})(t,e,o)}export{n as property,r as standardProperty};\n//# sourceMappingURL=property.js.map\n","import{property as t}from\"./property.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */function r(r){return t({...r,state:!0,attribute:!1})}export{r as state};\n//# sourceMappingURL=state.js.map\n","import { ValidationRule, ValidationError, FieldType } from '../schema/types';\n\nexport class FormValidator {\n /**\n * Validates a field value against its validation rules\n */\n static validateField(\n fieldId: string,\n conceptId: string,\n columnId: string,\n value: any,\n fieldType: FieldType,\n rules: ValidationRule[] = []\n ): ValidationError[] {\n const errors: ValidationError[] = [];\n\n for (const rule of rules) {\n const error = this.validateRule(fieldId, conceptId, columnId, value, fieldType, rule);\n if (error) {\n errors.push(error);\n }\n }\n\n return errors;\n }\n\n /**\n * Validates a single rule against a value\n */\n private static validateRule(\n fieldId: string,\n conceptId: string,\n columnId: string,\n value: any,\n _fieldType: FieldType,\n rule: ValidationRule\n ): ValidationError | null {\n const isEmpty = value === null || value === undefined || value === '';\n\n switch (rule.type) {\n case 'required':\n if (isEmpty) {\n return this.createError(fieldId, conceptId, columnId, rule);\n }\n break;\n\n case 'min':\n if (!isEmpty && typeof value === 'number' && value < rule.value) {\n return this.createError(fieldId, conceptId, columnId, rule);\n }\n break;\n\n case 'max':\n if (!isEmpty && typeof value === 'number' && value > rule.value) {\n return this.createError(fieldId, conceptId, columnId, rule);\n }\n break;\n\n case 'minLength':\n if (!isEmpty && typeof value === 'string' && value.length < rule.value) {\n return this.createError(fieldId, conceptId, columnId, rule);\n }\n break;\n\n case 'maxLength':\n if (!isEmpty && typeof value === 'string' && value.length > rule.value) {\n return this.createError(fieldId, conceptId, columnId, rule);\n }\n break;\n\n case 'pattern':\n if (!isEmpty && typeof value === 'string') {\n const regex = new RegExp(rule.value);\n if (!regex.test(value)) {\n return this.createError(fieldId, conceptId, columnId, rule);\n }\n }\n break;\n\n case 'email':\n if (!isEmpty && typeof value === 'string') {\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n if (!emailRegex.test(value)) {\n return this.createError(fieldId, conceptId, columnId, rule);\n }\n }\n break;\n\n case 'url':\n if (!isEmpty && typeof value === 'string') {\n try {\n new URL(value);\n } catch {\n return this.createError(fieldId, conceptId, columnId, rule);\n }\n }\n break;\n\n case 'custom':\n // Custom validation would be handled by consuming application\n break;\n\n default:\n console.warn(`Unknown validation rule type: ${rule.type}`);\n }\n\n return null;\n }\n\n /**\n * Creates a validation error object\n */\n private static createError(\n fieldId: string,\n conceptId: string,\n columnId: string,\n rule: ValidationRule\n ): ValidationError {\n return {\n fieldId,\n conceptId,\n columnId,\n message: rule.message,\n severity: rule.severity || 'error',\n rule\n };\n }\n\n /**\n * Validates data type conversion\n */\n static validateDataType(value: any, fieldType: FieldType): { valid: boolean; convertedValue?: any; error?: string } {\n if (value === null || value === undefined || value === '') {\n return { valid: true, convertedValue: value };\n }\n\n switch (fieldType) {\n case 'number':\n case 'decimal':\n case 'currency':\n case 'percentage': {\n const numValue = Number(value);\n if (isNaN(numValue)) {\n return { valid: false, error: 'Invalid number format' };\n }\n return { valid: true, convertedValue: numValue };\n }\n\n case 'date': {\n const dateValue = new Date(value);\n if (isNaN(dateValue.getTime())) {\n return { valid: false, error: 'Invalid date format' };\n }\n return { valid: true, convertedValue: dateValue.toISOString().split('T')[0] };\n }\n\n case 'datetime': {\n const datetimeValue = new Date(value);\n if (isNaN(datetimeValue.getTime())) {\n return { valid: false, error: 'Invalid datetime format' };\n }\n return { valid: true, convertedValue: datetimeValue.toISOString() };\n }\n\n case 'boolean':\n if (typeof value === 'boolean') {\n return { valid: true, convertedValue: value };\n }\n if (typeof value === 'string') {\n const boolValue = value.toLowerCase();\n if (boolValue === 'true' || boolValue === '1') {\n return { valid: true, convertedValue: true };\n }\n if (boolValue === 'false' || boolValue === '0') {\n return { valid: true, convertedValue: false };\n }\n }\n return { valid: false, error: 'Invalid boolean format' };\n\n case 'text':\n case 'textarea':\n case 'email':\n case 'url':\n case 'tel':\n return { valid: true, convertedValue: String(value) };\n\n case 'select':\n case 'multiselect':\n return { valid: true, convertedValue: value };\n\n default:\n return { valid: true, convertedValue: value };\n }\n }\n\n /**\n * Formats value for display based on field type\n */\n static formatValue(value: any, fieldType: FieldType, locale = 'en-US'): string {\n if (value === null || value === undefined) return '';\n\n switch (fieldType) {\n case 'number':\n return new Intl.NumberFormat(locale).format(Number(value));\n\n case 'decimal':\n return new Intl.NumberFormat(locale, { \n minimumFractionDigits: 2,\n maximumFractionDigits: 2 \n }).format(Number(value));\n\n case 'currency':\n return new Intl.NumberFormat(locale, { \n style: 'currency',\n currency: 'USD' // Should be configurable\n }).format(Number(value));\n\n case 'percentage':\n return new Intl.NumberFormat(locale, { \n style: 'percent',\n minimumFractionDigits: 2\n }).format(Number(value) / 100);\n\n case 'date':\n return new Date(value).toLocaleDateString(locale);\n\n case 'datetime':\n return new Date(value).toLocaleString(locale);\n\n default:\n return String(value);\n }\n }\n}\n","import { \n XBRLFormInput, \n XBRLPresentationRole,\n XBRLPresentationConcept,\n XBRLLabel,\n XBRLHypercubeData,\n XBRLHypercubeRole\n} from '../schema/xbrl-types';\nimport { \n XBRLFormSchema, \n FormSection, \n FormField, \n FormColumn,\n ConceptTree,\n FieldType \n} from '../schema/types';\n\n/**\n * XBRL Form B private static assignColumnIdsToConceptFields(conceptTree: ConceptTree, columnIds: string[]): void {\n // Filter fields to only keep those that match available columns\n conceptTree.fields = conceptTree.fields.filter(field => {\n return columnIds.includes(field.columnId);\n });\n\n // Recursively process children\n if (conceptTree.children) {\n conceptTree.children.forEach(child => {\n this.assignColumnIdsToConceptFields(child, columnIds);\n });\n }\n }ransforms XBRL taxonomy data into Jupiter Dynamic Form schemas\n * Updated to handle actual presentation.json structure with roles\n */\nexport class XBRLFormBuilder {\n \n /**\n * Create unique concept ID by combining original ID with preferred label suffix\n * This handles cases where the same concept appears multiple times with different labels\n */\n private static createUniqueConceptId(concept: XBRLPresentationConcept): string {\n if (concept.preferredLabel && concept.preferredLabel.trim() !== '') {\n // Extract the last part of the role URL as suffix\n const roleMatch = concept.preferredLabel.match(/\\/([^\\/]+)$/);\n const roleSuffix = roleMatch ? roleMatch[1] : concept.preferredLabel.replace(/[^a-zA-Z0-9]/g, '_');\n return `${concept.id}_${roleSuffix}`;\n }\n return concept.id;\n }\n \n /**\n * Build form schema from XBRL input data\n * Creates accordion sections for each presentation role\n */\n static buildFormSchema(\n xbrlInput: XBRLFormInput, \n periodStartDate?: string, \n periodEndDate?: string\n ): XBRLFormSchema {\n if (!xbrlInput.presentation || xbrlInput.presentation.length === 0) {\n throw new Error('XBRL presentation data is required');\n }\n\n // Use the first entrypoint (typically there's only one)\n const presentationData = xbrlInput.presentation[0];\n \n // Extract hypercube data for dimension processing\n const hypercubeData = xbrlInput.hypercubes?.[0]; // Use first entrypoint\n \n const sections: FormSection[] = [];\n\n // Create a form section for each presentation role\n presentationData.roles.forEach(role => {\n const section = this.buildSectionFromRole(role, periodStartDate, periodEndDate, hypercubeData);\n \n // Post-process fields to assign correct column IDs based on generated columns\n this.assignFieldColumnIds(section);\n \n sections.push(section);\n });\n\n return {\n formId: `xbrl-form-${Date.now()}`,\n title: `XBRL Form - ${this.extractEntityName(presentationData.entrypoint)}`,\n description: `Dynamic form generated from XBRL taxonomy data`,\n version: '1.0.0',\n sections: sections\n };\n }\n\n /**\n * Build a form section from a presentation role\n */\n private static buildSectionFromRole(\n role: XBRLPresentationRole, \n periodStartDate?: string, \n periodEndDate?: string,\n hypercubeData?: XBRLHypercubeData\n ): FormSection {\n // Extract section title from role name (remove role number prefix)\n const title = this.extractRoleTitle(role.role);\n \n // Analyze period types in this role first to determine consistent column strategy\n const nonAbstractConcepts = this.getAllNonAbstractConcepts(role);\n const periodTypes = new Set(\n nonAbstractConcepts\n .filter(concept => concept.periodType)\n .map(concept => concept.periodType)\n );\n\n // Find matching hypercube role for dimension processing\n const hypercubeRole = hypercubeData?.roles.find(hr => hr.roleId === role.id);\n \n if (hypercubeRole) {\n console.log(`🏷️ Found matching hypercube role \"${role.id}\"`);\n } else {\n console.log(`❌ No hypercube role found for \"${role.id}\"`);\n }\n \n // Generate appropriate columns based on concept period types and hypercube dimensions FIRST\n const columns = this.generateDefaultColumnsForRole(role, periodStartDate || '2025-01-01', periodEndDate || '2025-12-31', hypercubeRole, nonAbstractConcepts, periodTypes);\n\n // Extract column IDs for field creation\n const availableColumnIds = columns.map(col => col.id);\n console.log(`📋 Available column IDs for role \"${role.id}\":`, availableColumnIds);\n \n const roleInfo = { periodTypes, availableColumnIds };\n const conceptTrees: ConceptTree[] = [];\n\n // Process root concepts and build tree structure with knowledge of available columns\n if (role.presentationLinkbase?.concepts) {\n role.presentationLinkbase.concepts.forEach(concept => {\n const conceptTree = this.buildConceptTree(concept, 0, periodStartDate, periodEndDate, roleInfo);\n if (conceptTree) {\n conceptTrees.push(conceptTree);\n }\n });\n }\n\n return {\n id: role.id,\n title: title,\n description: `Section for ${title}`,\n concepts: conceptTrees,\n columns: columns,\n expanded: false\n };\n }\n\n /**\n * Build concept tree from XBRL presentation concept\n */\n private static buildConceptTree(\n concept: XBRLPresentationConcept, \n level: number, \n periodStartDate?: string, \n periodEndDate?: string,\n roleInfo?: { periodTypes: Set<string>, availableColumnIds?: string[] }\n ): ConceptTree | null {\n const label = this.getPreferredLabel(concept.labels);\n \n // Build fields for this concept (if not abstract)\n const fields: FormField[] = [];\n if (!concept.elementAbstract) {\n // Use available column IDs if provided, otherwise fall back to period-based logic\n let columnIds: string[] = [];\n \n if (roleInfo?.availableColumnIds && roleInfo.availableColumnIds.length > 0) {\n // Multi-dimensional or complex column scenario - filter by concept's period type\n columnIds = roleInfo.availableColumnIds.filter(colId => {\n if (concept.periodType === 'instant') {\n return colId.includes('instant') || colId === 'instant';\n } else if (concept.periodType === 'duration') {\n return colId.includes('duration') || colId === 'duration';\n } else {\n // If concept has no period type, include all columns\n return true;\n }\n });\n \n // If no columns match the period type, fall back to all available columns\n if (columnIds.length === 0) {\n columnIds = roleInfo.availableColumnIds;\n }\n } else {\n // Fallback to original period-based logic\n if (!roleInfo?.periodTypes || roleInfo.periodTypes.size === 0) {\n columnIds = ['default'];\n } else if (roleInfo.periodTypes.size === 1 && roleInfo.periodTypes.has('instant')) {\n columnIds = ['instant'];\n } else if (roleInfo.periodTypes.size === 1 && roleInfo.periodTypes.has('duration')) {\n columnIds = ['duration'];\n } else {\n // Mixed period types - create fields for both duration and instant columns\n // based on the concept's own period type\n if (concept.periodType === 'instant') {\n columnIds = ['instant'];\n } else if (concept.periodType === 'duration') {\n columnIds = ['duration'];\n } else {\n // Fallback if period type is not specified\n columnIds = ['duration', 'instant'];\n }\n }\n }\n \n // Create fields for appropriate column IDs\n columnIds.forEach(columnId => {\n const field = this.createFieldFromConcept(concept, periodStartDate, periodEndDate, columnId);\n if (field) fields.push(field);\n });\n }\n\n // Process children recursively\n const children: ConceptTree[] = [];\n if (concept.children && concept.children.length > 0) {\n concept.children.forEach(child => {\n const childTree = this.buildConceptTree(child, level + 1, periodStartDate, periodEndDate, roleInfo);\n if (childTree) {\n children.push(childTree);\n }\n });\n }\n\n // Check if this concept should be included in the tree\n // For abstract concepts: only include if they have fields OR have children with content\n // For non-abstract concepts: always include if they have fields\n const hasContent = fields.length > 0 || children.length > 0;\n \n if (!hasContent) {\n // Abstract concept with no fields and no children with content - omit from tree\n return null;\n }\n\n return {\n id: this.createUniqueConceptId(concept), // Use unique ID for form management\n originalConceptId: concept.id, // Store original for submission data\n name: concept.conceptName,\n label: label,\n description: `${concept.conceptName} (${concept.type})`,\n level: level,\n children: children,\n fields: fields,\n collapsed: level > 0, // Collapse nested levels by default\n abstract: concept.elementAbstract,\n periodType: concept.periodType as 'instant' | 'duration'\n };\n }\n\n /**\n * Create form field from XBRL concept\n */\n private static createFieldFromConcept(\n concept: XBRLPresentationConcept, \n periodStartDate?: string, \n periodEndDate?: string,\n forcedColumnId?: string\n ): FormField | null {\n const fieldType = this.mapXBRLTypeToFieldType(concept.type);\n const label = this.getPreferredLabel(concept.labels);\n\n // Determine appropriate column ID based on concept's period type or forced value\n let columnId: string;\n \n if (forcedColumnId) {\n // Use the forced column ID if provided\n columnId = forcedColumnId;\n } else {\n // Determine column ID based on period type\n if (concept.periodType === 'instant') {\n columnId = 'instant';\n } else if (concept.periodType === 'duration') {\n columnId = 'duration'; // Single column for duration\n } else {\n columnId = 'default';\n }\n } const field: FormField = {\n id: `${concept.id}_${columnId}_field`,\n conceptId: concept.id,\n columnId: columnId,\n type: fieldType,\n label: label,\n placeholder: `Enter ${label.toLowerCase()}`,\n required: false, // Will be determined by validation rules\n disabled: concept.elementAbstract,\n defaultValue: null\n };\n\n // Add period information if the concept is period-specific\n if (concept.periodType === 'duration' || concept.periodType === 'instant') {\n field.periodStartDate = periodStartDate || '2025-01-01';\n field.periodEndDate = periodEndDate || '2025-12-31';\n }\n\n return field;\n }\n\n /**\n * Map XBRL data type to form field type\n */\n private static mapXBRLTypeToFieldType(xbrlType: string): FieldType {\n const typeMap: Record<string, FieldType> = {\n 'xbrli:stringItemType': 'text',\n 'xbrli:monetaryItemType': 'currency',\n 'xbrli:integerItemType': 'number',\n 'xbrli:decimalItemType': 'decimal',\n 'xbrli:percentItemType': 'percentage',\n 'xbrli:dateItemType': 'date',\n 'xbrli:booleanItemType': 'boolean',\n 'dtr-types:domainItemType': 'select',\n 'bw2-titel9:chamberOfCommerceRegistrationNumberItemType': 'text'\n };\n\n return typeMap[xbrlType] || 'text';\n }\n\n /**\n * Get preferred label from labels array\n */\n private static getPreferredLabel(labels: XBRLLabel[]): string {\n if (!labels || labels.length === 0) return 'Unnamed Concept';\n\n // Try to find preferred label\n const preferred = labels.find(l => l.preferredLabel);\n if (preferred) return preferred.label;\n\n // Try to find standard label\n const standard = labels.find(l => l.role === 'http://www.xbrl.org/2003/role/label');\n if (standard) return standard.label;\n\n // Try to find terse label\n const terse = labels.find(l => l.role === 'http://www.xbrl.org/2003/role/terseLabel');\n if (terse) return terse.label;\n\n // Return first available label\n return labels[0].label;\n }\n\n /**\n * Assign appropriate column IDs to fields based on section's generated columns\n */\n private static assignFieldColumnIds(section: FormSection): void {\n if (!section.columns || section.columns.length === 0) {\n return;\n }\n\n // Get available column IDs\n const columnIds = section.columns.map(col => col.id);\n \n // Process all fields in all concept trees\n section.concepts.forEach(conceptTree => {\n this.assignColumnIdsToConceptFields(conceptTree, columnIds);\n });\n }\n\n /**\n * Recursively assign column IDs to fields in a concept tree\n */\n private static assignColumnIdsToConceptFields(conceptTree: ConceptTree, columnIds: string[]): void {\n // Filter fields to only keep those that match available columns\n conceptTree.fields = conceptTree.fields.filter(field => {\n return columnIds.includes(field.columnId);\n });\n\n // Process children recursively\n if (conceptTree.children) {\n conceptTree.children.forEach(child => {\n this.assignColumnIdsToConceptFields(child, columnIds);\n });\n }\n }\n\n /**\n * Count total fields in a concept tree recursively\n */\n private static countFieldsInTree(conceptTree: ConceptTree): number {\n let count = conceptTree.fields.length;\n if (conceptTree.children) {\n conceptTree.children.forEach(child => {\n count += this.countFieldsInTree(child);\n });\n }\n return count;\n }\n\n /**\n * Get all non-abstract concepts from a role recursively\n */\n static getAllNonAbstractConcepts(role: XBRLPresentationRole): XBRLPresentationConcept[] {\n const nonAbstractConcepts: XBRLPresentationConcept[] = [];\n \n if (role.presentationLinkbase?.concepts) {\n role.presentationLinkbase.concepts.forEach(concept => {\n this.collectNonAbstractConcepts(concept, nonAbstractConcepts);\n });\n }\n \n return nonAbstractConcepts;\n }\n\n /**\n * Recursively collect non-abstract concepts from a concept tree\n */\n private static collectNonAbstractConcepts(\n concept: XBRLPresentationConcept, \n collection: XBRLPresentationConcept[]\n ): void {\n // Add this concept if it's not abstract\n if (!concept.elementAbstract) {\n collection.push(concept);\n }\n \n // Recursively process children\n if (concept.children && concept.children.length > 0) {\n concept.children.forEach(child => {\n this.collectNonAbstractConcepts(child, collection);\n });\n }\n }\n\n /**\n * Generate default columns based on period types of non-abstract concepts in a role\n */\n static generateDefaultColumnsForRole(\n role: XBRLPresentationRole, \n periodStartDate: string, \n periodEndDate: string,\n hypercubeRole?: XBRLHypercubeRole,\n nonAbstractConcepts?: XBRLPresentationConcept[],\n rolePeriodTypes?: Set<string>\n ): FormColumn[] {\n // Use pre-calculated values if provided, otherwise calculate them\n const concepts = nonAbstractConcepts || this.getAllNonAbstractConcepts(role);\n const periodTypes = rolePeriodTypes || new Set(\n concepts\n .filter(concept => concept.periodType) // Only concepts with period type\n .map(concept => concept.periodType)\n );\n \n console.log(`📊 Analyzing role \"${role.role}\" with ${concepts.length} non-abstract concepts`);\n \n if (concepts.length === 0) {\n // No non-abstract concepts, return single default column\n console.log('📊 No non-abstract concepts found, using default column');\n return [{\n id: 'default',\n title: 'Value',\n description: 'Default value column',\n type: 'base',\n order: 0,\n removable: false\n }];\n }\n \n // Check for hypercube dimensions and generate appropriate columns\n let dimensionColumns: FormColumn[] = [];\n if (hypercubeRole?.items?.length === 1) {\n const item = hypercubeRole.items[0];\n console.log(`🔍 Processing hypercube item for role \"${role.role}\":`, {\n itemId: item.id,\n conceptIds: item.conceptIds?.length || 0,\n dimensions: item.dimensions.length\n });\n \n if (item.dimensions.length === 1) {\n // Single dimension - existing logic\n dimensionColumns = this.generateSingleDimensionColumns(item.dimensions[0], periodStartDate, periodEndDate, periodTypes);\n } else if (item.dimensions.length > 1) {\n // Multiple dimensions - generate combination columns\n dimensionColumns = this.generateMultiDimensionColumns(item.dimensions, periodStartDate, periodEndDate, periodTypes);\n }\n } else if (hypercubeRole?.items?.length && hypercubeRole.items.length > 1) {\n console.log(`⚠️ Multiple items found (${hypercubeRole.items.length}), skipping for now`);\n }\n \n // Analyze period types (use the pre-calculated or newly calculated set)\n console.log(`📅 Found period types: ${Array.from(periodTypes).join(', ')}`);\n \n const columns: FormColumn[] = [];\n \n // If we have dimension columns, use them\n if (dimensionColumns.length > 0) {\n columns.push(...dimensionColumns);\n } else {\n // Fallback to period-based columns\n if (periodTypes.size === 0) {\n // No period types specified, use single default column\n console.log('📅 No period types found, using default column');\n columns.push({\n id: 'default',\n title: 'Value',\n description: 'Default value column',\n type: 'base',\n order: 0,\n removable: false\n });\n } else if (periodTypes.size === 1 && periodTypes.has('instant')) {\n // All concepts are instant - single column with start date\n console.log('📅 All concepts are instant type, creating single column');\n columns.push({\n id: 'instant',\n title: `As of ${this.formatDateForDisplay(periodStartDate)}`,\n description: `Values as of ${periodStartDate}`,\n type: 'base',\n order: 0,\n removable: false\n });\n } else if (periodTypes.size === 1 && periodTypes.has('duration')) {\n // All concepts are duration - single column with period range\n console.log('📅 All concepts are duration type, creating single column with period range');\n columns.push({\n id: 'duration',\n title: `${this.formatDateForDisplay(periodStartDate)} / ${this.formatDateForDisplay(periodEndDate)}`,\n description: `Period: ${periodStartDate} to ${periodEndDate}`,\n type: 'base',\n order: 0,\n removable: false\n });\n } else {\n // Mixed period types - create both duration and instant columns\n console.log('📅 Mixed period types found, creating both duration and instant columns');\n \n // Duration column with period range\n columns.push({\n id: 'duration',\n title: `${this.formatDateForDisplay(periodStartDate)} / ${this.formatDateForDisplay(periodEndDate)}`,\n description: `Period: ${periodStartDate} to ${periodEndDate}`,\n type: 'base',\n order: 0,\n removable: false\n });\n \n // Instant column using periodStartDate as the instant date\n columns.push({\n id: 'instant',\n title: `As of ${this.formatDateForDisplay(periodStartDate)}`,\n description: `Values as of ${periodStartDate}`,\n type: 'base',\n order: 1,\n removable: false\n });\n }\n }\n \n console.log(`📊 Generated ${columns.length} columns for role \"${role.role}\":`, columns.map(c => c.title));\n return columns;\n }\n\n /**\n * Generate columns for single dimension scenarios\n */\n private static generateSingleDimensionColumns(\n dimension: any, \n periodStartDate: string, \n periodEndDate: string, \n periodTypes: Set<string>\n ): FormColumn[] {\n console.log(`📊 Found single dimension:`, {\n id: dimension.id,\n conceptName: dimension.conceptName,\n membersCount: dimension.members.length\n });\n \n if (dimension.members.length === 0) {\n return [];\n }\n \n const axisLabel = dimension.labels.find((l: any) => l.role === 'http://www.xbrl.org/2003/role/label')?.label || dimension.conceptName;\n const firstMember = dimension.members[0];\n const memberLabel = firstMember.labels.find((l: any) => l.role === 'http://www.xbrl.org/2003/role/label')?.label || firstMember.conceptName;\n \n const dimensionInfo = {\n axisId: dimension.id,\n axisLabel,\n memberId: firstMember.id,\n memberLabel,\n dimensionKey: `${axisLabel} | ${memberLabel}`,\n dimensionIdKey: `${dimension.id} | ${firstMember.id}`\n };\n \n console.log(`📊 Generated dimension info:`, dimensionInfo);\n \n const columns: FormColumn[] = [];\n \n if (periodTypes.size === 0) {\n columns.push({\n id: 'default',\n title: dimensionInfo.memberLabel,\n description: 'Default value column',\n type: 'dimension',\n dimensionData: {\n dimensionId: 'default',\n axisId: dimensionInfo.axisId,\n memberId: dimensionInfo.memberId,\n memberValue: dimensionInfo.memberLabel,\n memberLabel: dimensionInfo.memberLabel,\n axis: dimensionInfo.axisLabel,\n axisLabel: dimensionInfo.axisLabel,\n memberKey: dimensionInfo.dimensionKey,\n dimensionIdKey: dimensionInfo.dimensionIdKey\n },\n order: 0,\n removable: false\n });\n } else if (periodTypes.size === 1 && periodTypes.has('instant')) {\n columns.push({\n id: 'instant',\n title: `${dimensionInfo.memberLabel} (${this.formatDateForDisplay(periodStartDate)})`,\n description: `Values as of ${periodStartDate}`,\n type: 'dimension',\n dimensionData: {\n dimensionId: 'instant',\n axisId: dimensionInfo.axisId,\n memberId: dimensionInfo.memberId,\n memberValue: dimensionInfo.memberLabel,\n memberLabel: dimensionInfo.memberLabel,\n axis: dimensionInfo.axisLabel,\n axisLabel: dimensionInfo.axisLabel,\n memberKey: dimensionInfo.dimensionKey,\n dimensionIdKey: dimensionInfo.dimensionIdKey\n },\n order: 0,\n removable: false\n });\n } else if (periodTypes.size === 1 && periodTypes.has('duration')) {\n columns.push({\n id: 'duration',\n title: `${dimensionInfo.memberLabel} (${this.formatDateForDisplay(periodStartDate)} / ${this.formatDateForDisplay(periodEndDate)})`,\n description: `Period: ${periodStartDate} to ${periodEndDate}`,\n type: 'dimension',\n dimensionData: {\n dimensionId: 'duration',\n axisId: dimensionInfo.axisId,\n memberId: dimensionInfo.memberId,\n memberValue: dimensionInfo.memberLabel,\n memberLabel: dimensionInfo.memberLabel,\n axis: dimensionInfo.axisLabel,\n axisLabel: dimensionInfo.axisLabel,\n memberKey: dimensionInfo.dimensionKey,\n dimensionIdKey: dimensionInfo.dimensionIdKey\n },\n order: 0,\n removable: false\n });\n } else {\n // Mixed period types - create both duration and instant columns\n columns.push({\n id: 'duration',\n title: `${dimensionInfo.memberLabel} (${this.formatDateForDisplay(periodStartDate)} / ${this.formatDateForDisplay(periodEndDate)})`,\n description: `Period: ${periodStartDate} to ${periodEndDate}`,\n type: 'dimension',\n dimensionData: {\n dimensionId: 'duration',\n axisId: dimensionInfo.axisId,\n memberId: dimensionInfo.memberId,\n memberValue: dimensionInfo.memberLabel,\n memberLabel: dimensionInfo.memberLabel,\n axis: dimensionInfo.axisLabel,\n axisLabel: dimensionInfo.axisLabel,\n memberKey: dimensionInfo.dimensionKey,\n dimensionIdKey: dimensionInfo.dimensionIdKey\n },\n order: 0,\n removable: false\n });\n \n columns.push({\n id: 'instant',\n title: `${dimensionInfo.memberLabel} (${this.formatDateForDisplay(periodStartDate)})`,\n description: `Values as of ${periodStartDate}`,\n type: 'dimension',\n dimensionData: {\n dimensionId: 'instant',\n axisId: dimensionInfo.axisId,\n memberId: dimensionInfo.memberId,\n memberValue: dimensionInfo.memberLabel,\n memberLabel: dimensionInfo.memberLabel,\n axis: dimensionInfo.axisLabel,\n axisLabel: dimensionInfo.axisLabel,\n memberKey: dimensionInfo.dimensionKey,\n dimensionIdKey: dimensionInfo.dimensionIdKey\n },\n order: 1,\n removable: false\n });\n }\n \n return columns;\n }\n\n /**\n * Generate columns for multi-dimension scenarios - creates combinations of all dimension members\n */\n private static generateMultiDimensionColumns(\n dimensions: any[], \n periodStartDate: string, \n periodEndDate: string, \n periodTypes: Set<string>\n ): FormColumn[] {\n console.log(`📊 Processing ${dimensions.length} dimensions for multi-dimensional columns`);\n \n // Get all dimension information\n const dimensionInfos = dimensions.map(dimension => {\n const axisLabel = dimension.labels.find((l: any) => l.role === 'http://www.xbrl.org/2003/role/label')?.label || dimension.conceptName;\n \n // Get all members including children\n const allMembers = this.getAllDimensionMembers(dimension.members);\n \n return {\n id: dimension.id,\n axisLabel,\n members: allMembers.map(member => ({\n id: member.id,\n label: member.labels.find((l: any) => l.role === 'http://www.xbrl.org/2003/role/label')?.label || member.conceptName\n }))\n };\n });\n \n // Generate all combinations of dimension members\n const combinations = this.generateDimensionCombinations(dimensionInfos);\n console.log(`📊 Generated ${combinations.length} dimension combinations`);\n \n const columns: FormColumn[] = [];\n \n combinations.forEach((combination: any[], index: number) => {\n // Create column title from combination\n const columnTitle = combination.map((c: any) => c.memberLabel).join(' | ');\n \n // Create dimension data for this combination\n const dimensionData = {\n dimensionId: `multi_${index}`,\n memberValue: columnTitle, // Required field\n memberLabel: columnTitle, // Required field\n combinations: combination.map((c: any) => ({\n axisId: c.axisId,\n axisLabel: c.axisLabel,\n memberId: c.memberId,\n memberLabel: c.memberLabel\n })),\n memberKey: columnTitle,\n dimensionIdKey: combination.map((c: any) => `${c.axisId}|${c.memberId}`).join('::')\n };\n \n // Create columns based on period types\n if (periodTypes.size === 0 || (periodTypes.size === 1 && periodTypes.has('duration'))) {\n columns.push({\n id: `duration_${index}`,\n title: `${columnTitle} (${this.formatDateForDisplay(periodStartDate)} / ${this.formatDateForDisplay(periodEndDate)})`,\n description: `Period: ${periodStartDate} to ${periodEndDate}`,\n type: 'dimension',\n dimensionData: {\n ...dimensionData,\n dimensionId: `duration_${index}`\n },\n order: index * 2,\n removable: false\n });\n } else if (periodTypes.size === 1 && periodTypes.has('instant')) {\n columns.push({\n id: `instant_${index}`,\n title: `${columnTitle} (${this.formatDateForDisplay(periodStartDate)})`,\n description: `Values as of ${periodStartDate}`,\n type: 'dimension',\n dimensionData: {\n ...dimensionData,\n dimensionId: `instant_${index}`\n },\n order: index * 2,\n removable: false\n });\n } else {\n // Mixed period types - create both duration and instant columns for each combination\n columns.push({\n id: `duration_${index}`,\n title: `${columnTitle} (${this.formatDateForDisplay(periodStartDate)} / ${this.formatDateForDisplay(periodEndDate)})`,\n description: `Period: ${periodStartDate} to ${periodEndDate}`,\n type: 'dimension',\n dimensionData: {\n ...dimensionData,\n dimensionId: `duration_${index}`\n },\n order: index * 2,\n removable: false\n });\n \n columns.push({\n id: `instant_${index}`,\n title: `${columnTitle} (${this.formatDateForDisplay(periodStartDate)})`,\n description: `Values as of ${periodStartDate}`,\n type: 'dimension',\n dimensionData: {\n ...dimensionData,\n dimensionId: `instant_${index}`\n },\n order: index * 2 + 1,\n removable: false\n });\n }\n });\n \n console.log(`📊 Generated ${columns.length} multi-dimensional columns`);\n return columns;\n }\n\n /**\n * Get all members including children recursively\n */\n private static getAllDimensionMembers(members: any[]): any[] {\n const allMembers: any[] = [];\n \n members.forEach(member => {\n allMembers.push(member);\n \n if (member.children && member.children.length > 0) {\n allMembers.push(...this.getAllDimensionMembers(member.children));\n }\n });\n \n return allMembers;\n }\n\n /**\n * Generate all combinations of dimension members\n */\n private static generateDimensionCombinations(dimensionInfos: any[]): any[] {\n if (dimensionInfos.length === 0) return [];\n if (dimensionInfos.length === 1) {\n return dimensionInfos[0].members.map((member: any) => [{\n axisId: dimensionInfos[0].id,\n axisLabel: dimensionInfos[0].axisLabel,\n memberId: member.id,\n memberLabel: member.label\n }]);\n }\n \n // Generate combinations recursively\n const [firstDimension, ...restDimensions] = dimensionInfos;\n const restCombinations = this.generateDimensionCombinations(restDimensions);\n \n const combinations: any[] = [];\n \n firstDimension.members.forEach((member: any) => {\n if (restCombinations.length === 0) {\n combinations.push([{\n axisId: firstDimension.id,\n axisLabel: firstDimension.axisLabel,\n memberId: member.id,\n memberLabel: member.label\n }]);\n } else {\n restCombinations.forEach(restCombination => {\n combinations.push([\n {\n axisId: firstDimension.id,\n axisLabel: firstDimension.axisLabel,\n memberId: member.id,\n memberLabel: member.label\n },\n ...restCombination\n ]);\n });\n }\n });\n \n return combinations;\n }\n\n /**\n * Format date for display in column headers\n */\n private static formatDateForDisplay(dateString: string): string {\n try {\n const date = new Date(dateString);\n return date.toLocaleDateString('en-US', {\n year: 'numeric',\n month: 'short',\n day: 'numeric'\n });\n } catch {\n return dateString;\n }\n }\n\n /**\n * Extract entity name from entrypoint URL\n */\n private static extractEntityName(entrypoint: string): string {\n try {\n const url = new URL(entrypoint);\n const pathParts = url.pathname.split('/');\n const filename = pathParts[pathParts.length - 1];\n return filename.replace('.xsd', '').replace(/[^a-zA-Z0-9]/g, ' ').trim() || 'Entity';\n } catch {\n return 'Entity';\n }\n }\n\n /**\n * Extract role title from role string\n */\n private static extractRoleTitle(role: string): string {\n // Remove role number prefix like \"[000001] \" and return the title\n const match = role.match(/^\\[[\\d]+\\]\\s*(.+)$/);\n return match ? match[1].trim() : role;\n }\n\n /**\n * Extract role order from role string\n */\n private static extractRoleOrder(role: string): number {\n const match = role.match(/^\\[([\\d]+)\\]/);\n return match ? parseInt(match[1], 10) : 0;\n }\n\n /**\n * Build columns from XBRL hypercube data (placeholder for now)\n */\n static buildColumnsFromHypercubes(/* _hypercubes: any[] */): any[] {\n // For now, return default column structure\n // This will be expanded when we implement hypercube support\n return [{\n id: 'default',\n label: 'Values',\n type: 'data'\n }];\n }\n}\n","import { LitElement, html, css, PropertyValues } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { FormField, ValidationError } from '../schema/types';\nimport { FormValidator } from '../utils/validation';\n\n@customElement('jupiter-form-field')\nexport class JupiterFormField extends LitElement {\n @property({ type: Object }) field!: FormField;\n @property({ type: String }) conceptId!: string;\n @property({ type: String }) columnId!: string;\n @property() value: any = null;\n @property({ type: Boolean }) disabled = false;\n @property({ type: String }) locale = 'en-US';\n @property({ type: Boolean }) hideLabel = false;\n\n @state() private _errors: ValidationError[] = [];\n @state() private _touched = false;\n\n static styles = css`\n :host {\n display: block;\n margin-bottom: 0px; /* Remove bottom margin for table layout */\n }\n\n :host([hideLabel]) {\n margin-bottom: 0px;\n }\n\n .field-container {\n position: relative;\n }\n\n .field-label {\n display: block;\n font-weight: 500;\n margin-bottom: 4px;\n color: var(--jupiter-text-primary, #333);\n font-size: 14px;\n }\n\n .field-label.required::after {\n content: ' *';\n color: var(--jupiter-error-color, #d32f2f);\n }\n\n .field-input {\n width: 100%;\n padding: 6px 8px; /* Reduced padding for table cells */\n border: 1px solid var(--jupiter-border-color, #ddd);\n border-radius: 4px;\n font-size: 13px; /* Slightly smaller font for table */\n font-family: inherit;\n background: var(--jupiter-input-background, #fff);\n color: var(--jupiter-text-primary, #333);\n box-sizing: border-box;\n }\n\n .field-input:focus {\n outline: none;\n border-color: var(--jupiter-primary-color, #1976d2);\n box-shadow: 0 0 0 2px var(--jupiter-primary-color-light, rgba(25, 118, 210, 0.2));\n }\n\n .field-input:disabled {\n background: var(--jupiter-disabled-background, #f5f5f5);\n color: var(--jupiter-disabled-text, #999);\n cursor: not-allowed;\n }\n\n .field-input.error {\n border-color: var(--jupiter-error-color, #d32f2f);\n }\n\n .field-input.warning {\n border-color: var(--jupiter-warning-color, #ff9800);\n }\n\n .field-errors {\n margin-top: 4px;\n }\n\n .field-error {\n display: block;\n font-size: 12px;\n margin-bottom: 2px;\n }\n\n .field-error.error {\n color: var(--jupiter-error-color, #d32f2f);\n }\n\n .field-error.warning {\n color: var(--jupiter-warning-color, #ff9800);\n }\n\n .field-error.info {\n color: var(--jupiter-info-color, #2196f3);\n }\n\n select.field-input {\n appearance: none;\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='m6 8 4 4 4-4'/%3e%3c/svg%3e\");\n background-position: right 8px center;\n background-repeat: no-repeat;\n background-size: 16px;\n padding-right: 32px;\n }\n\n textarea.field-input {\n resize: vertical;\n min-height: 60px;\n }\n\n .checkbox-container {\n display: flex;\n align-items: center;\n gap: 8px;\n }\n\n .checkbox-container input[type=\"checkbox\"] {\n margin: 0;\n width: auto;\n }\n `;\n\n protected willUpdate(changedProperties: PropertyValues) {\n if (changedProperties.has('value') || changedProperties.has('field')) {\n this._validateField();\n }\n }\n\n private _validateField() {\n if (this.field?.validation) {\n this._errors = FormValidator.validateField(\n this.field.id,\n this.conceptId,\n this.columnId,\n this.value,\n this.field.type,\n this.field.validation\n );\n }\n }\n\n private _handleInput(event: Event) {\n const target = event.target as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\n let value: any = target.value;\n\n // Convert value based on field type\n if (this.field.type === 'number' || this.field.type === 'decimal') {\n value = value === '' ? null : Number(value);\n } else if (this.field.type === 'boolean') {\n value = (target as HTMLInputElement).checked;\n }\n\n this.value = value;\n this._touched = true;\n \n this.dispatchEvent(new CustomEvent('field-change', {\n detail: {\n fieldId: this.field.id,\n conceptId: this.conceptId,\n columnId: this.columnId,\n value,\n oldValue: this.value\n },\n bubbles: true\n }));\n }\n\n private _handleFocus() {\n this.dispatchEvent(new CustomEvent('field-focus', {\n detail: {\n fieldId: this.field.id,\n conceptId: this.conceptId,\n columnId: this.columnId\n },\n bubbles: true\n }));\n }\n\n private _handleBlur() {\n this._touched = true;\n this.dispatchEvent(new CustomEvent('field-blur', {\n detail: {\n fieldId: this.field.id,\n conceptId: this.conceptId,\n columnId: this.columnId\n },\n bubbles: true\n }));\n }\n\n private _renderInput() {\n const hasErrors = this._errors.some(e => e.severity === 'error');\n const hasWarnings = this._errors.some(e => e.severity === 'warning');\n const cssClass = `field-input ${hasErrors ? 'error' : hasWarnings ? 'warning' : ''}`;\n \n // Generate unique field identifiers for form submission\n const fieldId = `${this.conceptId}__${this.columnId}`;\n const fieldName = `data[${this.conceptId}][${this.columnId}]`;\n\n switch (this.field.type) {\n case 'textarea':\n return html`\n <textarea\n id=\"${fieldId}\"\n name=\"${fieldName}\"\n class=\"${cssClass}\"\n .value=\"${this.value || ''}\"\n ?disabled=\"${this.disabled || this.field.disabled}\"\n placeholder=\"${this.field.placeholder || ''}\"\n @input=\"${this._handleInput}\"\n @focus=\"${this._handleFocus}\"\n @blur=\"${this._handleBlur}\"\n ></textarea>\n `;\n\n case 'select':\n return html`\n <select\n id=\"${fieldId}\"\n name=\"${fieldName}\"\n class=\"${cssClass}\"\n .value=\"${this.value || ''}\"\n ?disabled=\"${this.disabled || this.field.disabled}\"\n @change=\"${this._handleInput}\"\n @focus=\"${this._handleFocus}\"\n @blur=\"${this._handleBlur}\"\n >\n <option value=\"\">Select...</option>\n ${this.field.options?.map(option => html`\n <option \n value=\"${option.value}\"\n ?disabled=\"${option.disabled}\"\n ?selected=\"${this.value === option.value}\"\n >\n ${option.label}\n </option>\n `)}\n </select>\n `;\n\n case 'boolean':\n return html`\n <div class=\"checkbox-container\">\n <input\n id=\"${fieldId}\"\n name=\"${fieldName}\"\n type=\"checkbox\"\n class=\"field-input\"\n .checked=\"${Boolean(this.value)}\"\n ?disabled=\"${this.disabled || this.field.disabled}\"\n @change=\"${this._handleInput}\"\n @focus=\"${this._handleFocus}\"\n @blur=\"${this._handleBlur}\"\n />\n <span>${this.field.label}</span>\n </div>\n `;\n\n default:\n return html`\n <input\n id=\"${fieldId}\"\n name=\"${fieldName}\"\n type=\"${this._getInputType()}\"\n class=\"${cssClass}\"\n .value=\"${this.value || ''}\"\n ?disabled=\"${this.disabled || this.field.disabled}\"\n placeholder=\"${this.field.placeholder || ''}\"\n @input=\"${this._handleInput}\"\n @focus=\"${this._handleFocus}\"\n @blur=\"${this._handleBlur}\"\n />\n `;\n }\n }\n\n private _getInputType(): string {\n switch (this.field.type) {\n case 'number':\n case 'decimal':\n case 'currency':\n case 'percentage':\n return 'number';\n case 'date':\n return 'date';\n case 'datetime':\n return 'datetime-local';\n case 'email':\n return 'email';\n case 'url':\n return 'url';\n case 'tel':\n return 'tel';\n default:\n return 'text';\n }\n }\n\n render() {\n const showLabel = !this.hideLabel && this.field.type !== 'boolean';\n\n return html`\n <div class=\"field-container\">\n ${showLabel ? html`\n <label class=\"field-label ${this.field.required ? 'required' : ''}\">\n ${this.field.label}\n </label>\n ` : ''}\n \n ${this._renderInput()}\n \n ${this._errors.length > 0 && this._touched ? html`\n <div class=\"field-errors\">\n ${this._errors.map(error => html`\n <span class=\"field-error ${error.severity}\">\n ${error.message}\n </span>\n `)}\n </div>\n ` : ''}\n </div>\n `;\n }\n}\n","import { LitElement, html, css } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { ConceptTree, FormColumn, FormField } from '../schema/types';\nimport './form-field';\n\n@customElement('jupiter-concept-tree')\nexport class JupiterConceptTree extends LitElement {\n @property({ type: Object }) concept!: ConceptTree;\n @property({ type: Array }) columns: FormColumn[] = [];\n @property({ type: Object }) formData: Record<string, any> = {};\n @property({ type: Boolean }) disabled = false;\n @property({ type: String }) locale = 'en-US';\n @property({ type: Set }) expandedConcepts: Set<string> = new Set();\n\n @state() private _expanded = true;\n\n static styles = css`\n :host {\n /* Component renders table cells directly */\n display: contents;\n }\n\n .concept-name-cell {\n vertical-align: top;\n padding: 2px 4px;\n border: 1px solid var(--jupiter-border-color, #ddd);\n border-bottom: none;\n background: var(--jupiter-concept-background, #f8f9fa);\n position: sticky;\n left: 0;\n z-index: 1;\n width: 300px;\n min-width: 300px;\n max-width: 300px;\n }\n\n .concept-name-cell.abstract {\n background: var(--jupiter-abstract-background, #f0f2f5);\n font-weight: 600;\n }\n\n .concept-name-cell.leaf {\n background: var(--jupiter-leaf-background, #fff);\n font-weight: 400;\n }\n\n .concept-content {\n display: flex;\n align-items: center;\n min-height: 28px;\n font-size: 13px;\n line-height: 1.3;\n width: 100%;\n overflow: hidden;\n }\n\n .concept-indent {\n width: calc(var(--level, 0) * 16px);\n flex-shrink: 0;\n }\n\n .concept-toggle {\n width: 14px;\n height: 14px;\n margin-right: 6px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 10px;\n transition: transform 0.2s ease;\n cursor: pointer;\n }\n\n .concept-toggle.expanded {\n transform: rotate(90deg);\n }\n\n .concept-toggle.no-children {\n visibility: hidden;\n }\n\n .concept-label {\n flex: 1;\n color: var(--jupiter-text-primary, #333);\n cursor: pointer;\n word-wrap: break-word;\n overflow-wrap: break-word;\n hyphens: auto;\n line-height: 1.3;\n min-width: 0; /* Allows flex item to shrink below content size */\n }\n\n .field-cell {\n vertical-align: middle;\n padding: 2px 6px;\n border: 1px solid var(--jupiter-border-color, #ddd);\n border-bottom: none;\n background: var(--jupiter-cell-background, #fff);\n min-height: 28px;\n text-align: center;\n min-width: 180px;\n width: 180px;\n }\n\n .field-cell.empty {\n background: var(--jupiter-empty-cell-background, #f8f9fa);\n }\n\n .field-cell.abstract-row {\n background: var(--jupiter-abstract-cell-background, #f0f2f5);\n }\n\n /* Children are rendered as separate table rows, not nested */\n .children-wrapper {\n display: none;\n }\n `;\n\n connectedCallback() {\n super.connectedCallback();\n this._expanded = this.expandedConcepts.has(this.concept.id);\n }\n\n willUpdate(changedProperties: Map<string, unknown>) {\n super.willUpdate(changedProperties);\n if (changedProperties.has('expandedConcepts')) {\n this._expanded = this.expandedConcepts.has(this.concept.id);\n }\n }\n\n private _toggleExpanded() {\n this._expanded = !this._expanded;\n \n this.dispatchEvent(new CustomEvent('concept-expand', {\n detail: {\n conceptId: this.concept.id,\n expanded: this._expanded\n },\n bubbles: true\n }));\n }\n\n private _getFieldForColumn(columnId: string): FormField | undefined {\n return this.concept.fields?.find(field => field.columnId === columnId);\n }\n\n private _getFieldValue(field: FormField): any {\n return this.formData[this.concept.id]?.[field.columnId];\n }\n\n private _handleFieldChange(event: CustomEvent) {\n event.stopPropagation();\n // Re-dispatch with updated detail\n this.dispatchEvent(new CustomEvent('field-change', {\n detail: event.detail,\n bubbles: true\n }));\n }\n\n render() {\n const hasChildren = this.concept.children && this.concept.children.length > 0;\n const level = this.concept.level || 0;\n const isAbstract = this.concept.abstract || false;\n\n return html`\n <!-- Concept Name Cell (Left Column) -->\n <td class=\"concept-name-cell ${isAbstract ? 'abstract' : (hasChildren ? '' : 'leaf')}\">\n <div class=\"concept-content\" style=\"--level: ${level}\">\n <div class=\"concept-indent\"></div>\n <div class=\"concept-toggle ${hasChildren ? (this._expanded ? 'expanded' : '') : 'no-children'}\"\n @click=\"${this._toggleExpanded}\">\n ${hasChildren ? '▶' : ''}\n </div>\n <div class=\"concept-label\" \n @click=\"${this._toggleExpanded}\"\n title=\"${this.concept.id}${this.concept.description ? ' - ' + this.concept.description : ''}\">\n ${this.concept.label}\n </div>\n </div>\n </td>\n\n <!-- Input Field Cells (Period Columns) - Only for non-abstract concepts -->\n ${this.columns.map(column => {\n const field = this._getFieldForColumn(column.id);\n const shouldShowField = !isAbstract && field;\n \n return html`\n <td class=\"field-cell ${!shouldShowField ? 'empty' : ''} ${isAbstract ? 'abstract-row' : ''}\">\n ${shouldShowField ? html`\n <jupiter-form-field\n .field=\"${field}\"\n .conceptId=\"${this.concept.id}\"\n .columnId=\"${column.id}\"\n .value=\"${this._getFieldValue(field)}\"\n .disabled=\"${this.disabled}\"\n .locale=\"${this.locale}\"\n .hideLabel=\"${true}\"\n @field-change=\"${this._handleFieldChange}\"\n ></jupiter-form-field>\n ` : ''}\n </td>\n `;\n })}\n `;\n }\n}\n","import { LitElement, html, css, PropertyValues } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\n\nexport interface AddColumnRequest {\n periodType: 'duration' | 'instant' | 'mixed';\n startDate?: string;\n endDate?: string;\n instantDate?: string;\n}\n\n@customElement('jupiter-add-column-dialog')\nexport class JupiterAddColumnDialog extends LitElement {\n @property({ type: String }) periodType: 'duration' | 'instant' | 'mixed' = 'duration';\n @property({ type: Boolean }) open = false;\n\n @state() private _startDate = '';\n @state() private _endDate = '';\n @state() private _instantDate = '';\n @state() private _selectedType: 'duration' | 'instant' = 'duration';\n\n updated(changedProperties: PropertyValues) {\n if (changedProperties.has('open') && this.open) {\n // Reset form when dialog opens\n this._resetForm();\n }\n }\n\n static styles = css`\n :host {\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background: rgba(0, 0, 0, 0.5);\n z-index: 1000;\n display: flex;\n align-items: center;\n justify-content: center;\n opacity: 0;\n visibility: hidden;\n transition: opacity 0.3s ease, visibility 0.3s ease;\n }\n\n :host([open]) {\n opacity: 1;\n visibility: visible;\n }\n\n .dialog {\n background: white;\n border-radius: 8px;\n padding: 24px;\n min-width: 400px;\n max-width: 500px;\n box-shadow: 0 10px 30px rgba(0, 0, 0, 0.3);\n transform: scale(0.9);\n transition: transform 0.3s ease;\n }\n\n :host([open]) .dialog {\n transform: scale(1);\n }\n\n .dialog-header {\n margin-bottom: 20px;\n }\n\n .dialog-title {\n font-size: 20px;\n font-weight: 600;\n color: var(--jupiter-text-primary, #333);\n margin: 0 0 8px 0;\n }\n\n .dialog-description {\n font-size: 14px;\n color: var(--jupiter-text-secondary, #666);\n margin: 0;\n }\n\n .dialog-content {\n margin-bottom: 24px;\n }\n\n .form-group {\n margin-bottom: 16px;\n }\n\n .form-label {\n display: block;\n font-weight: 500;\n margin-bottom: 6px;\n color: var(--jupiter-text-primary, #333);\n font-size: 14px;\n }\n\n .form-label.required::after {\n content: ' *';\n color: var(--jupiter-error-color, #d32f2f);\n }\n\n .form-input {\n width: 100%;\n box-sizing: border-box;\n padding: 10px 12px;\n border: 1px solid var(--jupiter-border-color, #ddd);\n border-radius: 4px;\n font-size: 14px;\n font-family: inherit;\n transition: border-color 0.2s ease;\n }\n\n .form-input:focus {\n outline: none;\n border-color: var(--jupiter-primary-color, #007bff);\n box-shadow: 0 0 0 2px rgba(0, 123, 255, 0.25);\n }\n\n select.form-input {\n cursor: pointer;\n background-color: white;\n }\n\n .dialog-actions {\n display: flex;\n gap: 12px;\n justify-content: flex-end;\n }\n\n .btn {\n padding: 10px 20px;\n border: none;\n border-radius: 4px;\n font-size: 14px;\n font-weight: 500;\n cursor: pointer;\n transition: background-color 0.2s ease;\n }\n\n .btn-cancel {\n background: var(--jupiter-neutral-background, #f5f5f5);\n color: var(--jupiter-text-primary, #333);\n }\n\n .btn-cancel:hover {\n background: var(--jupiter-neutral-background-hover, #e0e0e0);\n }\n\n .btn-primary {\n background: var(--jupiter-primary-color, #667eea);\n color: white;\n }\n\n .btn-primary:hover {\n background: var(--jupiter-primary-color-dark, #5a6fd8);\n }\n\n .btn-primary:disabled {\n background: var(--jupiter-disabled-background, #ccc);\n cursor: not-allowed;\n }\n `;\n\n connectedCallback() {\n super.connectedCallback();\n this._resetForm();\n }\n\n willUpdate(changedProperties: Map<string, unknown>) {\n super.willUpdate(changedProperties);\n if (changedProperties.has('open') && this.open) {\n this._resetForm();\n }\n }\n\n private _resetForm() {\n const today = new Date().toISOString().split('T')[0];\n this._startDate = today;\n this._endDate = today;\n this._instantDate = today;\n this._selectedType = 'duration';\n }\n\n private _handleCancel() {\n this.open = false;\n this.dispatchEvent(new CustomEvent('dialog-cancel', { bubbles: true }));\n }\n\n private _handleConfirm() {\n if (!this._isFormValid()) return;\n\n const request: AddColumnRequest = {\n periodType: this.periodType === 'mixed' ? this._selectedType : this.periodType\n };\n\n if (this.periodType === 'instant' || (this.periodType === 'mixed' && this._selectedType === 'instant')) {\n request.instantDate = this._instantDate;\n } else {\n request.startDate = this._startDate;\n request.endDate = this._endDate;\n }\n\n this.dispatchEvent(new CustomEvent('column-add', {\n detail: request,\n bubbles: true\n }));\n }\n\n private _isFormValid(): boolean {\n if (this.periodType === 'mixed') {\n if (this._selectedType === 'instant') {\n return !!this._instantDate;\n } else {\n return !!this._startDate && !!this._endDate && this._startDate <= this._endDate;\n }\n } else if (this.periodType === 'duration') {\n return !!this._startDate && !!this._endDate && this._startDate <= this._endDate;\n } else if (this.periodType === 'instant') {\n return !!this._instantDate;\n }\n return false;\n }\n\n private _handleStartDateChange(e: Event) {\n this._startDate = (e.target as HTMLInputElement).value;\n }\n\n private _handleEndDateChange(e: Event) {\n this._endDate = (e.target as HTMLInputElement).value;\n }\n\n private _handleSelectedTypeChange(e: Event) {\n this._selectedType = (e.target as HTMLSelectElement).value as 'duration' | 'instant';\n }\n\n private _handleInstantDateChange(e: Event) {\n this._instantDate = (e.target as HTMLInputElement).value;\n }\n\n render() {\n if (!this.open) return html``;\n\n const isValid = this._isFormValid();\n\n return html`\n <div class=\"dialog\" @click=\"${(e: Event) => e.stopPropagation()}\">\n <div class=\"dialog-header\">\n <h2 class=\"dialog-title\">Add Column</h2>\n <p class=\"dialog-description\">\n ${this.periodType === 'instant' \n ? 'Add a new instant period column by specifying the date.'\n : this.periodType === 'duration'\n ? 'Add a new duration period column by specifying the start and end dates.'\n : 'This section contains both instant and duration concepts. Choose the type of column to add.'\n }\n </p>\n </div>\n\n <div class=\"dialog-content\">\n ${this.periodType === 'mixed' ? html`\n <div class=\"form-group\">\n <label class=\"form-label required\">Column Type</label>\n <select \n class=\"form-input\"\n .value=\"${this._selectedType}\"\n @change=\"${this._handleSelectedTypeChange}\"\n required\n >\n <option value=\"instant\">Instant (single date)</option>\n <option value=\"duration\">Duration (start and end dates)</option>\n </select>\n </div>\n ` : ''}\n\n ${(this.periodType === 'instant' || (this.periodType === 'mixed' && this._selectedType === 'instant')) ? html`\n <div class=\"form-group\">\n <label class=\"form-label required\">Instant Date</label>\n <input \n type=\"date\" \n class=\"form-input\"\n .value=\"${this._instantDate}\"\n @change=\"${this._handleInstantDateChange}\"\n required\n />\n </div>\n ` : html`\n <div class=\"form-group\">\n <label class=\"form-label required\">Start Period Date</label>\n <input \n type=\"date\" \n class=\"form-input\"\n .value=\"${this._startDate}\"\n @change=\"${this._handleStartDateChange}\"\n required\n />\n </div>\n <div class=\"form-group\">\n <label class=\"form-label required\">End Period Date</label>\n <input \n type=\"date\" \n class=\"form-input\"\n .value=\"${this._endDate}\"\n @change=\"${this._handleEndDateChange}\"\n required\n />\n </div>\n `}\n </div>\n\n <div class=\"dialog-actions\">\n <button class=\"btn btn-cancel\" @click=\"${this._handleCancel}\">\n Cancel\n </button>\n <button \n class=\"btn btn-primary\" \n ?disabled=\"${!isValid}\"\n @click=\"${this._handleConfirm}\"\n >\n Add Column\n </button>\n </div>\n </div>\n `;\n }\n}\n","import { LitElement, html, css } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { FormSection, FormColumn, ConceptTree } from '../schema/types';\nimport './concept-tree';\nimport './add-column-dialog';\nimport { AddColumnRequest } from './add-column-dialog';\n\n@customElement('jupiter-form-section')\nexport class JupiterFormSection extends LitElement {\n @property({ type: Object }) section!: FormSection;\n @property({ type: Array }) columns: FormColumn[] = [];\n @property({ type: Object }) formData: Record<string, any> = {};\n @property({ type: Boolean }) disabled = false;\n @property({ type: Boolean }) collapsible = true;\n @property({ type: String }) locale = 'en-US';\n\n @state() private _expanded = true;\n @state() private _showAddColumnDialog = false;\n @state() private _sectionPeriodType: 'duration' | 'instant' | 'mixed' = 'duration';\n\n static styles = css`\n :host {\n display: block;\n margin-bottom: 16px;\n border: 1px solid var(--jupiter-border-color, #ddd);\n border-radius: 6px;\n overflow: hidden;\n }\n\n .section-header {\n background: var(--jupiter-section-header-background, #f0f2f5);\n padding: 16px;\n border-bottom: 1px solid var(--jupiter-border-color, #ddd);\n cursor: pointer;\n user-select: none;\n display: flex;\n align-items: center;\n justify-content: space-between;\n }\n\n .section-header:hover {\n background: var(--jupiter-section-header-hover-background, #e4e7ea);\n }\n\n .section-header.not-collapsible {\n cursor: default;\n }\n\n .section-header.not-collapsible:hover {\n background: var(--jupiter-section-header-background, #f0f2f5);\n }\n\n .section-title {\n font-size: 18px;\n font-weight: 600;\n color: var(--jupiter-text-primary, #333);\n margin: 0;\n }\n\n .section-description {\n font-size: 14px;\n color: var(--jupiter-text-secondary, #666);\n margin: 4px 0 0 0;\n }\n\n .section-toggle {\n width: 24px;\n height: 24px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 16px;\n transition: transform 0.2s ease;\n color: var(--jupiter-text-secondary, #666);\n }\n\n .section-toggle.expanded {\n transform: rotate(90deg);\n }\n\n .section-toggle.hidden {\n visibility: hidden;\n }\n\n .section-content {\n display: block;\n transition: max-height 0.3s ease;\n overflow: hidden;\n }\n\n .section-content.collapsed {\n display: none;\n }\n\n .table-container {\n overflow-x: auto;\n }\n\n .form-table {\n width: 100%;\n border-collapse: separate;\n border-spacing: 0;\n background: var(--jupiter-table-background, #fff);\n }\n\n .table-header {\n background: var(--jupiter-header-background, #f8f9fa);\n position: sticky;\n top: 0;\n z-index: 1;\n }\n\n .header-row {\n /* Table row - no special display needed */\n }\n\n .header-cell {\n padding: 8px 12px;\n text-align: left;\n font-weight: 600;\n color: var(--jupiter-text-primary, #333);\n border: 1px solid var(--jupiter-border-color, #ddd);\n background: var(--jupiter-header-background, #f8f9fa);\n min-width: 180px;\n width: 180px;\n font-size: 14px;\n vertical-align: middle;\n }\n\n .header-cell.concept-column {\n width: 300px;\n min-width: 300px;\n max-width: 300px;\n position: sticky;\n left: 0;\n z-index: 2;\n }\n\n .header-cell.removable {\n position: relative;\n }\n\n .remove-column-btn {\n position: absolute;\n top: 4px;\n right: 4px;\n width: 20px;\n height: 20px;\n border: none;\n background: var(--jupiter-error-color, #d32f2f);\n color: white;\n border-radius: 50%;\n font-size: 12px;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n .remove-column-btn:hover {\n background: var(--jupiter-error-color-dark, #b71c1c);\n }\n\n .add-column-btn {\n background: var(--jupiter-primary-color, #667eea);\n color: white;\n border: none;\n padding: 8px 16px;\n border-radius: 4px;\n cursor: pointer;\n font-size: 12px;\n margin: 8px;\n }\n\n .add-column-btn:hover {\n background: var(--jupiter-primary-color-dark, #5a6fd8);\n }\n\n .empty-section {\n padding: 24px;\n text-align: center;\n color: var(--jupiter-text-secondary, #666);\n font-style: italic;\n }\n `;\n\n connectedCallback() {\n super.connectedCallback();\n this._expanded = this.section.expanded !== false;\n this._determinePeriodType();\n }\n\n private _determinePeriodType() {\n // Get all non-abstract concepts\n const nonAbstractConcepts = this._getAllNonAbstractConcepts(this.section.concepts);\n \n console.log(`🔍 Section ${this.section.id} (${this.section.title}): Found ${nonAbstractConcepts.length} non-abstract concepts`);\n console.log(`📝 All concepts in section:`, this.section.concepts.map(c => ({ \n name: c.name, \n abstract: c.abstract, \n periodType: c.periodType \n })));\n \n if (nonAbstractConcepts.length === 0) {\n this._sectionPeriodType = 'duration';\n console.log(`📊 Section ${this.section.id}: No concepts, defaulting to duration`);\n return;\n }\n\n // Check period types\n const periodTypes = new Set(nonAbstractConcepts.map(c => c.periodType).filter(Boolean));\n \n console.log(`🏷️ Section ${this.section.id}: Found period types:`, Array.from(periodTypes));\n console.log(`📝 Section ${this.section.id}: Non-abstract concepts and their period types:`, \n nonAbstractConcepts.map(c => ({ name: c.name, periodType: c.periodType, abstract: c.abstract }))\n );\n \n if (periodTypes.size === 0) {\n this._sectionPeriodType = 'duration';\n console.log(`📊 Section ${this.section.id}: No period types defined, defaulting to duration`);\n } else if (periodTypes.size === 1) {\n const singleType = Array.from(periodTypes)[0];\n this._sectionPeriodType = singleType === 'instant' ? 'instant' : 'duration';\n console.log(`📊 Section ${this.section.id}: Single period type '${singleType}', setting to '${this._sectionPeriodType}'`);\n } else {\n this._sectionPeriodType = 'mixed';\n console.log(`📊 Section ${this.section.id}: Mixed period types, setting to 'mixed'`);\n }\n \n console.log(`✅ Section ${this.section.id}: Final period type: ${this._sectionPeriodType}`);\n }\n\n private _getAllNonAbstractConcepts(concepts: ConceptTree[]): ConceptTree[] {\n const result: ConceptTree[] = [];\n \n for (const concept of concepts) {\n if (!concept.abstract) {\n result.push(concept);\n }\n if (concept.children) {\n result.push(...this._getAllNonAbstractConcepts(concept.children));\n }\n }\n \n return result;\n }\n\n private _toggleExpanded() {\n if (!this.collapsible) return;\n \n this._expanded = !this._expanded;\n \n this.dispatchEvent(new CustomEvent('section-expand', {\n detail: {\n sectionId: this.section.id,\n expanded: this._expanded\n },\n bubbles: true\n }));\n }\n\n private _handleRemoveColumn(columnId: string) {\n this.dispatchEvent(new CustomEvent('column-remove', {\n detail: { \n columnId,\n sectionId: this.section.id \n },\n bubbles: true\n }));\n }\n\n private _handleAddColumn() {\n // Determine period type specifically for this add column action\n const buttonPeriodType = this._determineButtonPeriodType();\n \n // Override the section period type for this dialog\n this._sectionPeriodType = buttonPeriodType;\n this._showAddColumnDialog = true;\n }\n\n private _determineButtonPeriodType(): 'duration' | 'instant' | 'mixed' {\n // Get all non-abstract concepts in the section (not just those with fields)\n // This ensures we correctly identify mixed period sections even when some concepts\n // don't have fields in the default column due to period type filtering\n const allNonAbstractConcepts = this._getAllNonAbstractConcepts(this.section.concepts);\n \n if (allNonAbstractConcepts.length === 0) {\n return 'duration';\n }\n\n // Check period types of all non-abstract concepts in the section\n const periodTypes = new Set(\n allNonAbstractConcepts\n .map(c => c.periodType)\n .filter(periodType => periodType !== undefined && periodType !== null)\n );\n \n if (periodTypes.size === 0) {\n return 'duration';\n } else if (periodTypes.size === 1) {\n const singleType = Array.from(periodTypes)[0];\n return singleType === 'instant' ? 'instant' : 'duration';\n } else {\n return 'mixed';\n }\n }\n\n private _getConceptsWithFields(concepts: ConceptTree[]): ConceptTree[] {\n const result: ConceptTree[] = [];\n \n for (const concept of concepts) {\n // Include concepts that have fields and are not abstract\n if (!concept.abstract && concept.fields && concept.fields.length > 0) {\n result.push(concept);\n }\n \n // Recursively check children\n if (concept.children) {\n result.push(...this._getConceptsWithFields(concept.children));\n }\n }\n \n return result;\n }\n\n private _handleDialogCancel() {\n this._showAddColumnDialog = false;\n }\n\n private _handleColumnAdd(event: CustomEvent<AddColumnRequest>) {\n event.stopPropagation();\n this._showAddColumnDialog = false;\n \n // Dispatch event to parent component with the column request\n this.dispatchEvent(new CustomEvent('column-add-request', {\n detail: {\n sectionId: this.section.id,\n columnRequest: event.detail\n },\n bubbles: true\n }));\n }\n\n private _handleFieldChange(event: CustomEvent) {\n event.stopPropagation();\n this.dispatchEvent(new CustomEvent('field-change', {\n detail: event.detail,\n bubbles: true\n }));\n }\n\n private _flattenConcepts(concepts: ConceptTree[], expanded: Set<string> = new Set()): ConceptTree[] {\n const result: ConceptTree[] = [];\n \n for (const concept of concepts) {\n result.push(concept);\n \n // If concept is expanded and has children, include them\n if (concept.children && concept.children.length > 0 && expanded.has(concept.id)) {\n const childrenFlattened = this._flattenConcepts(concept.children, expanded);\n result.push(...childrenFlattened);\n }\n }\n \n return result;\n }\n\n @state() private _expandedConcepts = new Set<string>();\n\n private _handleConceptExpand(event: CustomEvent) {\n event.stopPropagation();\n const { conceptId, expanded } = event.detail;\n \n if (expanded) {\n this._expandedConcepts.add(conceptId);\n } else {\n this._expandedConcepts.delete(conceptId);\n }\n \n // Force re-render\n this.requestUpdate();\n \n this.dispatchEvent(new CustomEvent('concept-expand', {\n detail: event.detail,\n bubbles: true\n }));\n }\n\n render() {\n if (!this.section.concepts || this.section.concepts.length === 0) {\n return html`\n <div class=\"section-header ${!this.collapsible ? 'not-collapsible' : ''}\" \n @click=\"${this._toggleExpanded}\">\n <div>\n <h3 class=\"section-title\">${this.section.title}</h3>\n ${this.section.description ? html`\n <p class=\"section-description\">${this.section.description}</p>\n ` : ''}\n </div>\n <div class=\"section-toggle ${this.collapsible ? (this._expanded ? 'expanded' : '') : 'hidden'}\">\n ${this.collapsible ? '▶' : ''}\n </div>\n </div>\n \n <div class=\"section-content ${!this._expanded ? 'collapsed' : ''}\">\n <div class=\"empty-section\">\n No concepts defined for this section.\n </div>\n </div>\n `;\n }\n\n return html`\n <div class=\"section-header ${!this.collapsible ? 'not-collapsible' : ''}\" \n @click=\"${this._toggleExpanded}\">\n <div>\n <h3 class=\"section-title\">${this.section.title}</h3>\n ${this.section.description ? html`\n <p class=\"section-description\">${this.section.description}</p>\n ` : ''}\n </div>\n <div class=\"section-toggle ${this.collapsible ? (this._expanded ? 'expanded' : '') : 'hidden'}\">\n ${this.collapsible ? '▶' : ''}\n </div>\n </div>\n\n <div class=\"section-content ${!this._expanded ? 'collapsed' : ''}\">\n <div class=\"table-container\">\n <table class=\"form-table\">\n <thead class=\"table-header\">\n <tr class=\"header-row\">\n <th class=\"header-cell concept-column\">Concept</th>\n ${this.columns.map(column => html`\n <th class=\"header-cell ${column.removable ? 'removable' : ''}\">\n ${column.title}\n ${column.description ? html`<div style=\"font-weight: normal; font-size: 12px; color: var(--jupiter-text-secondary, #666);\">${column.description}</div>` : ''}\n ${column.removable ? html`\n <button \n class=\"remove-column-btn\"\n @click=\"${(e: Event) => {\n e.stopPropagation();\n this._handleRemoveColumn(column.id);\n }}\"\n title=\"Remove column\"\n >×</button>\n ` : ''}\n </th>\n `)}\n <th class=\"header-cell\">\n <button class=\"add-column-btn\" @click=\"${(e: Event) => {\n e.stopPropagation();\n this._handleAddColumn();\n }}\" title=\"Add Column\">\n + Add Column\n </button>\n </th>\n </tr>\n </thead>\n <tbody class=\"table-body\">\n ${this._flattenConcepts(this.section.concepts, this._expandedConcepts).map(concept => html`\n <tr>\n <jupiter-concept-tree\n .concept=\"${concept}\"\n .columns=\"${this.columns}\"\n .formData=\"${this.formData}\"\n .disabled=\"${this.disabled}\"\n .locale=\"${this.locale}\"\n .expandedConcepts=\"${this._expandedConcepts}\"\n @field-change=\"${this._handleFieldChange}\"\n @concept-expand=\"${this._handleConceptExpand}\"\n ></jupiter-concept-tree>\n </tr>\n `)}\n </tbody>\n </table>\n </div>\n </div>\n\n <!-- Add Column Dialog -->\n <jupiter-add-column-dialog\n .periodType=\"${this._sectionPeriodType}\"\n ?open=\"${this._showAddColumnDialog}\"\n @dialog-cancel=\"${this._handleDialogCancel}\"\n @column-add=\"${this._handleColumnAdd}\"\n ></jupiter-add-column-dialog>\n `;\n }\n}\n","import { LitElement, html, css } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { \n XBRLFormSchema, \n FormData, \n FormColumn, \n ValidationError, \n FormState,\n ComponentConfig,\n ConceptTree,\n FormField,\n FieldType,\n SubmissionData,\n FormSection\n} from '../schema/types';\nimport { XBRLFormInput } from '../schema/xbrl-types';\nimport { FormValidator } from '../utils/validation';\nimport { XBRLFormBuilder } from '../utils/xbrl-form-builder';\nimport { AddColumnRequest } from './add-column-dialog';\nimport './form-section';\n\n@customElement('jupiter-dynamic-form')\nexport class JupiterDynamicForm extends LitElement {\n @property({ type: Object }) schema?: XBRLFormSchema;\n @property({ type: Object }) xbrlInput?: XBRLFormInput;\n @property({ type: Object }) config: ComponentConfig = {};\n @property({ type: Object }) initialData: FormData = {};\n @property({ type: Boolean }) disabled = false;\n @property({ type: Boolean }) readonly = false;\n @property({ type: String }) periodStartDate = '2025-01-01';\n @property({ type: String }) periodEndDate = '2025-12-31';\n\n @state() private _formData: FormData = {};\n @state() private _columns: FormColumn[] = [];\n @state() private _errors: ValidationError[] = [];\n @state() private _touched = new Set<string>();\n @state() private _dirty = false;\n @state() private _valid = true;\n @state() private _submitted = false;\n @state() private _currentSchema?: XBRLFormSchema;\n\n static styles = css`\n :host {\n display: block;\n font-family: var(--jupiter-font-family, system-ui, -apple-system, sans-serif);\n color: var(--jupiter-text-primary, #333);\n background: var(--jupiter-background, #fff);\n }\n\n .form-container {\n width: 100%;\n max-width: var(--jupiter-max-width, none);\n margin: 0 auto;\n }\n\n .form-header {\n padding: 24px;\n border-bottom: 1px solid var(--jupiter-border-color, #ddd);\n background: var(--jupiter-form-header-background, #fff);\n }\n\n .form-title {\n font-size: 24px;\n font-weight: 600;\n margin: 0 0 8px 0;\n color: var(--jupiter-text-primary, #333);\n }\n\n .form-description {\n font-size: 16px;\n color: var(--jupiter-text-secondary, #666);\n margin: 0;\n line-height: 1.5;\n }\n\n .form-actions {\n position: fixed;\n bottom: 0;\n left: 0;\n right: 0;\n padding: 16px 24px;\n border-top: 1px solid var(--jupiter-border-color, #ddd);\n background: var(--jupiter-form-actions-background, #f8f9fa);\n display: flex;\n gap: 12px;\n align-items: center;\n z-index: 1000;\n box-shadow: 0 -2px 8px rgba(0, 0, 0, 0.1);\n }\n\n .form-sections {\n padding: 24px;\n padding-bottom: 100px; /* Add space for fixed footer */\n }\n\n .validation-summary {\n margin-bottom: 16px;\n padding: 16px;\n border-radius: 4px;\n background: var(--jupiter-error-background, #ffebee);\n border: 1px solid var(--jupiter-error-color, #d32f2f);\n }\n\n .validation-summary-title {\n font-weight: 600;\n color: var(--jupiter-error-color, #d32f2f);\n margin: 0 0 8px 0;\n }\n\n .validation-summary-list {\n margin: 0;\n padding-left: 20px;\n }\n\n .validation-summary-item {\n color: var(--jupiter-error-color, #d32f2f);\n margin-bottom: 4px;\n }\n\n .form-actions button {\n padding: 10px 20px;\n border: none;\n border-radius: 4px;\n font-size: 14px;\n font-weight: 500;\n cursor: pointer;\n transition: background-color 0.2s ease;\n }\n\n .btn-primary {\n background: var(--jupiter-primary-color, #1976d2);\n color: white;\n }\n\n .btn-primary:hover:not(:disabled) {\n background: var(--jupiter-primary-color-dark, #1565c0);\n }\n\n .btn-secondary {\n background: var(--jupiter-secondary-color, #757575);\n color: white;\n }\n\n .btn-secondary:hover:not(:disabled) {\n background: var(--jupiter-secondary-color-dark, #616161);\n }\n\n .btn-outline {\n background: transparent;\n color: var(--jupiter-primary-color, #1976d2);\n border: 1px solid var(--jupiter-primary-color, #1976d2);\n }\n\n .btn-outline:hover:not(:disabled) {\n background: var(--jupiter-primary-color, #1976d2);\n color: white;\n }\n\n button:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n }\n\n .form-meta {\n display: flex;\n gap: 16px;\n align-items: center;\n font-size: 12px;\n color: var(--jupiter-text-secondary, #666);\n margin-left: auto;\n }\n `;\n\n connectedCallback() {\n super.connectedCallback();\n this._initializeForm();\n }\n\n updated(changedProperties: Map<string, any>) {\n if (changedProperties.has('xbrlInput') || changedProperties.has('schema')) {\n this._initializeForm();\n }\n }\n\n private _initializeForm() {\n // Generate schema from XBRL input if provided, otherwise use provided schema\n if (this.xbrlInput) {\n try {\n console.log('🔄 Initializing form from XBRL input:', this.xbrlInput);\n console.log('📅 Using period dates:', this.periodStartDate, 'to', this.periodEndDate);\n this._currentSchema = XBRLFormBuilder.buildFormSchema(\n this.xbrlInput, \n this.periodStartDate, \n this.periodEndDate\n );\n console.log('✅ Generated schema with sections:', this._currentSchema.sections.length);\n \n // Use simple column structure for now\n this._columns = [\n {\n id: 'base',\n title: 'Value',\n description: 'Base values for concepts',\n type: 'base',\n order: 0,\n removable: false\n }\n ];\n } catch (error) {\n console.error('❌ Error building form from XBRL input:', error);\n this._currentSchema = this._getDefaultSchema();\n this._columns = this._getDefaultColumns();\n }\n } else if (this.schema) {\n this._currentSchema = this.schema;\n this._columns = this._getDefaultColumns();\n } else {\n this._currentSchema = this._getDefaultSchema();\n this._columns = this._getDefaultColumns();\n }\n\n // Initialize form data\n this._formData = { ...this.initialData };\n if (this.xbrlInput?.initialData) {\n this._formData = { ...this._formData, ...this.xbrlInput.initialData };\n }\n \n // Validate initial data\n this._validateForm();\n }\n\n private _getDefaultSchema(): XBRLFormSchema {\n return {\n version: '1.0',\n formId: 'default-form',\n title: 'Dynamic Form',\n description: 'Please provide form schema or XBRL input data',\n sections: []\n };\n }\n\n private _getDefaultColumns(): FormColumn[] {\n return [\n {\n id: 'base',\n title: 'Value',\n description: 'Base values for concepts',\n type: 'base',\n order: 0,\n removable: false\n }\n ];\n }\n\n private _validateForm() {\n const errors: ValidationError[] = [];\n \n // Use current schema for validation\n const schema = this._currentSchema;\n if (!schema) return;\n \n // Validate each section and its concepts\n for (const section of schema.sections) {\n for (const concept of section.concepts) {\n for (const field of concept.fields) {\n const value = this._formData[concept.id]?.[field.columnId];\n const fieldErrors = FormValidator.validateField(\n field.id,\n concept.id,\n field.columnId,\n value,\n field.type,\n field.validation || []\n );\n errors.push(...fieldErrors);\n }\n }\n }\n\n this._errors = errors;\n this._valid = errors.filter(e => e.severity === 'error').length === 0;\n }\n\n private _handleFieldChange(event: CustomEvent) {\n const { fieldId, conceptId, columnId, value } = event.detail;\n \n // Update form data\n if (!this._formData[conceptId]) {\n this._formData[conceptId] = {};\n }\n const oldValue = this._formData[conceptId][columnId];\n this._formData[conceptId][columnId] = value;\n \n // Mark as touched and dirty\n this._touched.add(`${conceptId}-${columnId}`);\n this._dirty = true;\n \n // Re-validate\n this._validateForm();\n \n // Trigger update\n this.requestUpdate();\n \n // Dispatch change event\n this.dispatchEvent(new CustomEvent('field-change', {\n detail: { fieldId, conceptId, columnId, value, oldValue },\n bubbles: true\n }));\n }\n\n private _handleSectionExpand(event: CustomEvent) {\n this.dispatchEvent(new CustomEvent('section-expand', {\n detail: event.detail,\n bubbles: true\n }));\n }\n\n private _handleConceptExpand(event: CustomEvent) {\n this.dispatchEvent(new CustomEvent('concept-expand', {\n detail: event.detail,\n bubbles: true\n }));\n }\n\n private _handleColumnRemove(event: CustomEvent) {\n const { columnId, sectionId } = event.detail;\n \n // Remove column from ONLY the specific section\n if (this._currentSchema && sectionId) {\n const targetSection = this._currentSchema.sections.find(section => section.id === sectionId);\n if (targetSection && targetSection.columns) {\n targetSection.columns = targetSection.columns.filter(col => col.id !== columnId);\n }\n } else {\n // Fallback: remove from all sections (for backward compatibility)\n this._columns = this._columns.filter(col => col.id !== columnId);\n \n if (this._currentSchema) {\n this._currentSchema.sections.forEach(section => {\n if (section.columns) {\n section.columns = section.columns.filter(col => col.id !== columnId);\n }\n });\n }\n }\n \n // Remove data for this column from the specific section's concepts\n this._removeColumnData(columnId, sectionId);\n \n this._dirty = true;\n this._validateForm();\n this.requestUpdate();\n \n this.dispatchEvent(new CustomEvent('column-remove', {\n detail: { columnId, sectionId },\n bubbles: true\n }));\n }\n\n private _handleColumnAddRequest(event: CustomEvent) {\n const { sectionId, columnRequest } = event.detail;\n this._addColumnFromRequest(columnRequest, sectionId);\n }\n\n private _addColumnFromRequest(request: AddColumnRequest, sectionId: string) {\n const timestamp = Date.now();\n const newColumnId = `col-${timestamp}`;\n \n let title = '';\n let description = '';\n \n if (request.periodType === 'instant') {\n title = request.instantDate || 'Instant Date';\n description = `Instant period: ${request.instantDate}`;\n } else if (request.periodType === 'duration' || request.periodType === 'mixed') {\n title = `${request.startDate} / ${request.endDate}`;\n description = `Duration period: ${request.startDate} to ${request.endDate}`;\n }\n \n // Check for hypercube dimension information for this section\n let dimensionData: any = {\n dimensionId: 'period',\n memberValue: request.periodType === 'instant' ? \n `instant-${request.instantDate}` : \n `duration-${request.startDate}-${request.endDate}`,\n memberLabel: title,\n };\n \n // Look for matching hypercube role for dimension information\n if (this.xbrlInput?.hypercubes?.[0]) {\n const hypercubeRole = this.xbrlInput.hypercubes[0].roles.find(hr => hr.roleId === sectionId);\n \n if (hypercubeRole?.items?.length === 1) {\n const item = hypercubeRole.items[0];\n if (item.dimensions.length === 1) {\n const dimension = item.dimensions[0];\n if (dimension.members.length > 0) {\n // Find axis label\n const axisLabel = dimension.labels.find(l => l.role === 'http://www.xbrl.org/2003/role/label')?.label || dimension.conceptName;\n \n // For manually added columns, we could offer choice or use first member\n // For now, using first member as specified in requirements\n const firstMember = dimension.members[0];\n const memberLabel = firstMember.labels.find(l => l.role === 'http://www.xbrl.org/2003/role/label')?.label || firstMember.conceptName;\n \n // Update title to include dimension information\n const periodPart = request.periodType === 'instant' ? \n `(${request.instantDate})` : \n `(${request.startDate} / ${request.endDate})`;\n title = `${memberLabel} ${periodPart}`;\n \n dimensionData = {\n dimensionId: newColumnId,\n axisId: dimension.id,\n memberId: firstMember.id,\n memberValue: memberLabel,\n memberLabel: memberLabel,\n axis: axisLabel,\n axisLabel: axisLabel,\n memberKey: `${axisLabel} | ${memberLabel}`,\n dimensionIdKey: `${dimension.id} | ${firstMember.id}`\n };\n \n console.log(`📊 Applied hypercube dimension to new column: ${dimensionData.memberKey}`);\n }\n }\n }\n }\n \n const newColumn: FormColumn = {\n id: newColumnId,\n title,\n description,\n type: dimensionData.memberKey ? 'dimension' : 'dimension',\n order: this._columns.length,\n removable: true,\n dimensionData\n };\n \n // Add column ONLY to the specific section that requested it\n if (this._currentSchema) {\n const targetSection = this._currentSchema.sections.find(section => section.id === sectionId);\n if (targetSection) {\n if (!targetSection.columns) {\n targetSection.columns = [...this._columns];\n }\n targetSection.columns = [...targetSection.columns, newColumn];\n }\n }\n \n // Replicate form fields for existing concepts in ONLY the target section\n this._replicateFieldsForNewColumn(newColumnId, request, sectionId);\n \n this._dirty = true;\n this.requestUpdate();\n \n this.dispatchEvent(new CustomEvent('column-add', {\n detail: { column: newColumn },\n bubbles: true\n }));\n }\n\n private _removeColumnData(columnId: string, sectionId?: string) {\n if (!this._currentSchema) return;\n \n if (sectionId) {\n // Remove data only for concepts in the specific section\n const targetSection = this._currentSchema.sections.find(section => section.id === sectionId);\n if (targetSection) {\n this._removeColumnDataFromConcepts(targetSection.concepts, columnId);\n }\n } else {\n // Remove data for all concepts in all sections\n for (const conceptId in this._formData) {\n if (this._formData[conceptId][columnId] !== undefined) {\n delete this._formData[conceptId][columnId];\n }\n }\n }\n }\n\n private _removeColumnDataFromConcepts(concepts: ConceptTree[], columnId: string) {\n concepts.forEach(concept => {\n // Remove form data for this concept and column\n if (this._formData[concept.id] && this._formData[concept.id][columnId] !== undefined) {\n delete this._formData[concept.id][columnId];\n }\n \n // Remove field from concept's fields array\n if (concept.fields) {\n concept.fields = concept.fields.filter(field => field.columnId !== columnId);\n }\n \n // Recursively process children\n if (concept.children) {\n this._removeColumnDataFromConcepts(concept.children, columnId);\n }\n });\n }\n\n private _shouldCreateFieldForConcept(concept: ConceptTree, request: AddColumnRequest): boolean {\n // Don't create fields for abstract concepts\n if (concept.abstract) {\n return false;\n }\n \n // Check period type compatibility\n if (concept.periodType) {\n if (request.periodType === 'instant' && concept.periodType !== 'instant') {\n return false;\n }\n if (request.periodType === 'duration' && concept.periodType !== 'duration') {\n return false;\n }\n }\n \n return true;\n }\n\n private _replicateFieldsForNewColumn(columnId: string, request: AddColumnRequest, sectionId: string) {\n if (!this._currentSchema) return;\n \n // Build fields for the new column for ONLY the specific section\n const formBuilder = new XBRLFormBuilder();\n \n const targetSection = this._currentSchema.sections.find(section => section.id === sectionId);\n if (targetSection) {\n this._replicateFieldsForSection(targetSection.concepts, columnId, request, formBuilder);\n }\n }\n\n private _replicateFieldsForSection(concepts: ConceptTree[], columnId: string, request: AddColumnRequest, formBuilder: XBRLFormBuilder) {\n concepts.forEach(concept => {\n // Check if we should create a field for this concept in the new column\n if (this._shouldCreateFieldForConcept(concept, request)) {\n // Create a new field manually based on existing field structure or from scratch\n const existingField = concept.fields?.[0]; // Use first existing field as template\n \n let field: FormField;\n if (existingField) {\n // Template from existing field\n field = {\n id: `${concept.id}_${columnId}`,\n conceptId: concept.id,\n columnId: columnId,\n type: existingField.type,\n label: existingField.label,\n placeholder: existingField.placeholder,\n required: existingField.required,\n disabled: existingField.disabled,\n validation: existingField.validation,\n defaultValue: existingField.defaultValue,\n // Set period dates from the add column request\n periodStartDate: request.periodType === 'instant' ? request.instantDate : request.startDate,\n periodEndDate: request.periodType === 'instant' ? request.instantDate : request.endDate\n };\n } else {\n // Create field from scratch for concepts without existing fields\n field = {\n id: `${concept.id}_${columnId}`,\n conceptId: concept.id,\n columnId: columnId,\n type: 'text' as FieldType,\n label: concept.label || concept.name,\n placeholder: `Enter ${concept.name}`,\n required: false,\n disabled: false,\n validation: [],\n defaultValue: '',\n // Set period dates from the add column request\n periodStartDate: request.periodType === 'instant' ? request.instantDate : request.startDate,\n periodEndDate: request.periodType === 'instant' ? request.instantDate : request.endDate\n };\n }\n \n // Add field to concept's fields array\n if (!concept.fields) {\n concept.fields = [];\n }\n concept.fields.push(field);\n }\n \n // Recursively process children\n if (concept.children) {\n this._replicateFieldsForSection(concept.children, columnId, request, formBuilder);\n }\n });\n }\n\n private _addColumn() {\n // This would typically open a dialog to configure the new dimension column\n // For now, we'll add a generic dimension column\n const newColumnId = `dim-${Date.now()}`;\n const newColumn: FormColumn = {\n id: newColumnId,\n title: `Dimension ${this._columns.length}`,\n description: 'Additional dimension column',\n type: 'dimension',\n order: this._columns.length,\n removable: true,\n dimensionData: {\n dimensionId: 'custom',\n memberValue: 'default',\n memberLabel: 'Default Member',\n }\n };\n \n this._columns = [...this._columns, newColumn];\n this.requestUpdate();\n \n this.dispatchEvent(new CustomEvent('column-add', {\n detail: { column: newColumn },\n bubbles: true\n }));\n }\n\n private _handleSubmit() {\n this._submitted = true;\n this._validateForm();\n \n // Generate submission data in the required format\n const submissionData = this._generateSubmissionData();\n \n this.dispatchEvent(new CustomEvent('form-submit', {\n detail: {\n data: this._formData,\n submissionData: submissionData,\n valid: this._valid,\n errors: this._errors\n },\n bubbles: true\n }));\n }\n\n private _handleSaveDraft() {\n // Generate draft data in the same format as submission\n const draftData = this._generateSubmissionData();\n \n this.dispatchEvent(new CustomEvent('form-save-draft', {\n detail: {\n data: this._formData,\n draftData: draftData,\n valid: this._valid,\n errors: this._errors\n },\n bubbles: true\n }));\n }\n\n private _generateSubmissionData(): SubmissionData {\n const submissionData: SubmissionData = [];\n \n if (!this._currentSchema) {\n return submissionData;\n }\n\n // Iterate through all sections and their concepts to find filled form fields\n this._currentSchema.sections.forEach(section => {\n this._processConceptsForSubmission(section.concepts, submissionData, section);\n });\n\n return submissionData;\n }\n\n private _findColumnById(columnId: string): FormColumn | undefined {\n if (!this._currentSchema) {\n return undefined;\n }\n\n for (const section of this._currentSchema.sections) {\n if (section.columns) {\n const column = section.columns.find(col => col.id === columnId);\n if (column) {\n return column;\n }\n }\n }\n return undefined;\n }\n\n private _processConceptsForSubmission(concepts: ConceptTree[], submissionData: SubmissionData, section?: FormSection) {\n concepts.forEach(concept => {\n // Process fields for this concept\n if (concept.fields && concept.fields.length > 0) {\n concept.fields.forEach(field => {\n // Get the value from the nested form data structure\n const conceptData = this._formData[concept.id];\n const fieldValue = conceptData?.[field.columnId];\n \n // Only include fields that have values\n if (fieldValue !== undefined && fieldValue !== null && fieldValue !== '') {\n // Find the column information to check for dimension data\n const column = this._findColumnById(field.columnId);\n \n const submissionEntry: any = {\n conceptId: concept.id,\n value: fieldValue,\n period: {\n type: concept.periodType || 'duration'\n } as { type: 'instant' | 'duration'; date?: string; startDate?: string; endDate?: string; }\n };\n\n // Determine period structure based on concept's period type\n if (concept.periodType === 'instant') {\n // For instant concepts, use a single date\n submissionEntry.period.date = field.periodStartDate || this.periodStartDate;\n } else {\n // For duration concepts, use start and end dates\n submissionEntry.period.startDate = field.periodStartDate || this.periodStartDate;\n submissionEntry.period.endDate = field.periodEndDate || this.periodEndDate;\n }\n\n // Add dimension information\n // First check if the column has dimension data (explicit dimension)\n if (column?.type === 'dimension' && column.dimensionData?.dimensionIdKey) {\n submissionEntry.dimension = column.dimensionData.dimensionIdKey;\n } \n // Otherwise, check if the section has dimension data (role-level dimension)\n else if (section?.columns?.length) {\n const sectionDimensionColumn = section.columns.find(col => col.type === 'dimension' && col.dimensionData?.dimensionIdKey);\n if (sectionDimensionColumn?.dimensionData?.dimensionIdKey) {\n submissionEntry.dimension = sectionDimensionColumn.dimensionData.dimensionIdKey;\n }\n }\n\n submissionData.push(submissionEntry);\n }\n });\n }\n\n // Recursively process children\n if (concept.children) {\n this._processConceptsForSubmission(concept.children, submissionData, section);\n }\n });\n }\n\n private _handleReset() {\n this._formData = { ...this.initialData };\n this._touched.clear();\n this._dirty = false;\n this._submitted = false;\n this._validateForm();\n this.requestUpdate();\n \n this.dispatchEvent(new CustomEvent('form-reset', {\n detail: {},\n bubbles: true\n }));\n }\n\n private _getFormState(): FormState {\n return {\n data: this._formData,\n errors: this._errors,\n touched: this._touched,\n dirty: this._dirty,\n valid: this._valid,\n submitted: this._submitted\n };\n }\n\n // Public API methods\n public getData(): FormData {\n return { ...this._formData };\n }\n\n public setData(data: FormData) {\n this._formData = { ...data };\n this._dirty = true;\n this._validateForm();\n this.requestUpdate();\n }\n\n public validate(): boolean {\n this._validateForm();\n return this._valid;\n }\n\n public reset() {\n this._handleReset();\n }\n\n public getState(): FormState {\n return this._getFormState();\n }\n\n render() {\n const errorCount = this._errors.filter(e => e.severity === 'error').length;\n const config = this.config || {};\n const showValidationSummary = config.showValidationSummary !== false && \n errorCount > 0 && \n this._submitted;\n\n const schema = this._currentSchema;\n if (!schema) {\n return html`<div>Loading form...</div>`;\n }\n\n return html`\n <div class=\"form-container\">\n <!-- Form Header -->\n <div class=\"form-header\">\n <h1 class=\"form-title\">${schema.title}</h1>\n ${schema.description ? html`\n <p class=\"form-description\">${schema.description}</p>\n ` : ''}\n </div>\n\n <!-- Form Content -->\n <div class=\"form-sections\">\n <!-- Validation Summary -->\n ${showValidationSummary ? html`\n <div class=\"validation-summary\">\n <h4 class=\"validation-summary-title\">Please fix the following errors:</h4>\n <ul class=\"validation-summary-list\">\n ${this._errors\n .filter(e => e.severity === 'error')\n .map(error => html`\n <li class=\"validation-summary-item\">${error.message}</li>\n `)}\n </ul>\n </div>\n ` : ''}\n\n <!-- Form Sections -->\n ${schema.sections.map(section => html`\n <jupiter-form-section\n .section=\"${section}\"\n .columns=\"${section.columns || this._columns}\"\n .formData=\"${this._formData}\"\n .disabled=\"${this.disabled || this.readonly}\"\n .collapsible=\"${config.collapsibleSections !== false}\"\n .locale=\"${config.locale || 'en-US'}\"\n @field-change=\"${this._handleFieldChange}\"\n @section-expand=\"${this._handleSectionExpand}\"\n @concept-expand=\"${this._handleConceptExpand}\"\n @column-remove=\"${this._handleColumnRemove}\"\n @column-add-request=\"${this._handleColumnAddRequest}\"\n ></jupiter-form-section>\n `)}\n </div>\n\n <!-- Form Actions - Fixed Footer -->\n <div class=\"form-actions\">\n <button \n class=\"btn-secondary\"\n @click=\"${this._handleSaveDraft}\"\n ?disabled=\"${this.disabled || this.readonly}\"\n >\n Save Draft\n </button>\n \n <button \n class=\"btn-primary\"\n @click=\"${this._handleSubmit}\"\n ?disabled=\"${this.disabled || this.readonly}\"\n >\n Submit\n </button>\n\n <div class=\"form-meta\">\n <span>Errors: ${errorCount}</span>\n <span>Modified: ${this._dirty ? 'Yes' : 'No'}</span>\n <span>Valid: ${this._valid ? 'Yes' : 'No'}</span>\n </div>\n </div>\n </div>\n `;\n }\n}\n","// Main entry point for Jupiter Dynamic Forms\nexport * from './core/dynamic-form';\nexport * from './core/form-section';\nexport * from './core/concept-tree';\nexport * from './core/form-field';\nexport * from './core/add-column-dialog';\nexport * from './schema/types';\nexport * from './utils/validation';\n\n// Register all custom elements\nimport './core/dynamic-form';\nimport './core/form-section';\nimport './core/concept-tree';\nimport './core/form-field';\nimport './core/add-column-dialog';\n\n// Version export\nexport const version = '1.0.0';\n"],"names":["t","e","o","s","r","n","c","i","h","_a","l","__decorateClass","property","state","customElement"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4]}