jupiter-dynamic-forms 1.16.2 → 1.16.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/core/add-column-dialog.d.ts.map +1 -1
- package/dist/core/concept-tree.d.ts +5 -0
- package/dist/core/concept-tree.d.ts.map +1 -1
- package/dist/core/dynamic-form.d.ts +4 -0
- package/dist/core/dynamic-form.d.ts.map +1 -1
- package/dist/core/filter-roles-dialog.d.ts.map +1 -1
- package/dist/core/form-field.d.ts +2 -0
- package/dist/core/form-field.d.ts.map +1 -1
- package/dist/core/form-section.d.ts +7 -0
- package/dist/core/form-section.d.ts.map +1 -1
- package/dist/index.js +343 -230
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +606 -168
- package/dist/index.mjs.map +1 -1
- package/dist/schema/types.d.ts +6 -0
- package/dist/schema/types.d.ts.map +1 -1
- package/dist/utils/xbrl-form-builder.d.ts +14 -1
- package/dist/utils/xbrl-form-builder.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/index.mjs
CHANGED
|
@@ -607,11 +607,12 @@ class XBRLFormBuilder {
|
|
|
607
607
|
};
|
|
608
608
|
}
|
|
609
609
|
/**
|
|
610
|
-
*
|
|
610
|
+
* Extract section title from role name (remove role number prefix)
|
|
611
|
+
* Handle missing role property gracefully by using role ID as fallback
|
|
611
612
|
*/
|
|
612
613
|
static buildSectionFromRole(role, periodStartDate, periodEndDate, hypercubeData, language = "en", periodPreferences) {
|
|
613
|
-
var _a;
|
|
614
|
-
const title = this.extractRoleTitle(role.role);
|
|
614
|
+
var _a, _b;
|
|
615
|
+
const title = this.extractRoleTitle(role.role || role.id || "Unknown Role");
|
|
615
616
|
const nonAbstractConcepts = this.getAllNonAbstractConcepts(role);
|
|
616
617
|
const periodTypes = new Set(
|
|
617
618
|
nonAbstractConcepts.filter((concept) => concept.periodType).map((concept) => concept.periodType)
|
|
@@ -634,6 +635,11 @@ class XBRLFormBuilder {
|
|
|
634
635
|
}
|
|
635
636
|
});
|
|
636
637
|
}
|
|
638
|
+
if ((!hypercubeRole || !((_b = hypercubeRole.items) == null ? void 0 : _b.length)) && hypercubeData) {
|
|
639
|
+
conceptTrees.forEach(
|
|
640
|
+
(conceptTree) => this.applyCrossRoleDimensions(conceptTree, role.id, hypercubeData, language)
|
|
641
|
+
);
|
|
642
|
+
}
|
|
637
643
|
return {
|
|
638
644
|
id: role.id,
|
|
639
645
|
title,
|
|
@@ -894,6 +900,73 @@ class XBRLFormBuilder {
|
|
|
894
900
|
});
|
|
895
901
|
return filtered;
|
|
896
902
|
}
|
|
903
|
+
/**
|
|
904
|
+
* Find typed dimension members from another role that shares the same concept.
|
|
905
|
+
* Called when the current role has no hypercube dimensions.
|
|
906
|
+
* Returns typed member info only when EXACTLY ONE other role matches.
|
|
907
|
+
*/
|
|
908
|
+
static findCrossRoleDimensions(conceptId, currentRoleId, hypercubeData, language = "en") {
|
|
909
|
+
var _a, _b;
|
|
910
|
+
const matchingRoles = [];
|
|
911
|
+
for (const role of hypercubeData.roles) {
|
|
912
|
+
if (role.roleId === currentRoleId)
|
|
913
|
+
continue;
|
|
914
|
+
for (const item2 of role.items) {
|
|
915
|
+
if (!((_a = item2.conceptIds) == null ? void 0 : _a.includes(conceptId)))
|
|
916
|
+
continue;
|
|
917
|
+
if (!((_b = item2.dimensions) == null ? void 0 : _b.some((d2) => d2.typedMember)))
|
|
918
|
+
continue;
|
|
919
|
+
matchingRoles.push(role);
|
|
920
|
+
break;
|
|
921
|
+
}
|
|
922
|
+
}
|
|
923
|
+
if (matchingRoles.length !== 1)
|
|
924
|
+
return null;
|
|
925
|
+
const matchingRole = matchingRoles[0];
|
|
926
|
+
const item = matchingRole.items.find((i2) => {
|
|
927
|
+
var _a2;
|
|
928
|
+
return (_a2 = i2.conceptIds) == null ? void 0 : _a2.includes(conceptId);
|
|
929
|
+
});
|
|
930
|
+
if (!item)
|
|
931
|
+
return null;
|
|
932
|
+
const result = [];
|
|
933
|
+
for (const dimension of item.dimensions) {
|
|
934
|
+
if (!dimension.typedMember)
|
|
935
|
+
continue;
|
|
936
|
+
const labelObj = dimension.labels.find((l2) => l2.lang === language) || dimension.labels.find((l2) => l2.lang === "en") || dimension.labels[0];
|
|
937
|
+
const axisLabel = (labelObj == null ? void 0 : labelObj.label) || dimension.id;
|
|
938
|
+
result.push({
|
|
939
|
+
axisId: dimension.id,
|
|
940
|
+
axisLabel,
|
|
941
|
+
typedMemberId: dimension.typedMember.id,
|
|
942
|
+
memberLabel: axisLabel
|
|
943
|
+
});
|
|
944
|
+
}
|
|
945
|
+
return result.length > 0 ? result : null;
|
|
946
|
+
}
|
|
947
|
+
/**
|
|
948
|
+
* Recursively walk a concept tree and set crossRoleTypedMembers on every field
|
|
949
|
+
* whose concept appears in exactly one other hypercube role with typed dimensions.
|
|
950
|
+
*/
|
|
951
|
+
static applyCrossRoleDimensions(conceptTree, currentRoleId, hypercubeData, language) {
|
|
952
|
+
var _a;
|
|
953
|
+
if (!conceptTree.abstract && conceptTree.fields && conceptTree.fields.length > 0) {
|
|
954
|
+
const crossRoleTypedMembers = this.findCrossRoleDimensions(
|
|
955
|
+
conceptTree.originalConceptId,
|
|
956
|
+
currentRoleId,
|
|
957
|
+
hypercubeData,
|
|
958
|
+
language
|
|
959
|
+
);
|
|
960
|
+
if (crossRoleTypedMembers) {
|
|
961
|
+
conceptTree.fields.forEach((field2) => {
|
|
962
|
+
field2.crossRoleTypedMembers = crossRoleTypedMembers;
|
|
963
|
+
});
|
|
964
|
+
}
|
|
965
|
+
}
|
|
966
|
+
(_a = conceptTree.children) == null ? void 0 : _a.forEach(
|
|
967
|
+
(child) => this.applyCrossRoleDimensions(child, currentRoleId, hypercubeData, language)
|
|
968
|
+
);
|
|
969
|
+
}
|
|
897
970
|
/**
|
|
898
971
|
* Generate default columns based on period types of non-abstract concepts in a role
|
|
899
972
|
*/
|
|
@@ -1473,10 +1546,21 @@ class XBRLFormBuilder {
|
|
|
1473
1546
|
}
|
|
1474
1547
|
/**
|
|
1475
1548
|
* Extract role title from role string
|
|
1549
|
+
* Handles various role formats and missing data gracefully
|
|
1476
1550
|
*/
|
|
1477
1551
|
static extractRoleTitle(role) {
|
|
1552
|
+
if (!role)
|
|
1553
|
+
return "Unnamed Section";
|
|
1478
1554
|
const match = role.match(/^\[[\d]+\]\s*(.+)$/);
|
|
1479
|
-
|
|
1555
|
+
if (match) {
|
|
1556
|
+
return match[1].trim();
|
|
1557
|
+
}
|
|
1558
|
+
if (role.match(/^[a-z]+:[^:]*$/i) || role.match(/^urn:[^:]+:[^:]+/i)) {
|
|
1559
|
+
const parts = role.split(/[:\-]/);
|
|
1560
|
+
const lastPart = parts[parts.length - 1];
|
|
1561
|
+
return lastPart.replace(/[_\-]/g, " ").replace(/\b\w/g, (l2) => l2.toUpperCase());
|
|
1562
|
+
}
|
|
1563
|
+
return role.trim() || "Unnamed Section";
|
|
1480
1564
|
}
|
|
1481
1565
|
/**
|
|
1482
1566
|
* Extract role order from role string
|
|
@@ -2024,11 +2108,12 @@ class DraftStorageService {
|
|
|
2024
2108
|
/**
|
|
2025
2109
|
* Create metadata snapshot from current form state
|
|
2026
2110
|
*/
|
|
2027
|
-
createMetadataSnapshot(periodStartDate, periodEndDate, language, selectedRoleIds, allSections, typedMemberData, periodPreferences, periodData, unitData) {
|
|
2111
|
+
createMetadataSnapshot(periodStartDate, periodEndDate, language, selectedRoleIds, allSections, typedMemberData, periodPreferences, periodData, unitData, reportingLanguage = "en", repeatCounts) {
|
|
2028
2112
|
return {
|
|
2029
2113
|
periodStartDate,
|
|
2030
2114
|
periodEndDate,
|
|
2031
2115
|
language,
|
|
2116
|
+
reportingLanguage,
|
|
2032
2117
|
selectedRoleIds,
|
|
2033
2118
|
// Store enhanced structure (with roleURI and order) or legacy string array
|
|
2034
2119
|
customColumns: this.extractCustomColumns(allSections),
|
|
@@ -2036,6 +2121,7 @@ class DraftStorageService {
|
|
|
2036
2121
|
periodPreferences,
|
|
2037
2122
|
periodData,
|
|
2038
2123
|
unitData,
|
|
2124
|
+
repeatCounts,
|
|
2039
2125
|
schemaVersion: this.STORAGE_VERSION
|
|
2040
2126
|
};
|
|
2041
2127
|
}
|
|
@@ -2645,7 +2731,6 @@ function getInputTypeForConceptType(conceptType, datatypes) {
|
|
|
2645
2731
|
const baseTypeChain = resolveBaseTypeChain(conceptType, datatypes);
|
|
2646
2732
|
if (baseTypeChain.length > 0) {
|
|
2647
2733
|
const config = determineInputTypeFromBaseChain(baseTypeChain, datatypes);
|
|
2648
|
-
console.log(`🔍 [Type Resolution] ${conceptType} → Chain:`, baseTypeChain, "→ Type:", config.fieldType, config.enumerations ? `(${config.enumerations.length} options)` : "");
|
|
2649
2734
|
return config;
|
|
2650
2735
|
}
|
|
2651
2736
|
}
|
|
@@ -2902,6 +2987,7 @@ let JupiterFormField = class extends LitElement {
|
|
|
2902
2987
|
this.locale = "en-US";
|
|
2903
2988
|
this.hideLabel = false;
|
|
2904
2989
|
this.mode = "inputForm";
|
|
2990
|
+
this.typedMemberValues = {};
|
|
2905
2991
|
this._errors = [];
|
|
2906
2992
|
this._xbrlErrors = [];
|
|
2907
2993
|
this._touched = false;
|
|
@@ -3240,6 +3326,20 @@ let JupiterFormField = class extends LitElement {
|
|
|
3240
3326
|
periodType: this.field.periodType
|
|
3241
3327
|
});
|
|
3242
3328
|
}
|
|
3329
|
+
_handleCrossRoleTypedMemberChange(event, axisId) {
|
|
3330
|
+
const value = event.target.value;
|
|
3331
|
+
this.typedMemberValues = { ...this.typedMemberValues, [axisId]: value };
|
|
3332
|
+
this.dispatchEvent(new CustomEvent("typed-member-change", {
|
|
3333
|
+
detail: {
|
|
3334
|
+
columnId: this.columnId,
|
|
3335
|
+
conceptId: this.conceptId,
|
|
3336
|
+
axisId,
|
|
3337
|
+
value
|
|
3338
|
+
},
|
|
3339
|
+
bubbles: true,
|
|
3340
|
+
composed: true
|
|
3341
|
+
}));
|
|
3342
|
+
}
|
|
3243
3343
|
/**
|
|
3244
3344
|
* Renders a plain text label for readonly mode instead of an interactive input.
|
|
3245
3345
|
* Resolves the display value for selects (shows label, not raw id) and
|
|
@@ -3497,6 +3597,21 @@ let JupiterFormField = class extends LitElement {
|
|
|
3497
3597
|
</select>
|
|
3498
3598
|
</div>
|
|
3499
3599
|
` : ""}
|
|
3600
|
+
|
|
3601
|
+
${this.field.crossRoleTypedMembers && this.field.crossRoleTypedMembers.length > 0 ? html`
|
|
3602
|
+
${this.field.crossRoleTypedMembers.map((tm) => html`
|
|
3603
|
+
<div class="period-controls">
|
|
3604
|
+
<label>${tm.axisLabel}:</label>
|
|
3605
|
+
<input
|
|
3606
|
+
type="text"
|
|
3607
|
+
class="typed-member-input"
|
|
3608
|
+
.value="${this.typedMemberValues[tm.axisId] || ""}"
|
|
3609
|
+
@input="${(e2) => this._handleCrossRoleTypedMemberChange(e2, tm.axisId)}"
|
|
3610
|
+
?disabled="${this.disabled}"
|
|
3611
|
+
/>
|
|
3612
|
+
</div>
|
|
3613
|
+
`)}
|
|
3614
|
+
` : ""}
|
|
3500
3615
|
</div>
|
|
3501
3616
|
</div>
|
|
3502
3617
|
</div>
|
|
@@ -3685,7 +3800,7 @@ JupiterFormField.styles = css`
|
|
|
3685
3800
|
border-radius: 8px;
|
|
3686
3801
|
padding: 24px;
|
|
3687
3802
|
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.3);
|
|
3688
|
-
max-width:
|
|
3803
|
+
max-width: 800px;
|
|
3689
3804
|
width: 90%;
|
|
3690
3805
|
}
|
|
3691
3806
|
|
|
@@ -3729,7 +3844,7 @@ JupiterFormField.styles = css`
|
|
|
3729
3844
|
|
|
3730
3845
|
.period-popup-content .period-controls {
|
|
3731
3846
|
display: grid;
|
|
3732
|
-
grid-template-columns:
|
|
3847
|
+
grid-template-columns: 200px 1fr;
|
|
3733
3848
|
gap: 12px;
|
|
3734
3849
|
align-items: center;
|
|
3735
3850
|
margin-top: 0;
|
|
@@ -3740,6 +3855,8 @@ JupiterFormField.styles = css`
|
|
|
3740
3855
|
font-weight: 500;
|
|
3741
3856
|
color: var(--jupiter-text-primary, #333);
|
|
3742
3857
|
text-align: right;
|
|
3858
|
+
white-space: normal;
|
|
3859
|
+
word-break: break-word;
|
|
3743
3860
|
}
|
|
3744
3861
|
|
|
3745
3862
|
.period-popup-content .period-controls input[type="date"] {
|
|
@@ -3777,22 +3894,44 @@ JupiterFormField.styles = css`
|
|
|
3777
3894
|
cursor: not-allowed;
|
|
3778
3895
|
}
|
|
3779
3896
|
|
|
3897
|
+
.period-popup-content .period-controls .typed-member-input {
|
|
3898
|
+
flex: 1;
|
|
3899
|
+
padding: 6px 8px;
|
|
3900
|
+
border: 1px solid var(--jupiter-border-color, #ddd);
|
|
3901
|
+
border-radius: 4px;
|
|
3902
|
+
font-size: 13px;
|
|
3903
|
+
font-family: inherit;
|
|
3904
|
+
background: var(--jupiter-input-background, #fff);
|
|
3905
|
+
}
|
|
3906
|
+
|
|
3907
|
+
.period-popup-content .period-controls .typed-member-input:focus {
|
|
3908
|
+
outline: none;
|
|
3909
|
+
border-color: var(--jupiter-primary-color, #1976d2);
|
|
3910
|
+
box-shadow: 0 0 0 2px var(--jupiter-primary-color-light, rgba(25, 118, 210, 0.2));
|
|
3911
|
+
}
|
|
3912
|
+
|
|
3913
|
+
.period-popup-content .period-controls .typed-member-input:disabled {
|
|
3914
|
+
background: var(--jupiter-disabled-background, #f5f5f5);
|
|
3915
|
+
color: var(--jupiter-disabled-text, #999);
|
|
3916
|
+
cursor: not-allowed;
|
|
3917
|
+
}
|
|
3918
|
+
|
|
3780
3919
|
.field-input {
|
|
3781
3920
|
width: 100%;
|
|
3782
3921
|
padding: 6px 8px; /* Reduced padding for table cells */
|
|
3783
|
-
border: 1px solid var(--jupiter-border-color, #ddd);
|
|
3922
|
+
border: 1px solid var(--primaryTextColor, var(--jupiter-border-color, #ddd));
|
|
3784
3923
|
border-radius: 4px;
|
|
3785
3924
|
font-size: 13px; /* Slightly smaller font for table */
|
|
3786
3925
|
font-family: inherit;
|
|
3787
|
-
background:
|
|
3788
|
-
color: var(--jupiter-text-primary, #333);
|
|
3926
|
+
background: transparent !important;
|
|
3927
|
+
color: var(--primaryTextColor, var(--jupiter-text-primary, #333));
|
|
3789
3928
|
box-sizing: border-box;
|
|
3790
3929
|
}
|
|
3791
3930
|
|
|
3792
3931
|
.field-input:focus {
|
|
3793
3932
|
outline: none;
|
|
3794
|
-
border-color: var(--jupiter-primary-color, #1976d2);
|
|
3795
|
-
box-shadow: 0 0 0 2px var(--jupiter-primary-color-light, rgba(25, 118, 210, 0.2));
|
|
3933
|
+
border-color: var(--primaryTextColor, var(--jupiter-primary-color, #1976d2));
|
|
3934
|
+
box-shadow: 0 0 0 2px var(--boxShadowColor, var(--jupiter-primary-color-light, rgba(25, 118, 210, 0.2)));
|
|
3796
3935
|
}
|
|
3797
3936
|
|
|
3798
3937
|
.field-input:disabled {
|
|
@@ -3963,6 +4102,9 @@ __decorateClass$5([
|
|
|
3963
4102
|
__decorateClass$5([
|
|
3964
4103
|
n2({ type: String })
|
|
3965
4104
|
], JupiterFormField.prototype, "unit", 2);
|
|
4105
|
+
__decorateClass$5([
|
|
4106
|
+
n2({ type: Object })
|
|
4107
|
+
], JupiterFormField.prototype, "typedMemberValues", 2);
|
|
3966
4108
|
__decorateClass$5([
|
|
3967
4109
|
r()
|
|
3968
4110
|
], JupiterFormField.prototype, "_errors", 2);
|
|
@@ -4004,6 +4146,9 @@ let JupiterConceptTree = class extends LitElement {
|
|
|
4004
4146
|
this.locale = "en-US";
|
|
4005
4147
|
this.expandedConcepts = /* @__PURE__ */ new Set();
|
|
4006
4148
|
this.mode = "inputForm";
|
|
4149
|
+
this.typedMemberData = {};
|
|
4150
|
+
this.showAddButton = false;
|
|
4151
|
+
this.showRemoveButton = false;
|
|
4007
4152
|
this._expanded = true;
|
|
4008
4153
|
}
|
|
4009
4154
|
connectedCallback() {
|
|
@@ -4041,6 +4186,20 @@ let JupiterConceptTree = class extends LitElement {
|
|
|
4041
4186
|
bubbles: true
|
|
4042
4187
|
}));
|
|
4043
4188
|
}
|
|
4189
|
+
_handleAddRepeat() {
|
|
4190
|
+
this.dispatchEvent(new CustomEvent("add-concept-repeat", {
|
|
4191
|
+
detail: { conceptId: this.concept.id },
|
|
4192
|
+
bubbles: true,
|
|
4193
|
+
composed: true
|
|
4194
|
+
}));
|
|
4195
|
+
}
|
|
4196
|
+
_handleRemoveRepeat() {
|
|
4197
|
+
this.dispatchEvent(new CustomEvent("remove-concept-repeat", {
|
|
4198
|
+
detail: { conceptId: this.concept.id },
|
|
4199
|
+
bubbles: true,
|
|
4200
|
+
composed: true
|
|
4201
|
+
}));
|
|
4202
|
+
}
|
|
4044
4203
|
_handlePeriodChange(event) {
|
|
4045
4204
|
console.log(`🌲 [ConceptTree] Received period-change event:`, event.detail);
|
|
4046
4205
|
event.stopPropagation();
|
|
@@ -4065,11 +4224,19 @@ let JupiterConceptTree = class extends LitElement {
|
|
|
4065
4224
|
@click="${this._toggleExpanded}">
|
|
4066
4225
|
${hasChildren ? "▶" : ""}
|
|
4067
4226
|
</div>
|
|
4068
|
-
<div class="concept-label"
|
|
4227
|
+
<div class="concept-label"
|
|
4069
4228
|
@click="${this._toggleExpanded}"
|
|
4070
4229
|
title="${this.concept.id}${this.concept.description ? " - " + this.concept.description : ""}">
|
|
4071
4230
|
${this.concept.label}
|
|
4072
4231
|
</div>
|
|
4232
|
+
${this.showAddButton ? html`
|
|
4233
|
+
<button class="repeat-btn" type="button" title="Add row"
|
|
4234
|
+
@click="${this._handleAddRepeat}">+</button>
|
|
4235
|
+
` : ""}
|
|
4236
|
+
${this.showRemoveButton ? html`
|
|
4237
|
+
<button class="repeat-btn remove" type="button" title="Remove row"
|
|
4238
|
+
@click="${this._handleRemoveRepeat}">−</button>
|
|
4239
|
+
` : ""}
|
|
4073
4240
|
</div>
|
|
4074
4241
|
</td>
|
|
4075
4242
|
|
|
@@ -4101,6 +4268,7 @@ let JupiterConceptTree = class extends LitElement {
|
|
|
4101
4268
|
.masterData="${this.masterData}"
|
|
4102
4269
|
.facts="${this.facts}"
|
|
4103
4270
|
.column="${column2}"
|
|
4271
|
+
.typedMemberValues="${this.typedMemberData[`${this.concept.id}__${column2.id}`] || {}}"
|
|
4104
4272
|
@field-change="${this._handleFieldChange}"
|
|
4105
4273
|
@period-change="${this._handlePeriodChange}"
|
|
4106
4274
|
></jupiter-form-field>
|
|
@@ -4120,7 +4288,7 @@ JupiterConceptTree.styles = css`
|
|
|
4120
4288
|
.concept-name-cell {
|
|
4121
4289
|
vertical-align: top;
|
|
4122
4290
|
padding: 2px 4px;
|
|
4123
|
-
border: 1px solid var(--jupiter-border-color, #ddd);
|
|
4291
|
+
border: 1px solid var(--primaryTextColor, var(--jupiter-border-color, #ddd));
|
|
4124
4292
|
border-bottom: none;
|
|
4125
4293
|
background: var(--jupiter-concept-background, #f8f9fa);
|
|
4126
4294
|
position: sticky;
|
|
@@ -4132,12 +4300,13 @@ JupiterConceptTree.styles = css`
|
|
|
4132
4300
|
}
|
|
4133
4301
|
|
|
4134
4302
|
.concept-name-cell.abstract {
|
|
4135
|
-
background: var(--jupiter-abstract-background, #f0f2f5);
|
|
4303
|
+
background: var(--bg-color-1, var(--jupiter-abstract-background, #f0f2f5));
|
|
4136
4304
|
font-weight: 600;
|
|
4305
|
+
color: var(--primaryTextColor, var(--jupiter-text-primary, #333));
|
|
4137
4306
|
}
|
|
4138
4307
|
|
|
4139
4308
|
.concept-name-cell.leaf {
|
|
4140
|
-
background: var(--jupiter-leaf-background, #fff);
|
|
4309
|
+
background: var(--bg-color-2, var(--jupiter-leaf-background, #fff));
|
|
4141
4310
|
font-weight: 400;
|
|
4142
4311
|
}
|
|
4143
4312
|
|
|
@@ -4178,7 +4347,7 @@ JupiterConceptTree.styles = css`
|
|
|
4178
4347
|
|
|
4179
4348
|
.concept-label {
|
|
4180
4349
|
flex: 1;
|
|
4181
|
-
color: var(--jupiter-text-primary, #333);
|
|
4350
|
+
color: var(--primaryTextColor, var(--jupiter-text-primary, #333));
|
|
4182
4351
|
cursor: pointer;
|
|
4183
4352
|
word-wrap: break-word;
|
|
4184
4353
|
overflow-wrap: break-word;
|
|
@@ -4190,9 +4359,9 @@ JupiterConceptTree.styles = css`
|
|
|
4190
4359
|
.field-cell {
|
|
4191
4360
|
vertical-align: middle;
|
|
4192
4361
|
padding: 2px 6px;
|
|
4193
|
-
border: 1px solid var(--jupiter-border-color, #ddd);
|
|
4362
|
+
border: 1px solid var(--primaryTextColor, var(--jupiter-border-color, #ddd));
|
|
4194
4363
|
border-bottom: none;
|
|
4195
|
-
background: var(--jupiter-cell-background, #fff);
|
|
4364
|
+
background: var(--bg-color-2, var(--jupiter-cell-background, #fff));
|
|
4196
4365
|
min-height: 28px;
|
|
4197
4366
|
text-align: center;
|
|
4198
4367
|
min-width: 180px;
|
|
@@ -4200,11 +4369,11 @@ JupiterConceptTree.styles = css`
|
|
|
4200
4369
|
}
|
|
4201
4370
|
|
|
4202
4371
|
.field-cell.empty {
|
|
4203
|
-
background: var(--jupiter-empty-cell-background, #f8f9fa);
|
|
4372
|
+
background: var(--bg-color-2, var(--jupiter-empty-cell-background, #f8f9fa));
|
|
4204
4373
|
}
|
|
4205
4374
|
|
|
4206
4375
|
.field-cell.abstract-row {
|
|
4207
|
-
background: var(--jupiter-abstract-cell-background, #f0f2f5);
|
|
4376
|
+
background: var(--bg-color-2, var(--jupiter-abstract-cell-background, #f0f2f5));
|
|
4208
4377
|
}
|
|
4209
4378
|
|
|
4210
4379
|
/* Children are rendered as separate table rows, not nested */
|
|
@@ -4212,6 +4381,38 @@ JupiterConceptTree.styles = css`
|
|
|
4212
4381
|
display: none;
|
|
4213
4382
|
}
|
|
4214
4383
|
|
|
4384
|
+
.repeat-btn {
|
|
4385
|
+
flex-shrink: 0;
|
|
4386
|
+
margin-left: 4px;
|
|
4387
|
+
width: 20px;
|
|
4388
|
+
height: 20px;
|
|
4389
|
+
padding: 0;
|
|
4390
|
+
border-radius: 3px;
|
|
4391
|
+
border: 1px solid var(--jupiter-primary-color, #1976d2);
|
|
4392
|
+
color: var(--jupiter-primary-color, #1976d2);
|
|
4393
|
+
background: transparent;
|
|
4394
|
+
cursor: pointer;
|
|
4395
|
+
font-size: 14px;
|
|
4396
|
+
line-height: 1;
|
|
4397
|
+
display: flex;
|
|
4398
|
+
align-items: center;
|
|
4399
|
+
justify-content: center;
|
|
4400
|
+
}
|
|
4401
|
+
|
|
4402
|
+
.repeat-btn:hover {
|
|
4403
|
+
background: var(--jupiter-primary-color, #1976d2);
|
|
4404
|
+
color: #fff;
|
|
4405
|
+
}
|
|
4406
|
+
|
|
4407
|
+
.repeat-btn.remove {
|
|
4408
|
+
border-color: var(--jupiter-error-color, #d32f2f);
|
|
4409
|
+
color: var(--jupiter-error-color, #d32f2f);
|
|
4410
|
+
}
|
|
4411
|
+
|
|
4412
|
+
.repeat-btn.remove:hover {
|
|
4413
|
+
background: var(--jupiter-error-color, #d32f2f);
|
|
4414
|
+
color: #fff;
|
|
4415
|
+
}
|
|
4215
4416
|
|
|
4216
4417
|
`;
|
|
4217
4418
|
__decorateClass$4([
|
|
@@ -4253,6 +4454,15 @@ __decorateClass$4([
|
|
|
4253
4454
|
__decorateClass$4([
|
|
4254
4455
|
n2({ type: Array })
|
|
4255
4456
|
], JupiterConceptTree.prototype, "facts", 2);
|
|
4457
|
+
__decorateClass$4([
|
|
4458
|
+
n2({ type: Object })
|
|
4459
|
+
], JupiterConceptTree.prototype, "typedMemberData", 2);
|
|
4460
|
+
__decorateClass$4([
|
|
4461
|
+
n2({ type: Boolean })
|
|
4462
|
+
], JupiterConceptTree.prototype, "showAddButton", 2);
|
|
4463
|
+
__decorateClass$4([
|
|
4464
|
+
n2({ type: Boolean })
|
|
4465
|
+
], JupiterConceptTree.prototype, "showRemoveButton", 2);
|
|
4256
4466
|
__decorateClass$4([
|
|
4257
4467
|
r()
|
|
4258
4468
|
], JupiterConceptTree.prototype, "_expanded", 2);
|
|
@@ -4574,7 +4784,7 @@ JupiterAddColumnDialog.styles = css`
|
|
|
4574
4784
|
}
|
|
4575
4785
|
|
|
4576
4786
|
.dialog {
|
|
4577
|
-
background:
|
|
4787
|
+
background: var(--bg-color-2, var(--jupiter-card-background, #fff));
|
|
4578
4788
|
border-radius: 8px;
|
|
4579
4789
|
padding: 24px;
|
|
4580
4790
|
min-width: 400px;
|
|
@@ -4599,7 +4809,7 @@ JupiterAddColumnDialog.styles = css`
|
|
|
4599
4809
|
.dialog-title {
|
|
4600
4810
|
font-size: 20px;
|
|
4601
4811
|
font-weight: 600;
|
|
4602
|
-
color: var(--jupiter-text-primary, #333);
|
|
4812
|
+
color: var(--primaryTextColor, var(--jupiter-text-primary, #333));
|
|
4603
4813
|
margin: 0 0 8px 0;
|
|
4604
4814
|
}
|
|
4605
4815
|
|
|
@@ -4633,7 +4843,7 @@ JupiterAddColumnDialog.styles = css`
|
|
|
4633
4843
|
display: block;
|
|
4634
4844
|
font-weight: 500;
|
|
4635
4845
|
margin-bottom: 6px;
|
|
4636
|
-
color: var(--jupiter-text-primary, #333);
|
|
4846
|
+
color: var(--primaryTextColor, var(--jupiter-text-primary, #333));
|
|
4637
4847
|
font-size: 14px;
|
|
4638
4848
|
}
|
|
4639
4849
|
|
|
@@ -4646,18 +4856,20 @@ JupiterAddColumnDialog.styles = css`
|
|
|
4646
4856
|
width: 100%;
|
|
4647
4857
|
box-sizing: border-box;
|
|
4648
4858
|
padding: 10px 12px;
|
|
4649
|
-
border: 1px solid var(--jupiter-border-color, #ddd);
|
|
4859
|
+
border: 1px solid var(--primaryTextColor, var(--jupiter-border-color, #ddd));
|
|
4650
4860
|
border-radius: 4px;
|
|
4651
4861
|
font-size: 14px;
|
|
4652
4862
|
font-family: inherit;
|
|
4653
4863
|
transition: border-color 0.2s ease;
|
|
4864
|
+
background-color: transparent;
|
|
4865
|
+
color: var(--primaryTextColor, var(--jupiter-text-primary, #333));
|
|
4654
4866
|
}
|
|
4655
4867
|
|
|
4656
|
-
.form-input:focus {
|
|
4657
|
-
|
|
4658
|
-
|
|
4659
|
-
|
|
4660
|
-
}
|
|
4868
|
+
// .form-input:focus {
|
|
4869
|
+
// outline: none;
|
|
4870
|
+
// border-color: var(--jupiter-primary-color, #007bff);
|
|
4871
|
+
// box-shadow: 0 0 0 2px rgba(0, 123, 255, 0.25);
|
|
4872
|
+
// }
|
|
4661
4873
|
|
|
4662
4874
|
select.form-input {
|
|
4663
4875
|
cursor: pointer;
|
|
@@ -4685,27 +4897,28 @@ JupiterAddColumnDialog.styles = css`
|
|
|
4685
4897
|
}
|
|
4686
4898
|
|
|
4687
4899
|
.btn-cancel {
|
|
4688
|
-
|
|
4689
|
-
|
|
4900
|
+
color: var(--buttonBgColor, var(--jupiter-primary-color, #1976d2));
|
|
4901
|
+
border: 1px solid var(--buttonBgColor, var(--jupiter-primary-color, #1976d2)) !important;
|
|
4902
|
+
background: transparent;
|
|
4690
4903
|
}
|
|
4691
4904
|
|
|
4692
|
-
.btn-cancel:hover {
|
|
4693
|
-
|
|
4694
|
-
}
|
|
4905
|
+
// .btn-cancel:hover {
|
|
4906
|
+
// background: var(--jupiter-neutral-background-hover, #e0e0e0);
|
|
4907
|
+
// }
|
|
4695
4908
|
|
|
4696
4909
|
.btn-primary {
|
|
4697
|
-
background: var(--jupiter-primary-color, #
|
|
4698
|
-
color: white;
|
|
4910
|
+
background: var(--buttonBgColor, var(--jupiter-primary-color, #1976d2));
|
|
4911
|
+
color: var(--buttonTextColor, white);
|
|
4699
4912
|
}
|
|
4700
4913
|
|
|
4701
|
-
.btn-primary:hover {
|
|
4702
|
-
|
|
4703
|
-
}
|
|
4914
|
+
// .btn-primary:hover {
|
|
4915
|
+
// background: var(--jupiter-primary-color-dark, #5a6fd8);
|
|
4916
|
+
// }
|
|
4704
4917
|
|
|
4705
|
-
.btn-primary:disabled {
|
|
4706
|
-
|
|
4707
|
-
|
|
4708
|
-
}
|
|
4918
|
+
// .btn-primary:disabled {
|
|
4919
|
+
// background: var(--jupiter-disabled-background, #ccc);
|
|
4920
|
+
// cursor: not-allowed;
|
|
4921
|
+
// }
|
|
4709
4922
|
|
|
4710
4923
|
/* Dimension Selection Styles */
|
|
4711
4924
|
.dimensions-section {
|
|
@@ -4861,6 +5074,7 @@ let JupiterFormSection = class extends LitElement {
|
|
|
4861
5074
|
this.periodData = {};
|
|
4862
5075
|
this.unitData = {};
|
|
4863
5076
|
this.typedMemberData = {};
|
|
5077
|
+
this.repeatCounts = {};
|
|
4864
5078
|
this.defaultUnits = [];
|
|
4865
5079
|
this.disabled = false;
|
|
4866
5080
|
this.collapsible = true;
|
|
@@ -5121,6 +5335,70 @@ let JupiterFormSection = class extends LitElement {
|
|
|
5121
5335
|
bubbles: true
|
|
5122
5336
|
}));
|
|
5123
5337
|
}
|
|
5338
|
+
_handleAddRepeat(event) {
|
|
5339
|
+
event.stopPropagation();
|
|
5340
|
+
this.dispatchEvent(new CustomEvent("add-concept-repeat", {
|
|
5341
|
+
detail: event.detail,
|
|
5342
|
+
bubbles: true
|
|
5343
|
+
}));
|
|
5344
|
+
}
|
|
5345
|
+
_handleRemoveRepeat(event) {
|
|
5346
|
+
event.stopPropagation();
|
|
5347
|
+
this.dispatchEvent(new CustomEvent("remove-concept-repeat", {
|
|
5348
|
+
detail: event.detail,
|
|
5349
|
+
bubbles: true
|
|
5350
|
+
}));
|
|
5351
|
+
}
|
|
5352
|
+
/** Build the list of <tr> template results for a single flattened concept, including any repeat instances. */
|
|
5353
|
+
_renderConceptRows(concept) {
|
|
5354
|
+
var _a;
|
|
5355
|
+
const isRepeatable = this.mode !== "readonly" && !concept.abstract && ((_a = concept.fields) == null ? void 0 : _a.some((f2) => {
|
|
5356
|
+
var _a2;
|
|
5357
|
+
return ((_a2 = f2.crossRoleTypedMembers) == null ? void 0 : _a2.length) > 0;
|
|
5358
|
+
}));
|
|
5359
|
+
const repeatCount = isRepeatable ? this.repeatCounts[concept.id] || 0 : 0;
|
|
5360
|
+
const sharedProps = (instanceConcept, opts) => html`
|
|
5361
|
+
<jupiter-concept-tree
|
|
5362
|
+
.concept="${instanceConcept}"
|
|
5363
|
+
.columns="${this.columns}"
|
|
5364
|
+
.datatypes="${this.datatypes}"
|
|
5365
|
+
.formData="${this.formData}"
|
|
5366
|
+
.periodData="${this.periodData}"
|
|
5367
|
+
.unitData="${this.unitData}"
|
|
5368
|
+
.defaultUnits="${this.defaultUnits}"
|
|
5369
|
+
.disabled="${this.disabled}"
|
|
5370
|
+
.locale="${this.locale}"
|
|
5371
|
+
.expandedConcepts="${this._expandedConcepts}"
|
|
5372
|
+
.mode="${this.mode}"
|
|
5373
|
+
.masterData="${this.masterData}"
|
|
5374
|
+
.facts="${instanceConcept.facts}"
|
|
5375
|
+
.typedMemberData="${this.typedMemberData}"
|
|
5376
|
+
.showAddButton="${opts.showAdd || false}"
|
|
5377
|
+
.showRemoveButton="${opts.showRemove || false}"
|
|
5378
|
+
@field-change="${this._handleFieldChange}"
|
|
5379
|
+
@period-change="${this._handlePeriodChange}"
|
|
5380
|
+
@concept-expand="${this._handleConceptExpand}"
|
|
5381
|
+
@add-concept-repeat="${this._handleAddRepeat}"
|
|
5382
|
+
@remove-concept-repeat="${this._handleRemoveRepeat}"
|
|
5383
|
+
></jupiter-concept-tree>
|
|
5384
|
+
`;
|
|
5385
|
+
const rows = [html`
|
|
5386
|
+
<tr>${sharedProps(concept, { showAdd: isRepeatable })}</tr>
|
|
5387
|
+
`];
|
|
5388
|
+
for (let n3 = 1; n3 <= repeatCount; n3++) {
|
|
5389
|
+
const instanceConcept = {
|
|
5390
|
+
...concept,
|
|
5391
|
+
id: `${concept.id}__repeat_${n3}`,
|
|
5392
|
+
label: "",
|
|
5393
|
+
children: [],
|
|
5394
|
+
abstract: false
|
|
5395
|
+
};
|
|
5396
|
+
rows.push(html`
|
|
5397
|
+
<tr>${sharedProps(instanceConcept, { showRemove: true })}</tr>
|
|
5398
|
+
`);
|
|
5399
|
+
}
|
|
5400
|
+
return rows;
|
|
5401
|
+
}
|
|
5124
5402
|
render() {
|
|
5125
5403
|
if (!this.section.concepts || this.section.concepts.length === 0) {
|
|
5126
5404
|
return html`
|
|
@@ -5241,28 +5519,7 @@ let JupiterFormSection = class extends LitElement {
|
|
|
5241
5519
|
</tr>
|
|
5242
5520
|
</thead>
|
|
5243
5521
|
<tbody class="table-body">
|
|
5244
|
-
${this._flattenConcepts(this.section.concepts, this._expandedConcepts).filter((concept) => this.mode !== "readonly" || !this._isConceptRowBlank(concept)).
|
|
5245
|
-
<tr>
|
|
5246
|
-
<jupiter-concept-tree
|
|
5247
|
-
.concept="${concept}"
|
|
5248
|
-
.columns="${this.columns}"
|
|
5249
|
-
.datatypes="${this.datatypes}"
|
|
5250
|
-
.formData="${this.formData}"
|
|
5251
|
-
.periodData="${this.periodData}"
|
|
5252
|
-
.unitData="${this.unitData}"
|
|
5253
|
-
.defaultUnits="${this.defaultUnits}"
|
|
5254
|
-
.disabled="${this.disabled}"
|
|
5255
|
-
.locale="${this.locale}"
|
|
5256
|
-
.expandedConcepts="${this._expandedConcepts}"
|
|
5257
|
-
.mode="${this.mode}"
|
|
5258
|
-
.masterData="${this.masterData}"
|
|
5259
|
-
.facts="${concept.facts}"
|
|
5260
|
-
@field-change="${this._handleFieldChange}"
|
|
5261
|
-
@period-change="${this._handlePeriodChange}"
|
|
5262
|
-
@concept-expand="${this._handleConceptExpand}"
|
|
5263
|
-
></jupiter-concept-tree>
|
|
5264
|
-
</tr>
|
|
5265
|
-
`)}
|
|
5522
|
+
${this._flattenConcepts(this.section.concepts, this._expandedConcepts).filter((concept) => this.mode !== "readonly" || !this._isConceptRowBlank(concept)).flatMap((concept) => this._renderConceptRows(concept))}
|
|
5266
5523
|
</tbody>
|
|
5267
5524
|
</table>
|
|
5268
5525
|
</div>
|
|
@@ -5383,13 +5640,20 @@ JupiterFormSection.styles = css`
|
|
|
5383
5640
|
/* Table row - no special display needed */
|
|
5384
5641
|
}
|
|
5385
5642
|
|
|
5643
|
+
.header-cell:first-child {
|
|
5644
|
+
border-radius: 6px 0 0 0;
|
|
5645
|
+
}
|
|
5646
|
+
.header-cell:last-child {
|
|
5647
|
+
border-radius: 0 6px 0 0;
|
|
5648
|
+
}
|
|
5649
|
+
|
|
5386
5650
|
.header-cell {
|
|
5387
5651
|
padding: 8px 12px;
|
|
5388
5652
|
text-align: left;
|
|
5389
5653
|
font-weight: 600;
|
|
5390
|
-
color: var(--jupiter-text-primary, #333);
|
|
5391
|
-
border: 1px solid var(--jupiter-border-color, #ddd);
|
|
5392
|
-
background: var(--jupiter-header-background, #f8f9fa);
|
|
5654
|
+
color: var(--primaryTextColor, var(--jupiter-text-primary, #333));
|
|
5655
|
+
border: 1px solid var(--primaryTextColor, var(--jupiter-border-color, #ddd));
|
|
5656
|
+
background: var(--bg-color-1, var(--jupiter-header-background, #f8f9fa));
|
|
5393
5657
|
min-width: 180px;
|
|
5394
5658
|
width: 180px;
|
|
5395
5659
|
font-size: 14px;
|
|
@@ -5561,6 +5825,9 @@ __decorateClass$2([
|
|
|
5561
5825
|
__decorateClass$2([
|
|
5562
5826
|
n2({ type: Object })
|
|
5563
5827
|
], JupiterFormSection.prototype, "typedMemberData", 2);
|
|
5828
|
+
__decorateClass$2([
|
|
5829
|
+
n2({ type: Object })
|
|
5830
|
+
], JupiterFormSection.prototype, "repeatCounts", 2);
|
|
5564
5831
|
__decorateClass$2([
|
|
5565
5832
|
n2({ type: Array })
|
|
5566
5833
|
], JupiterFormSection.prototype, "defaultUnits", 2);
|
|
@@ -6593,24 +6860,25 @@ JupiterFilterRolesDialog.styles = css`
|
|
|
6593
6860
|
|
|
6594
6861
|
.dialog-header {
|
|
6595
6862
|
padding: 20px 24px 16px;
|
|
6596
|
-
border-bottom: 1px solid var(--jupiter-border-color, #ddd);
|
|
6863
|
+
border-bottom: 1px solid var(--primaryTextColor, var(--jupiter-border-color, #ddd));
|
|
6597
6864
|
display: flex;
|
|
6598
6865
|
align-items: center;
|
|
6599
6866
|
gap: 12px;
|
|
6867
|
+
background: var(--bg-color-1, var(--jupiter-header-background, #f8f9fa));
|
|
6600
6868
|
}
|
|
6601
6869
|
|
|
6602
6870
|
.dialog-title {
|
|
6603
6871
|
font-size: 18px;
|
|
6604
6872
|
font-weight: 600;
|
|
6605
6873
|
margin: 0;
|
|
6606
|
-
color: var(--jupiter-text-primary, #333);
|
|
6874
|
+
color: var(--primaryTextColor, var(--jupiter-text-primary, #333));
|
|
6607
6875
|
flex: 1;
|
|
6608
6876
|
}
|
|
6609
6877
|
|
|
6610
6878
|
.filter-icon {
|
|
6611
6879
|
width: 20px;
|
|
6612
6880
|
height: 20px;
|
|
6613
|
-
fill: var(--jupiter-primary-color, #1976d2);
|
|
6881
|
+
fill: var(--primaryTextColor, var(--jupiter-primary-color, #1976d2));
|
|
6614
6882
|
}
|
|
6615
6883
|
|
|
6616
6884
|
.close-button {
|
|
@@ -6619,23 +6887,24 @@ JupiterFilterRolesDialog.styles = css`
|
|
|
6619
6887
|
font-size: 24px;
|
|
6620
6888
|
cursor: pointer;
|
|
6621
6889
|
padding: 4px;
|
|
6622
|
-
color: var(--jupiter-text-secondary, #666);
|
|
6890
|
+
color: var(--primaryTextColor, var(--jupiter-text-secondary, #666));
|
|
6623
6891
|
border-radius: 4px;
|
|
6624
6892
|
transition: background-color 0.2s ease;
|
|
6625
6893
|
}
|
|
6626
6894
|
|
|
6627
|
-
.close-button:hover {
|
|
6628
|
-
|
|
6629
|
-
}
|
|
6895
|
+
// .close-button:hover {
|
|
6896
|
+
// background: var(--jupiter-hover-background, #f5f5f5);
|
|
6897
|
+
// }
|
|
6630
6898
|
|
|
6631
6899
|
.dialog-content {
|
|
6900
|
+
background: var(--bg-color-2, var(--jupiter-form-content-background, #fff));
|
|
6632
6901
|
flex: 1;
|
|
6633
6902
|
overflow-y: auto;
|
|
6634
6903
|
padding: 20px 24px;
|
|
6635
6904
|
}
|
|
6636
6905
|
|
|
6637
6906
|
.description {
|
|
6638
|
-
color: var(--jupiter-text-secondary, #666);
|
|
6907
|
+
color: var(--primaryTextColor, var(--secondaryTextColor, var(--jupiter-text-secondary, #666))) ;
|
|
6639
6908
|
font-size: 14px;
|
|
6640
6909
|
margin: 0 0 20px 0;
|
|
6641
6910
|
line-height: 1.5;
|
|
@@ -6654,25 +6923,25 @@ JupiterFilterRolesDialog.styles = css`
|
|
|
6654
6923
|
}
|
|
6655
6924
|
|
|
6656
6925
|
.search-input {
|
|
6657
|
-
width:
|
|
6926
|
+
width: stretch;
|
|
6658
6927
|
padding: 10px 40px 10px 12px;
|
|
6659
|
-
border: 1px solid var(--jupiter-border-color, #ddd);
|
|
6928
|
+
border: 1px solid var(--primaryTextColor, var(--jupiter-border-color, #ddd));
|
|
6660
6929
|
border-radius: 4px;
|
|
6661
6930
|
font-size: 14px;
|
|
6662
6931
|
font-family: inherit;
|
|
6663
|
-
background:
|
|
6664
|
-
color: var(--jupiter-text-primary, #333);
|
|
6932
|
+
background: transparent;
|
|
6933
|
+
color: var(--primaryTextColor, var(--jupiter-text-primary, #333));
|
|
6665
6934
|
transition: border-color 0.2s ease;
|
|
6666
6935
|
}
|
|
6667
6936
|
|
|
6668
|
-
.search-input:focus {
|
|
6669
|
-
|
|
6670
|
-
|
|
6671
|
-
|
|
6672
|
-
}
|
|
6937
|
+
// .search-input:focus {
|
|
6938
|
+
// outline: none;
|
|
6939
|
+
// border-color: var(--jupiter-primary-color, #1976d2);
|
|
6940
|
+
// box-shadow: 0 0 0 2px rgba(25, 118, 210, 0.1);
|
|
6941
|
+
// }
|
|
6673
6942
|
|
|
6674
6943
|
.search-input::placeholder {
|
|
6675
|
-
color: var(--jupiter-text-secondary, #666);
|
|
6944
|
+
color: var(--primaryTextColor, var(--jupiter-text-secondary, #666));
|
|
6676
6945
|
}
|
|
6677
6946
|
|
|
6678
6947
|
.search-icon {
|
|
@@ -6730,8 +6999,8 @@ JupiterFilterRolesDialog.styles = css`
|
|
|
6730
6999
|
|
|
6731
7000
|
.selection-control {
|
|
6732
7001
|
background: none;
|
|
6733
|
-
border: 1px solid var(--jupiter-primary-color, #1976d2);
|
|
6734
|
-
color: var(--jupiter-primary-color, #1976d2);
|
|
7002
|
+
border: 1px solid var(--primaryTextColor, var(--jupiter-primary-color, #1976d2));
|
|
7003
|
+
color: var(--primaryTextColor, var(--jupiter-primary-color, #1976d2));
|
|
6735
7004
|
padding: 6px 12px;
|
|
6736
7005
|
border-radius: 4px;
|
|
6737
7006
|
font-size: 12px;
|
|
@@ -6740,7 +7009,7 @@ JupiterFilterRolesDialog.styles = css`
|
|
|
6740
7009
|
}
|
|
6741
7010
|
|
|
6742
7011
|
.selection-control:hover {
|
|
6743
|
-
background: var(--jupiter-primary-color, #1976d2);
|
|
7012
|
+
background: var(--menuBgColorLighter, var(--jupiter-primary-color, #1976d2));
|
|
6744
7013
|
color: white;
|
|
6745
7014
|
}
|
|
6746
7015
|
|
|
@@ -6750,7 +7019,7 @@ JupiterFilterRolesDialog.styles = css`
|
|
|
6750
7019
|
gap: 8px;
|
|
6751
7020
|
max-height: 300px;
|
|
6752
7021
|
overflow-y: auto;
|
|
6753
|
-
border: 1px solid var(--jupiter-border-color, #ddd);
|
|
7022
|
+
border: 1px solid var(--primaryTextColor, var(--jupiter-border-color, #ddd));
|
|
6754
7023
|
border-radius: 4px;
|
|
6755
7024
|
padding: 12px;
|
|
6756
7025
|
}
|
|
@@ -6765,13 +7034,17 @@ JupiterFilterRolesDialog.styles = css`
|
|
|
6765
7034
|
}
|
|
6766
7035
|
|
|
6767
7036
|
.role-item:hover {
|
|
6768
|
-
background: var(--jupiter-hover-background, #f5f5f5);
|
|
7037
|
+
background: var(--menuBgColorLighter, var(--jupiter-hover-background, #f5f5f5));
|
|
6769
7038
|
}
|
|
6770
7039
|
|
|
6771
7040
|
.role-checkbox {
|
|
6772
7041
|
margin-top: 2px;
|
|
6773
7042
|
cursor: pointer;
|
|
6774
7043
|
}
|
|
7044
|
+
|
|
7045
|
+
.role-info * {
|
|
7046
|
+
color: var(--primaryTextColor, var(--jupiter-text-primary, #333)) !important;
|
|
7047
|
+
}
|
|
6775
7048
|
|
|
6776
7049
|
.role-info {
|
|
6777
7050
|
flex: 1;
|
|
@@ -6801,15 +7074,15 @@ JupiterFilterRolesDialog.styles = css`
|
|
|
6801
7074
|
.period-controls {
|
|
6802
7075
|
margin-top: 8px;
|
|
6803
7076
|
padding: 8px;
|
|
6804
|
-
background: var(--jupiter-background-light, #f8f9fa);
|
|
7077
|
+
background: var(--bg-color-1, var(--jupiter-background-light, #f8f9fa));
|
|
6805
7078
|
border-radius: 4px;
|
|
6806
|
-
border: 1px solid var(--jupiter-border-color, #e0e0e0);
|
|
7079
|
+
border: 1px solid var(--primaryTextColor, var(--jupiter-border-color, #e0e0e0));
|
|
6807
7080
|
}
|
|
6808
7081
|
|
|
6809
7082
|
.period-controls-label {
|
|
6810
7083
|
font-size: 12px;
|
|
6811
7084
|
font-weight: 600;
|
|
6812
|
-
color: var(--jupiter-text-primary, #333);
|
|
7085
|
+
color: var(--primaryTextColor, var(--jupiter-text-primary, #333));
|
|
6813
7086
|
margin: 0 0 6px 0;
|
|
6814
7087
|
}
|
|
6815
7088
|
|
|
@@ -6937,11 +7210,11 @@ JupiterFilterRolesDialog.styles = css`
|
|
|
6937
7210
|
|
|
6938
7211
|
.dialog-actions {
|
|
6939
7212
|
padding: 16px 24px;
|
|
6940
|
-
border-top: 1px solid var(--jupiter-border-color, #ddd);
|
|
7213
|
+
border-top: 1px solid var(--primaryTextColor, var(--jupiter-border-color, #ddd));
|
|
6941
7214
|
display: flex;
|
|
6942
7215
|
gap: 12px;
|
|
6943
7216
|
justify-content: flex-end;
|
|
6944
|
-
background: var(--jupiter-form-actions-background, #f8f9fa);
|
|
7217
|
+
background: var(--bg-color-2, var(--jupiter-form-actions-background, #f8f9fa));
|
|
6945
7218
|
}
|
|
6946
7219
|
|
|
6947
7220
|
.dialog-actions button {
|
|
@@ -6955,23 +7228,23 @@ JupiterFilterRolesDialog.styles = css`
|
|
|
6955
7228
|
}
|
|
6956
7229
|
|
|
6957
7230
|
.btn-primary {
|
|
6958
|
-
background: var(--jupiter-primary-color, #1976d2);
|
|
6959
|
-
color: white;
|
|
7231
|
+
background: var(--buttonBgColor, var(--jupiter-primary-color, #1976d2));
|
|
7232
|
+
color: var(--buttonTextColor, white);
|
|
6960
7233
|
}
|
|
6961
7234
|
|
|
6962
|
-
.btn-primary:hover:not(:disabled) {
|
|
6963
|
-
|
|
6964
|
-
}
|
|
7235
|
+
// .btn-primary:hover:not(:disabled) {
|
|
7236
|
+
// background: var(--jupiter-primary-color-dark, #1565c0);
|
|
7237
|
+
// }
|
|
6965
7238
|
|
|
6966
7239
|
.btn-secondary {
|
|
7240
|
+
color: var(--buttonBgColor, var(--jupiter-primary-color, #1976d2));
|
|
7241
|
+
border: 1px solid var(--buttonBgColor, var(--jupiter-primary-color, #1976d2)) !important;
|
|
6967
7242
|
background: transparent;
|
|
6968
|
-
color: var(--jupiter-text-secondary, #666);
|
|
6969
|
-
border: 1px solid var(--jupiter-border-color, #ddd);
|
|
6970
7243
|
}
|
|
6971
7244
|
|
|
6972
|
-
.btn-secondary:hover:not(:disabled) {
|
|
6973
|
-
|
|
6974
|
-
}
|
|
7245
|
+
// .btn-secondary:hover:not(:disabled) {
|
|
7246
|
+
// background: var(--jupiter-hover-background, #f5f5f5);
|
|
7247
|
+
// }
|
|
6975
7248
|
|
|
6976
7249
|
button:disabled {
|
|
6977
7250
|
opacity: 0.6;
|
|
@@ -7170,6 +7443,7 @@ let JupiterDynamicForm = class extends LitElement {
|
|
|
7170
7443
|
this.periodStartDate = "2025-01-01";
|
|
7171
7444
|
this.periodEndDate = "2025-12-31";
|
|
7172
7445
|
this.language = "en";
|
|
7446
|
+
this.reportingLanguage = "en";
|
|
7173
7447
|
this.display = "accordion";
|
|
7174
7448
|
this.mode = "inputForm";
|
|
7175
7449
|
this.roleFilterAxes = [];
|
|
@@ -7185,6 +7459,7 @@ let JupiterDynamicForm = class extends LitElement {
|
|
|
7185
7459
|
this._preservedUnitData = {};
|
|
7186
7460
|
this._typedMemberData = {};
|
|
7187
7461
|
this._preservedTypedMemberData = {};
|
|
7462
|
+
this._repeatCounts = {};
|
|
7188
7463
|
this._columns = [];
|
|
7189
7464
|
this._errors = [];
|
|
7190
7465
|
this._touched = /* @__PURE__ */ new Set();
|
|
@@ -7403,7 +7678,6 @@ let JupiterDynamicForm = class extends LitElement {
|
|
|
7403
7678
|
if (!((_a = this._currentSchema) == null ? void 0 : _a.sections)) {
|
|
7404
7679
|
return;
|
|
7405
7680
|
}
|
|
7406
|
-
console.log("🔍 [DynamicForm] Extracting typed member values from facts");
|
|
7407
7681
|
this._currentSchema.sections.forEach((section2) => {
|
|
7408
7682
|
this._extractTypedMembersFromConcepts(section2.concepts || [], section2);
|
|
7409
7683
|
});
|
|
@@ -7846,6 +8120,10 @@ let JupiterDynamicForm = class extends LitElement {
|
|
|
7846
8120
|
if (this._typedMemberData[field2.columnId]) {
|
|
7847
8121
|
this._preservedTypedMemberData[field2.columnId] = { ...this._typedMemberData[field2.columnId] };
|
|
7848
8122
|
}
|
|
8123
|
+
const crossRoleKey = `${concept.id}__${field2.columnId}`;
|
|
8124
|
+
if (this._typedMemberData[crossRoleKey]) {
|
|
8125
|
+
this._preservedTypedMemberData[crossRoleKey] = { ...this._typedMemberData[crossRoleKey] };
|
|
8126
|
+
}
|
|
7849
8127
|
});
|
|
7850
8128
|
if (concept.children) {
|
|
7851
8129
|
concept.children.forEach((child) => {
|
|
@@ -7866,6 +8144,10 @@ let JupiterDynamicForm = class extends LitElement {
|
|
|
7866
8144
|
if (this._preservedTypedMemberData[field2.columnId]) {
|
|
7867
8145
|
this._typedMemberData[field2.columnId] = { ...this._preservedTypedMemberData[field2.columnId] };
|
|
7868
8146
|
}
|
|
8147
|
+
const crossRoleKey = `${concept.id}__${field2.columnId}`;
|
|
8148
|
+
if (this._preservedTypedMemberData[crossRoleKey]) {
|
|
8149
|
+
this._typedMemberData[crossRoleKey] = { ...this._preservedTypedMemberData[crossRoleKey] };
|
|
8150
|
+
}
|
|
7869
8151
|
});
|
|
7870
8152
|
if (concept.children) {
|
|
7871
8153
|
concept.children.forEach((child) => {
|
|
@@ -7906,7 +8188,9 @@ let JupiterDynamicForm = class extends LitElement {
|
|
|
7906
8188
|
this._typedMemberData,
|
|
7907
8189
|
this._periodPreferences,
|
|
7908
8190
|
this._periodData,
|
|
7909
|
-
this._unitData
|
|
8191
|
+
this._unitData,
|
|
8192
|
+
this.reportingLanguage,
|
|
8193
|
+
this._repeatCounts
|
|
7910
8194
|
);
|
|
7911
8195
|
this._draftStorageService.saveDraft(currentFormData, currentMetadata);
|
|
7912
8196
|
console.log("✅ Current form data saved to draft storage with NEW preferences");
|
|
@@ -8077,14 +8361,72 @@ let JupiterDynamicForm = class extends LitElement {
|
|
|
8077
8361
|
const parts = uniqueConceptKey.split("::");
|
|
8078
8362
|
return parts.length > 1 ? parts[1] : uniqueConceptKey;
|
|
8079
8363
|
}
|
|
8364
|
+
_handleAddConceptRepeat(event) {
|
|
8365
|
+
const { conceptId } = event.detail;
|
|
8366
|
+
this._repeatCounts = { ...this._repeatCounts, [conceptId]: (this._repeatCounts[conceptId] || 0) + 1 };
|
|
8367
|
+
this._dirty = true;
|
|
8368
|
+
}
|
|
8369
|
+
_handleRemoveConceptRepeat(event) {
|
|
8370
|
+
const { conceptId: rawConceptId } = event.detail;
|
|
8371
|
+
const repeatMatch = rawConceptId.match(/^(.+)__repeat_(\d+)$/);
|
|
8372
|
+
const baseConceptId = repeatMatch ? repeatMatch[1] : rawConceptId;
|
|
8373
|
+
const removeIndex = repeatMatch ? parseInt(repeatMatch[2]) : this._repeatCounts[rawConceptId] || 0;
|
|
8374
|
+
const current = this._repeatCounts[baseConceptId] || 0;
|
|
8375
|
+
if (current <= 0 || removeIndex < 1 || removeIndex > current)
|
|
8376
|
+
return;
|
|
8377
|
+
const newFormData = { ...this._formData };
|
|
8378
|
+
const newTypedData = { ...this._typedMemberData };
|
|
8379
|
+
const newUnitData = { ...this._unitData };
|
|
8380
|
+
const newPeriodData = { ...this._periodData };
|
|
8381
|
+
for (let n3 = removeIndex; n3 < current; n3++) {
|
|
8382
|
+
const fromId = `${baseConceptId}__repeat_${n3 + 1}`;
|
|
8383
|
+
const toId = `${baseConceptId}__repeat_${n3}`;
|
|
8384
|
+
if (newFormData[fromId] !== void 0) {
|
|
8385
|
+
newFormData[toId] = newFormData[fromId];
|
|
8386
|
+
} else {
|
|
8387
|
+
delete newFormData[toId];
|
|
8388
|
+
}
|
|
8389
|
+
const toPrefix = `${toId}__`;
|
|
8390
|
+
const fromPrefix = `${fromId}__`;
|
|
8391
|
+
const fromEntries = Object.keys(newTypedData).filter((k) => k.startsWith(fromPrefix));
|
|
8392
|
+
Object.keys(newTypedData).filter((k) => k.startsWith(toPrefix)).forEach((k) => delete newTypedData[k]);
|
|
8393
|
+
fromEntries.forEach((k) => {
|
|
8394
|
+
newTypedData[`${toId}__${k.slice(fromPrefix.length)}`] = newTypedData[k];
|
|
8395
|
+
});
|
|
8396
|
+
fromEntries.forEach((k) => delete newTypedData[k]);
|
|
8397
|
+
if (newUnitData[fromId] !== void 0) {
|
|
8398
|
+
newUnitData[toId] = newUnitData[fromId];
|
|
8399
|
+
} else {
|
|
8400
|
+
delete newUnitData[toId];
|
|
8401
|
+
}
|
|
8402
|
+
if (newPeriodData[fromId] !== void 0) {
|
|
8403
|
+
newPeriodData[toId] = newPeriodData[fromId];
|
|
8404
|
+
} else {
|
|
8405
|
+
delete newPeriodData[toId];
|
|
8406
|
+
}
|
|
8407
|
+
}
|
|
8408
|
+
const lastId = `${baseConceptId}__repeat_${current}`;
|
|
8409
|
+
delete newFormData[lastId];
|
|
8410
|
+
delete newUnitData[lastId];
|
|
8411
|
+
delete newPeriodData[lastId];
|
|
8412
|
+
const lastPrefix = `${lastId}__`;
|
|
8413
|
+
Object.keys(newTypedData).filter((k) => k.startsWith(lastPrefix)).forEach((k) => delete newTypedData[k]);
|
|
8414
|
+
this._formData = newFormData;
|
|
8415
|
+
this._typedMemberData = newTypedData;
|
|
8416
|
+
this._unitData = newUnitData;
|
|
8417
|
+
this._periodData = newPeriodData;
|
|
8418
|
+
this._repeatCounts = { ...this._repeatCounts, [baseConceptId]: current - 1 };
|
|
8419
|
+
this._dirty = true;
|
|
8420
|
+
}
|
|
8080
8421
|
_handleTypedMemberChange(event) {
|
|
8081
|
-
const { columnId, axisId, value } = event.detail;
|
|
8082
|
-
|
|
8422
|
+
const { columnId, axisId, value, conceptId } = event.detail;
|
|
8423
|
+
const storageKey = conceptId ? `${conceptId}__${columnId}` : columnId;
|
|
8424
|
+
console.log(`🔍 [DynamicForm] Typed member change: storageKey=${storageKey}, axisId=${axisId}, value=${value}`);
|
|
8083
8425
|
const updatedTypedMemberData = { ...this._typedMemberData };
|
|
8084
|
-
if (!updatedTypedMemberData[
|
|
8085
|
-
updatedTypedMemberData[
|
|
8426
|
+
if (!updatedTypedMemberData[storageKey]) {
|
|
8427
|
+
updatedTypedMemberData[storageKey] = {};
|
|
8086
8428
|
}
|
|
8087
|
-
updatedTypedMemberData[
|
|
8429
|
+
updatedTypedMemberData[storageKey] = { ...updatedTypedMemberData[storageKey], [axisId]: value };
|
|
8088
8430
|
this._typedMemberData = updatedTypedMemberData;
|
|
8089
8431
|
this._dirty = true;
|
|
8090
8432
|
this.requestUpdate();
|
|
@@ -8671,7 +9013,8 @@ let JupiterDynamicForm = class extends LitElement {
|
|
|
8671
9013
|
data: this._formData,
|
|
8672
9014
|
submissionData,
|
|
8673
9015
|
valid: this._valid,
|
|
8674
|
-
errors: this._errors
|
|
9016
|
+
errors: this._errors,
|
|
9017
|
+
reportingLanguage: this.reportingLanguage
|
|
8675
9018
|
},
|
|
8676
9019
|
bubbles: true
|
|
8677
9020
|
}));
|
|
@@ -8710,7 +9053,9 @@ let JupiterDynamicForm = class extends LitElement {
|
|
|
8710
9053
|
this._typedMemberData,
|
|
8711
9054
|
this._periodPreferences,
|
|
8712
9055
|
this._periodData,
|
|
8713
|
-
this._unitData
|
|
9056
|
+
this._unitData,
|
|
9057
|
+
this.reportingLanguage,
|
|
9058
|
+
this._repeatCounts
|
|
8714
9059
|
);
|
|
8715
9060
|
const draftPayloadSnapshot = JSON.stringify({
|
|
8716
9061
|
draftData,
|
|
@@ -8736,6 +9081,7 @@ let JupiterDynamicForm = class extends LitElement {
|
|
|
8736
9081
|
// JSON data ready for external database storage
|
|
8737
9082
|
dynaformsFacts: draftData,
|
|
8738
9083
|
dynaformsMetadata: metadata,
|
|
9084
|
+
reportingLanguage: this.reportingLanguage,
|
|
8739
9085
|
source: source == "auto" ? "auto" : "manual"
|
|
8740
9086
|
},
|
|
8741
9087
|
bubbles: true,
|
|
@@ -8823,6 +9169,10 @@ let JupiterDynamicForm = class extends LitElement {
|
|
|
8823
9169
|
this._preservedTypedMemberData = {};
|
|
8824
9170
|
console.log("🔄 Restored typed member data");
|
|
8825
9171
|
}
|
|
9172
|
+
if (metadata.repeatCounts) {
|
|
9173
|
+
this._repeatCounts = metadata.repeatCounts;
|
|
9174
|
+
console.log("🔄 Restored repeat counts:", this._repeatCounts);
|
|
9175
|
+
}
|
|
8826
9176
|
if (metadata.periodData) {
|
|
8827
9177
|
this._periodData = metadata.periodData;
|
|
8828
9178
|
console.log("🔄 Restored custom field-level period data:", Object.keys(this._periodData).length, "concepts");
|
|
@@ -8866,7 +9216,7 @@ let JupiterDynamicForm = class extends LitElement {
|
|
|
8866
9216
|
const restoredPeriodData = {};
|
|
8867
9217
|
const restoredUnitData = {};
|
|
8868
9218
|
formData.forEach((entry) => {
|
|
8869
|
-
let { conceptId, value, columnId, period, unit } = entry;
|
|
9219
|
+
let { conceptId, draftInstanceId, value, columnId, period, unit } = entry;
|
|
8870
9220
|
if (!columnId && period) {
|
|
8871
9221
|
columnId = this._inferColumnIdFromPeriod(period, conceptId);
|
|
8872
9222
|
if (!columnId) {
|
|
@@ -8874,13 +9224,15 @@ let JupiterDynamicForm = class extends LitElement {
|
|
|
8874
9224
|
return;
|
|
8875
9225
|
}
|
|
8876
9226
|
}
|
|
8877
|
-
const
|
|
8878
|
-
const
|
|
9227
|
+
const instanceKey = draftInstanceId || conceptId;
|
|
9228
|
+
const baseConceptId = instanceKey.includes("__repeat_") ? instanceKey.split("__repeat_")[0] : instanceKey;
|
|
9229
|
+
const actualBaseId = this._findActualConceptId(baseConceptId);
|
|
9230
|
+
const conceptIdToUse = instanceKey.includes("__repeat_") ? `${actualBaseId || baseConceptId}__repeat_${instanceKey.split("__repeat_")[1]}` : actualBaseId || instanceKey;
|
|
8879
9231
|
if (!restoredFormData[conceptIdToUse]) {
|
|
8880
9232
|
restoredFormData[conceptIdToUse] = {};
|
|
8881
9233
|
}
|
|
8882
9234
|
restoredFormData[conceptIdToUse][columnId] = value;
|
|
8883
|
-
console.log(`📦 Restored: ${conceptIdToUse}[${columnId}] = ${value}`);
|
|
9235
|
+
console.log(`📦 Restored: ${conceptIdToUse}[${columnId}] = ${value}${instanceKey !== conceptId ? ` (repeat instance)` : ""}`);
|
|
8884
9236
|
if (period) {
|
|
8885
9237
|
if (!restoredPeriodData[conceptIdToUse]) {
|
|
8886
9238
|
restoredPeriodData[conceptIdToUse] = {};
|
|
@@ -9536,7 +9888,7 @@ let JupiterDynamicForm = class extends LitElement {
|
|
|
9536
9888
|
}
|
|
9537
9889
|
if (concept.fields && concept.fields.length > 0) {
|
|
9538
9890
|
concept.fields.forEach((field2) => {
|
|
9539
|
-
var _a, _b, _c, _d;
|
|
9891
|
+
var _a, _b, _c, _d, _e;
|
|
9540
9892
|
const conceptData = this._formData[concept.id];
|
|
9541
9893
|
let fieldValue = conceptData == null ? void 0 : conceptData[field2.columnId];
|
|
9542
9894
|
if ((fieldValue === void 0 || fieldValue === null || fieldValue === "") && this.masterData) {
|
|
@@ -9552,6 +9904,8 @@ let JupiterDynamicForm = class extends LitElement {
|
|
|
9552
9904
|
const fieldPeriodData = (_a = this._periodData[concept.id]) == null ? void 0 : _a[field2.columnId];
|
|
9553
9905
|
const submissionEntry = {
|
|
9554
9906
|
conceptId: concept.id,
|
|
9907
|
+
draftInstanceId: concept.id,
|
|
9908
|
+
// used during draft restoration to route value to the correct _formData slot
|
|
9555
9909
|
columnId: field2.columnId,
|
|
9556
9910
|
// CRITICAL: Include columnId for draft restoration
|
|
9557
9911
|
value: fieldValue,
|
|
@@ -9617,12 +9971,90 @@ let JupiterDynamicForm = class extends LitElement {
|
|
|
9617
9971
|
});
|
|
9618
9972
|
}
|
|
9619
9973
|
}
|
|
9974
|
+
if (!submissionEntry.typedMembers && ((_e = field2.crossRoleTypedMembers) == null ? void 0 : _e.length)) {
|
|
9975
|
+
const crossRoleKey = `${concept.id}__${field2.columnId}`;
|
|
9976
|
+
const crossRoleValues = this._typedMemberData[crossRoleKey];
|
|
9977
|
+
if (crossRoleValues) {
|
|
9978
|
+
const filteredTypedMembers = {};
|
|
9979
|
+
field2.crossRoleTypedMembers.forEach((tm) => {
|
|
9980
|
+
const val = crossRoleValues[tm.axisId];
|
|
9981
|
+
if (val !== void 0 && val !== null && val !== "") {
|
|
9982
|
+
filteredTypedMembers[tm.axisId] = {
|
|
9983
|
+
value: val,
|
|
9984
|
+
memberName: tm.typedMemberId
|
|
9985
|
+
};
|
|
9986
|
+
}
|
|
9987
|
+
});
|
|
9988
|
+
if (Object.keys(filteredTypedMembers).length > 0) {
|
|
9989
|
+
submissionEntry.typedMembers = filteredTypedMembers;
|
|
9990
|
+
console.log(`🔍 [Submission] Adding cross-role typed members for ${concept.id}/${field2.columnId}:`, filteredTypedMembers);
|
|
9991
|
+
}
|
|
9992
|
+
}
|
|
9993
|
+
}
|
|
9620
9994
|
if (sectionTitle === targetRole) {
|
|
9621
9995
|
console.warn(`[DUPLICATE DEBUG] Final submission entry:`, submissionEntry);
|
|
9622
9996
|
}
|
|
9623
9997
|
submissionData.push(submissionEntry);
|
|
9624
9998
|
}
|
|
9625
9999
|
});
|
|
10000
|
+
const repeatCount = this._repeatCounts[concept.id] || 0;
|
|
10001
|
+
if (repeatCount > 0 && concept.fields.some((f2) => {
|
|
10002
|
+
var _a;
|
|
10003
|
+
return (_a = f2.crossRoleTypedMembers) == null ? void 0 : _a.length;
|
|
10004
|
+
})) {
|
|
10005
|
+
for (let n3 = 1; n3 <= repeatCount; n3++) {
|
|
10006
|
+
const instanceId = `${concept.id}__repeat_${n3}`;
|
|
10007
|
+
concept.fields.forEach((field2) => {
|
|
10008
|
+
var _a, _b, _c, _d, _e;
|
|
10009
|
+
const instanceValue = (_a = this._formData[instanceId]) == null ? void 0 : _a[field2.columnId];
|
|
10010
|
+
if (instanceValue === void 0 || instanceValue === null || instanceValue === "")
|
|
10011
|
+
return;
|
|
10012
|
+
const column2 = this._findColumnByIdInSection(field2.columnId, section2);
|
|
10013
|
+
const fieldPeriodData = (_b = this._periodData[instanceId]) == null ? void 0 : _b[field2.columnId];
|
|
10014
|
+
const instanceEntry = {
|
|
10015
|
+
conceptId: concept.id,
|
|
10016
|
+
// original concept ID (not synthetic repeat ID)
|
|
10017
|
+
draftInstanceId: instanceId,
|
|
10018
|
+
// synthetic ID used during draft restoration to route to the correct _formData slot
|
|
10019
|
+
columnId: field2.columnId,
|
|
10020
|
+
value: instanceValue,
|
|
10021
|
+
period: {
|
|
10022
|
+
type: concept.periodType || "duration"
|
|
10023
|
+
}
|
|
10024
|
+
};
|
|
10025
|
+
if (concept.periodType === "instant") {
|
|
10026
|
+
instanceEntry.period.date = (fieldPeriodData == null ? void 0 : fieldPeriodData.instantDate) || (fieldPeriodData == null ? void 0 : fieldPeriodData.endDate) || (column2 == null ? void 0 : column2.periodEndDate) || field2.periodInstantDate || field2.periodEndDate || field2.periodStartDate || this.periodStartDate;
|
|
10027
|
+
} else {
|
|
10028
|
+
instanceEntry.period.startDate = (fieldPeriodData == null ? void 0 : fieldPeriodData.startDate) || (column2 == null ? void 0 : column2.periodStartDate) || field2.periodStartDate || this.periodStartDate;
|
|
10029
|
+
instanceEntry.period.endDate = (fieldPeriodData == null ? void 0 : fieldPeriodData.endDate) || (column2 == null ? void 0 : column2.periodEndDate) || field2.periodEndDate || this.periodEndDate;
|
|
10030
|
+
}
|
|
10031
|
+
const instanceUnit = (_c = this._unitData[instanceId]) == null ? void 0 : _c[field2.columnId];
|
|
10032
|
+
if (instanceUnit) {
|
|
10033
|
+
instanceEntry.unit = instanceUnit;
|
|
10034
|
+
}
|
|
10035
|
+
if ((column2 == null ? void 0 : column2.type) === "dimension" && ((_d = column2.dimensionData) == null ? void 0 : _d.dimensionIdKey)) {
|
|
10036
|
+
instanceEntry.dimension = column2.dimensionData.dimensionIdKey;
|
|
10037
|
+
}
|
|
10038
|
+
if ((_e = field2.crossRoleTypedMembers) == null ? void 0 : _e.length) {
|
|
10039
|
+
const crossRoleKey = `${instanceId}__${field2.columnId}`;
|
|
10040
|
+
const crossRoleValues = this._typedMemberData[crossRoleKey];
|
|
10041
|
+
if (crossRoleValues) {
|
|
10042
|
+
const filteredTypedMembers = {};
|
|
10043
|
+
field2.crossRoleTypedMembers.forEach((tm) => {
|
|
10044
|
+
const val = crossRoleValues[tm.axisId];
|
|
10045
|
+
if (val !== void 0 && val !== null && val !== "") {
|
|
10046
|
+
filteredTypedMembers[tm.axisId] = { value: val, memberName: tm.typedMemberId };
|
|
10047
|
+
}
|
|
10048
|
+
});
|
|
10049
|
+
if (Object.keys(filteredTypedMembers).length > 0) {
|
|
10050
|
+
instanceEntry.typedMembers = filteredTypedMembers;
|
|
10051
|
+
}
|
|
10052
|
+
}
|
|
10053
|
+
}
|
|
10054
|
+
submissionData.push(instanceEntry);
|
|
10055
|
+
});
|
|
10056
|
+
}
|
|
10057
|
+
}
|
|
9626
10058
|
}
|
|
9627
10059
|
if (concept.children) {
|
|
9628
10060
|
this._processConceptsForSubmission(concept.children, submissionData, section2);
|
|
@@ -9752,13 +10184,6 @@ let JupiterDynamicForm = class extends LitElement {
|
|
|
9752
10184
|
}
|
|
9753
10185
|
const allFields = [];
|
|
9754
10186
|
this._collectAllFields(section2.concepts || [], new Set((section2.columns || []).map((col) => col.id)), section2.columns || [], allFields);
|
|
9755
|
-
console.warn(`📊 Total fields found: ${allFields.length}`);
|
|
9756
|
-
console.warn(`
|
|
9757
|
-
📋 FIELD DETAILS:`);
|
|
9758
|
-
allFields.forEach((field2, index) => {
|
|
9759
|
-
const status = field2.isEmpty ? "❌ EMPTY" : "✅ FILLED";
|
|
9760
|
-
console.warn(` ${index + 1}. ${field2.conceptId} [${field2.columnId}]: ${status} = ${JSON.stringify(field2.value)}`);
|
|
9761
|
-
});
|
|
9762
10187
|
const hasErrors = this._roleHasErrors(roleId);
|
|
9763
10188
|
const emptyCount = allFields.filter((f2) => f2.isEmpty).length;
|
|
9764
10189
|
const filledCount = allFields.filter((f2) => !f2.isEmpty).length;
|
|
@@ -9833,10 +10258,8 @@ let JupiterDynamicForm = class extends LitElement {
|
|
|
9833
10258
|
if (matchedFact && matchedFact.value !== null && matchedFact.value !== void 0 && matchedFact.value !== "") {
|
|
9834
10259
|
value = matchedFact.value;
|
|
9835
10260
|
isEmpty = false;
|
|
9836
|
-
console.warn(` ✨ FACT PRE-POPULATED: ${fieldConceptId} [${field2.columnId}] = ${JSON.stringify(value)}`);
|
|
9837
10261
|
}
|
|
9838
10262
|
}
|
|
9839
|
-
console.warn(` 🔍 Field lookup: concept.id="${conceptIdWithSuffix}", field.conceptId="${fieldConceptId}", value=${JSON.stringify(value)}, isEmpty=${isEmpty}`);
|
|
9840
10263
|
allFields.push({
|
|
9841
10264
|
conceptId: fieldConceptId,
|
|
9842
10265
|
columnId: field2.columnId,
|
|
@@ -10296,6 +10719,7 @@ let JupiterDynamicForm = class extends LitElement {
|
|
|
10296
10719
|
.periodData="${this._periodData}"
|
|
10297
10720
|
.unitData="${this._unitData}"
|
|
10298
10721
|
.typedMemberData="${this._typedMemberData}"
|
|
10722
|
+
.repeatCounts="${this._repeatCounts}"
|
|
10299
10723
|
.defaultUnits="${this.defaultUnits}"
|
|
10300
10724
|
.disabled="${this.disabled || this.readonly}"
|
|
10301
10725
|
.collapsible="${config.collapsibleSections !== false}"
|
|
@@ -10309,6 +10733,8 @@ let JupiterDynamicForm = class extends LitElement {
|
|
|
10309
10733
|
@field-change="${this._handleFieldChange}"
|
|
10310
10734
|
@period-change="${this._handlePeriodChange}"
|
|
10311
10735
|
@typed-member-change="${this._handleTypedMemberChange}"
|
|
10736
|
+
@add-concept-repeat="${this._handleAddConceptRepeat}"
|
|
10737
|
+
@remove-concept-repeat="${this._handleRemoveConceptRepeat}"
|
|
10312
10738
|
@section-expand="${this._handleSectionExpand}"
|
|
10313
10739
|
@concept-expand="${this._handleConceptExpand}"
|
|
10314
10740
|
@column-remove="${this._handleColumnRemove}"
|
|
@@ -10425,6 +10851,7 @@ let JupiterDynamicForm = class extends LitElement {
|
|
|
10425
10851
|
.periodData="${this._periodData}"
|
|
10426
10852
|
.unitData="${this._unitData}"
|
|
10427
10853
|
.typedMemberData="${this._typedMemberData}"
|
|
10854
|
+
.repeatCounts="${this._repeatCounts}"
|
|
10428
10855
|
.defaultUnits="${this.defaultUnits}"
|
|
10429
10856
|
.disabled="${this.disabled || this.readonly}"
|
|
10430
10857
|
.collapsible="${false}"
|
|
@@ -10438,6 +10865,8 @@ let JupiterDynamicForm = class extends LitElement {
|
|
|
10438
10865
|
.periodEndDate="${this.periodEndDate}"
|
|
10439
10866
|
@field-change="${this._handleFieldChange}"
|
|
10440
10867
|
@typed-member-change="${this._handleTypedMemberChange}"
|
|
10868
|
+
@add-concept-repeat="${this._handleAddConceptRepeat}"
|
|
10869
|
+
@remove-concept-repeat="${this._handleRemoveConceptRepeat}"
|
|
10441
10870
|
@section-expand="${this._handleSectionExpand}"
|
|
10442
10871
|
@concept-expand="${this._handleConceptExpand}"
|
|
10443
10872
|
@column-remove="${this._handleColumnRemove}"
|
|
@@ -10707,7 +11136,7 @@ JupiterDynamicForm.styles = css`
|
|
|
10707
11136
|
right: 0;
|
|
10708
11137
|
padding: 16px 24px;
|
|
10709
11138
|
border-top: 1px solid var(--jupiter-border-color, #ddd);
|
|
10710
|
-
background: var(--jupiter-form-actions-background, #f8f9fa);
|
|
11139
|
+
background: var(--bg-color-2, var(--jupiter-form-actions-background, #f8f9fa));
|
|
10711
11140
|
display: flex;
|
|
10712
11141
|
gap: 12px;
|
|
10713
11142
|
align-items: center;
|
|
@@ -10718,6 +11147,7 @@ JupiterDynamicForm.styles = css`
|
|
|
10718
11147
|
.form-sections {
|
|
10719
11148
|
padding: 24px;
|
|
10720
11149
|
padding-bottom: 100px; /* Add space for fixed footer */
|
|
11150
|
+
background: var(--bg-color-2);
|
|
10721
11151
|
}
|
|
10722
11152
|
|
|
10723
11153
|
.validation-summary {
|
|
@@ -10755,22 +11185,23 @@ JupiterDynamicForm.styles = css`
|
|
|
10755
11185
|
}
|
|
10756
11186
|
|
|
10757
11187
|
.btn-primary {
|
|
10758
|
-
background: var(--jupiter-primary-color, #1976d2);
|
|
10759
|
-
color: white;
|
|
11188
|
+
background: var(--buttonBgColor, var(--jupiter-primary-color, #1976d2));
|
|
11189
|
+
color: var(--buttonTextColor, white);
|
|
10760
11190
|
}
|
|
10761
11191
|
|
|
10762
|
-
.btn-primary:hover:not(:disabled) {
|
|
10763
|
-
|
|
10764
|
-
}
|
|
11192
|
+
// .btn-primary:hover:not(:disabled) {
|
|
11193
|
+
// background: var(--jupiter-primary-color-dark, #1565c0);
|
|
11194
|
+
// }
|
|
10765
11195
|
|
|
10766
11196
|
.btn-secondary {
|
|
10767
|
-
|
|
10768
|
-
|
|
11197
|
+
color: var(--buttonBgColor, var(--jupiter-primary-color, #1976d2));
|
|
11198
|
+
border: 1px solid var(--buttonBgColor, var(--jupiter-primary-color, #1976d2)) !important;
|
|
11199
|
+
background: transparent;
|
|
10769
11200
|
}
|
|
10770
11201
|
|
|
10771
|
-
.btn-secondary:hover:not(:disabled) {
|
|
10772
|
-
|
|
10773
|
-
}
|
|
11202
|
+
// .btn-secondary:hover:not(:disabled) {
|
|
11203
|
+
// background: var(--jupiter-secondary-color-dark, #616161);
|
|
11204
|
+
// }
|
|
10774
11205
|
|
|
10775
11206
|
.btn-outline {
|
|
10776
11207
|
background: transparent;
|
|
@@ -10848,7 +11279,7 @@ JupiterDynamicForm.styles = css`
|
|
|
10848
11279
|
padding: 8px 16px;
|
|
10849
11280
|
background: transparent;
|
|
10850
11281
|
border: 1px solid var(--jupiter-primary-color, #1976d2);
|
|
10851
|
-
color: var(--jupiter-primary-color, #1976d2);
|
|
11282
|
+
color: var(--primaryTextColor, var(--jupiter-primary-color, #1976d2));
|
|
10852
11283
|
border-radius: 4px;
|
|
10853
11284
|
font-size: 13px;
|
|
10854
11285
|
font-weight: 500;
|
|
@@ -10857,10 +11288,10 @@ JupiterDynamicForm.styles = css`
|
|
|
10857
11288
|
margin-right: auto;
|
|
10858
11289
|
}
|
|
10859
11290
|
|
|
10860
|
-
.filter-roles-button:hover:not(:disabled) {
|
|
10861
|
-
|
|
10862
|
-
|
|
10863
|
-
}
|
|
11291
|
+
// .filter-roles-button:hover:not(:disabled) {
|
|
11292
|
+
// background: var(--jupiter-primary-color, #1976d2);
|
|
11293
|
+
// color: white;
|
|
11294
|
+
// }
|
|
10864
11295
|
|
|
10865
11296
|
.filter-roles-button .filter-icon {
|
|
10866
11297
|
width: 16px;
|
|
@@ -10871,8 +11302,8 @@ JupiterDynamicForm.styles = css`
|
|
|
10871
11302
|
.roles-count {
|
|
10872
11303
|
display: inline-flex;
|
|
10873
11304
|
align-items: center;
|
|
10874
|
-
background: var(--jupiter-primary-color, #1976d2);
|
|
10875
|
-
color: white;
|
|
11305
|
+
background: var(--primaryTextColor, var(--jupiter-primary-color, #1976d2));
|
|
11306
|
+
color: var(--headerBgColor, white) !important;
|
|
10876
11307
|
border-radius: 10px;
|
|
10877
11308
|
font-size: 11px;
|
|
10878
11309
|
font-weight: 600;
|
|
@@ -10911,9 +11342,9 @@ JupiterDynamicForm.styles = css`
|
|
|
10911
11342
|
.side-panel-roles-list {
|
|
10912
11343
|
width: 280px;
|
|
10913
11344
|
min-width: 280px;
|
|
10914
|
-
border-right: 1px solid var(--jupiter-border-color, #ddd);
|
|
11345
|
+
border-right: 1px solid var(--primaryTextColor, var(--jupiter-border-color, #ddd));
|
|
10915
11346
|
overflow-y: auto;
|
|
10916
|
-
background: var(--jupiter-background-light, #f8f9fa);
|
|
11347
|
+
background: var(--bg-color-2, var(--jupiter-background-light, #f8f9fa));
|
|
10917
11348
|
display: flex;
|
|
10918
11349
|
flex-direction: column;
|
|
10919
11350
|
transition: width 0.3s ease, min-width 0.3s ease;
|
|
@@ -10933,8 +11364,10 @@ JupiterDynamicForm.styles = css`
|
|
|
10933
11364
|
right: 0px;
|
|
10934
11365
|
width: 32px;
|
|
10935
11366
|
height: 32px;
|
|
10936
|
-
border: 1px solid var(--jupiter-border-color, #ddd);
|
|
10937
|
-
background: var(--jupiter-background, #fff);
|
|
11367
|
+
border: 1px solid var(--primaryTextColor, var(--jupiter-border-color, #ddd));
|
|
11368
|
+
background: var(--bg-color-2, var(--jupiter-background, #fff));
|
|
11369
|
+
color: var(--primaryTextColor);
|
|
11370
|
+
|
|
10938
11371
|
border-radius: 4px;
|
|
10939
11372
|
cursor: pointer;
|
|
10940
11373
|
display: flex;
|
|
@@ -10942,7 +11375,6 @@ JupiterDynamicForm.styles = css`
|
|
|
10942
11375
|
justify-content: center;
|
|
10943
11376
|
z-index: 100;
|
|
10944
11377
|
transition: all 0.2s ease;
|
|
10945
|
-
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
|
|
10946
11378
|
}
|
|
10947
11379
|
|
|
10948
11380
|
.side-panel-toggle-btn:hover {
|
|
@@ -10966,7 +11398,7 @@ JupiterDynamicForm.styles = css`
|
|
|
10966
11398
|
position: sticky;
|
|
10967
11399
|
top: 0;
|
|
10968
11400
|
z-index: 10;
|
|
10969
|
-
background: var(--jupiter-background, #fff);
|
|
11401
|
+
background: var(--bg-color-2, var(--jupiter-background, #fff));
|
|
10970
11402
|
padding: 16px;
|
|
10971
11403
|
border-bottom: 1px solid var(--jupiter-border-color, #ddd);
|
|
10972
11404
|
}
|
|
@@ -10974,21 +11406,21 @@ JupiterDynamicForm.styles = css`
|
|
|
10974
11406
|
.side-panel-search-input {
|
|
10975
11407
|
width: 100%;
|
|
10976
11408
|
padding: 10px 40px 10px 12px;
|
|
10977
|
-
border: 1px solid var(--jupiter-border-color, #ddd);
|
|
11409
|
+
border: 1px solid var(--primaryTextColor, var(--jupiter-border-color, #ddd));
|
|
10978
11410
|
border-radius: 4px;
|
|
10979
11411
|
font-size: 14px;
|
|
10980
11412
|
font-family: inherit;
|
|
10981
|
-
background:
|
|
10982
|
-
color: var(--jupiter-text-primary, #333);
|
|
11413
|
+
background: transparent;
|
|
11414
|
+
color: var(--primaryTextColor, var(--jupiter-text-primary, #333));
|
|
10983
11415
|
transition: border-color 0.2s ease;
|
|
10984
11416
|
box-sizing: border-box;
|
|
10985
11417
|
}
|
|
10986
11418
|
|
|
10987
|
-
.side-panel-search-input:focus {
|
|
10988
|
-
|
|
10989
|
-
|
|
10990
|
-
|
|
10991
|
-
}
|
|
11419
|
+
// .side-panel-search-input:focus {
|
|
11420
|
+
// outline: none;
|
|
11421
|
+
// border-color: var(--jupiter-primary-color, #1976d2);
|
|
11422
|
+
// box-shadow: 0 0 0 2px rgba(25, 118, 210, 0.1);
|
|
11423
|
+
// }
|
|
10992
11424
|
|
|
10993
11425
|
.side-panel-search-input::placeholder {
|
|
10994
11426
|
color: var(--jupiter-text-secondary, #666);
|
|
@@ -11048,16 +11480,16 @@ JupiterDynamicForm.styles = css`
|
|
|
11048
11480
|
border-bottom: 1px solid var(--jupiter-border-color, #e0e0e0);
|
|
11049
11481
|
transition: background-color 0.2s ease;
|
|
11050
11482
|
font-size: 14px;
|
|
11051
|
-
color: var(--jupiter-text-primary, #333);
|
|
11483
|
+
color: var(--primaryTextColor, var(--jupiter-text-primary, #333));
|
|
11052
11484
|
line-height: 1.4;
|
|
11053
11485
|
}
|
|
11054
11486
|
|
|
11055
|
-
.side-panel-role-item:hover {
|
|
11056
|
-
|
|
11057
|
-
}
|
|
11487
|
+
// .side-panel-role-item:hover {
|
|
11488
|
+
// background: var(--jupiter-hover-background, #e8e8e8);
|
|
11489
|
+
// }
|
|
11058
11490
|
|
|
11059
11491
|
.side-panel-role-item.active {
|
|
11060
|
-
background: var(--jupiter-primary-color, #1976d2);
|
|
11492
|
+
background: var(--light-color-1, var(--jupiter-primary-color, #1976d2));
|
|
11061
11493
|
color: white;
|
|
11062
11494
|
font-weight: 500;
|
|
11063
11495
|
}
|
|
@@ -11442,6 +11874,9 @@ __decorateClass([
|
|
|
11442
11874
|
__decorateClass([
|
|
11443
11875
|
n2({ type: String })
|
|
11444
11876
|
], JupiterDynamicForm.prototype, "language", 2);
|
|
11877
|
+
__decorateClass([
|
|
11878
|
+
n2({ type: String })
|
|
11879
|
+
], JupiterDynamicForm.prototype, "reportingLanguage", 2);
|
|
11445
11880
|
__decorateClass([
|
|
11446
11881
|
n2({ type: String })
|
|
11447
11882
|
], JupiterDynamicForm.prototype, "display", 2);
|
|
@@ -11502,6 +11937,9 @@ __decorateClass([
|
|
|
11502
11937
|
__decorateClass([
|
|
11503
11938
|
r()
|
|
11504
11939
|
], JupiterDynamicForm.prototype, "_preservedTypedMemberData", 2);
|
|
11940
|
+
__decorateClass([
|
|
11941
|
+
r()
|
|
11942
|
+
], JupiterDynamicForm.prototype, "_repeatCounts", 2);
|
|
11505
11943
|
__decorateClass([
|
|
11506
11944
|
r()
|
|
11507
11945
|
], JupiterDynamicForm.prototype, "_columns", 2);
|