jupiter-dynamic-forms 1.9.10 → 1.10.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
@@ -573,9 +573,9 @@ class XBRLFormBuilder {
573
573
  return a2.role.localeCompare(b2.role);
574
574
  });
575
575
  sortedRoles.forEach((role) => {
576
- const section = this.buildSectionFromRole(role, periodStartDate, periodEndDate, hypercubeData, language, periodPreferences);
577
- this.assignFieldColumnIds(section);
578
- sections.push(section);
576
+ const section2 = this.buildSectionFromRole(role, periodStartDate, periodEndDate, hypercubeData, language, periodPreferences);
577
+ this.assignFieldColumnIds(section2);
578
+ sections.push(section2);
579
579
  });
580
580
  return {
581
581
  formId: `xbrl-form-${Date.now()}`,
@@ -789,12 +789,12 @@ class XBRLFormBuilder {
789
789
  /**
790
790
  * Assign appropriate column IDs to fields based on section's generated columns
791
791
  */
792
- static assignFieldColumnIds(section) {
793
- if (!section.columns || section.columns.length === 0) {
792
+ static assignFieldColumnIds(section2) {
793
+ if (!section2.columns || section2.columns.length === 0) {
794
794
  return;
795
795
  }
796
- const columnIds = section.columns.map((col) => col.id);
797
- section.concepts.forEach((conceptTree) => {
796
+ const columnIds = section2.columns.map((col) => col.id);
797
+ section2.concepts.forEach((conceptTree) => {
798
798
  this.assignColumnIdsToConceptFields(conceptTree, columnIds);
799
799
  });
800
800
  }
@@ -961,52 +961,52 @@ class XBRLFormBuilder {
961
961
  const previousYearColumns = [];
962
962
  const prevStartDate = this.getPreviousYearDate(periodStartDate);
963
963
  const prevEndDate = this.getPreviousYearDate(periodEndDate);
964
- currentYearColumns.forEach((column, index) => {
965
- let prevTitle = column.title;
964
+ currentYearColumns.forEach((column2, index) => {
965
+ let prevTitle = column2.title;
966
966
  let prevDescription = "";
967
967
  let prevId = "";
968
- if (column.dimensionData) {
969
- prevTitle = column.title;
970
- if (column.description && column.description.includes("/")) {
968
+ if (column2.dimensionData) {
969
+ prevTitle = column2.title;
970
+ if (column2.description && column2.description.includes("/")) {
971
971
  prevDescription = `${prevStartDate} / ${prevEndDate}`;
972
972
  } else {
973
973
  prevDescription = prevEndDate;
974
974
  }
975
- prevId = `${column.id}_prev`;
975
+ prevId = `${column2.id}_prev`;
976
976
  } else {
977
- if (column.id === "instant" || column.id.includes("instant")) {
977
+ if (column2.id === "instant" || column2.id.includes("instant")) {
978
978
  prevTitle = prevEndDate;
979
979
  prevDescription = "";
980
980
  prevId = `instant_prev_${index}`;
981
- } else if (column.id === "duration" || column.id.includes("duration")) {
981
+ } else if (column2.id === "duration" || column2.id.includes("duration")) {
982
982
  prevTitle = `${prevStartDate} / ${prevEndDate}`;
983
983
  prevDescription = "";
984
984
  prevId = `duration_prev_${index}`;
985
- } else if (column.title.includes("/")) {
985
+ } else if (column2.title.includes("/")) {
986
986
  prevTitle = `${prevStartDate} / ${prevEndDate}`;
987
987
  prevDescription = "";
988
- prevId = `${column.id}_prev`;
988
+ prevId = `${column2.id}_prev`;
989
989
  } else {
990
990
  prevTitle = prevEndDate;
991
991
  prevDescription = "";
992
- prevId = `${column.id}_prev`;
992
+ prevId = `${column2.id}_prev`;
993
993
  }
994
994
  }
995
995
  previousYearColumns.push({
996
- ...column,
996
+ ...column2,
997
997
  id: prevId,
998
998
  title: prevTitle,
999
999
  description: prevDescription,
1000
- order: column.order + 100,
1000
+ order: column2.order + 100,
1001
1001
  // Place after current year columns
1002
1002
  removable: true,
1003
1003
  periodStartDate: prevStartDate,
1004
1004
  // Set previous year start date
1005
1005
  periodEndDate: prevEndDate,
1006
1006
  // Set previous year end date
1007
- dimensionData: column.dimensionData ? {
1008
- ...column.dimensionData,
1009
- dimensionId: `${column.dimensionData.dimensionId}_prev`
1007
+ dimensionData: column2.dimensionData ? {
1008
+ ...column2.dimensionData,
1009
+ dimensionId: `${column2.dimensionData.dimensionId}_prev`
1010
1010
  } : void 0
1011
1011
  });
1012
1012
  });
@@ -1016,10 +1016,10 @@ class XBRLFormBuilder {
1016
1016
  * Filter columns based on user's period preferences
1017
1017
  */
1018
1018
  static filterColumnsByPeriodPreferences(columns, preferences) {
1019
- return columns.filter((column) => {
1019
+ return columns.filter((column2) => {
1020
1020
  var _a, _b, _c, _d;
1021
- const isDuration = column.id.includes("duration") || ((_b = (_a = column.dimensionData) == null ? void 0 : _a.dimensionId) == null ? void 0 : _b.includes("duration"));
1022
- const isInstant = column.id.includes("instant") || ((_d = (_c = column.dimensionData) == null ? void 0 : _c.dimensionId) == null ? void 0 : _d.includes("instant"));
1021
+ const isDuration = column2.id.includes("duration") || ((_b = (_a = column2.dimensionData) == null ? void 0 : _a.dimensionId) == null ? void 0 : _b.includes("duration"));
1022
+ const isInstant = column2.id.includes("instant") || ((_d = (_c = column2.dimensionData) == null ? void 0 : _c.dimensionId) == null ? void 0 : _d.includes("instant"));
1023
1023
  if (!isDuration && !isInstant) {
1024
1024
  return true;
1025
1025
  }
@@ -1558,6 +1558,237 @@ class XBRLFormBuilder {
1558
1558
  }];
1559
1559
  }
1560
1560
  }
1561
+ const form$1 = {
1562
+ loading: "Loading form...",
1563
+ submit: "Submit",
1564
+ saveDraft: "Save Draft",
1565
+ errors: "Errors",
1566
+ modified: "Modified",
1567
+ valid: "Valid",
1568
+ yes: "Yes",
1569
+ no: "No",
1570
+ noRoleSelected: "No Role Selected",
1571
+ pleaseSelectRole: "Please select a role from the list on the left."
1572
+ };
1573
+ const filter$1 = {
1574
+ selectRoles: "Select Roles",
1575
+ filterRoles: "Filter Roles",
1576
+ title: "Filter Roles",
1577
+ searchPlaceholder: "Search roles by name, ID, or URI...",
1578
+ clearSearch: "Clear search",
1579
+ showingResults: "Showing",
1580
+ of: "of",
1581
+ roles: "roles",
1582
+ matching: "matching",
1583
+ selectAll: "Select All",
1584
+ selectNone: "Select None",
1585
+ selectFiltered: "Select Filtered",
1586
+ deselectFiltered: "Deselect Filtered",
1587
+ deselectAll: "Deselect All",
1588
+ reset: "Reset",
1589
+ noRolesFound: "No roles found matching",
1590
+ tryDifferentSearch: "Try a different search term or clear the search.",
1591
+ noRolesAvailable: "No roles available.",
1592
+ cancel: "Cancel",
1593
+ applyFilter: "Apply Filter",
1594
+ showPeriodColumn: "Show Period Column:",
1595
+ additionalOptions: "Additional Options:",
1596
+ showPreviousYear: "Show previous year",
1597
+ duration: "Duration",
1598
+ instant: "Instant",
1599
+ uri: "URI"
1600
+ };
1601
+ const column$1 = {
1602
+ addColumn: "Add Column",
1603
+ columnType: "Column Type",
1604
+ instantSingleDate: "Instant (single date)",
1605
+ durationDates: "Duration (start and end dates)",
1606
+ instantDate: "Instant Date",
1607
+ startPeriodDate: "Start Period Date",
1608
+ endPeriodDate: "End Period Date",
1609
+ availableDimensions: "Available Dimensions",
1610
+ dimensionsDescription: "Select dimensions to include in the column. Domain members can be selected here, while typed dimension values will be entered directly in the column header.",
1611
+ enterValue: "Enter value for",
1612
+ enterValuePlaceholder: "Enter value...",
1613
+ selectMember: "Select member:",
1614
+ noMembersAvailable: "No members available for this dimension",
1615
+ cancel: "Cancel",
1616
+ removeColumn: "Remove column",
1617
+ required: "required"
1618
+ };
1619
+ const section$1 = {
1620
+ enterPlaceholder: "Enter"
1621
+ };
1622
+ const admin$1 = {
1623
+ title: "Configure Roles",
1624
+ description: "Select which roles should display the 'Show Previous Year' checkbox and configure period type columns."
1625
+ };
1626
+ const validation$1 = {
1627
+ summary: "Please fix the following errors before submitting:",
1628
+ errorsFound: "errors found"
1629
+ };
1630
+ const enTranslations = {
1631
+ form: form$1,
1632
+ filter: filter$1,
1633
+ column: column$1,
1634
+ section: section$1,
1635
+ admin: admin$1,
1636
+ validation: validation$1
1637
+ };
1638
+ const form = {
1639
+ loading: "Formulier laden...",
1640
+ submit: "Indienen",
1641
+ saveDraft: "Concept opslaan",
1642
+ errors: "Fouten",
1643
+ modified: "Gewijzigd",
1644
+ valid: "Geldig",
1645
+ yes: "Ja",
1646
+ no: "Nee",
1647
+ noRoleSelected: "Geen rol geselecteerd",
1648
+ pleaseSelectRole: "Selecteer een rol uit de lijst aan de linkerkant."
1649
+ };
1650
+ const filter = {
1651
+ selectRoles: "Rollen selecteren",
1652
+ filterRoles: "Rollen filteren",
1653
+ title: "Rollen filteren",
1654
+ searchPlaceholder: "Zoek rollen op naam, ID of URI...",
1655
+ clearSearch: "Zoekopdracht wissen",
1656
+ showingResults: "Weergeven",
1657
+ of: "van",
1658
+ roles: "rollen",
1659
+ matching: "overeenkomend met",
1660
+ selectAll: "Alles selecteren",
1661
+ selectNone: "Niets selecteren",
1662
+ selectFiltered: "Gefilterd selecteren",
1663
+ deselectFiltered: "Gefilterd deselecteren",
1664
+ deselectAll: "Alles deselecteren",
1665
+ reset: "Resetten",
1666
+ noRolesFound: "Geen rollen gevonden die overeenkomen met",
1667
+ tryDifferentSearch: "Probeer een andere zoekterm of wis de zoekopdracht.",
1668
+ noRolesAvailable: "Geen rollen beschikbaar.",
1669
+ cancel: "Annuleren",
1670
+ applyFilter: "Filter toepassen",
1671
+ showPeriodColumn: "Periodekolom weergeven:",
1672
+ additionalOptions: "Aanvullende opties:",
1673
+ showPreviousYear: "Vorig jaar weergeven",
1674
+ duration: "Duur",
1675
+ instant: "Moment",
1676
+ uri: "URI"
1677
+ };
1678
+ const column = {
1679
+ addColumn: "Kolom toevoegen",
1680
+ columnType: "Kolomtype",
1681
+ instantSingleDate: "Moment (enkele datum)",
1682
+ durationDates: "Duur (begin- en einddatum)",
1683
+ instantDate: "Momentdatum",
1684
+ startPeriodDate: "Startdatum periode",
1685
+ endPeriodDate: "Einddatum periode",
1686
+ availableDimensions: "Beschikbare dimensies",
1687
+ dimensionsDescription: "Selecteer dimensies om in de kolom op te nemen. Domeinleden kunnen hier worden geselecteerd, terwijl getypte dimensiewaarden direct in de kolomkop worden ingevoerd.",
1688
+ enterValue: "Voer waarde in voor",
1689
+ enterValuePlaceholder: "Voer waarde in...",
1690
+ selectMember: "Selecteer lid:",
1691
+ noMembersAvailable: "Geen leden beschikbaar voor deze dimensie",
1692
+ cancel: "Annuleren",
1693
+ removeColumn: "Kolom verwijderen",
1694
+ required: "verplicht"
1695
+ };
1696
+ const section = {
1697
+ enterPlaceholder: "Invoeren"
1698
+ };
1699
+ const admin = {
1700
+ title: "Rollen configureren",
1701
+ description: "Selecteer welke rollen het selectievakje 'Vorig jaar weergeven' moeten weergeven en configureer periodetype kolommen."
1702
+ };
1703
+ const validation = {
1704
+ summary: "Corrigeer de volgende fouten voordat u indient:",
1705
+ errorsFound: "fouten gevonden"
1706
+ };
1707
+ const nlTranslations = {
1708
+ form,
1709
+ filter,
1710
+ column,
1711
+ section,
1712
+ admin,
1713
+ validation
1714
+ };
1715
+ const translations = {
1716
+ en: enTranslations,
1717
+ nl: nlTranslations
1718
+ };
1719
+ class I18n {
1720
+ /**
1721
+ * Set the current language
1722
+ * @param language Language code ('en' or 'nl')
1723
+ */
1724
+ static setLanguage(language) {
1725
+ if (translations[language]) {
1726
+ this.currentLanguage = language;
1727
+ } else {
1728
+ console.warn(`Language '${language}' not supported, falling back to 'en'`);
1729
+ this.currentLanguage = "en";
1730
+ }
1731
+ }
1732
+ /**
1733
+ * Get the current language
1734
+ */
1735
+ static getLanguage() {
1736
+ return this.currentLanguage;
1737
+ }
1738
+ /**
1739
+ * Translate a key to the current language
1740
+ * @param key Translation key in dot notation (e.g., 'form.submit')
1741
+ * @param params Optional parameters to replace in the translation
1742
+ * @returns Translated string
1743
+ */
1744
+ static t(key, params) {
1745
+ const keys = key.split(".");
1746
+ let value = translations[this.currentLanguage];
1747
+ for (const k of keys) {
1748
+ if (value && typeof value === "object" && k in value) {
1749
+ value = value[k];
1750
+ } else {
1751
+ console.warn(`Translation key '${key}' not found for language '${this.currentLanguage}'`);
1752
+ return key;
1753
+ }
1754
+ }
1755
+ if (params && typeof value === "string") {
1756
+ return this.interpolate(value, params);
1757
+ }
1758
+ return value;
1759
+ }
1760
+ /**
1761
+ * Interpolate parameters into a string
1762
+ * Supports {{paramName}} syntax
1763
+ */
1764
+ static interpolate(str, params) {
1765
+ return str.replace(/\{\{(\w+)\}\}/g, (match, key) => {
1766
+ return key in params ? String(params[key]) : match;
1767
+ });
1768
+ }
1769
+ /**
1770
+ * Check if a translation exists for a key
1771
+ */
1772
+ static has(key) {
1773
+ const keys = key.split(".");
1774
+ let value = translations[this.currentLanguage];
1775
+ for (const k of keys) {
1776
+ if (value && typeof value === "object" && k in value) {
1777
+ value = value[k];
1778
+ } else {
1779
+ return false;
1780
+ }
1781
+ }
1782
+ return value !== void 0;
1783
+ }
1784
+ /**
1785
+ * Get all available languages
1786
+ */
1787
+ static getAvailableLanguages() {
1788
+ return Object.keys(translations);
1789
+ }
1790
+ }
1791
+ I18n.currentLanguage = "en";
1561
1792
  const TYPE_INPUT_MAP = {
1562
1793
  // ==========================================
1563
1794
  // Dutch XBRL Types (nl-types namespace)
@@ -2236,8 +2467,8 @@ let JupiterConceptTree = class extends LitElement {
2236
2467
  </td>
2237
2468
 
2238
2469
  <!-- Input Field Cells (Period Columns) - Only for non-abstract concepts -->
2239
- ${this.columns.map((column) => {
2240
- const field = this._getFieldForColumn(column.id);
2470
+ ${this.columns.map((column2) => {
2471
+ const field = this._getFieldForColumn(column2.id);
2241
2472
  const shouldShowField = !isAbstract && field;
2242
2473
  return html`
2243
2474
  <td class="field-cell ${!shouldShowField ? "empty" : ""} ${isAbstract ? "abstract-row" : ""}">
@@ -2246,7 +2477,7 @@ let JupiterConceptTree = class extends LitElement {
2246
2477
  .field="${field}"
2247
2478
  .conceptId="${this.concept.id}"
2248
2479
  .conceptType="${this.concept.type}"
2249
- .columnId="${column.id}"
2480
+ .columnId="${column2.id}"
2250
2481
  .value="${this._getFieldValue(field)}"
2251
2482
  .disabled="${this.disabled}"
2252
2483
  .locale="${this.locale}"
@@ -2551,29 +2782,29 @@ let JupiterAddColumnDialog = class extends LitElement {
2551
2782
  return html`
2552
2783
  <div class="dialog" @click="${(e2) => e2.stopPropagation()}">
2553
2784
  <div class="dialog-header">
2554
- <h2 class="dialog-title">Add Column</h2>
2785
+ <h2 class="dialog-title">${I18n.t("column.addColumn")}</h2>
2555
2786
 
2556
2787
  </div>
2557
2788
 
2558
2789
  <div class="dialog-content">
2559
2790
  ${this.periodType === "mixed" ? html`
2560
2791
  <div class="form-group">
2561
- <label class="form-label required">Column Type</label>
2792
+ <label class="form-label required">${I18n.t("column.columnType")}</label>
2562
2793
  <select
2563
2794
  class="form-input"
2564
2795
  .value="${this._selectedType}"
2565
2796
  @change="${this._handleSelectedTypeChange}"
2566
2797
  required
2567
2798
  >
2568
- <option value="instant">Instant (single date)</option>
2569
- <option value="duration">Duration (start and end dates)</option>
2799
+ <option value="instant">${I18n.t("column.instantSingleDate")}</option>
2800
+ <option value="duration">${I18n.t("column.durationDates")}</option>
2570
2801
  </select>
2571
2802
  </div>
2572
2803
  ` : ""}
2573
2804
 
2574
2805
  ${this.periodType === "instant" || this.periodType === "mixed" && this._selectedType === "instant" ? html`
2575
2806
  <div class="form-group">
2576
- <label class="form-label required">Instant Date</label>
2807
+ <label class="form-label required">${I18n.t("column.instantDate")}</label>
2577
2808
  <input
2578
2809
  type="date"
2579
2810
  class="form-input"
@@ -2585,7 +2816,7 @@ let JupiterAddColumnDialog = class extends LitElement {
2585
2816
  ` : html`
2586
2817
  <div class="form-group date-row">
2587
2818
  <div class="date-field">
2588
- <label class="form-label required">Start Period Date</label>
2819
+ <label class="form-label required">${I18n.t("column.startPeriodDate")}</label>
2589
2820
  <input
2590
2821
  type="date"
2591
2822
  class="form-input"
@@ -2595,7 +2826,7 @@ let JupiterAddColumnDialog = class extends LitElement {
2595
2826
  />
2596
2827
  </div>
2597
2828
  <div class="date-field">
2598
- <label class="form-label required">End Period Date</label>
2829
+ <label class="form-label required">${I18n.t("column.endPeriodDate")}</label>
2599
2830
  <input
2600
2831
  type="date"
2601
2832
  class="form-input"
@@ -2610,8 +2841,8 @@ let JupiterAddColumnDialog = class extends LitElement {
2610
2841
  <!-- Dimensions Section -->
2611
2842
  ${this.availableDimensions.length > 0 ? html`
2612
2843
  <div class="dimensions-section">
2613
- <h3>Available Dimensions</h3>
2614
- <p class="form-description">Select dimensions to include in the column. Domain members can be selected here, while typed dimension values will be entered directly in the column header.</p>
2844
+ <h3>${I18n.t("column.availableDimensions")}</h3>
2845
+ <p class="form-description">${I18n.t("column.dimensionsDescription")}</p>
2615
2846
 
2616
2847
  ${this.availableDimensions.map((dimension) => {
2617
2848
  const isSelected = this._selectedDimensions.has(dimension.id);
@@ -2637,20 +2868,20 @@ let JupiterAddColumnDialog = class extends LitElement {
2637
2868
  ${isTypedDimension ? html`
2638
2869
  <!-- Typed Dimension Input -->
2639
2870
  <div class="member-selection">
2640
- <label>Enter value for ${dimension.conceptName}:</label>
2871
+ <label>${I18n.t("column.enterValue")} ${dimension.conceptName}:</label>
2641
2872
  <input
2642
2873
  type="text"
2643
2874
  class="typed-input"
2644
2875
  .value="${(selection == null ? void 0 : selection.typedValue) || ""}"
2645
2876
  @input="${(e2) => this._handleTypedValueChange(dimension.id, e2)}"
2646
- placeholder="Enter value..."
2877
+ placeholder="${I18n.t("column.enterValuePlaceholder")}"
2647
2878
  />
2648
2879
  </div>
2649
2880
  ` : html`
2650
2881
  <!-- Domain Members Selection -->
2651
2882
  ${dimension.members && dimension.members.length > 0 ? html`
2652
2883
  <div class="member-selection">
2653
- <label>Select member:</label>
2884
+ <label>${I18n.t("column.selectMember")}</label>
2654
2885
  <div class="member-list">
2655
2886
  ${dimension.members.map((member) => html`
2656
2887
  <div class="member-option">
@@ -2669,7 +2900,7 @@ let JupiterAddColumnDialog = class extends LitElement {
2669
2900
  </div>
2670
2901
  </div>
2671
2902
  ` : html`
2672
- <p class="form-description">No members available for this dimension</p>
2903
+ <p class="form-description">${I18n.t("column.noMembersAvailable")}</p>
2673
2904
  `}
2674
2905
  `}
2675
2906
  </div>
@@ -2683,14 +2914,14 @@ let JupiterAddColumnDialog = class extends LitElement {
2683
2914
 
2684
2915
  <div class="dialog-actions">
2685
2916
  <button class="btn btn-cancel" @click="${this._handleCancel}">
2686
- Cancel
2917
+ ${I18n.t("column.cancel")}
2687
2918
  </button>
2688
2919
  <button
2689
2920
  class="btn btn-primary"
2690
2921
  ?disabled="${!isValid}"
2691
2922
  @click="${this._handleConfirm}"
2692
2923
  >
2693
- Add Column
2924
+ ${I18n.t("column.addColumn")}
2694
2925
  </button>
2695
2926
  </div>
2696
2927
  </div>
@@ -3254,41 +3485,41 @@ let JupiterFormSection = class extends LitElement {
3254
3485
  <thead class="table-header">
3255
3486
  <tr class="header-row">
3256
3487
  <th class="header-cell concept-column"></th>
3257
- ${this.columns.map((column) => {
3488
+ ${this.columns.map((column2) => {
3258
3489
  var _a, _b, _c;
3259
3490
  return html`
3260
- <th class="header-cell ${column.removable ? "removable" : ""}">
3491
+ <th class="header-cell ${column2.removable ? "removable" : ""}">
3261
3492
  <div class="column-header-content">
3262
3493
  <div class="column-title">
3263
- ${column.title}
3264
- ${column.description ? html`<div style="font-weight: normal; font-size: 12px; color: var(--jupiter-text-secondary, #666);">${column.description}</div>` : ""}
3494
+ ${column2.title}
3495
+ ${column2.description ? html`<div style="font-weight: normal; font-size: 12px; color: var(--jupiter-text-secondary, #666);">${column2.description}</div>` : ""}
3265
3496
  </div>
3266
3497
 
3267
3498
  <!-- Typed member input fields in column header -->
3268
- ${((_a = column.dimensionData) == null ? void 0 : _a.hasTypedMembers) ? html`
3499
+ ${((_a = column2.dimensionData) == null ? void 0 : _a.hasTypedMembers) ? html`
3269
3500
  <div class="typed-members-header">
3270
- ${(_c = (_b = column.dimensionData) == null ? void 0 : _b.typedMembers) == null ? void 0 : _c.map((typedMember) => html`
3501
+ ${(_c = (_b = column2.dimensionData) == null ? void 0 : _b.typedMembers) == null ? void 0 : _c.map((typedMember) => html`
3271
3502
  <div class="typed-member-header-input">
3272
3503
  <input
3273
3504
  type="text"
3274
3505
  class="typed-member-header-field"
3275
- placeholder="Enter ${typedMember.axisLabel}"
3276
- .value="${this._getTypedMemberHeaderValue(column.id, typedMember.axisId)}"
3277
- @input="${(e2) => this._handleTypedMemberHeaderChange(e2, column.id, typedMember.axisId)}"
3506
+ placeholder="${I18n.t("section.enterPlaceholder")} ${typedMember.axisLabel}"
3507
+ .value="${this._getTypedMemberHeaderValue(column2.id, typedMember.axisId)}"
3508
+ @input="${(e2) => this._handleTypedMemberHeaderChange(e2, column2.id, typedMember.axisId)}"
3278
3509
  />
3279
3510
  </div>
3280
3511
  `)}
3281
3512
  </div>
3282
3513
  ` : ""}
3283
3514
 
3284
- ${column.removable ? html`
3515
+ ${column2.removable ? html`
3285
3516
  <button
3286
3517
  class="remove-column-btn"
3287
3518
  @click="${(e2) => {
3288
3519
  e2.stopPropagation();
3289
- this._handleRemoveColumn(column.id);
3520
+ this._handleRemoveColumn(column2.id);
3290
3521
  }}"
3291
- title="Remove column"
3522
+ title="${I18n.t("column.removeColumn")}"
3292
3523
  >×</button>
3293
3524
  ` : ""}
3294
3525
  </div>
@@ -3299,8 +3530,8 @@ let JupiterFormSection = class extends LitElement {
3299
3530
  <button class="add-column-btn" @click="${(e2) => {
3300
3531
  e2.stopPropagation();
3301
3532
  this._handleAddColumn();
3302
- }}" title="Add Column">
3303
- + Add Column
3533
+ }}" title="${I18n.t("column.addColumn")}">
3534
+ + ${I18n.t("column.addColumn")}
3304
3535
  </button>
3305
3536
  </th>
3306
3537
  </tr>
@@ -3850,7 +4081,7 @@ let JupiterFilterRolesDialog = class extends LitElement {
3850
4081
  <svg class="filter-icon" viewBox="0 0 24 24">
3851
4082
  <path d="M10 18h4v-2h-4v2zM3 6v2h18V6H3zm3 7h12v-2H6v2z"/>
3852
4083
  </svg>
3853
- <h2 class="dialog-title">Filter Roles</h2>
4084
+ <h2 class="dialog-title">${I18n.t("filter.title")}</h2>
3854
4085
  <button class="close-button" @click="${this._handleCancel}">×</button>
3855
4086
  </div>
3856
4087
 
@@ -3866,12 +4097,12 @@ let JupiterFilterRolesDialog = class extends LitElement {
3866
4097
  <input
3867
4098
  type="text"
3868
4099
  class="search-input"
3869
- placeholder="Search roles by name, ID, or URI..."
4100
+ placeholder="${I18n.t("filter.searchPlaceholder")}"
3870
4101
  .value="${this._searchQuery}"
3871
4102
  @input="${this._handleSearchInput}"
3872
4103
  />
3873
4104
  ${this._searchQuery ? html`
3874
- <button class="clear-search" @click="${this._clearSearch}" title="Clear search">
4105
+ <button class="clear-search" @click="${this._clearSearch}" title="${I18n.t("filter.clearSearch")}">
3875
4106
  ×
3876
4107
  </button>
3877
4108
  ` : html`
@@ -3884,8 +4115,8 @@ let JupiterFilterRolesDialog = class extends LitElement {
3884
4115
  <!-- Search Results Info -->
3885
4116
  ${hasSearchQuery ? html`
3886
4117
  <div class="search-results-info">
3887
- Showing ${filteredCount} of ${totalCount} roles
3888
- ${filteredCount !== totalCount ? html`matching "${this._searchQuery}"` : ""}
4118
+ ${I18n.t("filter.showingResults")} ${filteredCount} ${I18n.t("filter.of")} ${totalCount} ${I18n.t("filter.roles")}
4119
+ ${filteredCount !== totalCount ? html`${I18n.t("filter.matching")} "${this._searchQuery}"` : ""}
3889
4120
  </div>
3890
4121
  ` : ""}
3891
4122
 
@@ -3893,27 +4124,27 @@ let JupiterFilterRolesDialog = class extends LitElement {
3893
4124
  <div class="selection-controls">
3894
4125
  ${hasSearchQuery ? html`
3895
4126
  <button class="selection-control" @click="${this._selectAll}">
3896
- Select Filtered (${filteredCount})
4127
+ ${I18n.t("filter.selectFiltered")} (${filteredCount})
3897
4128
  </button>
3898
4129
  <button class="selection-control" @click="${this._selectNone}">
3899
- Deselect Filtered
4130
+ ${I18n.t("filter.deselectFiltered")}
3900
4131
  </button>
3901
4132
  <button class="selection-control" @click="${this._selectAllGlobal}">
3902
- Select All (${totalCount})
4133
+ ${I18n.t("filter.selectAll")} (${totalCount})
3903
4134
  </button>
3904
4135
  <button class="selection-control" @click="${this._selectNoneGlobal}">
3905
- Deselect All
4136
+ ${I18n.t("filter.deselectAll")}
3906
4137
  </button>
3907
4138
  ` : html`
3908
4139
  <button class="selection-control" @click="${this._selectAll}">
3909
- Select All
4140
+ ${I18n.t("filter.selectAll")}
3910
4141
  </button>
3911
4142
  <button class="selection-control" @click="${this._selectNone}">
3912
- Select None
4143
+ ${I18n.t("filter.selectNone")}
3913
4144
  </button>
3914
4145
  `}
3915
4146
  <button class="selection-control" @click="${this._resetToOriginal}">
3916
- Reset
4147
+ ${I18n.t("filter.reset")}
3917
4148
  </button>
3918
4149
  </div>
3919
4150
 
@@ -3922,10 +4153,10 @@ let JupiterFilterRolesDialog = class extends LitElement {
3922
4153
  ${this._filteredRoles.length === 0 ? html`
3923
4154
  <div class="no-results">
3924
4155
  ${hasSearchQuery ? html`
3925
- No roles found matching "${this._searchQuery}".<br>
3926
- Try a different search term or clear the search.
4156
+ ${I18n.t("filter.noRolesFound")} "${this._searchQuery}".<br>
4157
+ ${I18n.t("filter.tryDifferentSearch")}
3927
4158
  ` : html`
3928
- No roles available.
4159
+ ${I18n.t("filter.noRolesAvailable")}
3929
4160
  `}
3930
4161
  </div>
3931
4162
  ` : html`
@@ -3945,12 +4176,12 @@ let JupiterFilterRolesDialog = class extends LitElement {
3945
4176
  <div class="role-info">
3946
4177
  <h4 class="role-title">${role.title}</h4>
3947
4178
  ${((_a = role.metadata) == null ? void 0 : _a.roleURI) ? html`
3948
- <p class="role-description">URI: ${role.metadata.roleURI}</p>
4179
+ <p class="role-description">${I18n.t("filter.uri")}: ${role.metadata.roleURI}</p>
3949
4180
  ` : ""}
3950
4181
 
3951
4182
  ${showPeriodControls ? html`
3952
4183
  <div class="period-controls">
3953
- <p class="period-controls-label">Show Period Column:</p>
4184
+ <p class="period-controls-label">${I18n.t("filter.showPeriodColumn")}</p>
3954
4185
  <div class="period-checkboxes">
3955
4186
  <label class="period-checkbox-item">
3956
4187
  <input
@@ -3959,7 +4190,7 @@ let JupiterFilterRolesDialog = class extends LitElement {
3959
4190
  .checked="${preferences.showDuration}"
3960
4191
  @change="${(e2) => this._handlePeriodCheckboxChange(e2, role.id, "duration")}"
3961
4192
  />
3962
- <span class="period-checkbox-label">Duration</span>
4193
+ <span class="period-checkbox-label">${I18n.t("filter.duration")}</span>
3963
4194
  </label>
3964
4195
  <label class="period-checkbox-item">
3965
4196
  <input
@@ -3968,14 +4199,14 @@ let JupiterFilterRolesDialog = class extends LitElement {
3968
4199
  .checked="${preferences.showInstant}"
3969
4200
  @change="${(e2) => this._handlePeriodCheckboxChange(e2, role.id, "instant")}"
3970
4201
  />
3971
- <span class="period-checkbox-label">Instant</span>
4202
+ <span class="period-checkbox-label">${I18n.t("filter.instant")}</span>
3972
4203
  </label>
3973
4204
  </div>
3974
4205
  </div>
3975
4206
  ` : ""}
3976
4207
 
3977
4208
  <div class="period-controls">
3978
- <p class="period-controls-label">Additional Options:</p>
4209
+ <p class="period-controls-label">${I18n.t("filter.additionalOptions")}</p>
3979
4210
  <div class="period-checkboxes">
3980
4211
  <label class="period-checkbox-item">
3981
4212
  <input
@@ -3984,7 +4215,7 @@ let JupiterFilterRolesDialog = class extends LitElement {
3984
4215
  .checked="${preferences.showPreviousYear}"
3985
4216
  @change="${(e2) => this._handlePeriodCheckboxChange(e2, role.id, "previousYear")}"
3986
4217
  />
3987
- <span class="period-checkbox-label">Show previous year</span>
4218
+ <span class="period-checkbox-label">${I18n.t("filter.showPreviousYear")}</span>
3988
4219
  </label>
3989
4220
  </div>
3990
4221
  </div>
@@ -4001,14 +4232,14 @@ let JupiterFilterRolesDialog = class extends LitElement {
4001
4232
  <!-- Dialog Actions -->
4002
4233
  <div class="dialog-actions">
4003
4234
  <button class="btn-secondary" @click="${this._handleCancel}">
4004
- Cancel
4235
+ ${I18n.t("filter.cancel")}
4005
4236
  </button>
4006
4237
  <button
4007
4238
  class="btn-primary"
4008
4239
  @click="${this._handleApply}"
4009
4240
  ?disabled="${selectedCount === 0}"
4010
4241
  >
4011
- Apply Filter (${selectedCount})
4242
+ ${I18n.t("filter.applyFilter")} (${selectedCount})
4012
4243
  </button>
4013
4244
  </div>
4014
4245
  </div>
@@ -4414,6 +4645,9 @@ let JupiterDynamicForm = class extends LitElement {
4414
4645
  this._initializeForm();
4415
4646
  }
4416
4647
  updated(changedProperties) {
4648
+ if (changedProperties.has("language")) {
4649
+ I18n.setLanguage(this.language);
4650
+ }
4417
4651
  if (changedProperties.has("financialStatementsTypeAxis")) {
4418
4652
  console.log("🔄 financialStatementsTypeAxis changed:", this.financialStatementsTypeAxis);
4419
4653
  }
@@ -4446,7 +4680,7 @@ let JupiterDynamicForm = class extends LitElement {
4446
4680
  console.log("📊 Sections after filter:", this._allSections.length);
4447
4681
  }
4448
4682
  if (this._selectedRoleIds.length === 0) {
4449
- this._selectedRoleIds = this._allSections.map((section) => section.id);
4683
+ this._selectedRoleIds = this._allSections.map((section2) => section2.id);
4450
4684
  console.log("✅ Auto-selected all roles:", this._selectedRoleIds.length);
4451
4685
  }
4452
4686
  this._applyRoleFilter();
@@ -4470,7 +4704,7 @@ let JupiterDynamicForm = class extends LitElement {
4470
4704
  } else if (this.schema) {
4471
4705
  this._currentSchema = this.schema;
4472
4706
  this._allSections = [...this.schema.sections];
4473
- this._selectedRoleIds = this._allSections.map((section) => section.id);
4707
+ this._selectedRoleIds = this._allSections.map((section2) => section2.id);
4474
4708
  this._columns = this._getDefaultColumns();
4475
4709
  } else {
4476
4710
  this._currentSchema = this._getDefaultSchema();
@@ -4545,7 +4779,7 @@ let JupiterDynamicForm = class extends LitElement {
4545
4779
  }
4546
4780
  this._preserveDataForHiddenSections();
4547
4781
  const filteredSections = this._allSections.filter(
4548
- (section) => this._selectedRoleIds.includes(section.id)
4782
+ (section2) => this._selectedRoleIds.includes(section2.id)
4549
4783
  );
4550
4784
  console.log(`📊 Filtered sections: ${filteredSections.length} (IDs: ${filteredSections.map((s2) => s2.id).join(", ")})`);
4551
4785
  this._restoreDataForVisibleSections(filteredSections);
@@ -4574,11 +4808,11 @@ let JupiterDynamicForm = class extends LitElement {
4574
4808
  const hypercubeData = this.xbrlInput.hypercubes[0];
4575
4809
  const financialStatementsAxisId = "bw2-titel9_FinancialStatementsTypeAxis";
4576
4810
  console.log("🔍 Filter values:", this.financialStatementsTypeAxis);
4577
- return sections.filter((section) => {
4811
+ return sections.filter((section2) => {
4578
4812
  var _a2;
4579
- const hypercubeRole = (_a2 = hypercubeData.roles) == null ? void 0 : _a2.find((r2) => r2.roleId === section.id);
4813
+ const hypercubeRole = (_a2 = hypercubeData.roles) == null ? void 0 : _a2.find((r2) => r2.roleId === section2.id);
4580
4814
  if (!hypercubeRole || !hypercubeRole.items || hypercubeRole.items.length === 0) {
4581
- console.log(`✅ ${section.title}: No hypercube entry - INCLUDED`);
4815
+ console.log(`✅ ${section2.title}: No hypercube entry - INCLUDED`);
4582
4816
  return true;
4583
4817
  }
4584
4818
  let hasFinancialStatementsAxis = false;
@@ -4630,20 +4864,20 @@ let JupiterDynamicForm = class extends LitElement {
4630
4864
  (sectionId) => !this._selectedRoleIds.includes(sectionId)
4631
4865
  );
4632
4866
  sectionsThatWillBeHidden.forEach((sectionId) => {
4633
- const section = this._allSections.find((s2) => s2.id === sectionId);
4634
- if (section) {
4635
- this._preserveSectionData(section);
4867
+ const section2 = this._allSections.find((s2) => s2.id === sectionId);
4868
+ if (section2) {
4869
+ this._preserveSectionData(section2);
4636
4870
  }
4637
4871
  });
4638
4872
  }
4639
4873
  _restoreDataForVisibleSections(visibleSections) {
4640
- visibleSections.forEach((section) => {
4641
- this._restoreSectionData(section);
4874
+ visibleSections.forEach((section2) => {
4875
+ this._restoreSectionData(section2);
4642
4876
  });
4643
4877
  console.log(`🔄 Restored data for ${visibleSections.length} visible sections`);
4644
4878
  }
4645
- _preserveSectionData(section) {
4646
- section.concepts.forEach((concept) => {
4879
+ _preserveSectionData(section2) {
4880
+ section2.concepts.forEach((concept) => {
4647
4881
  this._preserveConceptData(concept);
4648
4882
  });
4649
4883
  }
@@ -4662,8 +4896,8 @@ let JupiterDynamicForm = class extends LitElement {
4662
4896
  });
4663
4897
  }
4664
4898
  }
4665
- _restoreSectionData(section) {
4666
- section.concepts.forEach((concept) => {
4899
+ _restoreSectionData(section2) {
4900
+ section2.concepts.forEach((concept) => {
4667
4901
  this._restoreConceptData(concept);
4668
4902
  });
4669
4903
  }
@@ -4721,8 +4955,8 @@ let JupiterDynamicForm = class extends LitElement {
4721
4955
  const schema = this._currentSchema;
4722
4956
  if (!schema)
4723
4957
  return;
4724
- for (const section of schema.sections) {
4725
- for (const concept of section.concepts) {
4958
+ for (const section2 of schema.sections) {
4959
+ for (const concept of section2.concepts) {
4726
4960
  for (const field of concept.fields) {
4727
4961
  const value = (_a = this._formData[concept.id]) == null ? void 0 : _a[field.columnId];
4728
4962
  const fieldErrors = FormValidator.validateField(
@@ -4802,16 +5036,16 @@ let JupiterDynamicForm = class extends LitElement {
4802
5036
  _handleColumnRemove(event) {
4803
5037
  const { columnId, sectionId } = event.detail;
4804
5038
  if (this._currentSchema && sectionId) {
4805
- const targetSection = this._currentSchema.sections.find((section) => section.id === sectionId);
5039
+ const targetSection = this._currentSchema.sections.find((section2) => section2.id === sectionId);
4806
5040
  if (targetSection && targetSection.columns) {
4807
5041
  targetSection.columns = targetSection.columns.filter((col) => col.id !== columnId);
4808
5042
  }
4809
5043
  } else {
4810
5044
  this._columns = this._columns.filter((col) => col.id !== columnId);
4811
5045
  if (this._currentSchema) {
4812
- this._currentSchema.sections.forEach((section) => {
4813
- if (section.columns) {
4814
- section.columns = section.columns.filter((col) => col.id !== columnId);
5046
+ this._currentSchema.sections.forEach((section2) => {
5047
+ if (section2.columns) {
5048
+ section2.columns = section2.columns.filter((col) => col.id !== columnId);
4815
5049
  }
4816
5050
  });
4817
5051
  }
@@ -4981,7 +5215,7 @@ let JupiterDynamicForm = class extends LitElement {
4981
5215
  }
4982
5216
  }
4983
5217
  if (this._currentSchema) {
4984
- const targetSection = this._currentSchema.sections.find((section) => section.id === sectionId);
5218
+ const targetSection = this._currentSchema.sections.find((section2) => section2.id === sectionId);
4985
5219
  if (targetSection) {
4986
5220
  if (!targetSection.columns) {
4987
5221
  targetSection.columns = [...this._columns];
@@ -5001,7 +5235,7 @@ let JupiterDynamicForm = class extends LitElement {
5001
5235
  if (!this._currentSchema)
5002
5236
  return;
5003
5237
  if (sectionId) {
5004
- const targetSection = this._currentSchema.sections.find((section) => section.id === sectionId);
5238
+ const targetSection = this._currentSchema.sections.find((section2) => section2.id === sectionId);
5005
5239
  if (targetSection) {
5006
5240
  this._removeColumnDataFromConcepts(targetSection.concepts, columnId);
5007
5241
  }
@@ -5044,7 +5278,7 @@ let JupiterDynamicForm = class extends LitElement {
5044
5278
  if (!this._currentSchema)
5045
5279
  return;
5046
5280
  const formBuilder = new XBRLFormBuilder();
5047
- const targetSection = this._currentSchema.sections.find((section) => section.id === sectionId);
5281
+ const targetSection = this._currentSchema.sections.find((section2) => section2.id === sectionId);
5048
5282
  if (targetSection) {
5049
5283
  this._replicateFieldsForSection(targetSection.concepts, columnId, request, formBuilder);
5050
5284
  }
@@ -5158,8 +5392,8 @@ let JupiterDynamicForm = class extends LitElement {
5158
5392
  if (!this._currentSchema) {
5159
5393
  return submissionData;
5160
5394
  }
5161
- this._currentSchema.sections.forEach((section) => {
5162
- this._processConceptsForSubmission(section.concepts, submissionData, section);
5395
+ this._currentSchema.sections.forEach((section2) => {
5396
+ this._processConceptsForSubmission(section2.concepts, submissionData, section2);
5163
5397
  });
5164
5398
  this._includePreservedDataInSubmission(submissionData);
5165
5399
  const uniqueSubmissionData = this._removeDuplicateSubmissions(submissionData);
@@ -5184,8 +5418,8 @@ let JupiterDynamicForm = class extends LitElement {
5184
5418
  console.log(`📤 Included preserved data in submission. Total entries: ${submissionData.length}`);
5185
5419
  }
5186
5420
  _findConceptInAllSections(conceptId) {
5187
- for (const section of this._allSections) {
5188
- const concept = this._findConceptInSection(section.concepts, conceptId);
5421
+ for (const section2 of this._allSections) {
5422
+ const concept = this._findConceptInSection(section2.concepts, conceptId);
5189
5423
  if (concept) {
5190
5424
  return concept;
5191
5425
  }
@@ -5207,45 +5441,45 @@ let JupiterDynamicForm = class extends LitElement {
5207
5441
  return null;
5208
5442
  }
5209
5443
  _findSectionForConcept(conceptId) {
5210
- for (const section of this._allSections) {
5211
- const concept = this._findConceptInSection(section.concepts, conceptId);
5444
+ for (const section2 of this._allSections) {
5445
+ const concept = this._findConceptInSection(section2.concepts, conceptId);
5212
5446
  if (concept) {
5213
- return section;
5447
+ return section2;
5214
5448
  }
5215
5449
  }
5216
5450
  return null;
5217
5451
  }
5218
- _addConceptDataToSubmission(concept, columnId, value, submissionData, section) {
5452
+ _addConceptDataToSubmission(concept, columnId, value, submissionData, section2) {
5219
5453
  var _a;
5220
5454
  const field = concept.fields.find((f2) => f2.columnId === columnId);
5221
5455
  if (!field)
5222
5456
  return;
5223
5457
  const isInstant = concept.periodType === "instant";
5224
- const column = this._findColumnByIdInAllSections(columnId);
5458
+ const column2 = this._findColumnByIdInAllSections(columnId);
5225
5459
  alert("hi");
5226
- console.log(`🔍 [Submission] Concept: ${concept.id}, Column: ${columnId}, Column Period: ${(column == null ? void 0 : column.periodStartDate) || "none"} - ${(column == null ? void 0 : column.periodEndDate) || "none"}`);
5460
+ console.log(`🔍 [Submission] Concept: ${concept.id}, Column: ${columnId}, Column Period: ${(column2 == null ? void 0 : column2.periodStartDate) || "none"} - ${(column2 == null ? void 0 : column2.periodEndDate) || "none"}`);
5227
5461
  const entry = {
5228
5462
  conceptId: concept.originalConceptId || concept.id,
5229
5463
  value,
5230
5464
  period: {
5231
5465
  type: concept.periodType || "duration",
5232
- ...isInstant ? { date: (column == null ? void 0 : column.periodEndDate) || field.periodStartDate || this.periodStartDate } : {
5233
- startDate: (column == null ? void 0 : column.periodStartDate) || field.periodStartDate || this.periodStartDate,
5234
- endDate: (column == null ? void 0 : column.periodEndDate) || field.periodEndDate || this.periodEndDate
5466
+ ...isInstant ? { date: (column2 == null ? void 0 : column2.periodEndDate) || field.periodStartDate || this.periodStartDate } : {
5467
+ startDate: (column2 == null ? void 0 : column2.periodStartDate) || field.periodStartDate || this.periodStartDate,
5468
+ endDate: (column2 == null ? void 0 : column2.periodEndDate) || field.periodEndDate || this.periodEndDate
5235
5469
  }
5236
5470
  }
5237
5471
  };
5238
- if ((_a = column == null ? void 0 : column.dimensionData) == null ? void 0 : _a.memberLabel) {
5239
- entry.dimension = column.dimensionData.memberLabel;
5472
+ if ((_a = column2 == null ? void 0 : column2.dimensionData) == null ? void 0 : _a.memberLabel) {
5473
+ entry.dimension = column2.dimensionData.memberLabel;
5240
5474
  }
5241
5475
  submissionData.push(entry);
5242
5476
  }
5243
5477
  _findColumnByIdInAllSections(columnId) {
5244
- for (const section of this._allSections) {
5245
- if (section.columns) {
5246
- const column = section.columns.find((col) => col.id === columnId);
5247
- if (column) {
5248
- return column;
5478
+ for (const section2 of this._allSections) {
5479
+ if (section2.columns) {
5480
+ const column2 = section2.columns.find((col) => col.id === columnId);
5481
+ if (column2) {
5482
+ return column2;
5249
5483
  }
5250
5484
  }
5251
5485
  }
@@ -5266,28 +5500,28 @@ let JupiterDynamicForm = class extends LitElement {
5266
5500
  if (!this._currentSchema) {
5267
5501
  return void 0;
5268
5502
  }
5269
- for (const section of this._currentSchema.sections) {
5270
- if (section.columns) {
5271
- const column = section.columns.find((col) => col.id === columnId);
5272
- if (column) {
5273
- return column;
5503
+ for (const section2 of this._currentSchema.sections) {
5504
+ if (section2.columns) {
5505
+ const column2 = section2.columns.find((col) => col.id === columnId);
5506
+ if (column2) {
5507
+ return column2;
5274
5508
  }
5275
5509
  }
5276
5510
  }
5277
5511
  return void 0;
5278
5512
  }
5279
- _findColumnByIdInSection(columnId, section) {
5280
- if (!(section == null ? void 0 : section.columns)) {
5513
+ _findColumnByIdInSection(columnId, section2) {
5514
+ if (!(section2 == null ? void 0 : section2.columns)) {
5281
5515
  return void 0;
5282
5516
  }
5283
- return section.columns.find((col) => col.id === columnId);
5517
+ return section2.columns.find((col) => col.id === columnId);
5284
5518
  }
5285
- _getTypedMemberNameForAxis(axisId, section) {
5519
+ _getTypedMemberNameForAxis(axisId, section2) {
5286
5520
  var _a, _b, _c, _d;
5287
5521
  if (!((_b = (_a = this.xbrlInput) == null ? void 0 : _a.hypercubes) == null ? void 0 : _b[0])) {
5288
5522
  return null;
5289
5523
  }
5290
- const sectionRoleId = section == null ? void 0 : section.id;
5524
+ const sectionRoleId = section2 == null ? void 0 : section2.id;
5291
5525
  if (!sectionRoleId) {
5292
5526
  return null;
5293
5527
  }
@@ -5306,12 +5540,12 @@ let JupiterDynamicForm = class extends LitElement {
5306
5540
  }
5307
5541
  return null;
5308
5542
  }
5309
- _doesConceptApplyToTypedDimension(concept, section, columnId) {
5543
+ _doesConceptApplyToTypedDimension(concept, section2, columnId) {
5310
5544
  var _a, _b, _c;
5311
5545
  if (!((_b = (_a = this.xbrlInput) == null ? void 0 : _a.hypercubes) == null ? void 0 : _b[0])) {
5312
5546
  return false;
5313
5547
  }
5314
- const sectionRoleId = section == null ? void 0 : section.id;
5548
+ const sectionRoleId = section2 == null ? void 0 : section2.id;
5315
5549
  if (!sectionRoleId) {
5316
5550
  return false;
5317
5551
  }
@@ -5333,12 +5567,12 @@ let JupiterDynamicForm = class extends LitElement {
5333
5567
  /**
5334
5568
  * Get the specific typed dimensions that apply to a concept in its role
5335
5569
  */
5336
- _getApplicableTypedDimensions(concept, section) {
5570
+ _getApplicableTypedDimensions(concept, section2) {
5337
5571
  var _a, _b, _c;
5338
- if (!((_b = (_a = this.xbrlInput) == null ? void 0 : _a.hypercubes) == null ? void 0 : _b[0]) || !(section == null ? void 0 : section.id)) {
5572
+ if (!((_b = (_a = this.xbrlInput) == null ? void 0 : _a.hypercubes) == null ? void 0 : _b[0]) || !(section2 == null ? void 0 : section2.id)) {
5339
5573
  return [];
5340
5574
  }
5341
- const hypercubeRole = this.xbrlInput.hypercubes[0].roles.find((hr) => hr.roleId === section.id);
5575
+ const hypercubeRole = this.xbrlInput.hypercubes[0].roles.find((hr) => hr.roleId === section2.id);
5342
5576
  if (!((_c = hypercubeRole == null ? void 0 : hypercubeRole.items) == null ? void 0 : _c.length)) {
5343
5577
  return [];
5344
5578
  }
@@ -5352,9 +5586,9 @@ let JupiterDynamicForm = class extends LitElement {
5352
5586
  }
5353
5587
  return [];
5354
5588
  }
5355
- _processConceptsForSubmission(concepts, submissionData, section) {
5589
+ _processConceptsForSubmission(concepts, submissionData, section2) {
5356
5590
  const targetRole = "Toelichting op de geconsolideerde jaarrekening - Financiële vaste activa: Deelnemingen: Volledig geconsolideerd: Specificatie";
5357
- const sectionTitle = (section == null ? void 0 : section.title) || "Unknown";
5591
+ const sectionTitle = (section2 == null ? void 0 : section2.title) || "Unknown";
5358
5592
  concepts.forEach((concept) => {
5359
5593
  if (sectionTitle === targetRole) {
5360
5594
  console.warn(`[DUPLICATE DEBUG] Processing concept ${concept.originalConceptId || concept.id} in target role`);
@@ -5376,7 +5610,7 @@ let JupiterDynamicForm = class extends LitElement {
5376
5610
  const conceptData = this._formData[concept.id];
5377
5611
  const fieldValue = conceptData == null ? void 0 : conceptData[field.columnId];
5378
5612
  if (fieldValue !== void 0 && fieldValue !== null && fieldValue !== "") {
5379
- const column = this._findColumnByIdInSection(field.columnId, section);
5613
+ const column2 = this._findColumnByIdInSection(field.columnId, section2);
5380
5614
  const submissionEntry = {
5381
5615
  conceptId: concept.id,
5382
5616
  value: fieldValue,
@@ -5385,27 +5619,27 @@ let JupiterDynamicForm = class extends LitElement {
5385
5619
  }
5386
5620
  };
5387
5621
  if (concept.periodType === "instant") {
5388
- submissionEntry.period.date = (column == null ? void 0 : column.periodEndDate) || field.periodStartDate || this.periodStartDate;
5622
+ submissionEntry.period.date = (column2 == null ? void 0 : column2.periodEndDate) || field.periodStartDate || this.periodStartDate;
5389
5623
  } else {
5390
- submissionEntry.period.startDate = (column == null ? void 0 : column.periodStartDate) || field.periodStartDate || this.periodStartDate;
5391
- submissionEntry.period.endDate = (column == null ? void 0 : column.periodEndDate) || field.periodEndDate || this.periodEndDate;
5624
+ submissionEntry.period.startDate = (column2 == null ? void 0 : column2.periodStartDate) || field.periodStartDate || this.periodStartDate;
5625
+ submissionEntry.period.endDate = (column2 == null ? void 0 : column2.periodEndDate) || field.periodEndDate || this.periodEndDate;
5392
5626
  }
5393
- console.log(`🔍 [Submission] Concept: ${concept.id}, Column: ${field.columnId}, Column Period: ${(column == null ? void 0 : column.periodStartDate) || "none"} - ${(column == null ? void 0 : column.periodEndDate) || "none"}, Used Period: ${submissionEntry.period.type === "instant" ? submissionEntry.period.date : `${submissionEntry.period.startDate} - ${submissionEntry.period.endDate}`}`);
5394
- if ((column == null ? void 0 : column.type) === "dimension" && ((_a = column.dimensionData) == null ? void 0 : _a.dimensionIdKey)) {
5395
- submissionEntry.dimension = column.dimensionData.dimensionIdKey;
5396
- console.log(`🔍 [DynamicForm] Using dimension key from field's column (${field.columnId}):`, column.dimensionData.dimensionIdKey);
5627
+ console.log(`🔍 [Submission] Concept: ${concept.id}, Column: ${field.columnId}, Column Period: ${(column2 == null ? void 0 : column2.periodStartDate) || "none"} - ${(column2 == null ? void 0 : column2.periodEndDate) || "none"}, Used Period: ${submissionEntry.period.type === "instant" ? submissionEntry.period.date : `${submissionEntry.period.startDate} - ${submissionEntry.period.endDate}`}`);
5628
+ if ((column2 == null ? void 0 : column2.type) === "dimension" && ((_a = column2.dimensionData) == null ? void 0 : _a.dimensionIdKey)) {
5629
+ submissionEntry.dimension = column2.dimensionData.dimensionIdKey;
5630
+ console.log(`🔍 [DynamicForm] Using dimension key from field's column (${field.columnId}):`, column2.dimensionData.dimensionIdKey);
5397
5631
  } else {
5398
- console.log(`🔍 [DynamicForm] No dimension data found for field column ${field.columnId}. Column type: ${column == null ? void 0 : column.type}, has dimensionData: ${!!(column == null ? void 0 : column.dimensionData)}`);
5632
+ console.log(`🔍 [DynamicForm] No dimension data found for field column ${field.columnId}. Column type: ${column2 == null ? void 0 : column2.type}, has dimensionData: ${!!(column2 == null ? void 0 : column2.dimensionData)}`);
5399
5633
  }
5400
5634
  if (this._typedMemberData[field.columnId]) {
5401
- const applicableTypedDimensions = this._getApplicableTypedDimensions(concept, section);
5635
+ const applicableTypedDimensions = this._getApplicableTypedDimensions(concept, section2);
5402
5636
  console.log(`🔍 [DynamicForm] Concept ${concept.id} applicable typed dimensions:`, applicableTypedDimensions);
5403
5637
  if (applicableTypedDimensions.length > 0) {
5404
5638
  const filteredTypedMembers = {};
5405
5639
  const allTypedMemberData = this._typedMemberData[field.columnId];
5406
5640
  applicableTypedDimensions.forEach((dimensionId) => {
5407
5641
  if (allTypedMemberData[dimensionId]) {
5408
- const memberName = this._getTypedMemberNameForAxis(dimensionId, section);
5642
+ const memberName = this._getTypedMemberNameForAxis(dimensionId, section2);
5409
5643
  filteredTypedMembers[dimensionId] = {
5410
5644
  value: allTypedMemberData[dimensionId],
5411
5645
  memberName: memberName || "Unknown"
@@ -5423,12 +5657,12 @@ let JupiterDynamicForm = class extends LitElement {
5423
5657
  }
5424
5658
  } else {
5425
5659
  console.log(`🔍 [DynamicForm] No typed member data found for column ${field.columnId}. Available columns:`, Object.keys(this._typedMemberData));
5426
- if (column) {
5660
+ if (column2) {
5427
5661
  console.log(`🔍 [DynamicForm] Column details:`, {
5428
- id: column.id,
5429
- type: column.type,
5430
- hasTypedMembers: (_b = column.dimensionData) == null ? void 0 : _b.hasTypedMembers,
5431
- dimensionData: column.dimensionData
5662
+ id: column2.id,
5663
+ type: column2.type,
5664
+ hasTypedMembers: (_b = column2.dimensionData) == null ? void 0 : _b.hasTypedMembers,
5665
+ dimensionData: column2.dimensionData
5432
5666
  });
5433
5667
  }
5434
5668
  }
@@ -5440,7 +5674,7 @@ let JupiterDynamicForm = class extends LitElement {
5440
5674
  });
5441
5675
  }
5442
5676
  if (concept.children) {
5443
- this._processConceptsForSubmission(concept.children, submissionData, section);
5677
+ this._processConceptsForSubmission(concept.children, submissionData, section2);
5444
5678
  }
5445
5679
  });
5446
5680
  }
@@ -5472,32 +5706,32 @@ let JupiterDynamicForm = class extends LitElement {
5472
5706
  _handleSidePanelRoleClick(roleId) {
5473
5707
  this._activeSidePanelRoleId = roleId;
5474
5708
  }
5475
- _renderAdminModeContent(section) {
5709
+ _renderAdminModeContent(section2) {
5476
5710
  var _a, _b, _c;
5477
- if (!section) {
5711
+ if (!section2) {
5478
5712
  return html`
5479
5713
  <div class="admin-mode-container">
5480
5714
  <p>No role selected</p>
5481
5715
  </div>
5482
5716
  `;
5483
5717
  }
5484
- const showPreviousYearChecked = ((_a = this._adminRoleConfigs[section.id]) == null ? void 0 : _a.showPreviousYear) ?? section.showPreviousYear ?? false;
5485
- const instantChecked = ((_b = this._adminRoleConfigs[section.id]) == null ? void 0 : _b.instant) ?? section.instant ?? false;
5486
- const durationChecked = ((_c = this._adminRoleConfigs[section.id]) == null ? void 0 : _c.duration) ?? section.duration ?? false;
5487
- const hasMixedPeriodTypes = section.showPeriodControl === true;
5718
+ const showPreviousYearChecked = ((_a = this._adminRoleConfigs[section2.id]) == null ? void 0 : _a.showPreviousYear) ?? section2.showPreviousYear ?? false;
5719
+ const instantChecked = ((_b = this._adminRoleConfigs[section2.id]) == null ? void 0 : _b.instant) ?? section2.instant ?? false;
5720
+ const durationChecked = ((_c = this._adminRoleConfigs[section2.id]) == null ? void 0 : _c.duration) ?? section2.duration ?? false;
5721
+ const hasMixedPeriodTypes = section2.showPeriodControl === true;
5488
5722
  return html`
5489
5723
  <div class="admin-mode-container">
5490
- <h2 class="admin-mode-title">Role Configuration: ${section.title}</h2>
5724
+ <h2 class="admin-mode-title">Role Configuration: ${section2.title}</h2>
5491
5725
  <div class="admin-roles-list">
5492
5726
  <div class="admin-role-item">
5493
5727
  <div class="admin-role-checkbox">
5494
5728
  <input
5495
5729
  type="checkbox"
5496
- id="admin-prev-year-${section.id}"
5730
+ id="admin-prev-year-${section2.id}"
5497
5731
  .checked="${showPreviousYearChecked}"
5498
- @change="${(e2) => this._handleAdminCheckboxChange(section.id, "showPreviousYear", e2.target.checked)}"
5732
+ @change="${(e2) => this._handleAdminCheckboxChange(section2.id, "showPreviousYear", e2.target.checked)}"
5499
5733
  />
5500
- <label for="admin-prev-year-${section.id}">Show Previous Year Column</label>
5734
+ <label for="admin-prev-year-${section2.id}">Show Previous Year Column</label>
5501
5735
  </div>
5502
5736
  </div>
5503
5737
 
@@ -5506,11 +5740,11 @@ let JupiterDynamicForm = class extends LitElement {
5506
5740
  <div class="admin-role-checkbox">
5507
5741
  <input
5508
5742
  type="checkbox"
5509
- id="admin-instant-${section.id}"
5743
+ id="admin-instant-${section2.id}"
5510
5744
  .checked="${instantChecked}"
5511
- @change="${(e2) => this._handleAdminCheckboxChange(section.id, "instant", e2.target.checked)}"
5745
+ @change="${(e2) => this._handleAdminCheckboxChange(section2.id, "instant", e2.target.checked)}"
5512
5746
  />
5513
- <label for="admin-instant-${section.id}">Show Instant Column</label>
5747
+ <label for="admin-instant-${section2.id}">Show Instant Column</label>
5514
5748
  </div>
5515
5749
  </div>
5516
5750
 
@@ -5518,11 +5752,11 @@ let JupiterDynamicForm = class extends LitElement {
5518
5752
  <div class="admin-role-checkbox">
5519
5753
  <input
5520
5754
  type="checkbox"
5521
- id="admin-duration-${section.id}"
5755
+ id="admin-duration-${section2.id}"
5522
5756
  .checked="${durationChecked}"
5523
- @change="${(e2) => this._handleAdminCheckboxChange(section.id, "duration", e2.target.checked)}"
5757
+ @change="${(e2) => this._handleAdminCheckboxChange(section2.id, "duration", e2.target.checked)}"
5524
5758
  />
5525
- <label for="admin-duration-${section.id}">Show Duration Column</label>
5759
+ <label for="admin-duration-${section2.id}">Show Duration Column</label>
5526
5760
  </div>
5527
5761
  </div>
5528
5762
  ` : ""}
@@ -5584,7 +5818,7 @@ let JupiterDynamicForm = class extends LitElement {
5584
5818
  <!-- Validation Summary -->
5585
5819
  ${showValidationSummary ? html`
5586
5820
  <div class="validation-summary">
5587
- <h4 class="validation-summary-title">Please fix the following errors:</h4>
5821
+ <h4 class="validation-summary-title">${I18n.t("validation.summary")}</h4>
5588
5822
  <ul class="validation-summary-list">
5589
5823
  ${this._errors.filter((e2) => e2.severity === "error").map((error) => html`
5590
5824
  <li class="validation-summary-item">${error.message}</li>
@@ -5594,27 +5828,27 @@ let JupiterDynamicForm = class extends LitElement {
5594
5828
  ` : ""}
5595
5829
 
5596
5830
  <!-- Form Sections or No Selection Message (hidden in admin mode) -->
5597
- ${this.mode === "admin" ? schema.sections.map((section, index) => html`
5831
+ ${this.mode === "admin" ? schema.sections.map((section2, index) => html`
5598
5832
  <div class="admin-mode-placeholder">
5599
- ${this._renderAdminModeContent(section)}
5833
+ ${this._renderAdminModeContent(section2)}
5600
5834
  </div>
5601
5835
  `) : schema.sections.length === 0 ? html`
5602
5836
  <div class="no-roles-message">
5603
- <h3>No Roles Selected</h3>
5604
- <p>Please use the "Filter Roles" button below to select which sections you want to work with.</p>
5605
- <p>Available roles: ${this._allSections.length}</p>
5837
+ <h3>${I18n.t("form.noRoleSelected")}</h3>
5838
+ <p>${I18n.t("filter.selectRoles")}</p>
5839
+ <p>${I18n.t("filter.roles")}: ${this._allSections.length}</p>
5606
5840
  </div>
5607
- ` : schema.sections.map((section, index) => html`
5841
+ ` : schema.sections.map((section2, index) => html`
5608
5842
  <jupiter-form-section
5609
- .section="${section}"
5610
- .columns="${section.columns || this._columns}"
5843
+ .section="${section2}"
5844
+ .columns="${section2.columns || this._columns}"
5611
5845
  .formData="${this._formData}"
5612
5846
  .typedMemberData="${this._typedMemberData}"
5613
5847
  .disabled="${this.disabled || this.readonly}"
5614
5848
  .collapsible="${config.collapsibleSections !== false}"
5615
5849
  .locale="${config.locale || "en-US"}"
5616
5850
  .isFirstSection="${index === 0}"
5617
- .availableDimensions="${this._getAvailableDimensionsForSection(section.id)}"
5851
+ .availableDimensions="${this._getAvailableDimensionsForSection(section2.id)}"
5618
5852
  @field-change="${this._handleFieldChange}"
5619
5853
  @typed-member-change="${this._handleTypedMemberChange}"
5620
5854
  @section-expand="${this._handleSectionExpand}"
@@ -5636,12 +5870,12 @@ let JupiterDynamicForm = class extends LitElement {
5636
5870
  <div class="side-panel-layout">
5637
5871
  <!-- Left: Roles List (filtered) -->
5638
5872
  <div class="side-panel-roles-list">
5639
- ${visibleSections.map((section) => html`
5873
+ ${visibleSections.map((section2) => html`
5640
5874
  <div
5641
- class="side-panel-role-item ${section.id === this._activeSidePanelRoleId ? "active" : ""}"
5642
- @click="${() => this._handleSidePanelRoleClick(section.id)}"
5875
+ class="side-panel-role-item ${section2.id === this._activeSidePanelRoleId ? "active" : ""}"
5876
+ @click="${() => this._handleSidePanelRoleClick(section2.id)}"
5643
5877
  >
5644
- ${section.title}
5878
+ ${section2.title}
5645
5879
  </div>
5646
5880
  `)}
5647
5881
  </div>
@@ -5687,8 +5921,8 @@ let JupiterDynamicForm = class extends LitElement {
5687
5921
  ></jupiter-form-section>
5688
5922
  ` : html`
5689
5923
  <div class="no-roles-message">
5690
- <h3>No Role Selected</h3>
5691
- <p>Please select a role from the list on the left.</p>
5924
+ <h3>${I18n.t("form.noRoleSelected")}</h3>
5925
+ <p>${I18n.t("form.pleaseSelectRole")}</p>
5692
5926
  </div>
5693
5927
  `}
5694
5928
  </div>
@@ -5722,7 +5956,7 @@ let JupiterDynamicForm = class extends LitElement {
5722
5956
  const showValidationSummary = config.showValidationSummary !== false && errorCount > 0 && this._submitted;
5723
5957
  const schema = this._currentSchema;
5724
5958
  if (!schema) {
5725
- return html`<div>Loading form...</div>`;
5959
+ return html`<div>${I18n.t("form.loading")}</div>`;
5726
5960
  }
5727
5961
  return html`
5728
5962
  <div class="form-container">
@@ -5751,7 +5985,7 @@ let JupiterDynamicForm = class extends LitElement {
5751
5985
  <svg class="filter-icon" viewBox="0 0 24 24">
5752
5986
  <path d="M10 18h4v-2h-4v2zM3 6v2h18V6H3zm3 7h12v-2H6v2z"/>
5753
5987
  </svg>
5754
- ${this._selectedRoleIds.length === 0 ? "Select Roles" : "Filter Roles"}
5988
+ ${this._selectedRoleIds.length === 0 ? I18n.t("filter.selectRoles") : I18n.t("filter.filterRoles")}
5755
5989
  <span class="roles-count">${this._selectedRoleIds.length}/${this._allSections.length}</span>
5756
5990
  </button>
5757
5991
  ` : ""}
@@ -5761,7 +5995,7 @@ let JupiterDynamicForm = class extends LitElement {
5761
5995
  @click="${this._handleSaveDraft}"
5762
5996
  ?disabled="${this.disabled || this.readonly}"
5763
5997
  >
5764
- Save Draft
5998
+ ${I18n.t("form.saveDraft")}
5765
5999
  </button>
5766
6000
 
5767
6001
  <button
@@ -5769,13 +6003,13 @@ let JupiterDynamicForm = class extends LitElement {
5769
6003
  @click="${this._handleSubmit}"
5770
6004
  ?disabled="${this.disabled || this.readonly}"
5771
6005
  >
5772
- Submit
6006
+ ${I18n.t("form.submit")}
5773
6007
  </button>
5774
6008
 
5775
6009
  <div class="form-meta">
5776
- <span>Errors: ${errorCount}</span>
5777
- <span>Modified: ${this._dirty ? "Yes" : "No"}</span>
5778
- <span>Valid: ${this._valid ? "Yes" : "No"}</span>
6010
+ <span>${I18n.t("form.errors")}: ${errorCount}</span>
6011
+ <span>${I18n.t("form.modified")}: ${this._dirty ? I18n.t("form.yes") : I18n.t("form.no")}</span>
6012
+ <span>${I18n.t("form.valid")}: ${this._valid ? I18n.t("form.yes") : I18n.t("form.no")}</span>
5779
6013
  </div>
5780
6014
  </div>
5781
6015