jupiter-dynamic-forms 1.19.0 → 1.19.2

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
@@ -1749,7 +1749,7 @@ const field$1 = {
1749
1749
  enterDecimalValue: "Enter decimal value",
1750
1750
  enterNumberOfShares: "Enter number of shares",
1751
1751
  yearFormat: "YYYY",
1752
- enterPercentage: "Enter percentage",
1752
+ enterPercentage: "e.g. 0.25 for 25% or 0.2550 for 25.50%",
1753
1753
  emailPlaceholder: "email@example.com",
1754
1754
  urlPlaceholder: "https://example.com",
1755
1755
  phonePlaceholder: "+1 (555) 000-0000",
@@ -1760,7 +1760,14 @@ const field$1 = {
1760
1760
  editText: "Edit",
1761
1761
  save: "Save",
1762
1762
  cancel: "Cancel",
1763
- characters: "characters"
1763
+ characters: "characters",
1764
+ editPeriod: "Edit Period",
1765
+ from: "From",
1766
+ to: "To",
1767
+ date: "Date",
1768
+ unit: "Unit",
1769
+ selectUnit: "Select Unit",
1770
+ leaveBlankForInf: "Leave blank for INF"
1764
1771
  };
1765
1772
  const admin$1 = {
1766
1773
  title: "Configure Roles",
@@ -1924,7 +1931,7 @@ const field = {
1924
1931
  enterDecimalValue: "Voer decimale waarde in",
1925
1932
  enterNumberOfShares: "Voer aantal aandelen in",
1926
1933
  yearFormat: "JJJJ",
1927
- enterPercentage: "Voer percentage in",
1934
+ enterPercentage: "bijv. 0,25 voor 25% of 0,2550 voor 25,50%",
1928
1935
  emailPlaceholder: "email@voorbeeld.nl",
1929
1936
  urlPlaceholder: "https://voorbeeld.nl",
1930
1937
  phonePlaceholder: "+31 (0)20 123 4567",
@@ -1935,7 +1942,14 @@ const field = {
1935
1942
  editText: "Bewerken",
1936
1943
  save: "Opslaan",
1937
1944
  cancel: "Annuleren",
1938
- characters: "tekens"
1945
+ characters: "tekens",
1946
+ editPeriod: "Periode bewerken",
1947
+ from: "Van",
1948
+ to: "Tot",
1949
+ date: "Datum",
1950
+ unit: "Eenheid",
1951
+ selectUnit: "Selecteer eenheid",
1952
+ leaveBlankForInf: "Leeg laten voor INF"
1939
1953
  };
1940
1954
  const admin = {
1941
1955
  title: "Rollen configureren",
@@ -3230,7 +3244,9 @@ let JupiterFormField = class extends LitElement {
3230
3244
  }));
3231
3245
  }
3232
3246
  _handleBlur() {
3247
+ let userTypedNewValue = false;
3233
3248
  if (this._isNumericField() && this._numericDraftValue !== null) {
3249
+ userTypedNewValue = true;
3234
3250
  const raw = this._numericDraftValue;
3235
3251
  if (raw === "" || this._isIntermediateNumericValue(raw)) {
3236
3252
  this.value = null;
@@ -3240,7 +3256,7 @@ let JupiterFormField = class extends LitElement {
3240
3256
  }
3241
3257
  this._numericDraftValue = null;
3242
3258
  }
3243
- if (this._isPercentItemType() && this.value !== null && this.value !== void 0) {
3259
+ if (this._isPercentItemType() && userTypedNewValue && this.value !== null && this.value !== void 0) {
3244
3260
  const numVal = Number(this.value);
3245
3261
  if (!isNaN(numVal) && Math.abs(numVal) > 1) {
3246
3262
  this.value = numVal / 100;
@@ -3880,7 +3896,7 @@ let JupiterFormField = class extends LitElement {
3880
3896
  if (this.field.periodType === "instant") {
3881
3897
  return html`
3882
3898
  <div class="period-controls">
3883
- <label>Date:</label>
3899
+ <label>${I18n.t("field.date")}:</label>
3884
3900
  <div class="date-wrapper">
3885
3901
  <input
3886
3902
  type="date"
@@ -3899,7 +3915,7 @@ let JupiterFormField = class extends LitElement {
3899
3915
  } else if (this.field.periodType === "duration") {
3900
3916
  return html`
3901
3917
  <div class="period-controls">
3902
- <label>From:</label>
3918
+ <label>${I18n.t("field.from")}:</label>
3903
3919
  <div class="date-wrapper">
3904
3920
  <input
3905
3921
  type="date"
@@ -3913,7 +3929,7 @@ let JupiterFormField = class extends LitElement {
3913
3929
  a2 2 0 0 0 2-2V6a2 2 0 0 0-2-2zm0 16H5V9h14z"/>
3914
3930
  </svg>
3915
3931
  </div>
3916
- <label>To:</label>
3932
+ <label>${I18n.t("field.to")}:</label>
3917
3933
  <div class="date-wrapper">
3918
3934
  <input
3919
3935
  type="date"
@@ -3937,7 +3953,7 @@ let JupiterFormField = class extends LitElement {
3937
3953
  <div class="period-popup-overlay" @click="${this._handlePopupOverlayClick}">
3938
3954
  <div class="period-popup" @click="${(e2) => e2.stopPropagation()}">
3939
3955
  <div class="period-popup-header">
3940
- <div class="period-popup-title">Edit Period</div>
3956
+ <div class="period-popup-title">${I18n.t("field.editPeriod")}</div>
3941
3957
  <button class="period-popup-close" @click="${this._closePeriodPopup}">
3942
3958
  ×
3943
3959
  </button>
@@ -3946,7 +3962,7 @@ let JupiterFormField = class extends LitElement {
3946
3962
  <div class="period-popup-content">
3947
3963
  ${this.field.periodType === "instant" ? html`
3948
3964
  <div class="period-controls">
3949
- <label>Date:</label>
3965
+ <label>${I18n.t("field.date")}:</label>
3950
3966
  <div class="date-wrapper">
3951
3967
  <input
3952
3968
  type="date"
@@ -3963,7 +3979,7 @@ let JupiterFormField = class extends LitElement {
3963
3979
  </div>
3964
3980
  ` : html`
3965
3981
  <div class="period-controls">
3966
- <label>From:</label>
3982
+ <label>${I18n.t("field.from")}:</label>
3967
3983
  <div class="date-wrapper">
3968
3984
  <input
3969
3985
  type="date"
@@ -3981,7 +3997,7 @@ let JupiterFormField = class extends LitElement {
3981
3997
  </div>
3982
3998
  </div>
3983
3999
  <div class="period-controls">
3984
- <label>To:</label>
4000
+ <label>${I18n.t("field.to")}:</label>
3985
4001
  <div class="date-wrapper">
3986
4002
  <input
3987
4003
  type="date"
@@ -4000,14 +4016,14 @@ let JupiterFormField = class extends LitElement {
4000
4016
 
4001
4017
  ${this._availableUnits.length > 0 ? html`
4002
4018
  <div class="period-controls">
4003
- <label>Unit:</label>
4019
+ <label>${I18n.t("field.unit")}:</label>
4004
4020
  <select
4005
4021
  .value="${this.unit || ""}"
4006
4022
  @change="${this._handleUnitChange}"
4007
4023
  ?disabled="${this.disabled}"
4008
4024
  class="unit-select"
4009
4025
  >
4010
- <option value="">Select Unit</option>
4026
+ <option value="">${I18n.t("field.selectUnit")}</option>
4011
4027
  ${this._availableUnits.map((unit) => html`
4012
4028
  <option value="${unit.id}" ?selected="${this.unit === unit.id}">
4013
4029
  ${unit.label || unit.id}
@@ -4024,7 +4040,7 @@ let JupiterFormField = class extends LitElement {
4024
4040
  type="number"
4025
4041
  min="0"
4026
4042
  class="typed-member-input"
4027
- placeholder="Leave blank for INF"
4043
+ placeholder="${I18n.t("field.leaveBlankForInf")}"
4028
4044
  .value="${this.decimals !== void 0 && this.decimals !== null && this.decimals !== "" ? this.decimals : this.globalDecimals !== "INF" ? this.globalDecimals : ""}"
4029
4045
  @input="${this._handleDecimalsChange}"
4030
4046
  ?disabled="${this.disabled}"
@@ -7160,6 +7176,7 @@ var __decorateClass$1 = (decorators, target, key, kind) => {
7160
7176
  __defProp$1(target, key, result);
7161
7177
  return result;
7162
7178
  };
7179
+ let _lastViewWasAdvancedFilter = false;
7163
7180
  let JupiterFilterRolesDialog = class extends LitElement {
7164
7181
  constructor() {
7165
7182
  super(...arguments);
@@ -7184,6 +7201,7 @@ let JupiterFilterRolesDialog = class extends LitElement {
7184
7201
  this._showAdvancedFilter = false;
7185
7202
  this._showFactsOnly = false;
7186
7203
  this._conceptSearchText = "";
7204
+ this._collapsedRoles = /* @__PURE__ */ new Set();
7187
7205
  }
7188
7206
  connectedCallback() {
7189
7207
  super.connectedCallback();
@@ -7201,9 +7219,8 @@ let JupiterFilterRolesDialog = class extends LitElement {
7201
7219
  this._initializePeriodPreferences();
7202
7220
  }
7203
7221
  if (changedProperties.has("open")) {
7204
- if (!this.open) {
7205
- this._showAdvancedFilter = false;
7206
- } else {
7222
+ if (this.open) {
7223
+ this._showAdvancedFilter = _lastViewWasAdvancedFilter;
7207
7224
  this._showFactsOnly = this.showFactsOnly;
7208
7225
  this._conceptSearchText = this.conceptSearchText;
7209
7226
  }
@@ -7703,11 +7720,22 @@ let JupiterFilterRolesDialog = class extends LitElement {
7703
7720
  this._tempPeriodPreferences = newPreferences;
7704
7721
  this.requestUpdate();
7705
7722
  }
7723
+ _toggleRoleCollapse(roleId) {
7724
+ const next = new Set(this._collapsedRoles);
7725
+ if (next.has(roleId)) {
7726
+ next.delete(roleId);
7727
+ } else {
7728
+ next.add(roleId);
7729
+ }
7730
+ this._collapsedRoles = next;
7731
+ }
7706
7732
  _switchToAdvancedFilter() {
7733
+ _lastViewWasAdvancedFilter = true;
7707
7734
  this._showAdvancedFilter = true;
7708
7735
  this._searchQuery = "";
7709
7736
  }
7710
7737
  _switchToFilterRoles() {
7738
+ _lastViewWasAdvancedFilter = false;
7711
7739
  this._showAdvancedFilter = false;
7712
7740
  }
7713
7741
  _handleFilterChange(e2) {
@@ -8106,94 +8134,100 @@ let JupiterFilterRolesDialog = class extends LitElement {
8106
8134
  </div>
8107
8135
  ` : html`
8108
8136
  ${this._filteredRoles.map((role) => {
8109
- var _a;
8110
8137
  const isSelected = this._tempSelectedRoles.has(role.id);
8111
- role.showPeriodControl === true;
8112
8138
  const preferences = this._tempPeriodPreferences[role.id] || { showDuration: true, showInstant: true };
8113
- console.log("🎨 [Render] Processing role:", role.title, "ID:", role.id);
8114
8139
  const dimensions = this._getDimensionsForRole(role.id);
8115
8140
  const hasDimensions = dimensions.length > 0;
8116
- console.log("🎨 [Render] Role:", role.title, "- Has dimensions:", hasDimensions, "- Count:", dimensions.length);
8141
+ const isCollapsed = this._collapsedRoles.has(role.id);
8117
8142
  return html`
8118
8143
  <div class="role-item">
8119
- <input
8120
- type="checkbox"
8121
- class="role-checkbox"
8122
- .checked="${isSelected}"
8123
- @change="${(e2) => this._handleCheckboxChange(e2, role.id)}"
8124
- />
8125
- <div class="role-info">
8126
- <h4 class="role-title">${role.title}</h4>
8127
- ${((_a = role.metadata) == null ? void 0 : _a.roleURI) ? html`
8128
- <p class="role-description">${I18n.t("filter.uri")}: ${role.metadata.roleURI}</p>
8129
- ` : ""}
8130
-
8131
- <div class="period-controls">
8132
- <p class="period-controls-label">${I18n.t("filter.additionalOptions")}</p>
8133
- <div class="period-checkboxes">
8134
- <label class="period-checkbox-item">
8135
- <input
8136
- type="checkbox"
8137
- class="period-checkbox"
8138
- .checked="${preferences.showPreviousYear}"
8139
- @change="${(e2) => this._handlePeriodCheckboxChange(e2, role.id, "previousYear")}"
8140
- />
8141
- <span class="period-checkbox-label">${I18n.t("filter.showPreviousYear")}</span>
8142
- </label>
8144
+ <div class="role-item-header" @click="${() => this._toggleRoleCollapse(role.id)}">
8145
+ <input
8146
+ type="checkbox"
8147
+ class="role-checkbox"
8148
+ .checked="${isSelected}"
8149
+ @change="${(e2) => {
8150
+ e2.stopPropagation();
8151
+ this._handleCheckboxChange(e2, role.id);
8152
+ }}"
8153
+ @click="${(e2) => e2.stopPropagation()}"
8154
+ />
8155
+ <h5 class="role-title">${role.title}</h5>
8156
+ <button class="role-collapse-btn" title="${isCollapsed ? "Expand" : "Collapse"}">
8157
+ <svg class="role-collapse-chevron ${isCollapsed ? "collapsed" : ""}" viewBox="0 0 24 24">
8158
+ <path d="M7 10l5 5 5-5z"/>
8159
+ </svg>
8160
+ </button>
8161
+ </div>
8162
+
8163
+ ${!isCollapsed ? html`
8164
+ <div class="role-item-body">
8165
+ <div class="period-controls">
8166
+ <p class="period-controls-label">${I18n.t("filter.additionalOptions")}</p>
8167
+ <div class="period-checkboxes">
8168
+ <label class="period-checkbox-item">
8169
+ <input
8170
+ type="checkbox"
8171
+ class="period-checkbox"
8172
+ .checked="${preferences.showPreviousYear}"
8173
+ @change="${(e2) => this._handlePeriodCheckboxChange(e2, role.id, "previousYear")}"
8174
+ />
8175
+ <span class="period-checkbox-label">${I18n.t("filter.showPreviousYear")}</span>
8176
+ </label>
8177
+ </div>
8143
8178
  </div>
8144
- </div>
8145
8179
 
8146
- ${hasDimensions ? html`
8147
- <div class="dimension-section">
8148
- <div class="dimension-header">📊 ${I18n.t("filter.dimensionMemberSelection")}</div>
8149
- ${dimensions.map((dimension) => {
8150
- var _a2, _b;
8180
+ ${hasDimensions ? html`
8181
+ <div class="dimension-section">
8182
+ <div class="dimension-header">📊 ${I18n.t("filter.dimensionMemberSelection")}</div>
8183
+ ${dimensions.map((dimension) => {
8184
+ var _a, _b;
8151
8185
  const allMembers = this._getAllDimensionMembers(dimension.members);
8152
- if (allMembers.length === 0) {
8186
+ if (allMembers.length === 0)
8153
8187
  return html``;
8154
- }
8155
- const dimensionLabel = ((_b = (_a2 = dimension.labels) == null ? void 0 : _a2.find((l2) => l2.role === "http://www.xbrl.org/2003/role/label")) == null ? void 0 : _b.label) || dimension.conceptName;
8188
+ 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) || dimension.conceptName;
8156
8189
  return html`
8157
- <div class="dimension-group">
8158
- <div class="dimension-label">${dimensionLabel}</div>
8159
- <div class="dimension-members">
8160
- ${allMembers.map((member) => {
8161
- var _a3, _b2;
8162
- const memberLabel = ((_b2 = (_a3 = member.labels) == null ? void 0 : _a3.find((l2) => l2.role === "http://www.xbrl.org/2003/role/label")) == null ? void 0 : _b2.label) || member.conceptName;
8190
+ <div class="dimension-group">
8191
+ <div class="dimension-label">${dimensionLabel}</div>
8192
+ <div class="dimension-members">
8193
+ ${allMembers.map((member) => {
8194
+ var _a2, _b2;
8195
+ const memberLabel = ((_b2 = (_a2 = member.labels) == null ? void 0 : _a2.find((l2) => l2.role === "http://www.xbrl.org/2003/role/label")) == null ? void 0 : _b2.label) || member.conceptName;
8163
8196
  const isChecked = this._isDimensionMemberSelected(role.id, dimension.id, member.id);
8164
8197
  return html`
8165
- <label class="member-checkbox-item">
8166
- <input
8167
- type="checkbox"
8168
- class="member-checkbox"
8169
- .checked="${isChecked}"
8170
- @change="${(e2) => this._handleDimensionMemberChange(e2, role.id, dimension.id, member.id)}"
8171
- />
8172
- <span class="member-checkbox-label">${memberLabel}</span>
8173
- </label>
8174
- `;
8198
+ <label class="member-checkbox-item">
8199
+ <input
8200
+ type="checkbox"
8201
+ class="member-checkbox"
8202
+ .checked="${isChecked}"
8203
+ @change="${(e2) => this._handleDimensionMemberChange(e2, role.id, dimension.id, member.id)}"
8204
+ />
8205
+ <span class="member-checkbox-label">${memberLabel}</span>
8206
+ </label>
8207
+ `;
8175
8208
  })}
8209
+ </div>
8210
+ <div class="member-select-controls">
8211
+ <button
8212
+ class="member-select-btn"
8213
+ @click="${() => this._selectAllDimensionMembers(role.id, dimension.id)}"
8214
+ >
8215
+ ${I18n.t("filter.selectAllMembers")}
8216
+ </button>
8217
+ <button
8218
+ class="member-select-btn"
8219
+ @click="${() => this._deselectAllDimensionMembers(role.id, dimension.id)}"
8220
+ >
8221
+ ${I18n.t("filter.clearMembers")}
8222
+ </button>
8223
+ </div>
8176
8224
  </div>
8177
- <div class="member-select-controls">
8178
- <button
8179
- class="member-select-btn"
8180
- @click="${() => this._selectAllDimensionMembers(role.id, dimension.id)}"
8181
- >
8182
- ${I18n.t("filter.selectAllMembers")}
8183
- </button>
8184
- <button
8185
- class="member-select-btn"
8186
- @click="${() => this._deselectAllDimensionMembers(role.id, dimension.id)}"
8187
- >
8188
- ${I18n.t("filter.clearMembers")}
8189
- </button>
8190
- </div>
8191
- </div>
8192
- `;
8225
+ `;
8193
8226
  })}
8194
- </div>
8195
- ` : ""}
8196
- </div>
8227
+ </div>
8228
+ ` : ""}
8229
+ </div>
8230
+ ` : ""}
8197
8231
  </div>
8198
8232
  `;
8199
8233
  })}
@@ -8439,8 +8473,7 @@ JupiterFilterRolesDialog.styles = css`
8439
8473
 
8440
8474
  .role-item {
8441
8475
  display: flex;
8442
- align-items: flex-start;
8443
- gap: 12px;
8476
+ flex-direction: column;
8444
8477
  padding: 8px;
8445
8478
  border-radius: 4px;
8446
8479
  transition: background-color 0.2s ease;
@@ -8450,11 +8483,52 @@ JupiterFilterRolesDialog.styles = css`
8450
8483
  background: var(--menuBgColorLighter, var(--jupiter-hover-background, #f5f5f5));
8451
8484
  }
8452
8485
 
8486
+ .role-item-header {
8487
+ display: flex;
8488
+ align-items: center;
8489
+ gap: 8px;
8490
+ cursor: pointer;
8491
+ user-select: none;
8492
+ }
8493
+
8494
+ .role-item-body {
8495
+ padding-left: 28px;
8496
+ margin-top: 8px;
8497
+ }
8498
+
8453
8499
  .role-checkbox {
8454
- margin-top: 2px;
8455
8500
  cursor: pointer;
8501
+ flex-shrink: 0;
8456
8502
  }
8457
-
8503
+
8504
+ .role-collapse-btn {
8505
+ background: none;
8506
+ border: none;
8507
+ padding: 2px;
8508
+ cursor: pointer;
8509
+ color: var(--primaryTextColor, var(--jupiter-text-secondary, #666));
8510
+ display: flex;
8511
+ align-items: center;
8512
+ flex-shrink: 0;
8513
+ border-radius: 2px;
8514
+ transition: color 0.15s ease;
8515
+ }
8516
+
8517
+ .role-collapse-btn:hover {
8518
+ color: var(--primaryTextColor, var(--jupiter-text-primary, #333));
8519
+ }
8520
+
8521
+ .role-collapse-chevron {
8522
+ width: 14px;
8523
+ height: 14px;
8524
+ fill: currentColor;
8525
+ transition: transform 0.2s ease;
8526
+ }
8527
+
8528
+ .role-collapse-chevron.collapsed {
8529
+ transform: rotate(-90deg);
8530
+ }
8531
+
8458
8532
  .role-info * {
8459
8533
  color: var(--primaryTextColor, var(--jupiter-text-primary, #333)) !important;
8460
8534
  }
@@ -8467,9 +8541,10 @@ JupiterFilterRolesDialog.styles = css`
8467
8541
  .role-title {
8468
8542
  font-weight: 500;
8469
8543
  color: var(--jupiter-text-primary, #333);
8470
- margin: 0 0 4px 0;
8544
+ margin: 0;
8471
8545
  word-wrap: break-word;
8472
8546
  line-height: 1.3;
8547
+ flex: 1;
8473
8548
  }
8474
8549
 
8475
8550
  .role-description {
@@ -8865,6 +8940,9 @@ __decorateClass$1([
8865
8940
  __decorateClass$1([
8866
8941
  r()
8867
8942
  ], JupiterFilterRolesDialog.prototype, "_conceptSearchText", 2);
8943
+ __decorateClass$1([
8944
+ r()
8945
+ ], JupiterFilterRolesDialog.prototype, "_collapsedRoles", 2);
8868
8946
  JupiterFilterRolesDialog = __decorateClass$1([
8869
8947
  t$1("jupiter-filter-roles-dialog")
8870
8948
  ], JupiterFilterRolesDialog);