jupiter-dynamic-forms 1.0.1 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/core/dynamic-form.d.ts +2 -0
- package/dist/core/dynamic-form.d.ts.map +1 -1
- package/dist/index.js +8 -8
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +197 -13
- package/dist/index.mjs.map +1 -1
- package/dist/schema/types.d.ts +3 -0
- package/dist/schema/types.d.ts.map +1 -1
- package/dist/utils/xbrl-form-builder.d.ts +27 -3
- package/dist/utils/xbrl-form-builder.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","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/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} from '../schema/xbrl-types';\nimport { \n XBRLFormSchema, \n FormSection, \n FormField, \n ConceptTree,\n FieldType \n} from '../schema/types';\n\n/**\n * XBRL Form Builder Service\n * Transforms 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 * Build form schema from XBRL input data\n * Creates accordion sections for each presentation role\n */\n static buildFormSchema(xbrlInput: XBRLFormInput): 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 const sections: FormSection[] = [];\n\n // Create a form section for each presentation role\n presentationData.roles.forEach(role => {\n const section = this.buildSectionFromRole(role);\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(role: XBRLPresentationRole): FormSection {\n // Extract section title from role name (remove role number prefix)\n const title = this.extractRoleTitle(role.role);\n \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);\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 expanded: false\n };\n }\n\n /**\n * Build concept tree from XBRL presentation concept\n */\n private static buildConceptTree(concept: XBRLPresentationConcept, level: number): 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 const field = this.createFieldFromConcept(concept);\n if (field) {\n 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);\n if (childTree) {\n children.push(childTree);\n }\n });\n }\n\n return {\n id: concept.id,\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 };\n }\n\n /**\n * Create form field from XBRL concept\n */\n private static createFieldFromConcept(concept: XBRLPresentationConcept): FormField | null {\n const fieldType = this.mapXBRLTypeToFieldType(concept.type);\n const label = this.getPreferredLabel(concept.labels);\n\n return {\n id: `${concept.id}_field`,\n conceptId: concept.id,\n columnId: 'default', // Default column, will be expanded later\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\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 * 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\n @state() private _errors: ValidationError[] = [];\n @state() private _touched = false;\n\n static styles = css`\n :host {\n display: block;\n margin-bottom: 8px;\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: 8px 12px;\n border: 1px solid var(--jupiter-border-color, #ddd);\n border-radius: 4px;\n font-size: 14px;\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 switch (this.field.type) {\n case 'textarea':\n return html`\n <textarea\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 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 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 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.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\n @state() private _expanded = true;\n\n static styles = css`\n :host {\n display: block;\n }\n\n .concept-row {\n display: contents;\n }\n\n .concept-header {\n display: flex;\n align-items: center;\n padding: 8px 12px;\n background: var(--jupiter-concept-background, #f8f9fa);\n border: 1px solid var(--jupiter-border-color, #ddd);\n border-bottom: none;\n font-weight: 500;\n cursor: pointer;\n user-select: none;\n }\n\n .concept-header:hover {\n background: var(--jupiter-concept-hover-background, #e9ecef);\n }\n\n .concept-indent {\n width: calc(var(--level, 0) * 20px);\n flex-shrink: 0;\n }\n\n .concept-toggle {\n width: 16px;\n height: 16px;\n margin-right: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 12px;\n transition: transform 0.2s ease;\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 }\n\n .concept-description {\n font-size: 12px;\n color: var(--jupiter-text-secondary, #666);\n font-weight: normal;\n margin-left: 8px;\n }\n\n .concept-fields {\n display: contents;\n }\n\n .field-cell {\n border: 1px solid var(--jupiter-border-color, #ddd);\n border-bottom: none;\n padding: 8px;\n background: var(--jupiter-cell-background, #fff);\n min-height: 40px;\n display: flex;\n align-items: center;\n }\n\n .field-cell:last-child {\n border-right: 1px solid var(--jupiter-border-color, #ddd);\n }\n\n .field-cell.empty {\n background: var(--jupiter-empty-cell-background, #f8f9fa);\n }\n\n .children {\n display: contents;\n }\n\n .children.collapsed {\n display: none;\n }\n\n .concept-row:last-of-type .concept-header,\n .concept-row:last-of-type .field-cell {\n border-bottom: 1px solid var(--jupiter-border-color, #ddd);\n }\n `;\n\n connectedCallback() {\n super.connectedCallback();\n this._expanded = !this.concept.collapsed;\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\n return html`\n <div class=\"concept-row\" style=\"--level: ${level}\">\n <!-- Concept Label Column -->\n <div class=\"concept-header\" @click=\"${this._toggleExpanded}\">\n <div class=\"concept-indent\"></div>\n <div class=\"concept-toggle ${hasChildren ? (this._expanded ? 'expanded' : '') : 'no-children'}\">\n ${hasChildren ? '▶' : ''}\n </div>\n <div class=\"concept-label\">\n ${this.concept.label}\n ${this.concept.description ? html`\n <span class=\"concept-description\">${this.concept.description}</span>\n ` : ''}\n </div>\n </div>\n\n <!-- Field Columns -->\n ${this.columns.map(column => {\n const field = this._getFieldForColumn(column.id);\n \n return html`\n <div class=\"field-cell ${!field ? 'empty' : ''}\">\n ${field ? 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 @field-change=\"${this._handleFieldChange}\"\n ></jupiter-form-field>\n ` : ''}\n </div>\n `;\n })}\n </div>\n\n <!-- Children Concepts -->\n ${hasChildren ? html`\n <div class=\"children ${!this._expanded ? 'collapsed' : ''}\">\n ${this.concept.children!.map(child => html`\n <jupiter-concept-tree\n .concept=\"${child}\"\n .columns=\"${this.columns}\"\n .formData=\"${this.formData}\"\n .disabled=\"${this.disabled}\"\n .locale=\"${this.locale}\"\n @field-change=\"${this._handleFieldChange}\"\n @concept-expand=\"${(e: CustomEvent) => { \n e.stopPropagation(); \n this.dispatchEvent(new CustomEvent('concept-expand', { detail: e.detail, bubbles: true })); \n }}\"\n ></jupiter-concept-tree>\n `)}\n </div>\n ` : ''}\n `;\n }\n}\n","import { LitElement, html, css } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { FormSection, FormColumn } from '../schema/types';\nimport './concept-tree';\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\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: collapse;\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-cell {\n padding: 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: 150px;\n }\n\n .header-cell.concept-column {\n min-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 .table-body {\n display: table-row-group;\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 }\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: { columnId },\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 _handleConceptExpand(event: CustomEvent) {\n event.stopPropagation();\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>\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 </tr>\n </thead>\n <tbody class=\"table-body\">\n ${this.section.concepts.map(concept => html`\n <jupiter-concept-tree\n .concept=\"${concept}\"\n .columns=\"${this.columns}\"\n .formData=\"${this.formData}\"\n .disabled=\"${this.disabled}\"\n .locale=\"${this.locale}\"\n @field-change=\"${this._handleFieldChange}\"\n @concept-expand=\"${this._handleConceptExpand}\"\n ></jupiter-concept-tree>\n `)}\n </tbody>\n </table>\n </div>\n </div>\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} from '../schema/types';\nimport { XBRLFormInput } from '../schema/xbrl-types';\nimport { FormValidator } from '../utils/validation';\nimport { XBRLFormBuilder } from '../utils/xbrl-form-builder';\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\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 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 }\n\n .add-column-container {\n padding: 16px 24px;\n border-bottom: 1px solid var(--jupiter-border-color, #ddd);\n background: var(--jupiter-form-actions-background, #f8f9fa);\n }\n\n .add-column-btn {\n padding: 8px 16px;\n background: var(--jupiter-primary-color, #1976d2);\n color: white;\n border: none;\n border-radius: 4px;\n cursor: pointer;\n font-size: 14px;\n font-weight: 500;\n }\n\n .add-column-btn:hover {\n background: var(--jupiter-primary-color-dark, #1565c0);\n }\n\n .add-column-btn:disabled {\n background: var(--jupiter-disabled-background, #ccc);\n cursor: not-allowed;\n }\n\n .form-sections {\n padding: 24px;\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 this._currentSchema = XBRLFormBuilder.buildFormSchema(this.xbrlInput);\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 } = event.detail;\n \n // Remove column\n this._columns = this._columns.filter(col => col.id !== columnId);\n \n // Remove data for this column\n for (const conceptId in this._formData) {\n if (this._formData[conceptId][columnId] !== undefined) {\n delete this._formData[conceptId][columnId];\n }\n }\n \n this._dirty = true;\n this._validateForm();\n this.requestUpdate();\n \n this.dispatchEvent(new CustomEvent('column-remove', {\n detail: { columnId },\n bubbles: true\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 this.dispatchEvent(new CustomEvent('form-submit', {\n detail: {\n data: this._formData,\n valid: this._valid,\n errors: this._errors\n },\n bubbles: true\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 <!-- Add Column Section -->\n ${config.enableColumnManagement !== false ? html`\n <div class=\"add-column-container\">\n <button \n class=\"add-column-btn\"\n @click=\"${this._addColumn}\"\n ?disabled=\"${this.disabled || this.readonly || (config.maxColumns && this._columns.length >= config.maxColumns)}\"\n >\n Add Dimension Column\n </button>\n </div>\n ` : ''}\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=\"${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 ></jupiter-form-section>\n `)}\n </div>\n\n <!-- Form Actions -->\n <div class=\"form-actions\">\n <button \n class=\"btn-primary\"\n @click=\"${this._handleSubmit}\"\n ?disabled=\"${this.disabled || this.readonly}\"\n >\n Submit\n </button>\n \n <button \n class=\"btn-outline\"\n @click=\"${this._handleReset}\"\n ?disabled=\"${this.disabled || !this._dirty}\"\n >\n Reset\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 './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';\n\n// Version export\nexport const version = '1.0.0';\n"],"names":["t","e","o","addInitializer","customElements","define","globalThis","ShadowRoot","ShadyCSS","nativeShadow","Document","prototype","CSSStyleSheet","s","Symbol","WeakMap","n$2","constructor","this","_$cssResult$","Error","cssText","styleSheet","length","get","replaceSync","set","toString","c","cssRules","n","r","is","i","defineProperty","getOwnPropertyDescriptor","h","getOwnPropertyNames","getOwnPropertySymbols","getPrototypeOf","Object","a","trustedTypes","l","emptyScript","p","reactiveElementPolyfillSupport","d","u","toAttribute","Boolean","Array","JSON","stringify","fromAttribute","Number","parse","f","b","attribute","type","String","converter","reflect","useDefault","hasChanged","metadata","litPropertyMetadata","y","HTMLElement","_$Ei","push","observedAttributes","finalize","_$Eh","keys","createProperty","state","hasOwnProperty","create","wrapped","elementProperties","noAccessor","getPropertyDescriptor","call","requestUpdate","configurable","enumerable","getPropertyOptions","Map","finalized","properties","_$Eu","elementStyles","finalizeStyles","styles","isArray","Set","flat","reverse","unshift","toLowerCase","super","_$Ep","isUpdatePending","hasUpdated","_$Em","_$Ev","_$ES","Promise","enableUpdating","_$AL","_$E_","_a","forEach","addController","_$EO","add","renderRoot","isConnected","hostConnected","removeController","delete","size","createRenderRoot","shadowRoot","attachShadow","shadowRootOptions","adoptedStyleSheets","map","document","createElement","litNonce","setAttribute","textContent","appendChild","connectedCallback","disconnectedCallback","hostDisconnected","attributeChangedCallback","_$AK","_$ET","removeAttribute","_b","_$Ej","hasAttribute","C","_$EP","has","_$Eq","reject","scheduleUpdate","performUpdate","shouldUpdate","willUpdate","hostUpdate","update","_$EM","_$AE","hostUpdated","firstUpdated","updated","updateComplete","getUpdateComplete","mode","ReactiveElement","reactiveElementVersions","kind","name","init","FormValidator","validateField","fieldId","conceptId","columnId","value","fieldType","rules","errors","rule","error","validateRule","_fieldType","isEmpty","createError","RegExp","test","URL","console","warn","message","severity","validateDataType","valid","convertedValue","numValue","isNaN","dateValue","Date","getTime","toISOString","split","datetimeValue","boolValue","formatValue","locale","Intl","NumberFormat","format","minimumFractionDigits","maximumFractionDigits","style","currency","toLocaleDateString","toLocaleString","XBRLFormBuilder","buildFormSchema","xbrlInput","presentation","presentationData","sections","roles","role","section","buildSectionFromRole","formId","now","title","extractEntityName","entrypoint","description","version","extractRoleTitle","conceptTrees","presentationLinkbase","concepts","concept","conceptTree","buildConceptTree","id","expanded","level","label","getPreferredLabel","labels","fields","elementAbstract","field","createFieldFromConcept","children","child","childTree","conceptName","collapsed","mapXBRLTypeToFieldType","placeholder","required","disabled","defaultValue","xbrlType","preferred","find","preferredLabel","standard","terse","pathParts","pathname","replace","trim","match","extractRoleOrder","parseInt","buildColumnsFromHypercubes","JupiterFormField","LitElement","arguments","_errors","_touched","changedProperties","_validateField","validation","_handleInput","event","target","checked","dispatchEvent","CustomEvent","detail","oldValue","bubbles","_handleFocus","_handleBlur","_renderInput","hasErrors","some","hasWarnings","cssClass","html","options","option","_getInputType","render","showLabel","css","__decorateClass","property","customElement","JupiterConceptTree","columns","formData","_expanded","_toggleExpanded","_getFieldForColumn","_getFieldValue","_handleFieldChange","stopPropagation","hasChildren","column","JupiterFormSection","collapsible","sectionId","_handleRemoveColumn","_handleConceptExpand","removable","JupiterDynamicForm","config","initialData","readonly","_formData","_columns","_dirty","_valid","_submitted","_initializeForm","log","_currentSchema","order","_getDefaultSchema","_getDefaultColumns","schema","_validateForm","fieldErrors","filter","_handleSectionExpand","_handleColumnRemove","col","_addColumn","newColumn","dimensionData","dimensionId","memberValue","memberLabel","_handleSubmit","data","_handleReset","clear","_getFormState","touched","dirty","submitted","getData","setData","validate","reset","getState","errorCount","showValidationSummary","enableColumnManagement","maxColumns","collapsibleSections"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4]}
|
|
1
|
+
{"version":3,"file":"index.js","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/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} 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 Builder Service\n * Transforms 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 * 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 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);\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 ): FormSection {\n // Extract section title from role name (remove role number prefix)\n const title = this.extractRoleTitle(role.role);\n \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);\n if (conceptTree) {\n conceptTrees.push(conceptTree);\n }\n });\n }\n\n // Generate appropriate columns based on concept period types\n const columns = this.generateDefaultColumnsForRole(role, periodStartDate || '2025-01-01', periodEndDate || '2025-12-31');\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 ): 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 const field = this.createFieldFromConcept(concept, periodStartDate, periodEndDate);\n if (field) {\n 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);\n if (childTree) {\n children.push(childTree);\n }\n });\n }\n\n return {\n id: concept.id,\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 };\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 ): 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\n let columnId = 'default';\n if (concept.periodType === 'instant') {\n columnId = 'instant';\n } else if (concept.periodType === 'duration') {\n columnId = 'duration_start'; // Default to start column for duration\n } else {\n columnId = 'default';\n }\n\n const field: FormField = {\n id: `${concept.id}_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 // Process fields in this concept\n conceptTree.fields.forEach(field => {\n // Reassign column ID based on available columns and field's period type\n if (columnIds.includes('instant') && field.columnId === 'instant') {\n // Keep instant assignment\n field.columnId = 'instant';\n } else if (columnIds.includes('duration_start') && field.columnId === 'duration_start') {\n // Keep duration start assignment\n field.columnId = 'duration_start';\n } else if (columnIds.includes('period_start') && (field.columnId === 'duration_start' || field.columnId === 'instant')) {\n // Mixed period types - assign to start column\n field.columnId = 'period_start';\n } else if (columnIds.length > 0) {\n // Fallback to first available column\n field.columnId = columnIds[0];\n }\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 * 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 ): FormColumn[] {\n const nonAbstractConcepts = this.getAllNonAbstractConcepts(role);\n \n console.log(`📊 Analyzing role \"${role.role}\" with ${nonAbstractConcepts.length} non-abstract concepts`);\n \n if (nonAbstractConcepts.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 // Analyze period types\n const periodTypes = new Set(\n nonAbstractConcepts\n .filter(concept => concept.periodType) // Only concepts with period type\n .map(concept => concept.periodType)\n );\n \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 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 - two columns for period range\n console.log('📅 All concepts are duration type, creating two columns');\n columns.push({\n id: 'duration_start',\n title: `From ${this.formatDateForDisplay(periodStartDate)}`,\n description: `Period start: ${periodStartDate}`,\n type: 'base',\n order: 0,\n removable: false\n });\n columns.push({\n id: 'duration_end',\n title: `To ${this.formatDateForDisplay(periodEndDate)}`,\n description: `Period end: ${periodEndDate}`,\n type: 'base',\n order: 1,\n removable: false\n });\n } else {\n // Mixed period types - two columns for full period range\n console.log('📅 Mixed period types found, creating two columns for full range');\n columns.push({\n id: 'period_start',\n title: `From ${this.formatDateForDisplay(periodStartDate)}`,\n description: `Period start: ${periodStartDate}`,\n type: 'base',\n order: 0,\n removable: false\n });\n columns.push({\n id: 'period_end',\n title: `To ${this.formatDateForDisplay(periodEndDate)}`,\n description: `Period end: ${periodEndDate}`,\n type: 'base',\n order: 1,\n removable: false\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 * 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\n @state() private _errors: ValidationError[] = [];\n @state() private _touched = false;\n\n static styles = css`\n :host {\n display: block;\n margin-bottom: 8px;\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: 8px 12px;\n border: 1px solid var(--jupiter-border-color, #ddd);\n border-radius: 4px;\n font-size: 14px;\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 switch (this.field.type) {\n case 'textarea':\n return html`\n <textarea\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 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 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 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.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\n @state() private _expanded = true;\n\n static styles = css`\n :host {\n display: block;\n }\n\n .concept-row {\n display: contents;\n }\n\n .concept-header {\n display: flex;\n align-items: center;\n padding: 8px 12px;\n background: var(--jupiter-concept-background, #f8f9fa);\n border: 1px solid var(--jupiter-border-color, #ddd);\n border-bottom: none;\n font-weight: 500;\n cursor: pointer;\n user-select: none;\n }\n\n .concept-header:hover {\n background: var(--jupiter-concept-hover-background, #e9ecef);\n }\n\n .concept-indent {\n width: calc(var(--level, 0) * 20px);\n flex-shrink: 0;\n }\n\n .concept-toggle {\n width: 16px;\n height: 16px;\n margin-right: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 12px;\n transition: transform 0.2s ease;\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 }\n\n .concept-description {\n font-size: 12px;\n color: var(--jupiter-text-secondary, #666);\n font-weight: normal;\n margin-left: 8px;\n }\n\n .concept-fields {\n display: contents;\n }\n\n .field-cell {\n border: 1px solid var(--jupiter-border-color, #ddd);\n border-bottom: none;\n padding: 8px;\n background: var(--jupiter-cell-background, #fff);\n min-height: 40px;\n display: flex;\n align-items: center;\n }\n\n .field-cell:last-child {\n border-right: 1px solid var(--jupiter-border-color, #ddd);\n }\n\n .field-cell.empty {\n background: var(--jupiter-empty-cell-background, #f8f9fa);\n }\n\n .children {\n display: contents;\n }\n\n .children.collapsed {\n display: none;\n }\n\n .concept-row:last-of-type .concept-header,\n .concept-row:last-of-type .field-cell {\n border-bottom: 1px solid var(--jupiter-border-color, #ddd);\n }\n `;\n\n connectedCallback() {\n super.connectedCallback();\n this._expanded = !this.concept.collapsed;\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\n return html`\n <div class=\"concept-row\" style=\"--level: ${level}\">\n <!-- Concept Label Column -->\n <div class=\"concept-header\" @click=\"${this._toggleExpanded}\">\n <div class=\"concept-indent\"></div>\n <div class=\"concept-toggle ${hasChildren ? (this._expanded ? 'expanded' : '') : 'no-children'}\">\n ${hasChildren ? '▶' : ''}\n </div>\n <div class=\"concept-label\">\n ${this.concept.label}\n ${this.concept.description ? html`\n <span class=\"concept-description\">${this.concept.description}</span>\n ` : ''}\n </div>\n </div>\n\n <!-- Field Columns -->\n ${this.columns.map(column => {\n const field = this._getFieldForColumn(column.id);\n \n return html`\n <div class=\"field-cell ${!field ? 'empty' : ''}\">\n ${field ? 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 @field-change=\"${this._handleFieldChange}\"\n ></jupiter-form-field>\n ` : ''}\n </div>\n `;\n })}\n </div>\n\n <!-- Children Concepts -->\n ${hasChildren ? html`\n <div class=\"children ${!this._expanded ? 'collapsed' : ''}\">\n ${this.concept.children!.map(child => html`\n <jupiter-concept-tree\n .concept=\"${child}\"\n .columns=\"${this.columns}\"\n .formData=\"${this.formData}\"\n .disabled=\"${this.disabled}\"\n .locale=\"${this.locale}\"\n @field-change=\"${this._handleFieldChange}\"\n @concept-expand=\"${(e: CustomEvent) => { \n e.stopPropagation(); \n this.dispatchEvent(new CustomEvent('concept-expand', { detail: e.detail, bubbles: true })); \n }}\"\n ></jupiter-concept-tree>\n `)}\n </div>\n ` : ''}\n `;\n }\n}\n","import { LitElement, html, css } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { FormSection, FormColumn } from '../schema/types';\nimport './concept-tree';\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\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: collapse;\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-cell {\n padding: 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: 150px;\n }\n\n .header-cell.concept-column {\n min-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 .table-body {\n display: table-row-group;\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 }\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: { columnId },\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 _handleConceptExpand(event: CustomEvent) {\n event.stopPropagation();\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>\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 </tr>\n </thead>\n <tbody class=\"table-body\">\n ${this.section.concepts.map(concept => html`\n <jupiter-concept-tree\n .concept=\"${concept}\"\n .columns=\"${this.columns}\"\n .formData=\"${this.formData}\"\n .disabled=\"${this.disabled}\"\n .locale=\"${this.locale}\"\n @field-change=\"${this._handleFieldChange}\"\n @concept-expand=\"${this._handleConceptExpand}\"\n ></jupiter-concept-tree>\n `)}\n </tbody>\n </table>\n </div>\n </div>\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} from '../schema/types';\nimport { XBRLFormInput } from '../schema/xbrl-types';\nimport { FormValidator } from '../utils/validation';\nimport { XBRLFormBuilder } from '../utils/xbrl-form-builder';\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 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 }\n\n .add-column-container {\n padding: 16px 24px;\n border-bottom: 1px solid var(--jupiter-border-color, #ddd);\n background: var(--jupiter-form-actions-background, #f8f9fa);\n }\n\n .add-column-btn {\n padding: 8px 16px;\n background: var(--jupiter-primary-color, #1976d2);\n color: white;\n border: none;\n border-radius: 4px;\n cursor: pointer;\n font-size: 14px;\n font-weight: 500;\n }\n\n .add-column-btn:hover {\n background: var(--jupiter-primary-color-dark, #1565c0);\n }\n\n .add-column-btn:disabled {\n background: var(--jupiter-disabled-background, #ccc);\n cursor: not-allowed;\n }\n\n .form-sections {\n padding: 24px;\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 } = event.detail;\n \n // Remove column\n this._columns = this._columns.filter(col => col.id !== columnId);\n \n // Remove data for this column\n for (const conceptId in this._formData) {\n if (this._formData[conceptId][columnId] !== undefined) {\n delete this._formData[conceptId][columnId];\n }\n }\n \n this._dirty = true;\n this._validateForm();\n this.requestUpdate();\n \n this.dispatchEvent(new CustomEvent('column-remove', {\n detail: { columnId },\n bubbles: true\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 this.dispatchEvent(new CustomEvent('form-submit', {\n detail: {\n data: this._formData,\n valid: this._valid,\n errors: this._errors\n },\n bubbles: true\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 <!-- Add Column Section -->\n ${config.enableColumnManagement !== false ? html`\n <div class=\"add-column-container\">\n <button \n class=\"add-column-btn\"\n @click=\"${this._addColumn}\"\n ?disabled=\"${this.disabled || this.readonly || (config.maxColumns && this._columns.length >= config.maxColumns)}\"\n >\n Add Dimension Column\n </button>\n </div>\n ` : ''}\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 ></jupiter-form-section>\n `)}\n </div>\n\n <!-- Form Actions -->\n <div class=\"form-actions\">\n <button \n class=\"btn-primary\"\n @click=\"${this._handleSubmit}\"\n ?disabled=\"${this.disabled || this.readonly}\"\n >\n Submit\n </button>\n \n <button \n class=\"btn-outline\"\n @click=\"${this._handleReset}\"\n ?disabled=\"${this.disabled || !this._dirty}\"\n >\n Reset\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 './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';\n\n// Version export\nexport const version = '1.0.0';\n"],"names":["t","e","o","addInitializer","customElements","define","globalThis","ShadowRoot","ShadyCSS","nativeShadow","Document","prototype","CSSStyleSheet","s","Symbol","WeakMap","n$2","constructor","this","_$cssResult$","Error","cssText","styleSheet","length","get","replaceSync","set","toString","c","cssRules","n","r","is","i","defineProperty","getOwnPropertyDescriptor","h","getOwnPropertyNames","getOwnPropertySymbols","getPrototypeOf","Object","a","trustedTypes","l","emptyScript","p","reactiveElementPolyfillSupport","d","u","toAttribute","Boolean","Array","JSON","stringify","fromAttribute","Number","parse","f","b","attribute","type","String","converter","reflect","useDefault","hasChanged","metadata","litPropertyMetadata","y","HTMLElement","_$Ei","push","observedAttributes","finalize","_$Eh","keys","createProperty","state","hasOwnProperty","create","wrapped","elementProperties","noAccessor","getPropertyDescriptor","call","requestUpdate","configurable","enumerable","getPropertyOptions","Map","finalized","properties","_$Eu","elementStyles","finalizeStyles","styles","isArray","Set","flat","reverse","unshift","toLowerCase","super","_$Ep","isUpdatePending","hasUpdated","_$Em","_$Ev","_$ES","Promise","enableUpdating","_$AL","_$E_","_a","forEach","addController","_$EO","add","renderRoot","isConnected","hostConnected","removeController","delete","size","createRenderRoot","shadowRoot","attachShadow","shadowRootOptions","adoptedStyleSheets","map","document","createElement","litNonce","setAttribute","textContent","appendChild","connectedCallback","disconnectedCallback","hostDisconnected","attributeChangedCallback","_$AK","_$ET","removeAttribute","_b","_$Ej","hasAttribute","C","_$EP","has","_$Eq","reject","scheduleUpdate","performUpdate","shouldUpdate","willUpdate","hostUpdate","update","_$EM","_$AE","hostUpdated","firstUpdated","updated","updateComplete","getUpdateComplete","mode","ReactiveElement","reactiveElementVersions","kind","name","init","FormValidator","validateField","fieldId","conceptId","columnId","value","fieldType","rules","errors","rule","error","validateRule","_fieldType","isEmpty","createError","RegExp","test","URL","console","warn","message","severity","validateDataType","valid","convertedValue","numValue","isNaN","dateValue","Date","getTime","toISOString","split","datetimeValue","boolValue","formatValue","locale","Intl","NumberFormat","format","minimumFractionDigits","maximumFractionDigits","style","currency","toLocaleDateString","toLocaleString","XBRLFormBuilder","buildFormSchema","xbrlInput","periodStartDate","periodEndDate","presentation","presentationData","sections","roles","role","section","buildSectionFromRole","assignFieldColumnIds","formId","now","title","extractEntityName","entrypoint","description","version","extractRoleTitle","conceptTrees","presentationLinkbase","concepts","concept","conceptTree","buildConceptTree","columns","generateDefaultColumnsForRole","id","expanded","level","label","getPreferredLabel","labels","fields","elementAbstract","field","createFieldFromConcept","children","child","childTree","conceptName","collapsed","mapXBRLTypeToFieldType","periodType","placeholder","required","disabled","defaultValue","xbrlType","preferred","find","preferredLabel","standard","terse","columnIds","col","assignColumnIdsToConceptFields","includes","getAllNonAbstractConcepts","nonAbstractConcepts","collectNonAbstractConcepts","collection","log","order","removable","periodTypes","filter","from","join","formatDateForDisplay","dateString","year","month","day","pathParts","pathname","replace","trim","match","extractRoleOrder","parseInt","buildColumnsFromHypercubes","JupiterFormField","LitElement","arguments","_errors","_touched","changedProperties","_validateField","validation","_handleInput","event","target","checked","dispatchEvent","CustomEvent","detail","oldValue","bubbles","_handleFocus","_handleBlur","_renderInput","hasErrors","some","hasWarnings","cssClass","html","options","option","_getInputType","render","showLabel","css","__decorateClass","property","customElement","JupiterConceptTree","formData","_expanded","_toggleExpanded","_getFieldForColumn","_getFieldValue","_handleFieldChange","stopPropagation","hasChildren","column","JupiterFormSection","collapsible","sectionId","_handleRemoveColumn","_handleConceptExpand","JupiterDynamicForm","config","initialData","readonly","_formData","_columns","_dirty","_valid","_submitted","_initializeForm","_currentSchema","_getDefaultSchema","_getDefaultColumns","schema","_validateForm","fieldErrors","_handleSectionExpand","_handleColumnRemove","_addColumn","newColumn","dimensionData","dimensionId","memberValue","memberLabel","_handleSubmit","data","_handleReset","clear","_getFormState","touched","dirty","submitted","getData","setData","validate","reset","getState","errorCount","showValidationSummary","enableColumnManagement","maxColumns","collapsibleSections"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4]}
|