jupiter-dynamic-forms 1.0.1 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs CHANGED
@@ -527,14 +527,14 @@ class XBRLFormBuilder {
527
527
  * Build form schema from XBRL input data
528
528
  * Creates accordion sections for each presentation role
529
529
  */
530
- static buildFormSchema(xbrlInput) {
530
+ static buildFormSchema(xbrlInput, periodStartDate, periodEndDate) {
531
531
  if (!xbrlInput.presentation || xbrlInput.presentation.length === 0) {
532
532
  throw new Error("XBRL presentation data is required");
533
533
  }
534
534
  const presentationData = xbrlInput.presentation[0];
535
535
  const sections = [];
536
536
  presentationData.roles.forEach((role) => {
537
- const section = this.buildSectionFromRole(role);
537
+ const section = this.buildSectionFromRole(role, periodStartDate, periodEndDate);
538
538
  sections.push(section);
539
539
  });
540
540
  return {
@@ -548,13 +548,13 @@ class XBRLFormBuilder {
548
548
  /**
549
549
  * Build a form section from a presentation role
550
550
  */
551
- static buildSectionFromRole(role) {
551
+ static buildSectionFromRole(role, periodStartDate, periodEndDate) {
552
552
  var _a;
553
553
  const title = this.extractRoleTitle(role.role);
554
554
  const conceptTrees = [];
555
555
  if ((_a = role.presentationLinkbase) == null ? void 0 : _a.concepts) {
556
556
  role.presentationLinkbase.concepts.forEach((concept) => {
557
- const conceptTree = this.buildConceptTree(concept, 0);
557
+ const conceptTree = this.buildConceptTree(concept, 0, periodStartDate, periodEndDate);
558
558
  if (conceptTree) {
559
559
  conceptTrees.push(conceptTree);
560
560
  }
@@ -571,11 +571,11 @@ class XBRLFormBuilder {
571
571
  /**
572
572
  * Build concept tree from XBRL presentation concept
573
573
  */
574
- static buildConceptTree(concept, level) {
574
+ static buildConceptTree(concept, level, periodStartDate, periodEndDate) {
575
575
  const label = this.getPreferredLabel(concept.labels);
576
576
  const fields = [];
577
577
  if (!concept.elementAbstract) {
578
- const field = this.createFieldFromConcept(concept);
578
+ const field = this.createFieldFromConcept(concept, periodStartDate, periodEndDate);
579
579
  if (field) {
580
580
  fields.push(field);
581
581
  }
@@ -583,7 +583,7 @@ class XBRLFormBuilder {
583
583
  const children = [];
584
584
  if (concept.children && concept.children.length > 0) {
585
585
  concept.children.forEach((child) => {
586
- const childTree = this.buildConceptTree(child, level + 1);
586
+ const childTree = this.buildConceptTree(child, level + 1, periodStartDate, periodEndDate);
587
587
  if (childTree) {
588
588
  children.push(childTree);
589
589
  }
@@ -604,10 +604,10 @@ class XBRLFormBuilder {
604
604
  /**
605
605
  * Create form field from XBRL concept
606
606
  */
607
- static createFieldFromConcept(concept) {
607
+ static createFieldFromConcept(concept, periodStartDate, periodEndDate) {
608
608
  const fieldType = this.mapXBRLTypeToFieldType(concept.type);
609
609
  const label = this.getPreferredLabel(concept.labels);
610
- return {
610
+ const field = {
611
611
  id: `${concept.id}_field`,
612
612
  conceptId: concept.id,
613
613
  columnId: "default",
@@ -620,6 +620,11 @@ class XBRLFormBuilder {
620
620
  disabled: concept.elementAbstract,
621
621
  defaultValue: null
622
622
  };
623
+ if (concept.periodType === "duration" || concept.periodType === "instant") {
624
+ field.periodStartDate = periodStartDate || "2025-01-01";
625
+ field.periodEndDate = periodEndDate || "2025-12-31";
626
+ }
627
+ return field;
623
628
  }
624
629
  /**
625
630
  * Map XBRL data type to form field type
@@ -1568,6 +1573,8 @@ let JupiterDynamicForm = class extends LitElement {
1568
1573
  this.initialData = {};
1569
1574
  this.disabled = false;
1570
1575
  this.readonly = false;
1576
+ this.periodStartDate = "2025-01-01";
1577
+ this.periodEndDate = "2025-12-31";
1571
1578
  this._formData = {};
1572
1579
  this._columns = [];
1573
1580
  this._errors = [];
@@ -1590,7 +1597,12 @@ let JupiterDynamicForm = class extends LitElement {
1590
1597
  if (this.xbrlInput) {
1591
1598
  try {
1592
1599
  console.log("🔄 Initializing form from XBRL input:", this.xbrlInput);
1593
- this._currentSchema = XBRLFormBuilder.buildFormSchema(this.xbrlInput);
1600
+ console.log("📅 Using period dates:", this.periodStartDate, "to", this.periodEndDate);
1601
+ this._currentSchema = XBRLFormBuilder.buildFormSchema(
1602
+ this.xbrlInput,
1603
+ this.periodStartDate,
1604
+ this.periodEndDate
1605
+ );
1594
1606
  console.log("✅ Generated schema with sections:", this._currentSchema.sections.length);
1595
1607
  this._columns = [
1596
1608
  {
@@ -2044,6 +2056,12 @@ __decorateClass([
2044
2056
  __decorateClass([
2045
2057
  n2({ type: Boolean })
2046
2058
  ], JupiterDynamicForm.prototype, "readonly", 2);
2059
+ __decorateClass([
2060
+ n2({ type: String })
2061
+ ], JupiterDynamicForm.prototype, "periodStartDate", 2);
2062
+ __decorateClass([
2063
+ n2({ type: String })
2064
+ ], JupiterDynamicForm.prototype, "periodEndDate", 2);
2047
2065
  __decorateClass([
2048
2066
  r()
2049
2067
  ], JupiterDynamicForm.prototype, "_formData", 2);
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../node_modules/@lit/reactive-element/decorators/custom-element.js","../node_modules/@lit/reactive-element/css-tag.js","../node_modules/@lit/reactive-element/reactive-element.js","../node_modules/@lit/reactive-element/decorators/property.js","../node_modules/@lit/reactive-element/decorators/state.js","../src/utils/validation.ts","../src/utils/xbrl-form-builder.ts","../src/core/form-field.ts","../src/core/concept-tree.ts","../src/core/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","s","r","n","c","i","h","_a","l","__decorateClass","property","state","customElement"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4]}
1
+ {"version":3,"file":"index.mjs","sources":["../node_modules/@lit/reactive-element/decorators/custom-element.js","../node_modules/@lit/reactive-element/css-tag.js","../node_modules/@lit/reactive-element/reactive-element.js","../node_modules/@lit/reactive-element/decorators/property.js","../node_modules/@lit/reactive-element/decorators/state.js","../src/utils/validation.ts","../src/utils/xbrl-form-builder.ts","../src/core/form-field.ts","../src/core/concept-tree.ts","../src/core/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(\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 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 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(\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 const field: FormField = {\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 // 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 * 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=\"${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","s","r","n","c","i","h","_a","l","__decorateClass","property","state","customElement"],"mappings":";AAAA;AAAA;AAAA;AAAA;AAAA;AAKA,MAAMA,MAAE,CAAAA,OAAG,CAACC,IAAEC,OAAI;AAAC,aAASA,KAAEA,GAAE,eAAgB,MAAI;AAAC,mBAAe,OAAOF,IAAEC,EAAC;AAAA,EAAC,CAAC,IAAG,eAAe,OAAOD,IAAEC,EAAC;AAAC;ACL7G;AAAA;AAAA;AAAA;AAAA;AAKA,MAAM,IAAE,YAAWA,MAAE,EAAE,eAAa,WAAS,EAAE,YAAU,EAAE,SAAS,iBAAe,wBAAuB,SAAS,aAAW,aAAY,cAAc,WAAU,IAAE,OAAQ,GAACC,MAAE,oBAAI;AAAO,IAAA,MAAC,MAAM,EAAC;AAAA,EAAC,YAAYF,IAAEC,IAAEC,IAAE;AAAC,QAAG,KAAK,eAAa,MAAGA,OAAI;AAAE,YAAM,MAAM,mEAAmE;AAAE,SAAK,UAAQF,IAAE,KAAK,IAAEC;AAAA,EAAC;AAAA,EAAC,IAAI,aAAY;AAAC,QAAID,KAAE,KAAK;AAAE,UAAMG,KAAE,KAAK;AAAE,QAAGF,OAAG,WAASD,IAAE;AAAC,YAAMC,KAAE,WAASE,MAAG,MAAIA,GAAE;AAAO,MAAAF,OAAID,KAAEE,IAAE,IAAIC,EAAC,IAAG,WAASH,QAAK,KAAK,IAAEA,KAAE,IAAI,iBAAe,YAAY,KAAK,OAAO,GAAEC,MAAGC,IAAE,IAAIC,IAAEH,EAAC;AAAA,IAAE;AAAC,WAAOA;AAAA,EAAC;AAAA,EAAC,WAAU;AAAC,WAAO,KAAK;AAAA,EAAO;AAAC;AAAM,MAACI,MAAE,CAAAJ,OAAG,IAAIK,IAAE,YAAU,OAAOL,KAAEA,KAAEA,KAAE,IAAG,QAAO,CAAC,GAA2V,IAAE,CAACG,IAAED,OAAI;AAAC,MAAGD;AAAE,IAAAE,GAAE,qBAAmBD,GAAE,IAAK,CAAAF,OAAGA,cAAa,gBAAcA,KAAEA,GAAE;;AAAkB,eAAUC,MAAKC,IAAE;AAAC,YAAMA,KAAE,SAAS,cAAc,OAAO,GAAEG,KAAE,EAAE;AAAS,iBAASA,MAAGH,GAAE,aAAa,SAAQG,EAAC,GAAEH,GAAE,cAAYD,GAAE,SAAQE,GAAE,YAAYD,EAAC;AAAA,IAAC;AAAC,GAAEI,MAAEL,MAAE,CAAAD,OAAGA,KAAE,CAAAA,OAAGA,cAAa,iBAAe,CAAAA,OAAG;AAAC,MAAIC,KAAE;AAAG,aAAUE,MAAKH,GAAE;AAAS,IAAAC,MAAGE,GAAE;AAAQ,SAAOC,IAAEH,EAAC;AAAC,GAAGD,EAAC,IAAEA;ACJ3zC;AAAA;AAAA;AAAA;AAAA;AAIG,MAAK,EAAC,IAAG,GAAE,gBAAe,GAAE,0BAAyB,GAAE,qBAAoBI,KAAE,uBAAsBF,KAAE,gBAAeG,IAAC,IAAE,QAAO,IAAE,YAAW,IAAE,EAAE,cAAa,IAAE,IAAE,EAAE,cAAY,IAAG,IAAE,EAAE,gCAA+B,IAAE,CAACL,IAAEG,OAAIH,IAAE,IAAE,EAAC,YAAYA,IAAEG,IAAE;AAAC,UAAOA,IAAC;AAAA,IAAE,KAAK;AAAQ,MAAAH,KAAEA,KAAE,IAAE;AAAK;AAAA,IAAM,KAAK;AAAA,IAAO,KAAK;AAAM,MAAAA,KAAE,QAAMA,KAAEA,KAAE,KAAK,UAAUA,EAAC;AAAA,EAAC;AAAC,SAAOA;AAAC,GAAE,cAAcA,IAAEG,IAAE;AAAC,MAAII,KAAEP;AAAE,UAAOG,IAAG;AAAA,IAAA,KAAK;AAAQ,MAAAI,KAAE,SAAOP;AAAE;AAAA,IAAM,KAAK;AAAO,MAAAO,KAAE,SAAOP,KAAE,OAAK,OAAOA,EAAC;AAAE;AAAA,IAAM,KAAK;AAAA,IAAO,KAAK;AAAM,UAAG;AAAC,QAAAO,KAAE,KAAK,MAAMP,EAAC;AAAA,MAAC,SAAOA,IAAE;AAAC,QAAAO,KAAE;AAAA,MAAI;AAAA,EAAC;AAAC,SAAOA;AAAC,EAAC,GAAE,IAAE,CAACP,IAAEG,OAAI,CAAC,EAAEH,IAAEG,EAAC,GAAE,IAAE,EAAC,WAAU,MAAG,MAAK,QAAO,WAAU,GAAE,SAAQ,OAAG,YAAW,OAAG,YAAW,EAAC;AAAE,OAAO,aAAP,OAAO,WAAW,OAAO,UAAU,IAAE,EAAE,wBAAF,EAAE,sBAAsB,oBAAI;AAAQ,MAAM,UAAU,YAAW;AAAA,EAAC,OAAO,eAAeH,IAAE;AAAC,SAAK,KAAI,IAAI,KAAK,MAAL,KAAK,IAAI,CAAA,IAAI,KAAKA,EAAC;AAAA,EAAC;AAAA,EAAC,WAAW,qBAAoB;AAAC,WAAO,KAAK,SAAQ,GAAG,KAAK,QAAM,CAAC,GAAG,KAAK,KAAK,KAAM,CAAA;AAAA,EAAC;AAAA,EAAC,OAAO,eAAeA,IAAEG,KAAE,GAAE;AAAC,QAAGA,GAAE,UAAQA,GAAE,YAAU,QAAI,KAAK,KAAI,GAAG,KAAK,UAAU,eAAeH,EAAC,OAAKG,KAAE,OAAO,OAAOA,EAAC,GAAG,UAAQ,OAAI,KAAK,kBAAkB,IAAIH,IAAEG,EAAC,GAAE,CAACA,GAAE,YAAW;AAAC,YAAMI,KAAE,OAAQ,GAACC,KAAE,KAAK,sBAAsBR,IAAEO,IAAEJ,EAAC;AAAE,iBAASK,MAAG,EAAE,KAAK,WAAUR,IAAEQ,EAAC;AAAA,IAAC;AAAA,EAAC;AAAA,EAAC,OAAO,sBAAsBR,IAAEG,IAAEI,IAAE;AAAC,UAAK,EAAC,KAAIN,IAAE,KAAIG,GAAC,IAAE,EAAE,KAAK,WAAUJ,EAAC,KAAG,EAAC,MAAK;AAAC,aAAO,KAAKG,EAAC;AAAA,IAAC,GAAE,IAAIH,IAAE;AAAC,WAAKG,EAAC,IAAEH;AAAA,IAAC,EAAC;AAAE,WAAM,EAAC,KAAIC,IAAE,IAAIE,IAAE;AAAC,YAAMK,KAAEP,MAAA,gBAAAA,GAAG,KAAK;AAAM,MAAAG,MAAA,gBAAAA,GAAG,KAAK,MAAKD,KAAG,KAAK,cAAcH,IAAEQ,IAAED,EAAC;AAAA,IAAC,GAAE,cAAa,MAAG,YAAW,KAAE;AAAA,EAAC;AAAA,EAAC,OAAO,mBAAmBP,IAAE;AAAC,WAAO,KAAK,kBAAkB,IAAIA,EAAC,KAAG;AAAA,EAAC;AAAA,EAAC,OAAO,OAAM;AAAC,QAAG,KAAK,eAAe,EAAE,mBAAmB,CAAC;AAAE;AAAO,UAAMA,KAAEK,IAAE,IAAI;AAAE,IAAAL,GAAE,SAAU,GAAC,WAASA,GAAE,MAAI,KAAK,IAAE,CAAC,GAAGA,GAAE,CAAC,IAAG,KAAK,oBAAkB,IAAI,IAAIA,GAAE,iBAAiB;AAAA,EAAC;AAAA,EAAC,OAAO,WAAU;AAAC,QAAG,KAAK,eAAe,EAAE,WAAW,CAAC;AAAE;AAAO,QAAG,KAAK,YAAU,MAAG,KAAK,KAAI,GAAG,KAAK,eAAe,EAAE,YAAY,CAAC,GAAE;AAAC,YAAMA,KAAE,KAAK,YAAWG,KAAE,CAAC,GAAGC,IAAEJ,EAAC,GAAE,GAAGE,IAAEF,EAAC,CAAC;AAAE,iBAAUO,MAAKJ;AAAE,aAAK,eAAeI,IAAEP,GAAEO,EAAC,CAAC;AAAA,IAAC;AAAC,UAAMP,KAAE,KAAK,OAAO,QAAQ;AAAE,QAAG,SAAOA,IAAE;AAAC,YAAMG,KAAE,oBAAoB,IAAIH,EAAC;AAAE,UAAG,WAASG;AAAE,mBAAS,CAACH,IAAEO,EAAC,KAAIJ;AAAE,eAAK,kBAAkB,IAAIH,IAAEO,EAAC;AAAA,IAAC;AAAC,SAAK,OAAK,oBAAI;AAAI,eAAS,CAACP,IAAEG,EAAC,KAAI,KAAK,mBAAkB;AAAC,YAAMI,KAAE,KAAK,KAAKP,IAAEG,EAAC;AAAE,iBAASI,MAAG,KAAK,KAAK,IAAIA,IAAEP,EAAC;AAAA,IAAC;AAAC,SAAK,gBAAc,KAAK,eAAe,KAAK,MAAM;AAAA,EAAC;AAAA,EAAC,OAAO,eAAeG,IAAE;AAAC,UAAMI,KAAE,CAAA;AAAG,QAAG,MAAM,QAAQJ,EAAC,GAAE;AAAC,YAAMF,KAAE,IAAI,IAAIE,GAAE,KAAK,IAAE,CAAC,EAAE,QAAO,CAAE;AAAE,iBAAUA,MAAKF;AAAE,QAAAM,GAAE,QAAQP,IAAEG,EAAC,CAAC;AAAA,IAAC;AAAM,iBAASA,MAAGI,GAAE,KAAKP,IAAEG,EAAC,CAAC;AAAE,WAAOI;AAAA,EAAC;AAAA,EAAC,OAAO,KAAKP,IAAEG,IAAE;AAAC,UAAMI,KAAEJ,GAAE;AAAU,WAAM,UAAKI,KAAE,SAAO,YAAU,OAAOA,KAAEA,KAAE,YAAU,OAAOP,KAAEA,GAAE,YAAW,IAAG;AAAA,EAAM;AAAA,EAAC,cAAa;AAAC,UAAO,GAAC,KAAK,OAAK,QAAO,KAAK,kBAAgB,OAAG,KAAK,aAAW,OAAG,KAAK,OAAK,MAAK,KAAK,KAAM;AAAA,EAAA;AAAA,EAAC,OAAM;;AAAC,SAAK,OAAK,IAAI,QAAS,CAAAA,OAAG,KAAK,iBAAeA,EAAG,GAAC,KAAK,OAAK,oBAAI,OAAI,KAAK,KAAI,GAAG,KAAK,cAAe,IAAC,UAAK,YAAY,MAAjB,mBAAoB,QAAS,CAAAA,OAAGA,GAAE,IAAI;AAAA,EAAG;AAAA,EAAC,cAAcA,IAAE;;AAAC,KAAC,KAAK,SAAL,KAAK,OAAO,oBAAI,QAAK,IAAIA,EAAC,GAAE,WAAS,KAAK,cAAY,KAAK,iBAAa,KAAAA,GAAE,kBAAF,wBAAAA;AAAA,EAAmB;AAAA,EAAC,iBAAiBA,IAAE;;AAAC,eAAK,SAAL,mBAAW,OAAOA;AAAA,EAAE;AAAA,EAAC,OAAM;AAAC,UAAMA,KAAE,oBAAI,OAAIG,KAAE,KAAK,YAAY;AAAkB,eAAUI,MAAKJ,GAAE,KAAM;AAAC,WAAK,eAAeI,EAAC,MAAIP,GAAE,IAAIO,IAAE,KAAKA,EAAC,CAAC,GAAE,OAAO,KAAKA,EAAC;AAAG,IAAAP,GAAE,OAAK,MAAI,KAAK,OAAKA;AAAA,EAAE;AAAA,EAAC,mBAAkB;AAAC,UAAMA,KAAE,KAAK,cAAY,KAAK,aAAa,KAAK,YAAY,iBAAiB;AAAE,WAAOG,EAAEH,IAAE,KAAK,YAAY,aAAa,GAAEA;AAAA,EAAC;AAAA,EAAC,oBAAmB;;AAAC,SAAK,eAAL,KAAK,aAAa,KAAK,iBAAgB,IAAG,KAAK,eAAe,IAAE,IAAE,UAAK,SAAL,mBAAW,QAAS,CAAAA,OAAC;;AAAE,cAAAS,MAAAT,GAAE,kBAAF,gBAAAS,IAAA,KAAAT;AAAA;AAAA,EAAqB;AAAA,EAAC,eAAeA,IAAE;AAAA,EAAE;AAAA,EAAA,uBAAsB;;AAAC,eAAK,SAAL,mBAAW,QAAS,CAAAA,OAAC;;AAAE,cAAAS,MAAAT,GAAE,qBAAF,gBAAAS,IAAA,KAAAT;AAAA;AAAA,EAAwB;AAAA,EAAC,yBAAyBA,IAAEG,IAAEI,IAAE;AAAC,SAAK,KAAKP,IAAEO,EAAC;AAAA,EAAC;AAAA,EAAC,KAAKP,IAAEG,IAAE;;AAAC,UAAMI,KAAE,KAAK,YAAY,kBAAkB,IAAIP,EAAC,GAAEC,KAAE,KAAK,YAAY,KAAKD,IAAEO,EAAC;AAAE,QAAG,WAASN,MAAG,SAAKM,GAAE,SAAQ;AAAC,YAAMC,MAAG,aAAS,KAAAD,GAAE,cAAF,mBAAa,eAAYA,GAAE,YAAU,GAAG,YAAYJ,IAAEI,GAAE,IAAI;AAAE,WAAK,OAAKP,IAAE,QAAMQ,KAAE,KAAK,gBAAgBP,EAAC,IAAE,KAAK,aAAaA,IAAEO,EAAC,GAAE,KAAK,OAAK;AAAA,IAAI;AAAA,EAAC;AAAA,EAAC,KAAKR,IAAEG,IAAE;;AAAC,UAAMI,KAAE,KAAK,aAAYN,KAAEM,GAAE,KAAK,IAAIP,EAAC;AAAE,QAAG,WAASC,MAAG,KAAK,SAAOA,IAAE;AAAC,YAAMD,KAAEO,GAAE,mBAAmBN,EAAC,GAAEO,KAAE,cAAY,OAAOR,GAAE,YAAU,EAAC,eAAcA,GAAE,UAAS,IAAE,aAAS,KAAAA,GAAE,cAAF,mBAAa,iBAAcA,GAAE,YAAU;AAAE,WAAK,OAAKC;AAAE,YAAMG,KAAEI,GAAE,cAAcL,IAAEH,GAAE,IAAI;AAAE,WAAKC,EAAC,IAAEG,QAAG,UAAK,SAAL,mBAAW,IAAIH,QAAIG,IAAE,KAAK,OAAK;AAAA,IAAI;AAAA,EAAC;AAAA,EAAC,cAAcJ,IAAEG,IAAEI,IAAE;;AAAC,QAAG,WAASP,IAAE;AAAC,YAAMC,KAAE,KAAK,aAAYO,KAAE,KAAKR,EAAC;AAAE,UAAGO,YAAIN,GAAE,mBAAmBD,EAAC,IAAE,GAAGO,GAAE,cAAY,GAAGC,IAAEL,EAAC,KAAGI,GAAE,cAAYA,GAAE,WAASC,SAAI,UAAK,SAAL,mBAAW,IAAIR,QAAI,CAAC,KAAK,aAAaC,GAAE,KAAKD,IAAEO,EAAC,CAAC;AAAG;AAAO,WAAK,EAAEP,IAAEG,IAAEI,EAAC;AAAA,IAAC;AAAC,cAAK,KAAK,oBAAkB,KAAK,OAAK,KAAK,KAAI;AAAA,EAAG;AAAA,EAAC,EAAEP,IAAEG,IAAE,EAAC,YAAWI,IAAE,SAAQN,IAAE,SAAQO,GAAC,GAAEJ,IAAE;AAAC,IAAAG,MAAG,EAAE,KAAK,SAAL,KAAK,OAAO,oBAAI,QAAK,IAAIP,EAAC,MAAI,KAAK,KAAK,IAAIA,IAAEI,MAAGD,MAAG,KAAKH,EAAC,CAAC,GAAE,SAAKQ,MAAG,WAASJ,QAAK,KAAK,KAAK,IAAIJ,EAAC,MAAI,KAAK,cAAYO,OAAIJ,KAAE,SAAQ,KAAK,KAAK,IAAIH,IAAEG,EAAC,IAAG,SAAKF,MAAG,KAAK,SAAOD,OAAI,KAAK,SAAL,KAAK,OAAO,oBAAI,QAAK,IAAIA,EAAC;AAAA,EAAE;AAAA,EAAC,MAAM,OAAM;AAAC,SAAK,kBAAgB;AAAG,QAAG;AAAC,YAAM,KAAK;AAAA,IAAI,SAAOA,IAAE;AAAC,cAAQ,OAAOA,EAAC;AAAA,IAAC;AAAC,UAAMA,KAAE,KAAK,eAAc;AAAG,WAAO,QAAMA,MAAG,MAAMA,IAAE,CAAC,KAAK;AAAA,EAAe;AAAA,EAAC,iBAAgB;AAAC,WAAO,KAAK,cAAe;AAAA,EAAA;AAAA,EAAC,gBAAe;;AAAC,QAAG,CAAC,KAAK;AAAgB;AAAO,QAAG,CAAC,KAAK,YAAW;AAAC,UAAG,KAAK,eAAL,KAAK,aAAa,KAAK,qBAAmB,KAAK,MAAK;AAAC,mBAAS,CAACA,IAAEG,EAAC,KAAI,KAAK;AAAK,eAAKH,EAAC,IAAEG;AAAE,aAAK,OAAK;AAAA,MAAM;AAAC,YAAMH,KAAE,KAAK,YAAY;AAAkB,UAAGA,GAAE,OAAK;AAAE,mBAAS,CAACG,IAAEI,EAAC,KAAIP,IAAE;AAAC,gBAAK,EAAC,SAAQA,GAAC,IAAEO,IAAEN,KAAE,KAAKE,EAAC;AAAE,mBAAKH,MAAG,KAAK,KAAK,IAAIG,EAAC,KAAG,WAASF,MAAG,KAAK,EAAEE,IAAE,QAAOI,IAAEN,EAAC;AAAA,QAAC;AAAA,IAAC;AAAC,QAAID,KAAE;AAAG,UAAMG,KAAE,KAAK;AAAK,QAAG;AAAC,MAAAH,KAAE,KAAK,aAAaG,EAAC,GAAEH,MAAG,KAAK,WAAWG,EAAC,IAAE,UAAK,SAAL,mBAAW,QAAS,CAAAH,OAAC;;AAAE,gBAAAS,MAAAT,GAAE,eAAF,gBAAAS,IAAA,KAAAT;AAAA,UAAmB,KAAK,OAAOG,EAAC,KAAG,KAAK,KAAI;AAAA,IAAE,SAAOA,IAAE;AAAC,YAAMH,KAAE,OAAG,KAAK,KAAI,GAAGG;AAAA,IAAC;AAAC,IAAAH,MAAG,KAAK,KAAKG,EAAC;AAAA,EAAC;AAAA,EAAC,WAAWH,IAAE;AAAA,EAAA;AAAA,EAAE,KAAKA,IAAE;;AAAC,eAAK,SAAL,mBAAW,QAAS,CAAAA,OAAC;;AAAE,cAAAS,MAAAT,GAAE,gBAAF,gBAAAS,IAAA,KAAAT;AAAA,QAAoB,KAAK,eAAa,KAAK,aAAW,MAAG,KAAK,aAAaA,EAAC,IAAG,KAAK,QAAQA,EAAC;AAAA,EAAC;AAAA,EAAC,OAAM;AAAC,SAAK,OAAK,oBAAI,OAAI,KAAK,kBAAgB;AAAA,EAAE;AAAA,EAAC,IAAI,iBAAgB;AAAC,WAAO,KAAK,kBAAmB;AAAA,EAAA;AAAA,EAAC,oBAAmB;AAAC,WAAO,KAAK;AAAA,EAAI;AAAA,EAAC,aAAaA,IAAE;AAAC,WAAM;AAAA,EAAE;AAAA,EAAC,OAAOA,IAAE;AAAC,SAAK,SAAL,KAAK,OAAO,KAAK,KAAK,QAAS,CAAAA,OAAG,KAAK,KAAKA,IAAE,KAAKA,EAAC,CAAC,CAAG,IAAC,KAAK,KAAI;AAAA,EAAE;AAAA,EAAC,QAAQA,IAAE;AAAA,EAAE;AAAA,EAAA,aAAaA,IAAE;AAAA,EAAA;AAAE;AAAC,EAAE,gBAAc,CAAA,GAAG,EAAE,oBAAkB,EAAC,MAAK,OAAM,GAAE,EAAE,EAAE,mBAAmB,CAAC,IAAE,oBAAI,OAAI,EAAE,EAAE,WAAW,CAAC,IAAE,oBAAI,OAAI,uBAAI,EAAC,iBAAgB,EAAC,KAAI,EAAE,4BAAF,EAAE,0BAA0B,CAAE,IAAE,KAAK,OAAO;ACJ7xL;AAAA;AAAA;AAAA;AAAA;AAIG,MAAM,IAAE,EAAC,WAAU,MAAG,MAAK,QAAO,WAAUA,GAAE,SAAQ,OAAG,YAAWC,EAAC,GAAEG,MAAE,CAACJ,KAAE,GAAEC,IAAEG,OAAI;AAAC,QAAK,EAAC,MAAKC,IAAE,UAASE,GAAC,IAAEH;AAAE,MAAID,KAAE,WAAW,oBAAoB,IAAII,EAAC;AAAE,MAAG,WAASJ,MAAG,WAAW,oBAAoB,IAAII,IAAEJ,KAAE,oBAAI,KAAG,GAAE,aAAWE,QAAKL,KAAE,OAAO,OAAOA,EAAC,GAAG,UAAQ,OAAIG,GAAE,IAAIC,GAAE,MAAKJ,EAAC,GAAE,eAAaK,IAAE;AAAC,UAAK,EAAC,MAAKH,GAAC,IAAEE;AAAE,WAAM,EAAC,IAAIA,IAAE;AAAC,YAAMC,KAAEJ,GAAE,IAAI,KAAK,IAAI;AAAE,MAAAA,GAAE,IAAI,KAAK,MAAKG,EAAC,GAAE,KAAK,cAAcF,IAAEG,IAAEL,EAAC;AAAA,IAAC,GAAE,KAAKC,IAAE;AAAC,aAAO,WAASA,MAAG,KAAK,EAAEC,IAAE,QAAOF,IAAEC,EAAC,GAAEA;AAAA,IAAC,EAAC;AAAA,EAAC;AAAC,MAAG,aAAWI,IAAE;AAAC,UAAK,EAAC,MAAKH,GAAC,IAAEE;AAAE,WAAO,SAASA,IAAE;AAAC,YAAMC,KAAE,KAAKH,EAAC;AAAE,MAAAD,GAAE,KAAK,MAAKG,EAAC,GAAE,KAAK,cAAcF,IAAEG,IAAEL,EAAC;AAAA,IAAC;AAAA,EAAC;AAAC,QAAM,MAAM,qCAAmCK,EAAC;AAAC;AAAE,SAASA,GAAEL,IAAE;AAAC,SAAM,CAACC,IAAEC,OAAI,YAAU,OAAOA,KAAEE,IAAEJ,IAAEC,IAAEC,EAAC,KAAG,CAACF,IAAEC,IAAEC,OAAI;AAAC,UAAME,KAAEH,GAAE,eAAeC,EAAC;AAAE,WAAOD,GAAE,YAAY,eAAeC,IAAEF,EAAC,GAAEI,KAAE,OAAO,yBAAyBH,IAAEC,EAAC,IAAE;AAAA,EAAM,GAAGF,IAAEC,IAAEC,EAAC;AAAC;ACJryB;AAAA;AAAA;AAAA;AAAA;AAIG,SAAS,EAAEE,IAAE;AAAC,SAAOJ,GAAE,EAAC,GAAGI,IAAE,OAAM,MAAG,WAAU,MAAE,CAAC;AAAC;ACHhD,MAAM,cAAc;AAAA;AAAA;AAAA;AAAA,EAIzB,OAAO,cACL,SACA,WACA,UACA,OACA,WACA,QAA0B,IACP;AACnB,UAAM,SAA4B,CAAA;AAElC,eAAW,QAAQ,OAAO;AAClB,YAAA,QAAQ,KAAK,aAAa,SAAS,WAAW,UAAU,OAAO,WAAW,IAAI;AACpF,UAAI,OAAO;AACT,eAAO,KAAK,KAAK;AAAA,MACnB;AAAA,IACF;AAEO,WAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,OAAe,aACb,SACA,WACA,UACA,OACA,YACA,MACwB;AACxB,UAAM,UAAU,UAAU,QAAQ,UAAU,UAAa,UAAU;AAEnE,YAAQ,KAAK,MAAM;AAAA,MACjB,KAAK;AACH,YAAI,SAAS;AACX,iBAAO,KAAK,YAAY,SAAS,WAAW,UAAU,IAAI;AAAA,QAC5D;AACA;AAAA,MAEF,KAAK;AACH,YAAI,CAAC,WAAW,OAAO,UAAU,YAAY,QAAQ,KAAK,OAAO;AAC/D,iBAAO,KAAK,YAAY,SAAS,WAAW,UAAU,IAAI;AAAA,QAC5D;AACA;AAAA,MAEF,KAAK;AACH,YAAI,CAAC,WAAW,OAAO,UAAU,YAAY,QAAQ,KAAK,OAAO;AAC/D,iBAAO,KAAK,YAAY,SAAS,WAAW,UAAU,IAAI;AAAA,QAC5D;AACA;AAAA,MAEF,KAAK;AACC,YAAA,CAAC,WAAW,OAAO,UAAU,YAAY,MAAM,SAAS,KAAK,OAAO;AACtE,iBAAO,KAAK,YAAY,SAAS,WAAW,UAAU,IAAI;AAAA,QAC5D;AACA;AAAA,MAEF,KAAK;AACC,YAAA,CAAC,WAAW,OAAO,UAAU,YAAY,MAAM,SAAS,KAAK,OAAO;AACtE,iBAAO,KAAK,YAAY,SAAS,WAAW,UAAU,IAAI;AAAA,QAC5D;AACA;AAAA,MAEF,KAAK;AACH,YAAI,CAAC,WAAW,OAAO,UAAU,UAAU;AACzC,gBAAM,QAAQ,IAAI,OAAO,KAAK,KAAK;AACnC,cAAI,CAAC,MAAM,KAAK,KAAK,GAAG;AACtB,mBAAO,KAAK,YAAY,SAAS,WAAW,UAAU,IAAI;AAAA,UAC5D;AAAA,QACF;AACA;AAAA,MAEF,KAAK;AACH,YAAI,CAAC,WAAW,OAAO,UAAU,UAAU;AACzC,gBAAM,aAAa;AACnB,cAAI,CAAC,WAAW,KAAK,KAAK,GAAG;AAC3B,mBAAO,KAAK,YAAY,SAAS,WAAW,UAAU,IAAI;AAAA,UAC5D;AAAA,QACF;AACA;AAAA,MAEF,KAAK;AACH,YAAI,CAAC,WAAW,OAAO,UAAU,UAAU;AACrC,cAAA;AACF,gBAAI,IAAI,KAAK;AAAA,UAAA,QACP;AACN,mBAAO,KAAK,YAAY,SAAS,WAAW,UAAU,IAAI;AAAA,UAC5D;AAAA,QACF;AACA;AAAA,MAEF,KAAK;AAEH;AAAA,MAEF;AACE,gBAAQ,KAAK,iCAAiC,KAAK,IAAI,EAAE;AAAA,IAC7D;AAEO,WAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,OAAe,YACb,SACA,WACA,UACA,MACiB;AACV,WAAA;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA,SAAS,KAAK;AAAA,MACd,UAAU,KAAK,YAAY;AAAA,MAC3B;AAAA,IAAA;AAAA,EAEJ;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,iBAAiB,OAAY,WAAgF;AAClH,QAAI,UAAU,QAAQ,UAAU,UAAa,UAAU,IAAI;AACzD,aAAO,EAAE,OAAO,MAAM,gBAAgB,MAAM;AAAA,IAC9C;AAEA,YAAQ,WAAW;AAAA,MACjB,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK,cAAc;AACX,cAAA,WAAW,OAAO,KAAK;AACzB,YAAA,MAAM,QAAQ,GAAG;AACnB,iBAAO,EAAE,OAAO,OAAO,OAAO,wBAAwB;AAAA,QACxD;AACA,eAAO,EAAE,OAAO,MAAM,gBAAgB,SAAS;AAAA,MACjD;AAAA,MAEA,KAAK,QAAQ;AACL,cAAA,YAAY,IAAI,KAAK,KAAK;AAChC,YAAI,MAAM,UAAU,QAAQ,CAAC,GAAG;AAC9B,iBAAO,EAAE,OAAO,OAAO,OAAO,sBAAsB;AAAA,QACtD;AACO,eAAA,EAAE,OAAO,MAAM,gBAAgB,UAAU,YAAY,EAAE,MAAM,GAAG,EAAE,CAAC,EAAE;AAAA,MAC9E;AAAA,MAEA,KAAK,YAAY;AACT,cAAA,gBAAgB,IAAI,KAAK,KAAK;AACpC,YAAI,MAAM,cAAc,QAAQ,CAAC,GAAG;AAClC,iBAAO,EAAE,OAAO,OAAO,OAAO,0BAA0B;AAAA,QAC1D;AACA,eAAO,EAAE,OAAO,MAAM,gBAAgB,cAAc;MACtD;AAAA,MAEA,KAAK;AACC,YAAA,OAAO,UAAU,WAAW;AAC9B,iBAAO,EAAE,OAAO,MAAM,gBAAgB,MAAM;AAAA,QAC9C;AACI,YAAA,OAAO,UAAU,UAAU;AACvB,gBAAA,YAAY,MAAM;AACpB,cAAA,cAAc,UAAU,cAAc,KAAK;AAC7C,mBAAO,EAAE,OAAO,MAAM,gBAAgB,KAAK;AAAA,UAC7C;AACI,cAAA,cAAc,WAAW,cAAc,KAAK;AAC9C,mBAAO,EAAE,OAAO,MAAM,gBAAgB,MAAM;AAAA,UAC9C;AAAA,QACF;AACA,eAAO,EAAE,OAAO,OAAO,OAAO,yBAAyB;AAAA,MAEzD,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AACH,eAAO,EAAE,OAAO,MAAM,gBAAgB,OAAO,KAAK;MAEpD,KAAK;AAAA,MACL,KAAK;AACH,eAAO,EAAE,OAAO,MAAM,gBAAgB,MAAM;AAAA,MAE9C;AACE,eAAO,EAAE,OAAO,MAAM,gBAAgB,MAAM;AAAA,IAChD;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,YAAY,OAAY,WAAsB,SAAS,SAAiB;AACzE,QAAA,UAAU,QAAQ,UAAU;AAAkB,aAAA;AAElD,YAAQ,WAAW;AAAA,MACjB,KAAK;AACI,eAAA,IAAI,KAAK,aAAa,MAAM,EAAE,OAAO,OAAO,KAAK,CAAC;AAAA,MAE3D,KAAK;AACI,eAAA,IAAI,KAAK,aAAa,QAAQ;AAAA,UACnC,uBAAuB;AAAA,UACvB,uBAAuB;AAAA,QACxB,CAAA,EAAE,OAAO,OAAO,KAAK,CAAC;AAAA,MAEzB,KAAK;AACI,eAAA,IAAI,KAAK,aAAa,QAAQ;AAAA,UACnC,OAAO;AAAA,UACP,UAAU;AAAA;AAAA,QACX,CAAA,EAAE,OAAO,OAAO,KAAK,CAAC;AAAA,MAEzB,KAAK;AACI,eAAA,IAAI,KAAK,aAAa,QAAQ;AAAA,UACnC,OAAO;AAAA,UACP,uBAAuB;AAAA,QACxB,CAAA,EAAE,OAAO,OAAO,KAAK,IAAI,GAAG;AAAA,MAE/B,KAAK;AACH,eAAO,IAAI,KAAK,KAAK,EAAE,mBAAmB,MAAM;AAAA,MAElD,KAAK;AACH,eAAO,IAAI,KAAK,KAAK,EAAE,eAAe,MAAM;AAAA,MAE9C;AACE,eAAO,OAAO,KAAK;AAAA,IACvB;AAAA,EACF;AACF;ACtNO,MAAM,gBAAgB;AAAA;AAAA;AAAA;AAAA;AAAA,EAM3B,OAAO,gBACL,WACA,iBACA,eACgB;AAChB,QAAI,CAAC,UAAU,gBAAgB,UAAU,aAAa,WAAW,GAAG;AAC5D,YAAA,IAAI,MAAM,oCAAoC;AAAA,IACtD;AAGM,UAAA,mBAAmB,UAAU,aAAa,CAAC;AAEjD,UAAM,WAA0B,CAAA;AAGf,qBAAA,MAAM,QAAQ,CAAQ,SAAA;AACrC,YAAM,UAAU,KAAK,qBAAqB,MAAM,iBAAiB,aAAa;AAC9E,eAAS,KAAK,OAAO;AAAA,IAAA,CACtB;AAEM,WAAA;AAAA,MACL,QAAQ,aAAa,KAAK,IAAK,CAAA;AAAA,MAC/B,OAAO,eAAe,KAAK,kBAAkB,iBAAiB,UAAU,CAAC;AAAA,MACzE,aAAa;AAAA,MACb,SAAS;AAAA,MACT;AAAA,IAAA;AAAA,EAEJ;AAAA;AAAA;AAAA;AAAA,EAKA,OAAe,qBACb,MACA,iBACA,eACa;;AAEb,UAAM,QAAQ,KAAK,iBAAiB,KAAK,IAAI;AAE7C,UAAM,eAA8B,CAAA;AAGhC,SAAA,UAAK,yBAAL,mBAA2B,UAAU;AAClC,WAAA,qBAAqB,SAAS,QAAQ,CAAW,YAAA;AACpD,cAAM,cAAc,KAAK,iBAAiB,SAAS,GAAG,iBAAiB,aAAa;AACpF,YAAI,aAAa;AACf,uBAAa,KAAK,WAAW;AAAA,QAC/B;AAAA,MAAA,CACD;AAAA,IACH;AAEO,WAAA;AAAA,MACL,IAAI,KAAK;AAAA,MACT;AAAA,MACA,aAAa,eAAe,KAAK;AAAA,MACjC,UAAU;AAAA,MACV,UAAU;AAAA,IAAA;AAAA,EAEd;AAAA;AAAA;AAAA;AAAA,EAKA,OAAe,iBACb,SACA,OACA,iBACA,eACoB;AACpB,UAAM,QAAQ,KAAK,kBAAkB,QAAQ,MAAM;AAGnD,UAAM,SAAsB,CAAA;AACxB,QAAA,CAAC,QAAQ,iBAAiB;AAC5B,YAAM,QAAQ,KAAK,uBAAuB,SAAS,iBAAiB,aAAa;AACjF,UAAI,OAAO;AACT,eAAO,KAAK,KAAK;AAAA,MACnB;AAAA,IACF;AAGA,UAAM,WAA0B,CAAA;AAChC,QAAI,QAAQ,YAAY,QAAQ,SAAS,SAAS,GAAG;AAC3C,cAAA,SAAS,QAAQ,CAAS,UAAA;AAChC,cAAM,YAAY,KAAK,iBAAiB,OAAO,QAAQ,GAAG,iBAAiB,aAAa;AACxF,YAAI,WAAW;AACb,mBAAS,KAAK,SAAS;AAAA,QACzB;AAAA,MAAA,CACD;AAAA,IACH;AAEO,WAAA;AAAA,MACL,IAAI,QAAQ;AAAA,MACZ,MAAM,QAAQ;AAAA,MACd;AAAA,MACA,aAAa,GAAG,QAAQ,WAAW,KAAK,QAAQ,IAAI;AAAA,MACpD;AAAA,MACA;AAAA,MACA;AAAA,MACA,WAAW,QAAQ;AAAA;AAAA,IAAA;AAAA,EAEvB;AAAA;AAAA;AAAA;AAAA,EAKA,OAAe,uBACb,SACA,iBACA,eACkB;AAClB,UAAM,YAAY,KAAK,uBAAuB,QAAQ,IAAI;AAC1D,UAAM,QAAQ,KAAK,kBAAkB,QAAQ,MAAM;AAEnD,UAAM,QAAmB;AAAA,MACvB,IAAI,GAAG,QAAQ,EAAE;AAAA,MACjB,WAAW,QAAQ;AAAA,MACnB,UAAU;AAAA;AAAA,MACV,MAAM;AAAA,MACN;AAAA,MACA,aAAa,SAAS,MAAM,YAAa,CAAA;AAAA,MACzC,UAAU;AAAA;AAAA,MACV,UAAU,QAAQ;AAAA,MAClB,cAAc;AAAA,IAAA;AAIhB,QAAI,QAAQ,eAAe,cAAc,QAAQ,eAAe,WAAW;AACzE,YAAM,kBAAkB,mBAAmB;AAC3C,YAAM,gBAAgB,iBAAiB;AAAA,IACzC;AAEO,WAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,OAAe,uBAAuB,UAA6B;AACjE,UAAM,UAAqC;AAAA,MACzC,wBAAwB;AAAA,MACxB,0BAA0B;AAAA,MAC1B,yBAAyB;AAAA,MACzB,yBAAyB;AAAA,MACzB,yBAAyB;AAAA,MACzB,sBAAsB;AAAA,MACtB,yBAAyB;AAAA,MACzB,4BAA4B;AAAA,MAC5B,0DAA0D;AAAA,IAAA;AAGrD,WAAA,QAAQ,QAAQ,KAAK;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA,EAKA,OAAe,kBAAkB,QAA6B;AACxD,QAAA,CAAC,UAAU,OAAO,WAAW;AAAU,aAAA;AAG3C,UAAM,YAAY,OAAO,KAAK,CAAAM,OAAKA,GAAE,cAAc;AAC/C,QAAA;AAAW,aAAO,UAAU;AAGhC,UAAM,WAAW,OAAO,KAAK,CAAKA,OAAAA,GAAE,SAAS,qCAAqC;AAC9E,QAAA;AAAU,aAAO,SAAS;AAG9B,UAAM,QAAQ,OAAO,KAAK,CAAKA,OAAAA,GAAE,SAAS,0CAA0C;AAChF,QAAA;AAAO,aAAO,MAAM;AAGjB,WAAA,OAAO,CAAC,EAAE;AAAA,EACnB;AAAA;AAAA;AAAA;AAAA,EAKA,OAAe,kBAAkB,YAA4B;AACvD,QAAA;AACI,YAAA,MAAM,IAAI,IAAI,UAAU;AAC9B,YAAM,YAAY,IAAI,SAAS,MAAM,GAAG;AACxC,YAAM,WAAW,UAAU,UAAU,SAAS,CAAC;AACxC,aAAA,SAAS,QAAQ,QAAQ,EAAE,EAAE,QAAQ,iBAAiB,GAAG,EAAE,KAAA,KAAU;AAAA,IAAA,QACtE;AACC,aAAA;AAAA,IACT;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,OAAe,iBAAiB,MAAsB;AAE9C,UAAA,QAAQ,KAAK,MAAM,oBAAoB;AAC7C,WAAO,QAAQ,MAAM,CAAC,EAAE,SAAS;AAAA,EACnC;AAAA;AAAA;AAAA;AAAA,EAKA,OAAe,iBAAiB,MAAsB;AAC9C,UAAA,QAAQ,KAAK,MAAM,cAAc;AACvC,WAAO,QAAQ,SAAS,MAAM,CAAC,GAAG,EAAE,IAAI;AAAA,EAC1C;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,6BAA4D;AAGjE,WAAO,CAAC;AAAA,MACN,IAAI;AAAA,MACJ,OAAO;AAAA,MACP,MAAM;AAAA,IAAA,CACP;AAAA,EACH;AACF;;;;;;;;;;;;AC/Oa,IAAA,mBAAN,cAA+B,WAAW;AAAA,EAA1C,cAAA;AAAA,UAAA,GAAA,SAAA;AAIoB,SAAA,QAAA;AACe,SAAA,WAAA;AACH,SAAA,SAAA;AAE5B,SAAQ,UAA6B;AACrC,SAAQ,WAAW;AAAA,EAAA;AAAA,EAyGlB,WAAW,mBAAmC;AACtD,QAAI,kBAAkB,IAAI,OAAO,KAAK,kBAAkB,IAAI,OAAO,GAAG;AACpE,WAAK,eAAe;AAAA,IACtB;AAAA,EACF;AAAA,EAEQ,iBAAiB;;AACnB,SAAA,UAAK,UAAL,mBAAY,YAAY;AAC1B,WAAK,UAAU,cAAc;AAAA,QAC3B,KAAK,MAAM;AAAA,QACX,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK,MAAM;AAAA,QACX,KAAK,MAAM;AAAA,MAAA;AAAA,IAEf;AAAA,EACF;AAAA,EAEQ,aAAa,OAAc;AACjC,UAAM,SAAS,MAAM;AACrB,QAAI,QAAa,OAAO;AAGxB,QAAI,KAAK,MAAM,SAAS,YAAY,KAAK,MAAM,SAAS,WAAW;AACjE,cAAQ,UAAU,KAAK,OAAO,OAAO,KAAK;AAAA,IACjC,WAAA,KAAK,MAAM,SAAS,WAAW;AACxC,cAAS,OAA4B;AAAA,IACvC;AAEA,SAAK,QAAQ;AACb,SAAK,WAAW;AAEX,SAAA,cAAc,IAAI,YAAY,gBAAgB;AAAA,MACjD,QAAQ;AAAA,QACN,SAAS,KAAK,MAAM;AAAA,QACpB,WAAW,KAAK;AAAA,QAChB,UAAU,KAAK;AAAA,QACf;AAAA,QACA,UAAU,KAAK;AAAA,MACjB;AAAA,MACA,SAAS;AAAA,IACV,CAAA,CAAC;AAAA,EACJ;AAAA,EAEQ,eAAe;AAChB,SAAA,cAAc,IAAI,YAAY,eAAe;AAAA,MAChD,QAAQ;AAAA,QACN,SAAS,KAAK,MAAM;AAAA,QACpB,WAAW,KAAK;AAAA,QAChB,UAAU,KAAK;AAAA,MACjB;AAAA,MACA,SAAS;AAAA,IACV,CAAA,CAAC;AAAA,EACJ;AAAA,EAEQ,cAAc;AACpB,SAAK,WAAW;AACX,SAAA,cAAc,IAAI,YAAY,cAAc;AAAA,MAC/C,QAAQ;AAAA,QACN,SAAS,KAAK,MAAM;AAAA,QACpB,WAAW,KAAK;AAAA,QAChB,UAAU,KAAK;AAAA,MACjB;AAAA,MACA,SAAS;AAAA,IACV,CAAA,CAAC;AAAA,EACJ;AAAA,EAEQ,eAAe;;AACrB,UAAM,YAAY,KAAK,QAAQ,KAAK,CAAKT,OAAAA,GAAE,aAAa,OAAO;AAC/D,UAAM,cAAc,KAAK,QAAQ,KAAK,CAAKA,OAAAA,GAAE,aAAa,SAAS;AACnE,UAAM,WAAW,eAAe,YAAY,UAAU,cAAc,YAAY,EAAE;AAE1E,YAAA,KAAK,MAAM,MAAM;AAAA,MACvB,KAAK;AACI,eAAA;AAAA;AAAA,qBAEM,QAAQ;AAAA,sBACP,KAAK,SAAS,EAAE;AAAA,yBACb,KAAK,YAAY,KAAK,MAAM,QAAQ;AAAA,2BAClC,KAAK,MAAM,eAAe,EAAE;AAAA,sBACjC,KAAK,YAAY;AAAA,sBACjB,KAAK,YAAY;AAAA,qBAClB,KAAK,WAAW;AAAA;AAAA;AAAA,MAI/B,KAAK;AACI,eAAA;AAAA;AAAA,qBAEM,QAAQ;AAAA,sBACP,KAAK,SAAS,EAAE;AAAA,yBACb,KAAK,YAAY,KAAK,MAAM,QAAQ;AAAA,uBACtC,KAAK,YAAY;AAAA,sBAClB,KAAK,YAAY;AAAA,qBAClB,KAAK,WAAW;AAAA;AAAA;AAAA,eAGvB,UAAK,MAAM,YAAX,mBAAoB,IAAI,CAAU,WAAA;AAAA;AAAA,yBAEvB,OAAO,KAAK;AAAA,6BACR,OAAO,QAAQ;AAAA,6BACf,KAAK,UAAU,OAAO,KAAK;AAAA;AAAA,kBAEtC,OAAO,KAAK;AAAA;AAAA,cAEhB;AAAA;AAAA;AAAA,MAIR,KAAK;AACI,eAAA;AAAA;AAAA;AAAA;AAAA;AAAA,0BAKW,QAAQ,KAAK,KAAK,CAAC;AAAA,2BAClB,KAAK,YAAY,KAAK,MAAM,QAAQ;AAAA,yBACtC,KAAK,YAAY;AAAA,wBAClB,KAAK,YAAY;AAAA,uBAClB,KAAK,WAAW;AAAA;AAAA,oBAEnB,KAAK,MAAM,KAAK;AAAA;AAAA;AAAA,MAI9B;AACS,eAAA;AAAA;AAAA,oBAEK,KAAK,eAAe;AAAA,qBACnB,QAAQ;AAAA,sBACP,KAAK,SAAS,EAAE;AAAA,yBACb,KAAK,YAAY,KAAK,MAAM,QAAQ;AAAA,2BAClC,KAAK,MAAM,eAAe,EAAE;AAAA,sBACjC,KAAK,YAAY;AAAA,sBACjB,KAAK,YAAY;AAAA,qBAClB,KAAK,WAAW;AAAA;AAAA;AAAA,IAGjC;AAAA,EACF;AAAA,EAEQ,gBAAwB;AACtB,YAAA,KAAK,MAAM,MAAM;AAAA,MACvB,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AACI,eAAA;AAAA,MACT,KAAK;AACI,eAAA;AAAA,MACT,KAAK;AACI,eAAA;AAAA,MACT,KAAK;AACI,eAAA;AAAA,MACT,KAAK;AACI,eAAA;AAAA,MACT,KAAK;AACI,eAAA;AAAA,MACT;AACS,eAAA;AAAA,IACX;AAAA,EACF;AAAA,EAEA,SAAS;AACD,UAAA,YAAY,KAAK,MAAM,SAAS;AAE/B,WAAA;AAAA;AAAA,UAED,YAAY;AAAA,sCACgB,KAAK,MAAM,WAAW,aAAa,EAAE;AAAA,cAC7D,KAAK,MAAM,KAAK;AAAA;AAAA,YAElB,EAAE;AAAA;AAAA,UAEJ,KAAK,cAAc;AAAA;AAAA,UAEnB,KAAK,QAAQ,SAAS,KAAK,KAAK,WAAW;AAAA;AAAA,cAEvC,KAAK,QAAQ,IAAI,CAAS,UAAA;AAAA,yCACC,MAAM,QAAQ;AAAA,kBACrC,MAAM,OAAO;AAAA;AAAA,aAElB,CAAC;AAAA;AAAA,YAEF,EAAE;AAAA;AAAA;AAAA,EAGZ;AACF;AA/Sa,iBAWJ,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAVYU,kBAAA;AAAA,EAA3BC,GAAS,EAAE,MAAM,QAAQ;AAAA,GADf,iBACiB,WAAA,SAAA,CAAA;AACAD,kBAAA;AAAA,EAA3BC,GAAS,EAAE,MAAM,QAAQ;AAAA,GAFf,iBAEiB,WAAA,aAAA,CAAA;AACAD,kBAAA;AAAA,EAA3BC,GAAS,EAAE,MAAM,QAAQ;AAAA,GAHf,iBAGiB,WAAA,YAAA,CAAA;AAChBD,kBAAA;AAAA,EAAXC,GAAS;AAAA,GAJC,iBAIC,WAAA,SAAA,CAAA;AACiBD,kBAAA;AAAA,EAA5BC,GAAS,EAAE,MAAM,SAAS;AAAA,GALhB,iBAKkB,WAAA,YAAA,CAAA;AACDD,kBAAA;AAAA,EAA3BC,GAAS,EAAE,MAAM,QAAQ;AAAA,GANf,iBAMiB,WAAA,UAAA,CAAA;AAEXD,kBAAA;AAAA,EAAhBE,EAAM;AAAA,GARI,iBAQM,WAAA,WAAA,CAAA;AACAF,kBAAA;AAAA,EAAhBE,EAAM;AAAA,GATI,iBASM,WAAA,YAAA,CAAA;AATN,mBAANF,kBAAA;AAAA,EADNG,IAAc,oBAAoB;AAAA,GACtB,gBAAA;;;;;;;;;;;;ACAA,IAAA,qBAAN,cAAiC,WAAW;AAAA,EAA5C,cAAA;AAAA,UAAA,GAAA,SAAA;AAEsB,SAAA,UAAwB;AACvB,SAAA,WAAgC;AACpB,SAAA,WAAA;AACH,SAAA,SAAA;AAE5B,SAAQ,YAAY;AAAA,EAAA;AAAA,EAmG7B,oBAAoB;AAClB,UAAM,kBAAkB;AACnB,SAAA,YAAY,CAAC,KAAK,QAAQ;AAAA,EACjC;AAAA,EAEQ,kBAAkB;AACnB,SAAA,YAAY,CAAC,KAAK;AAElB,SAAA,cAAc,IAAI,YAAY,kBAAkB;AAAA,MACnD,QAAQ;AAAA,QACN,WAAW,KAAK,QAAQ;AAAA,QACxB,UAAU,KAAK;AAAA,MACjB;AAAA,MACA,SAAS;AAAA,IACV,CAAA,CAAC;AAAA,EACJ;AAAA,EAEQ,mBAAmB,UAAyC;AAClE,WAAO,KAAK,QAAQ,OAAO,KAAK,CAAS,UAAA,MAAM,aAAa,QAAQ;AAAA,EACtE;AAAA,EAEQ,eAAe,OAAuB;;AAC5C,YAAO,UAAK,SAAS,KAAK,QAAQ,EAAE,MAA7B,mBAAiC,MAAM;AAAA,EAChD;AAAA,EAEQ,mBAAmB,OAAoB;AAC7C,UAAM,gBAAgB;AAEjB,SAAA,cAAc,IAAI,YAAY,gBAAgB;AAAA,MACjD,QAAQ,MAAM;AAAA,MACd,SAAS;AAAA,IACV,CAAA,CAAC;AAAA,EACJ;AAAA,EAEA,SAAS;AACP,UAAM,cAAc,KAAK,QAAQ,YAAY,KAAK,QAAQ,SAAS,SAAS;AACtE,UAAA,QAAQ,KAAK,QAAQ,SAAS;AAE7B,WAAA;AAAA,iDACsC,KAAK;AAAA;AAAA,8CAER,KAAK,eAAe;AAAA;AAAA,uCAE3B,cAAe,KAAK,YAAY,aAAa,KAAM,aAAa;AAAA,cACzF,cAAc,MAAM,EAAE;AAAA;AAAA;AAAA,cAGtB,KAAK,QAAQ,KAAK;AAAA,cAClB,KAAK,QAAQ,cAAc;AAAA,kDACS,KAAK,QAAQ,WAAW;AAAA,gBAC1D,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA,UAKR,KAAK,QAAQ,IAAI,CAAU,WAAA;AAC3B,YAAM,QAAQ,KAAK,mBAAmB,OAAO,EAAE;AAExC,aAAA;AAAA,qCACoB,CAAC,QAAQ,UAAU,EAAE;AAAA,gBAC1C,QAAQ;AAAA;AAAA,4BAEI,KAAK;AAAA,gCACD,KAAK,QAAQ,EAAE;AAAA,+BAChB,OAAO,EAAE;AAAA,4BACZ,KAAK,eAAe,KAAK,CAAC;AAAA,+BACvB,KAAK,QAAQ;AAAA,6BACf,KAAK,MAAM;AAAA,mCACL,KAAK,kBAAkB;AAAA;AAAA,kBAExC,EAAE;AAAA;AAAA;AAAA,IAAA,CAGX,CAAC;AAAA;AAAA;AAAA;AAAA,QAIF,cAAc;AAAA,+BACS,CAAC,KAAK,YAAY,cAAc,EAAE;AAAA,YACrD,KAAK,QAAQ,SAAU,IAAI,CAAS,UAAA;AAAA;AAAA,0BAEtB,KAAK;AAAA,0BACL,KAAK,OAAO;AAAA,2BACX,KAAK,QAAQ;AAAA,2BACb,KAAK,QAAQ;AAAA,yBACf,KAAK,MAAM;AAAA,+BACL,KAAK,kBAAkB;AAAA,iCACrB,CAACb,OAAmB;AACrC,MAAAA,GAAE,gBAAgB;AACb,WAAA,cAAc,IAAI,YAAY,kBAAkB,EAAE,QAAQA,GAAE,QAAQ,SAAS,KAAK,CAAC,CAAC;AAAA,IAAA,CAC1F;AAAA;AAAA,WAEJ,CAAC;AAAA;AAAA,UAEF,EAAE;AAAA;AAAA,EAEV;AACF;AA3Ma,mBASJ,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AARYU,kBAAA;AAAA,EAA3BC,GAAS,EAAE,MAAM,QAAQ;AAAA,GADf,mBACiB,WAAA,WAAA,CAAA;AACDD,kBAAA;AAAA,EAA1BC,GAAS,EAAE,MAAM,OAAO;AAAA,GAFd,mBAEgB,WAAA,WAAA,CAAA;AACCD,kBAAA;AAAA,EAA3BC,GAAS,EAAE,MAAM,QAAQ;AAAA,GAHf,mBAGiB,WAAA,YAAA,CAAA;AACCD,kBAAA;AAAA,EAA5BC,GAAS,EAAE,MAAM,SAAS;AAAA,GAJhB,mBAIkB,WAAA,YAAA,CAAA;AACDD,kBAAA;AAAA,EAA3BC,GAAS,EAAE,MAAM,QAAQ;AAAA,GALf,mBAKiB,WAAA,UAAA,CAAA;AAEXD,kBAAA;AAAA,EAAhBE,EAAM;AAAA,GAPI,mBAOM,WAAA,aAAA,CAAA;AAPN,qBAANF,kBAAA;AAAA,EADNG,IAAc,sBAAsB;AAAA,GACxB,kBAAA;;;;;;;;;;;;ACAA,IAAA,qBAAN,cAAiC,WAAW;AAAA,EAA5C,cAAA;AAAA,UAAA,GAAA,SAAA;AAEsB,SAAA,UAAwB;AACvB,SAAA,WAAgC;AACpB,SAAA,WAAA;AACG,SAAA,cAAA;AACN,SAAA,SAAA;AAE5B,SAAQ,YAAY;AAAA,EAAA;AAAA,EAmJ7B,oBAAoB;AAClB,UAAM,kBAAkB;AACnB,SAAA,YAAY,KAAK,QAAQ,aAAa;AAAA,EAC7C;AAAA,EAEQ,kBAAkB;AACxB,QAAI,CAAC,KAAK;AAAa;AAElB,SAAA,YAAY,CAAC,KAAK;AAElB,SAAA,cAAc,IAAI,YAAY,kBAAkB;AAAA,MACnD,QAAQ;AAAA,QACN,WAAW,KAAK,QAAQ;AAAA,QACxB,UAAU,KAAK;AAAA,MACjB;AAAA,MACA,SAAS;AAAA,IACV,CAAA,CAAC;AAAA,EACJ;AAAA,EAEQ,oBAAoB,UAAkB;AACvC,SAAA,cAAc,IAAI,YAAY,iBAAiB;AAAA,MAClD,QAAQ,EAAE,SAAS;AAAA,MACnB,SAAS;AAAA,IACV,CAAA,CAAC;AAAA,EACJ;AAAA,EAEQ,mBAAmB,OAAoB;AAC7C,UAAM,gBAAgB;AACjB,SAAA,cAAc,IAAI,YAAY,gBAAgB;AAAA,MACjD,QAAQ,MAAM;AAAA,MACd,SAAS;AAAA,IACV,CAAA,CAAC;AAAA,EACJ;AAAA,EAEQ,qBAAqB,OAAoB;AAC/C,UAAM,gBAAgB;AACjB,SAAA,cAAc,IAAI,YAAY,kBAAkB;AAAA,MACnD,QAAQ,MAAM;AAAA,MACd,SAAS;AAAA,IACV,CAAA,CAAC;AAAA,EACJ;AAAA,EAEA,SAAS;AACH,QAAA,CAAC,KAAK,QAAQ,YAAY,KAAK,QAAQ,SAAS,WAAW,GAAG;AACzD,aAAA;AAAA,qCACwB,CAAC,KAAK,cAAc,oBAAoB,EAAE;AAAA,uBACxD,KAAK,eAAe;AAAA;AAAA,wCAEH,KAAK,QAAQ,KAAK;AAAA,cAC5C,KAAK,QAAQ,cAAc;AAAA,+CACM,KAAK,QAAQ,WAAW;AAAA,gBACvD,EAAE;AAAA;AAAA,uCAEqB,KAAK,cAAe,KAAK,YAAY,aAAa,KAAM,QAAQ;AAAA,cACzF,KAAK,cAAc,MAAM,EAAE;AAAA;AAAA;AAAA;AAAA,sCAIH,CAAC,KAAK,YAAY,cAAc,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMpE;AAEO,WAAA;AAAA,mCACwB,CAAC,KAAK,cAAc,oBAAoB,EAAE;AAAA,qBACxD,KAAK,eAAe;AAAA;AAAA,sCAEH,KAAK,QAAQ,KAAK;AAAA,YAC5C,KAAK,QAAQ,cAAc;AAAA,6CACM,KAAK,QAAQ,WAAW;AAAA,cACvD,EAAE;AAAA;AAAA,qCAEqB,KAAK,cAAe,KAAK,YAAY,aAAa,KAAM,QAAQ;AAAA,YACzF,KAAK,cAAc,MAAM,EAAE;AAAA;AAAA;AAAA;AAAA,oCAIH,CAAC,KAAK,YAAY,cAAc,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAMpD,KAAK,QAAQ,IAAI,CAAU,WAAA;AAAA,2CACF,OAAO,YAAY,cAAc,EAAE;AAAA,sBACxD,OAAO,KAAK;AAAA,sBACZ,OAAO,cAAc,sGAAsG,OAAO,WAAW,WAAW,EAAE;AAAA,sBAC1J,OAAO,YAAY;AAAA;AAAA;AAAA,kCAGP,CAACb,OAAa;AACtB,MAAAA,GAAE,gBAAgB;AACb,WAAA,oBAAoB,OAAO,EAAE;AAAA,IAAA,CACnC;AAAA;AAAA;AAAA,wBAGD,EAAE;AAAA;AAAA,iBAET,CAAC;AAAA;AAAA;AAAA;AAAA,gBAIF,KAAK,QAAQ,SAAS,IAAI,CAAW,YAAA;AAAA;AAAA,8BAEvB,OAAO;AAAA,8BACP,KAAK,OAAO;AAAA,+BACX,KAAK,QAAQ;AAAA,+BACb,KAAK,QAAQ;AAAA,6BACf,KAAK,MAAM;AAAA,mCACL,KAAK,kBAAkB;AAAA,qCACrB,KAAK,oBAAoB;AAAA;AAAA,eAE/C,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMd;AACF;AArRa,mBAUJ,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AATYU,kBAAA;AAAA,EAA3BC,GAAS,EAAE,MAAM,QAAQ;AAAA,GADf,mBACiB,WAAA,WAAA,CAAA;AACDD,kBAAA;AAAA,EAA1BC,GAAS,EAAE,MAAM,OAAO;AAAA,GAFd,mBAEgB,WAAA,WAAA,CAAA;AACCD,kBAAA;AAAA,EAA3BC,GAAS,EAAE,MAAM,QAAQ;AAAA,GAHf,mBAGiB,WAAA,YAAA,CAAA;AACCD,kBAAA;AAAA,EAA5BC,GAAS,EAAE,MAAM,SAAS;AAAA,GAJhB,mBAIkB,WAAA,YAAA,CAAA;AACAD,kBAAA;AAAA,EAA5BC,GAAS,EAAE,MAAM,SAAS;AAAA,GALhB,mBAKkB,WAAA,eAAA,CAAA;AACDD,kBAAA;AAAA,EAA3BC,GAAS,EAAE,MAAM,QAAQ;AAAA,GANf,mBAMiB,WAAA,UAAA,CAAA;AAEXD,kBAAA;AAAA,EAAhBE,EAAM;AAAA,GARI,mBAQM,WAAA,aAAA,CAAA;AARN,qBAANF,kBAAA;AAAA,EADNG,IAAc,sBAAsB;AAAA,GACxB,kBAAA;;;;;;;;;;;;ACUA,IAAA,qBAAN,cAAiC,WAAW;AAAA,EAA5C,cAAA;AAAA,UAAA,GAAA,SAAA;AAGuB,SAAA,SAA0B;AAC1B,SAAA,cAAwB;AACZ,SAAA,WAAA;AACA,SAAA,WAAA;AACM,SAAA,kBAAA;AACF,SAAA,gBAAA;AAEnC,SAAQ,YAAsB;AAC9B,SAAQ,WAAyB;AACjC,SAAQ,UAA6B;AAC7B,SAAA,+BAAe;AACvB,SAAQ,SAAS;AACjB,SAAQ,SAAS;AACjB,SAAQ,aAAa;AAAA,EAAA;AAAA,EA0J9B,oBAAoB;AAClB,UAAM,kBAAkB;AACxB,SAAK,gBAAgB;AAAA,EACvB;AAAA,EAEA,QAAQ,mBAAqC;AAC3C,QAAI,kBAAkB,IAAI,WAAW,KAAK,kBAAkB,IAAI,QAAQ,GAAG;AACzE,WAAK,gBAAgB;AAAA,IACvB;AAAA,EACF;AAAA,EAEQ,kBAAkB;;AAExB,QAAI,KAAK,WAAW;AACd,UAAA;AACM,gBAAA,IAAI,yCAAyC,KAAK,SAAS;AACnE,gBAAQ,IAAI,0BAA0B,KAAK,iBAAiB,MAAM,KAAK,aAAa;AACpF,aAAK,iBAAiB,gBAAgB;AAAA,UACpC,KAAK;AAAA,UACL,KAAK;AAAA,UACL,KAAK;AAAA,QAAA;AAEP,gBAAQ,IAAI,qCAAqC,KAAK,eAAe,SAAS,MAAM;AAGpF,aAAK,WAAW;AAAA,UACd;AAAA,YACE,IAAI;AAAA,YACJ,OAAO;AAAA,YACP,aAAa;AAAA,YACb,MAAM;AAAA,YACN,OAAO;AAAA,YACP,WAAW;AAAA,UACb;AAAA,QAAA;AAAA,eAEK,OAAO;AACN,gBAAA,MAAM,0CAA0C,KAAK;AACxD,aAAA,iBAAiB,KAAK;AACtB,aAAA,WAAW,KAAK;MACvB;AAAA,IAAA,WACS,KAAK,QAAQ;AACtB,WAAK,iBAAiB,KAAK;AACtB,WAAA,WAAW,KAAK;IAAmB,OACnC;AACA,WAAA,iBAAiB,KAAK;AACtB,WAAA,WAAW,KAAK;IACvB;AAGA,SAAK,YAAY,EAAE,GAAG,KAAK,YAAY;AACnC,SAAA,UAAK,cAAL,mBAAgB,aAAa;AAC1B,WAAA,YAAY,EAAE,GAAG,KAAK,WAAW,GAAG,KAAK,UAAU;IAC1D;AAGA,SAAK,cAAc;AAAA,EACrB;AAAA,EAEQ,oBAAoC;AACnC,WAAA;AAAA,MACL,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,aAAa;AAAA,MACb,UAAU,CAAC;AAAA,IAAA;AAAA,EAEf;AAAA,EAEQ,qBAAmC;AAClC,WAAA;AAAA,MACL;AAAA,QACE,IAAI;AAAA,QACJ,OAAO;AAAA,QACP,aAAa;AAAA,QACb,MAAM;AAAA,QACN,OAAO;AAAA,QACP,WAAW;AAAA,MACb;AAAA,IAAA;AAAA,EAEJ;AAAA,EAEQ,gBAAgB;;AACtB,UAAM,SAA4B,CAAA;AAGlC,UAAM,SAAS,KAAK;AACpB,QAAI,CAAC;AAAQ;AAGF,eAAA,WAAW,OAAO,UAAU;AAC1B,iBAAA,WAAW,QAAQ,UAAU;AAC3B,mBAAA,SAAS,QAAQ,QAAQ;AAClC,gBAAM,SAAQ,UAAK,UAAU,QAAQ,EAAE,MAAzB,mBAA6B,MAAM;AACjD,gBAAM,cAAc,cAAc;AAAA,YAChC,MAAM;AAAA,YACN,QAAQ;AAAA,YACR,MAAM;AAAA,YACN;AAAA,YACA,MAAM;AAAA,YACN,MAAM,cAAc,CAAC;AAAA,UAAA;AAEhB,iBAAA,KAAK,GAAG,WAAW;AAAA,QAC5B;AAAA,MACF;AAAA,IACF;AAEA,SAAK,UAAU;AACV,SAAA,SAAS,OAAO,OAAO,CAAAb,OAAKA,GAAE,aAAa,OAAO,EAAE,WAAW;AAAA,EACtE;AAAA,EAEQ,mBAAmB,OAAoB;AAC7C,UAAM,EAAE,SAAS,WAAW,UAAU,UAAU,MAAM;AAGtD,QAAI,CAAC,KAAK,UAAU,SAAS,GAAG;AACzB,WAAA,UAAU,SAAS,IAAI;IAC9B;AACA,UAAM,WAAW,KAAK,UAAU,SAAS,EAAE,QAAQ;AACnD,SAAK,UAAU,SAAS,EAAE,QAAQ,IAAI;AAGtC,SAAK,SAAS,IAAI,GAAG,SAAS,IAAI,QAAQ,EAAE;AAC5C,SAAK,SAAS;AAGd,SAAK,cAAc;AAGnB,SAAK,cAAc;AAGd,SAAA,cAAc,IAAI,YAAY,gBAAgB;AAAA,MACjD,QAAQ,EAAE,SAAS,WAAW,UAAU,OAAO,SAAS;AAAA,MACxD,SAAS;AAAA,IACV,CAAA,CAAC;AAAA,EACJ;AAAA,EAEQ,qBAAqB,OAAoB;AAC1C,SAAA,cAAc,IAAI,YAAY,kBAAkB;AAAA,MACnD,QAAQ,MAAM;AAAA,MACd,SAAS;AAAA,IACV,CAAA,CAAC;AAAA,EACJ;AAAA,EAEQ,qBAAqB,OAAoB;AAC1C,SAAA,cAAc,IAAI,YAAY,kBAAkB;AAAA,MACnD,QAAQ,MAAM;AAAA,MACd,SAAS;AAAA,IACV,CAAA,CAAC;AAAA,EACJ;AAAA,EAEQ,oBAAoB,OAAoB;AACxC,UAAA,EAAE,SAAS,IAAI,MAAM;AAG3B,SAAK,WAAW,KAAK,SAAS,OAAO,CAAO,QAAA,IAAI,OAAO,QAAQ;AAGpD,eAAA,aAAa,KAAK,WAAW;AACtC,UAAI,KAAK,UAAU,SAAS,EAAE,QAAQ,MAAM,QAAW;AACrD,eAAO,KAAK,UAAU,SAAS,EAAE,QAAQ;AAAA,MAC3C;AAAA,IACF;AAEA,SAAK,SAAS;AACd,SAAK,cAAc;AACnB,SAAK,cAAc;AAEd,SAAA,cAAc,IAAI,YAAY,iBAAiB;AAAA,MAClD,QAAQ,EAAE,SAAS;AAAA,MACnB,SAAS;AAAA,IACV,CAAA,CAAC;AAAA,EACJ;AAAA,EAEQ,aAAa;AAGnB,UAAM,cAAc,OAAO,KAAK,IAAA,CAAK;AACrC,UAAM,YAAwB;AAAA,MAC5B,IAAI;AAAA,MACJ,OAAO,aAAa,KAAK,SAAS,MAAM;AAAA,MACxC,aAAa;AAAA,MACb,MAAM;AAAA,MACN,OAAO,KAAK,SAAS;AAAA,MACrB,WAAW;AAAA,MACX,eAAe;AAAA,QACb,aAAa;AAAA,QACb,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,IAAA;AAGF,SAAK,WAAW,CAAC,GAAG,KAAK,UAAU,SAAS;AAC5C,SAAK,cAAc;AAEd,SAAA,cAAc,IAAI,YAAY,cAAc;AAAA,MAC/C,QAAQ,EAAE,QAAQ,UAAU;AAAA,MAC5B,SAAS;AAAA,IACV,CAAA,CAAC;AAAA,EACJ;AAAA,EAEQ,gBAAgB;AACtB,SAAK,aAAa;AAClB,SAAK,cAAc;AAEd,SAAA,cAAc,IAAI,YAAY,eAAe;AAAA,MAChD,QAAQ;AAAA,QACN,MAAM,KAAK;AAAA,QACX,OAAO,KAAK;AAAA,QACZ,QAAQ,KAAK;AAAA,MACf;AAAA,MACA,SAAS;AAAA,IACV,CAAA,CAAC;AAAA,EACJ;AAAA,EAEQ,eAAe;AACrB,SAAK,YAAY,EAAE,GAAG,KAAK,YAAY;AACvC,SAAK,SAAS;AACd,SAAK,SAAS;AACd,SAAK,aAAa;AAClB,SAAK,cAAc;AACnB,SAAK,cAAc;AAEd,SAAA,cAAc,IAAI,YAAY,cAAc;AAAA,MAC/C,QAAQ,CAAC;AAAA,MACT,SAAS;AAAA,IACV,CAAA,CAAC;AAAA,EACJ;AAAA,EAEQ,gBAA2B;AAC1B,WAAA;AAAA,MACL,MAAM,KAAK;AAAA,MACX,QAAQ,KAAK;AAAA,MACb,SAAS,KAAK;AAAA,MACd,OAAO,KAAK;AAAA,MACZ,OAAO,KAAK;AAAA,MACZ,WAAW,KAAK;AAAA,IAAA;AAAA,EAEpB;AAAA;AAAA,EAGO,UAAoB;AAClB,WAAA,EAAE,GAAG,KAAK;EACnB;AAAA,EAEO,QAAQ,MAAgB;AACxB,SAAA,YAAY,EAAE,GAAG;AACtB,SAAK,SAAS;AACd,SAAK,cAAc;AACnB,SAAK,cAAc;AAAA,EACrB;AAAA,EAEO,WAAoB;AACzB,SAAK,cAAc;AACnB,WAAO,KAAK;AAAA,EACd;AAAA,EAEO,QAAQ;AACb,SAAK,aAAa;AAAA,EACpB;AAAA,EAEO,WAAsB;AAC3B,WAAO,KAAK;EACd;AAAA,EAEA,SAAS;AACD,UAAA,aAAa,KAAK,QAAQ,OAAO,QAAKA,GAAE,aAAa,OAAO,EAAE;AAC9D,UAAA,SAAS,KAAK,UAAU;AAC9B,UAAM,wBAAwB,OAAO,0BAA0B,SAClC,aAAa,KACb,KAAK;AAElC,UAAM,SAAS,KAAK;AACpB,QAAI,CAAC,QAAQ;AACJ,aAAA;AAAA,IACT;AAEO,WAAA;AAAA;AAAA;AAAA;AAAA,mCAIwB,OAAO,KAAK;AAAA,YACnC,OAAO,cAAc;AAAA,0CACS,OAAO,WAAW;AAAA,cAC9C,EAAE;AAAA;AAAA;AAAA;AAAA,UAIN,OAAO,2BAA2B,QAAQ;AAAA;AAAA;AAAA;AAAA,wBAI5B,KAAK,UAAU;AAAA,2BACZ,KAAK,YAAY,KAAK,YAAa,OAAO,cAAc,KAAK,SAAS,UAAU,OAAO,UAAW;AAAA;AAAA;AAAA;AAAA;AAAA,YAKjH,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA,YAKF,wBAAwB;AAAA;AAAA;AAAA;AAAA,kBAIlB,KAAK,QACJ,OAAO,CAAAA,OAAKA,GAAE,aAAa,OAAO,EAClC,IAAI,CAAS,UAAA;AAAA,0DAC0B,MAAM,OAAO;AAAA,mBACpD,CAAC;AAAA;AAAA;AAAA,cAGN,EAAE;AAAA;AAAA;AAAA,YAGJ,OAAO,SAAS,IAAI,CAAW,YAAA;AAAA;AAAA,0BAEjB,OAAO;AAAA,0BACP,KAAK,QAAQ;AAAA,2BACZ,KAAK,SAAS;AAAA,2BACd,KAAK,YAAY,KAAK,QAAQ;AAAA,8BAC3B,OAAO,wBAAwB,KAAK;AAAA,yBACzC,OAAO,UAAU,OAAO;AAAA,+BAClB,KAAK,kBAAkB;AAAA,iCACrB,KAAK,oBAAoB;AAAA,iCACzB,KAAK,oBAAoB;AAAA,gCAC1B,KAAK,mBAAmB;AAAA;AAAA,WAE7C,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAOU,KAAK,aAAa;AAAA,yBACf,KAAK,YAAY,KAAK,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAOjC,KAAK,YAAY;AAAA,yBACd,KAAK,YAAY,CAAC,KAAK,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4BAM1B,UAAU;AAAA,8BACR,KAAK,SAAS,QAAQ,IAAI;AAAA,2BAC7B,KAAK,SAAS,QAAQ,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA,EAKnD;AACF;AAlhBa,mBAmBJ,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAlBY,gBAAA;AAAA,EAA3BW,GAAS,EAAE,MAAM,QAAQ;AAAA,GADf,mBACiB,WAAA,UAAA,CAAA;AACA,gBAAA;AAAA,EAA3BA,GAAS,EAAE,MAAM,QAAQ;AAAA,GAFf,mBAEiB,WAAA,aAAA,CAAA;AACA,gBAAA;AAAA,EAA3BA,GAAS,EAAE,MAAM,QAAQ;AAAA,GAHf,mBAGiB,WAAA,UAAA,CAAA;AACA,gBAAA;AAAA,EAA3BA,GAAS,EAAE,MAAM,QAAQ;AAAA,GAJf,mBAIiB,WAAA,eAAA,CAAA;AACC,gBAAA;AAAA,EAA5BA,GAAS,EAAE,MAAM,SAAS;AAAA,GALhB,mBAKkB,WAAA,YAAA,CAAA;AACA,gBAAA;AAAA,EAA5BA,GAAS,EAAE,MAAM,SAAS;AAAA,GANhB,mBAMkB,WAAA,YAAA,CAAA;AACD,gBAAA;AAAA,EAA3BA,GAAS,EAAE,MAAM,QAAQ;AAAA,GAPf,mBAOiB,WAAA,mBAAA,CAAA;AACA,gBAAA;AAAA,EAA3BA,GAAS,EAAE,MAAM,QAAQ;AAAA,GARf,mBAQiB,WAAA,iBAAA,CAAA;AAEX,gBAAA;AAAA,EAAhBC,EAAM;AAAA,GAVI,mBAUM,WAAA,aAAA,CAAA;AACA,gBAAA;AAAA,EAAhBA,EAAM;AAAA,GAXI,mBAWM,WAAA,YAAA,CAAA;AACA,gBAAA;AAAA,EAAhBA,EAAM;AAAA,GAZI,mBAYM,WAAA,WAAA,CAAA;AACA,gBAAA;AAAA,EAAhBA,EAAM;AAAA,GAbI,mBAaM,WAAA,YAAA,CAAA;AACA,gBAAA;AAAA,EAAhBA,EAAM;AAAA,GAdI,mBAcM,WAAA,UAAA,CAAA;AACA,gBAAA;AAAA,EAAhBA,EAAM;AAAA,GAfI,mBAeM,WAAA,UAAA,CAAA;AACA,gBAAA;AAAA,EAAhBA,EAAM;AAAA,GAhBI,mBAgBM,WAAA,cAAA,CAAA;AACA,gBAAA;AAAA,EAAhBA,EAAM;AAAA,GAjBI,mBAiBM,WAAA,kBAAA,CAAA;AAjBN,qBAAN,gBAAA;AAAA,EADNC,IAAc,sBAAsB;AAAA,GACxB,kBAAA;ACDN,MAAM,UAAU;","x_google_ignoreList":[0,1,2,3,4]}