jupiter-dynamic-forms 1.14.3 → 1.14.5

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
@@ -1537,7 +1537,15 @@ const filter$1 = {
1537
1537
  uri: "URI",
1538
1538
  dimensionMemberSelection: "Dimension Member Selection",
1539
1539
  selectAllMembers: "Select All",
1540
- clearMembers: "Clear"
1540
+ clearMembers: "Clear",
1541
+ availableRoles: "Available Roles",
1542
+ chosenRoles: "Chosen Roles",
1543
+ roleCount: "role(s)",
1544
+ rolesSelected: "role(s) selected",
1545
+ addSelectedRole: "Add selected role",
1546
+ addAllRoles: "Add all roles",
1547
+ removeSelectedRole: "Remove selected role",
1548
+ removeAllRoles: "Remove all roles"
1541
1549
  };
1542
1550
  const column$1 = {
1543
1551
  addColumn: "Add Column",
@@ -1653,7 +1661,15 @@ const filter = {
1653
1661
  uri: "URI",
1654
1662
  dimensionMemberSelection: "Dimensieleden selectie",
1655
1663
  selectAllMembers: "Alles selecteren",
1656
- clearMembers: "Wissen"
1664
+ clearMembers: "Wissen",
1665
+ availableRoles: "Beschikbare rollen",
1666
+ chosenRoles: "Gekozen rollen",
1667
+ roleCount: "rol(len)",
1668
+ rolesSelected: "rol(len) geselecteerd",
1669
+ addSelectedRole: "Geselecteerde rol toevoegen",
1670
+ addAllRoles: "Alle rollen toevoegen",
1671
+ removeSelectedRole: "Geselecteerde rol verwijderen",
1672
+ removeAllRoles: "Alle rollen verwijderen"
1657
1673
  };
1658
1674
  const column = {
1659
1675
  addColumn: "Kolom toevoegen",
@@ -1936,6 +1952,8 @@ class DraftStorageService {
1936
1952
  columnId: column2.id,
1937
1953
  label: column2.title,
1938
1954
  // FormColumn uses 'title' not 'label'
1955
+ description: column2.description,
1956
+ // Save description (period display)
1939
1957
  periodType: this._inferPeriodTypeFromColumn(column2),
1940
1958
  date: column2.periodStartDate,
1941
1959
  // Use periodStartDate for instant
@@ -3905,7 +3923,7 @@ let JupiterAddColumnDialog = class extends LitElement {
3905
3923
  }
3906
3924
  _autoSelectSingleMemberDimensions() {
3907
3925
  this.availableDimensions.forEach((dimension) => {
3908
- if (dimension.members && dimension.members.length === 1) {
3926
+ if (dimension.members && dimension.members.length > 0) {
3909
3927
  const member = dimension.members[0];
3910
3928
  const selection = {
3911
3929
  axisId: dimension.id,
@@ -3915,6 +3933,7 @@ let JupiterAddColumnDialog = class extends LitElement {
3915
3933
  isTyped: false
3916
3934
  };
3917
3935
  this._selectedDimensions.set(dimension.id, selection);
3936
+ console.log(`🎯 Auto-selected default member: ${dimension.axisLabel} -> ${member.label}`);
3918
3937
  } else if (dimension.typedMember && (!dimension.members || dimension.members.length === 0)) {
3919
3938
  const selection = {
3920
3939
  axisId: dimension.id,
@@ -3923,6 +3942,7 @@ let JupiterAddColumnDialog = class extends LitElement {
3923
3942
  // Note: typedValue will be entered in column header, not here
3924
3943
  };
3925
3944
  this._selectedDimensions.set(dimension.id, selection);
3945
+ console.log(`🎯 Auto-selected typed dimension: ${dimension.axisLabel} (value will be entered in column header)`);
3926
3946
  }
3927
3947
  });
3928
3948
  }
@@ -5696,7 +5716,7 @@ let JupiterFilterRolesDialog = class extends LitElement {
5696
5716
  <!-- Available Roles Panel -->
5697
5717
  <div class="picklist-panel">
5698
5718
  <div class="picklist-header">
5699
- Available Roles (${this._getAvailableRoles().length})
5719
+ ${I18n.t("filter.availableRoles")} (${this._getAvailableRoles().length})
5700
5720
  </div>
5701
5721
  <div class="picklist-search">
5702
5722
  <div class="search-container">
@@ -5739,7 +5759,7 @@ let JupiterFilterRolesDialog = class extends LitElement {
5739
5759
  })}
5740
5760
  </div>
5741
5761
  <div class="picklist-count">
5742
- ${this._getAvailableRoles().length} role(s)
5762
+ ${this._getAvailableRoles().length} ${I18n.t("filter.roleCount")}
5743
5763
  </div>
5744
5764
  </div>
5745
5765
 
@@ -5749,7 +5769,7 @@ let JupiterFilterRolesDialog = class extends LitElement {
5749
5769
  class="picklist-button"
5750
5770
  @click="${this._moveToChosen}"
5751
5771
  ?disabled="${!this._selectedAvailableRole}"
5752
- title="Add selected role"
5772
+ title="${I18n.t("filter.addSelectedRole")}"
5753
5773
  >
5754
5774
 
5755
5775
  </button>
@@ -5757,7 +5777,7 @@ let JupiterFilterRolesDialog = class extends LitElement {
5757
5777
  class="picklist-button"
5758
5778
  @click="${this._moveAllToChosen}"
5759
5779
  ?disabled="${this._getAvailableRoles().length === 0}"
5760
- title="Add all roles"
5780
+ title="${I18n.t("filter.addAllRoles")}"
5761
5781
  >
5762
5782
  »
5763
5783
  </button>
@@ -5765,7 +5785,7 @@ let JupiterFilterRolesDialog = class extends LitElement {
5765
5785
  class="picklist-button"
5766
5786
  @click="${this._moveToAvailable}"
5767
5787
  ?disabled="${!this._selectedChosenRole}"
5768
- title="Remove selected role"
5788
+ title="${I18n.t("filter.removeSelectedRole")}"
5769
5789
  >
5770
5790
 
5771
5791
  </button>
@@ -5773,7 +5793,7 @@ let JupiterFilterRolesDialog = class extends LitElement {
5773
5793
  class="picklist-button"
5774
5794
  @click="${this._moveAllToAvailable}"
5775
5795
  ?disabled="${this._tempSelectedRoles.size === 0}"
5776
- title="Remove all roles"
5796
+ title="${I18n.t("filter.removeAllRoles")}"
5777
5797
  >
5778
5798
  «
5779
5799
  </button>
@@ -5782,7 +5802,7 @@ let JupiterFilterRolesDialog = class extends LitElement {
5782
5802
  <!-- Chosen Roles Panel -->
5783
5803
  <div class="picklist-panel">
5784
5804
  <div class="picklist-header">
5785
- Chosen Roles (${this._tempSelectedRoles.size})
5805
+ ${I18n.t("filter.chosenRoles")} (${this._tempSelectedRoles.size})
5786
5806
  </div>
5787
5807
  <div class="picklist-search">
5788
5808
  <div class="search-container">
@@ -5831,7 +5851,7 @@ let JupiterFilterRolesDialog = class extends LitElement {
5831
5851
  })}
5832
5852
  </div>
5833
5853
  <div class="picklist-count">
5834
- ${this._tempSelectedRoles.size} role(s) selected
5854
+ ${this._tempSelectedRoles.size} ${I18n.t("filter.rolesSelected")}
5835
5855
  </div>
5836
5856
  </div>
5837
5857
  </div>
@@ -6754,6 +6774,20 @@ let JupiterDynamicForm = class extends LitElement {
6754
6774
  );
6755
6775
  console.log("✅ Generated schema with sections:", this._currentSchema.sections.length);
6756
6776
  this._allSections = [...this._currentSchema.sections];
6777
+ if (Array.isArray(this._selectedRoleIds) && this._selectedRoleIds.length > 0 && typeof this._selectedRoleIds[0] === "object") {
6778
+ console.log("🔄 Applying custom role order to _allSections from _selectedRoleIds");
6779
+ const enhancedRoles = this._selectedRoleIds;
6780
+ const orderMap = /* @__PURE__ */ new Map();
6781
+ enhancedRoles.forEach((role) => {
6782
+ orderMap.set(role.roleId, role.order);
6783
+ });
6784
+ this._allSections = [...this._allSections].sort((a2, b2) => {
6785
+ const orderA = orderMap.get(a2.id) ?? 999;
6786
+ const orderB = orderMap.get(b2.id) ?? 999;
6787
+ return orderA - orderB;
6788
+ });
6789
+ console.log("✅ Custom order applied to _allSections:", this._allSections.map((s2) => s2.title));
6790
+ }
6757
6791
  if (this.financialStatementsTypeAxis && this.financialStatementsTypeAxis.length > 0) {
6758
6792
  console.log("🔍 Applying financialStatementsTypeAxis filter:", this.financialStatementsTypeAxis);
6759
6793
  console.log("📊 Sections before filter:", this._allSections.length);
@@ -7545,9 +7579,9 @@ let JupiterDynamicForm = class extends LitElement {
7545
7579
  dimensionKeys.push(`${dimSelection.axisId}|${dimSelection.memberId}`);
7546
7580
  }
7547
7581
  }
7548
- const periodPart = request.periodType === "instant" ? `(${request.instantDate})` : `(${this._formatPeriodDisplay(request.startDate, request.endDate)})`;
7549
7582
  if (dimensionParts.length > 0) {
7550
- title = `${dimensionParts.join(" | ")} ${periodPart}`;
7583
+ title = dimensionParts.join(" | ");
7584
+ description = request.periodType === "instant" ? request.instantDate || "" : this._formatPeriodDisplay(request.startDate, request.endDate);
7551
7585
  dimensionData = {
7552
7586
  dimensionId: newColumnId,
7553
7587
  memberValue: dimensionParts.join(" | "),
@@ -7569,8 +7603,8 @@ let JupiterDynamicForm = class extends LitElement {
7569
7603
  const axisLabel = ((_d = dimension.labels.find((l2) => l2.role === "http://www.xbrl.org/2003/role/label")) == null ? void 0 : _d.label) || dimension.conceptName;
7570
7604
  const firstMember = dimension.members[0];
7571
7605
  const memberLabel = ((_e = firstMember.labels.find((l2) => l2.role === "http://www.xbrl.org/2003/role/label")) == null ? void 0 : _e.label) || firstMember.conceptName;
7572
- const periodPart = request.periodType === "instant" ? `(${request.instantDate})` : `(${this._formatPeriodDisplay(request.startDate, request.endDate)})`;
7573
- title = `${memberLabel} ${periodPart}`;
7606
+ title = memberLabel;
7607
+ description = request.periodType === "instant" ? request.instantDate || "" : this._formatPeriodDisplay(request.startDate, request.endDate);
7574
7608
  dimensionData = {
7575
7609
  dimensionId: newColumnId,
7576
7610
  axisId: dimension.id,
@@ -8182,6 +8216,8 @@ let JupiterDynamicForm = class extends LitElement {
8182
8216
  const column2 = {
8183
8217
  id: col.columnId,
8184
8218
  title: col.label,
8219
+ description: col.description,
8220
+ // Restore description (period display)
8185
8221
  type: col.dimensionData ? "dimension" : "base",
8186
8222
  periodStartDate: col.startDate || col.date,
8187
8223
  periodEndDate: col.endDate || col.date,
@@ -8191,7 +8227,7 @@ let JupiterDynamicForm = class extends LitElement {
8191
8227
  periodType: col.periodType
8192
8228
  // CRITICAL: Preserve explicit period type
8193
8229
  };
8194
- console.log(`📅 [Draft Restore] Restoring column ${col.columnId}: startDate=${column2.periodStartDate}, endDate=${column2.periodEndDate}, periodType=${column2.periodType}`);
8230
+ console.log(`📅 [Draft Restore] Restoring column ${col.columnId}: title=${column2.title}, description=${column2.description}, startDate=${column2.periodStartDate}, endDate=${column2.periodEndDate}, periodType=${column2.periodType}`);
8195
8231
  return column2;
8196
8232
  });
8197
8233
  if (((_a = this.xbrlInput) == null ? void 0 : _a.datatypes) && !section2.datatypes) {
@@ -8253,6 +8289,8 @@ let JupiterDynamicForm = class extends LitElement {
8253
8289
  const newColumn = {
8254
8290
  id: col.columnId,
8255
8291
  title: col.label,
8292
+ description: col.description,
8293
+ // Restore description (period display)
8256
8294
  type: col.dimensionData ? "dimension" : "base",
8257
8295
  periodStartDate: col.startDate || col.date,
8258
8296
  periodEndDate: col.endDate || col.date,
@@ -8262,7 +8300,7 @@ let JupiterDynamicForm = class extends LitElement {
8262
8300
  periodType: col.periodType
8263
8301
  // CRITICAL: Preserve explicit period type
8264
8302
  };
8265
- console.log(`📅 [New Column Created] Column ${newColumn.id}: periodStartDate=${newColumn.periodStartDate}, periodEndDate=${newColumn.periodEndDate}, periodType=${newColumn.periodType}`);
8303
+ console.log(`📅 [New Column Created] Column ${newColumn.id}: title=${newColumn.title}, description=${newColumn.description}, periodStartDate=${newColumn.periodStartDate}, periodEndDate=${newColumn.periodEndDate}, periodType=${newColumn.periodType}`);
8266
8304
  section2.columns.push(newColumn);
8267
8305
  console.log(` └─ Added custom column ${col.columnId} to section ${section2.id}`);
8268
8306
  }
@@ -8803,7 +8841,7 @@ let JupiterDynamicForm = class extends LitElement {
8803
8841
  });
8804
8842
  }
8805
8843
  _renderAdminModeContent(section2) {
8806
- var _a;
8844
+ var _a, _b;
8807
8845
  if (!section2) {
8808
8846
  return html`
8809
8847
  <div class="admin-mode-container">
@@ -8812,6 +8850,34 @@ let JupiterDynamicForm = class extends LitElement {
8812
8850
  `;
8813
8851
  }
8814
8852
  const showPreviousYearChecked = ((_a = this._periodPreferences[section2.id]) == null ? void 0 : _a.showPreviousYear) ?? section2.showPreviousYear ?? false;
8853
+ const dimensions = this._getDimensionsForRole(section2.id);
8854
+ const hasDimensions = dimensions.length > 0;
8855
+ if (hasDimensions && !((_b = this._periodPreferences[section2.id]) == null ? void 0 : _b.dimensionSelections)) {
8856
+ const currentPref = this._periodPreferences[section2.id] || {
8857
+ showDuration: true,
8858
+ showInstant: true,
8859
+ showPreviousYear: false
8860
+ };
8861
+ currentPref.dimensionSelections = [];
8862
+ dimensions.forEach((dimension) => {
8863
+ var _a2, _b2;
8864
+ const allMembers = this._getAllDimensionMembers(dimension.members);
8865
+ const allMemberIds = allMembers.map((m) => m.id);
8866
+ const dimensionLabel = ((_b2 = (_a2 = dimension.labels) == null ? void 0 : _a2.find((l2) => l2.role === "http://www.xbrl.org/2003/role/label")) == null ? void 0 : _b2.label) || dimension.conceptName;
8867
+ if (currentPref.dimensionSelections) {
8868
+ currentPref.dimensionSelections.push({
8869
+ dimensionId: dimension.id,
8870
+ dimensionLabel,
8871
+ selectedMemberIds: allMemberIds
8872
+ });
8873
+ }
8874
+ });
8875
+ this._periodPreferences = {
8876
+ ...this._periodPreferences,
8877
+ [section2.id]: currentPref
8878
+ };
8879
+ console.log("✅ [Admin Mode] Initialized all dimension members as selected by default for role:", section2.id);
8880
+ }
8815
8881
  return html`
8816
8882
  <div class="admin-mode-container">
8817
8883
  <h2 class="admin-mode-title">Role Configuration: ${section2.title}</h2>
@@ -8827,6 +8893,58 @@ let JupiterDynamicForm = class extends LitElement {
8827
8893
  <label for="admin-prev-year-${section2.id}">Show Previous Year Column</label>
8828
8894
  </div>
8829
8895
  </div>
8896
+
8897
+ ${hasDimensions ? html`
8898
+ <div class="admin-dimension-section">
8899
+ <div class="admin-dimension-header">📊 ${I18n.t("filter.dimensionMemberSelection")}</div>
8900
+ ${dimensions.map((dimension) => {
8901
+ var _a2, _b2;
8902
+ const allMembers = this._getAllDimensionMembers(dimension.members);
8903
+ const dimensionLabel = ((_b2 = (_a2 = dimension.labels) == null ? void 0 : _a2.find((l2) => l2.role === "http://www.xbrl.org/2003/role/label")) == null ? void 0 : _b2.label) || dimension.conceptName;
8904
+ const isSingleMember = this._isSingleMemberDimension(dimension);
8905
+ return html`
8906
+ <div class="admin-dimension-group">
8907
+ <div class="admin-dimension-label">${dimensionLabel}${isSingleMember ? " (Mandatory)" : ""}</div>
8908
+ <div class="admin-dimension-members">
8909
+ ${allMembers.map((member) => {
8910
+ var _a3, _b3;
8911
+ const memberLabel = ((_b3 = (_a3 = member.labels) == null ? void 0 : _a3.find((l2) => l2.role === "http://www.xbrl.org/2003/role/label")) == null ? void 0 : _b3.label) || member.conceptName;
8912
+ const isChecked = this._isAdminDimensionMemberSelected(section2.id, dimension.id, member.id);
8913
+ return html`
8914
+ <label class="admin-member-checkbox-item">
8915
+ <input
8916
+ type="checkbox"
8917
+ class="admin-member-checkbox"
8918
+ .checked="${isChecked}"
8919
+ ?disabled="${isSingleMember}"
8920
+ @change="${(e2) => this._handleAdminDimensionMemberChange(e2, section2.id, dimension.id, member.id)}"
8921
+ />
8922
+ <span class="admin-member-checkbox-label">${memberLabel}</span>
8923
+ </label>
8924
+ `;
8925
+ })}
8926
+ </div>
8927
+ ${!isSingleMember ? html`
8928
+ <div class="admin-member-select-controls">
8929
+ <button
8930
+ class="admin-member-select-btn"
8931
+ @click="${() => this._selectAllAdminDimensionMembers(section2.id, dimension.id)}"
8932
+ >
8933
+ ${I18n.t("filter.selectAllMembers")}
8934
+ </button>
8935
+ <button
8936
+ class="admin-member-select-btn"
8937
+ @click="${() => this._deselectAllAdminDimensionMembers(section2.id, dimension.id)}"
8938
+ >
8939
+ ${I18n.t("filter.clearMembers")}
8940
+ </button>
8941
+ </div>
8942
+ ` : ""}
8943
+ </div>
8944
+ `;
8945
+ })}
8946
+ </div>
8947
+ ` : ""}
8830
8948
  </div>
8831
8949
  </div>
8832
8950
  `;
@@ -8855,6 +8973,178 @@ let JupiterDynamicForm = class extends LitElement {
8855
8973
  console.log(`✅ [Admin Mode] Updated ${field2} = ${checked} for role ${roleId}`);
8856
8974
  console.log(`📋 [Admin Mode] _periodPreferences now includes:`, this._periodPreferences[roleId]);
8857
8975
  }
8976
+ /**
8977
+ * Get dimensions for a specific role from hypercube data
8978
+ */
8979
+ _getDimensionsForRole(roleId) {
8980
+ var _a, _b, _c, _d;
8981
+ if (!((_b = (_a = this.xbrlInput) == null ? void 0 : _a.hypercubes) == null ? void 0 : _b[0])) {
8982
+ return [];
8983
+ }
8984
+ const hypercubeRole = (_c = this.xbrlInput.hypercubes[0].roles) == null ? void 0 : _c.find((r2) => r2.roleId === roleId);
8985
+ if (!((_d = hypercubeRole == null ? void 0 : hypercubeRole.items) == null ? void 0 : _d.length)) {
8986
+ return [];
8987
+ }
8988
+ const dimensionsMap = /* @__PURE__ */ new Map();
8989
+ hypercubeRole.items.forEach((item) => {
8990
+ if (item.dimensions) {
8991
+ item.dimensions.forEach((dimension) => {
8992
+ if (!dimensionsMap.has(dimension.id)) {
8993
+ dimensionsMap.set(dimension.id, dimension);
8994
+ }
8995
+ });
8996
+ }
8997
+ });
8998
+ return Array.from(dimensionsMap.values());
8999
+ }
9000
+ /**
9001
+ * Get all dimension members recursively
9002
+ */
9003
+ _getAllDimensionMembers(members) {
9004
+ if (!members || members.length === 0) {
9005
+ return [];
9006
+ }
9007
+ let allMembers = [];
9008
+ members.forEach((member) => {
9009
+ allMembers.push(member);
9010
+ if (member.children && member.children.length > 0) {
9011
+ allMembers = allMembers.concat(this._getAllDimensionMembers(member.children));
9012
+ }
9013
+ });
9014
+ return allMembers;
9015
+ }
9016
+ /**
9017
+ * Check if a dimension has only one member (single choice, mandatory)
9018
+ */
9019
+ _isSingleMemberDimension(dimension) {
9020
+ if (!dimension || !dimension.members) {
9021
+ return false;
9022
+ }
9023
+ const allMembers = this._getAllDimensionMembers(dimension.members);
9024
+ return allMembers.length === 1;
9025
+ }
9026
+ /**
9027
+ * Handle dimension member selection in admin mode
9028
+ */
9029
+ _handleAdminDimensionMemberChange(event, roleId, dimensionId, memberId) {
9030
+ var _a, _b;
9031
+ event.stopPropagation();
9032
+ const checkbox = event.target;
9033
+ const currentPref = this._periodPreferences[roleId] || {
9034
+ showDuration: true,
9035
+ showInstant: true,
9036
+ showPreviousYear: false,
9037
+ dimensionSelections: []
9038
+ };
9039
+ if (!currentPref.dimensionSelections) {
9040
+ currentPref.dimensionSelections = [];
9041
+ }
9042
+ let dimensionSelection = currentPref.dimensionSelections.find(
9043
+ (ds) => ds.dimensionId === dimensionId
9044
+ );
9045
+ if (!dimensionSelection) {
9046
+ const dimensions = this._getDimensionsForRole(roleId);
9047
+ const dimension = dimensions.find((d2) => d2.id === dimensionId);
9048
+ const dimensionLabel = ((_b = (_a = dimension == null ? void 0 : dimension.labels) == null ? void 0 : _a.find((l2) => l2.role === "http://www.xbrl.org/2003/role/label")) == null ? void 0 : _b.label) || dimensionId;
9049
+ dimensionSelection = {
9050
+ dimensionId,
9051
+ dimensionLabel,
9052
+ selectedMemberIds: []
9053
+ };
9054
+ currentPref.dimensionSelections.push(dimensionSelection);
9055
+ }
9056
+ if (checkbox.checked) {
9057
+ if (!dimensionSelection.selectedMemberIds.includes(memberId)) {
9058
+ dimensionSelection.selectedMemberIds.push(memberId);
9059
+ }
9060
+ } else {
9061
+ dimensionSelection.selectedMemberIds = dimensionSelection.selectedMemberIds.filter(
9062
+ (id) => id !== memberId
9063
+ );
9064
+ }
9065
+ this._periodPreferences = {
9066
+ ...this._periodPreferences,
9067
+ [roleId]: currentPref
9068
+ };
9069
+ console.log("📊 [Admin Mode] Updated dimension selections:", this._periodPreferences[roleId].dimensionSelections);
9070
+ this.requestUpdate();
9071
+ }
9072
+ /**
9073
+ * Check if a dimension member is selected in admin mode
9074
+ * Returns true by default if no explicit preference exists (all members checked by default)
9075
+ */
9076
+ _isAdminDimensionMemberSelected(roleId, dimensionId, memberId) {
9077
+ const preferences = this._periodPreferences[roleId];
9078
+ if (!(preferences == null ? void 0 : preferences.dimensionSelections)) {
9079
+ return true;
9080
+ }
9081
+ const dimensionSelection = preferences.dimensionSelections.find(
9082
+ (ds) => ds.dimensionId === dimensionId
9083
+ );
9084
+ if (!dimensionSelection) {
9085
+ return true;
9086
+ }
9087
+ return dimensionSelection.selectedMemberIds.includes(memberId);
9088
+ }
9089
+ /**
9090
+ * Select all members for a dimension in admin mode
9091
+ */
9092
+ _selectAllAdminDimensionMembers(roleId, dimensionId) {
9093
+ var _a, _b;
9094
+ const dimensions = this._getDimensionsForRole(roleId);
9095
+ const dimension = dimensions.find((d2) => d2.id === dimensionId);
9096
+ if (!dimension)
9097
+ return;
9098
+ const allMembers = this._getAllDimensionMembers(dimension.members);
9099
+ const allMemberIds = allMembers.map((m) => m.id);
9100
+ const currentPref = this._periodPreferences[roleId] || {
9101
+ showDuration: true,
9102
+ showInstant: true,
9103
+ showPreviousYear: false,
9104
+ dimensionSelections: []
9105
+ };
9106
+ if (!currentPref.dimensionSelections) {
9107
+ currentPref.dimensionSelections = [];
9108
+ }
9109
+ let dimensionSelection = currentPref.dimensionSelections.find(
9110
+ (ds) => ds.dimensionId === dimensionId
9111
+ );
9112
+ if (!dimensionSelection) {
9113
+ const dimensionLabel = ((_b = (_a = dimension.labels) == null ? void 0 : _a.find((l2) => l2.role === "http://www.xbrl.org/2003/role/label")) == null ? void 0 : _b.label) || dimensionId;
9114
+ dimensionSelection = {
9115
+ dimensionId,
9116
+ dimensionLabel,
9117
+ selectedMemberIds: []
9118
+ };
9119
+ currentPref.dimensionSelections.push(dimensionSelection);
9120
+ }
9121
+ dimensionSelection.selectedMemberIds = allMemberIds;
9122
+ this._periodPreferences = {
9123
+ ...this._periodPreferences,
9124
+ [roleId]: currentPref
9125
+ };
9126
+ this.requestUpdate();
9127
+ }
9128
+ /**
9129
+ * Deselect all members for a dimension in admin mode
9130
+ */
9131
+ _deselectAllAdminDimensionMembers(roleId, dimensionId) {
9132
+ const currentPref = this._periodPreferences[roleId];
9133
+ if (!(currentPref == null ? void 0 : currentPref.dimensionSelections)) {
9134
+ return;
9135
+ }
9136
+ const dimensionSelection = currentPref.dimensionSelections.find(
9137
+ (ds) => ds.dimensionId === dimensionId
9138
+ );
9139
+ if (dimensionSelection) {
9140
+ dimensionSelection.selectedMemberIds = [];
9141
+ }
9142
+ this._periodPreferences = {
9143
+ ...this._periodPreferences,
9144
+ [roleId]: currentPref
9145
+ };
9146
+ this.requestUpdate();
9147
+ }
8858
9148
  _handleAdminModeSubmit() {
8859
9149
  var _a, _b, _c, _d;
8860
9150
  if (!((_c = (_b = (_a = this.xbrlInput) == null ? void 0 : _a.presentation) == null ? void 0 : _b[0]) == null ? void 0 : _c.roles)) {
@@ -9160,7 +9450,7 @@ let JupiterDynamicForm = class extends LitElement {
9160
9450
  @click="${this._handleSubmit}"
9161
9451
  ?disabled="${this.disabled || this.readonly}"
9162
9452
  >
9163
- ${I18n.t("form.submit")}
9453
+ ${this.submitButtonLabel || I18n.t("form.submit")}
9164
9454
  </button>
9165
9455
 
9166
9456
 
@@ -9661,6 +9951,100 @@ JupiterDynamicForm.styles = css`
9661
9951
  user-select: none;
9662
9952
  }
9663
9953
 
9954
+ .admin-dimension-section {
9955
+ margin-top: 16px;
9956
+ padding: 16px;
9957
+ background: var(--jupiter-background, #fff);
9958
+ border: 1px solid var(--jupiter-border-color, #ddd);
9959
+ border-radius: 6px;
9960
+ }
9961
+
9962
+ .admin-dimension-header {
9963
+ font-size: 14px;
9964
+ font-weight: 600;
9965
+ color: var(--jupiter-text-primary, #333);
9966
+ margin-bottom: 16px;
9967
+ padding-bottom: 8px;
9968
+ border-bottom: 1px solid var(--jupiter-border-color, #ddd);
9969
+ }
9970
+
9971
+ .admin-dimension-group {
9972
+ margin-bottom: 16px;
9973
+ }
9974
+
9975
+ .admin-dimension-group:last-child {
9976
+ margin-bottom: 0;
9977
+ }
9978
+
9979
+ .admin-dimension-label {
9980
+ font-size: 13px;
9981
+ font-weight: 500;
9982
+ color: var(--jupiter-text-primary, #333);
9983
+ margin-bottom: 8px;
9984
+ }
9985
+
9986
+ .admin-dimension-members {
9987
+ display: flex;
9988
+ flex-direction: column;
9989
+ gap: 6px;
9990
+ margin-bottom: 8px;
9991
+ }
9992
+
9993
+ .admin-member-checkbox-item {
9994
+ display: flex;
9995
+ align-items: center;
9996
+ gap: 8px;
9997
+ padding: 6px 8px;
9998
+ border-radius: 4px;
9999
+ cursor: pointer;
10000
+ transition: background-color 0.2s ease;
10001
+ }
10002
+
10003
+ .admin-member-checkbox-item:hover {
10004
+ background: var(--jupiter-hover-background, #f5f5f5);
10005
+ }
10006
+
10007
+ .admin-member-checkbox {
10008
+ width: 16px;
10009
+ height: 16px;
10010
+ cursor: pointer;
10011
+ flex-shrink: 0;
10012
+ }
10013
+
10014
+ .admin-member-checkbox-label {
10015
+ font-size: 13px;
10016
+ color: var(--jupiter-text-secondary, #666);
10017
+ user-select: none;
10018
+ flex: 1;
10019
+ }
10020
+
10021
+ .admin-member-select-controls {
10022
+ display: flex;
10023
+ gap: 8px;
10024
+ margin-top: 8px;
10025
+ }
10026
+
10027
+ .admin-member-select-btn {
10028
+ padding: 6px 12px;
10029
+ font-size: 12px;
10030
+ background: var(--jupiter-background-light, #f8f9fa);
10031
+ border: 1px solid var(--jupiter-border-color, #ddd);
10032
+ border-radius: 4px;
10033
+ cursor: pointer;
10034
+ transition: all 0.2s ease;
10035
+ color: var(--jupiter-text-secondary, #666);
10036
+ }
10037
+
10038
+ .admin-member-select-btn:hover {
10039
+ background: var(--jupiter-hover-background, #e8e8e8);
10040
+ border-color: var(--jupiter-primary-color, #1976d2);
10041
+ color: var(--jupiter-primary-color, #1976d2);
10042
+ }
10043
+
10044
+ .admin-member-select-btn:active {
10045
+ transform: translateY(1px);
10046
+ }
10047
+
9664
10048
  /* Error Popup Styles */
9665
10049
  .error-popup-overlay {
9666
10050
  position: fixed;
@@ -9816,6 +10200,9 @@ __decorateClass([
9816
10200
  __decorateClass([
9817
10201
  n2({ type: String })
9818
10202
  ], JupiterDynamicForm.prototype, "mode", 2);
10203
+ __decorateClass([
10204
+ n2({ type: String, attribute: "submit-button-label" })
10205
+ ], JupiterDynamicForm.prototype, "submitButtonLabel", 2);
9819
10206
  __decorateClass([
9820
10207
  n2({ type: Array })
9821
10208
  ], JupiterDynamicForm.prototype, "financialStatementsTypeAxis", 2);